v11.0\WebApplications\Microsoft.WebApplication.targets не найден, когда файл фактически ссылается на v10
Сначала немного предыстории. В конце 2012 года мы перенесли наше решение vs2008 на vs2010, но мы все еще нацелены на.NET 3.5. (Я ничего не знаю, кроме самого последнего и лучшего здесь!)
У нас не было проблем с этой настройкой, пока несколько недель назад люди не начали получать эти ошибки:
"foo.csproj" (Rebuild target) (16:5) ->
C:\...\foo.csproj(142,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the declaration is correct, and that the file exists on disk.
Интересно, что если вы посмотрите на файл проекта, он ссылается на v10, что имеет смысл, потому что мы не используем Visual Studio 2012.
Эта ошибка ударила сразу по нескольким из нас, и даже по старым ветвям кода, которые не менялись месяцами.
Я подозреваю, что какое-то обновление было загружено на наши машины, что запутало вещи, но я не знаю, что с этим делать.
Краткосрочным решением было установить VS 2012 и не использовать его, но я надеюсь на что-то более чистое, чем это.
11 ответов
Я столкнулся с той же проблемой с Visual Studio 2013. Оказалось, что я использовал старую версию MSBuild- ту, которая поставляется с.NET Framework- из командной строки. В настоящее время Microsoft выпускает MSBuild как часть самой Visual Studio, а также как отдельный установщик ( http://blogs.msdn.com/b/visualstudio/archive/2013/07/24/msbuild-is-now-part-of-visual-studio.aspx).
Решением было использовать новую версию MSBuild.exe, расположенную в C:\Program Files (x86)\MSBuild\12.0\Bin
, Как только я это сделал, все ошибки цели исчезли.
РЕДАКТИРОВАТЬ 1
Как упоминалось в комментариях, каждая новая версия MSBuild содержит новый каталог. Для Visual Studio 2015 используйте C:\Program Files (x86)\MSBuild\14.0\Bin
,
РЕДАКТИРОВАТЬ 2
Как уже упоминалось в комментариях, для Visual Studio 2017 используйте C:\Program Files (x86)\Microsoft Visual Studio\2017\<Edition>\MSBuild\15.0\Bin\MSBuild.exe
,
Если у вас есть сервер сборки, на котором не установлен VS2012, это можно исправить с помощью
а) установка пакета http://www.nuget.org/packages/MSBuild.Microsoft.VisualStudio.Web.targets/ в ваше решение и
б) заменить эту строку в файле.csproj:
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
С этой линией, указывающей на пакет nuget
<Import Project="..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets" Condition="true" />
РЕДАКТИРОВАТЬ
Как указывает @joedragons, версия в обновленной строке должна соответствовать версии пакета nuget, т.е. заменить targets.11.0.2.1
с targets.x.x.x.x
для текущей версии.
Простое решение этой проблемы:
Перейти по следующему пути:
C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio
Вы увидите последнюю версию V10.0, v11.0, v12.0 в зависимости от установки Visual Studio 2010, 2012 или 2013.
копия WebApplications
папку из любой из последней версии каталога и вставьте в другую.
Ваши проблемы должны быть решены.
Я обнаружил, что при установке бесплатной оболочки Visual Studio 2012 (изолированной) устанавливаются файлы WebApplications v11 MSBuild. Легче, чем полная установка Visual Studio 2012 и никаких проблем с лицензированием.
Вот это да. Мы только что увидели то же самое на нашей сборочной машине. Мы используем VS2010 и целевой.NET 4.0. Наши файлы проекта явно импортируют версию этих целей v10.0. Без изменений в коде, вчера сборка была в порядке, а сегодня она терпит неудачу с жалобой на отсутствующую версию v11.0..NET Framework 4.5.1 был установлен / обновлен вчера вечером на этом компьютере сборки в качестве автоматического обновления. Мы собираемся форсировать v10.0 с помощью параметра (или переменной env.), Но это определенно застало нас врасплох...
ОБНОВЛЕНИЕ: Что еще более странно, так это то, что похоже, что сегодняшняя версия msbuild использует первую строку файла sln, чтобы определить, какой VisualStudioVersion использовать по умолчанию, тогда как вчерашняя версия этого не сделала:
Format Version 12.00
Мы проверили вручную, изменив это до 11.00, и сборка снова заработала.
В нашем случае, даже несмотря на то, что мы нацеливаемся и строим все для 2010/4.0, некоторые разработчики готовились к VS2012 (поскольку MS утверждала, что файлы проекта совместимы), и это конкретное решение в последний раз было сохранено (несколько месяцев назад) в VS2012. До сегодняшнего дня это не вызывало проблем.
Я была такая же проблема. Исправлено, пройдя выше перечисленные решения. Проблема вызвана тем, что соответствующая версия Visual Studio Tools (BuildTools) недоступна на сервере сборки. Как справедливо указано выше, это может быть решено путем установки BuildTools, но в моем случае это не вариант.
Вот еще один вариант - использовать Nuget
Install-Package MSBuild.Microsoft.VisualStudio.Web.targets -Version 14.0.0.3
Определите стартовый проект и установите web.targets в зависимости от используемой версии Visual Studio. Следующие файлы будут изменены, что включает в себя необходимые изменения
В packages.config:
<package id="MSBuild.Microsoft.VisualStudio.Web.targets" version="14.0.0.3" targetFramework="net45" />
В.csproj:
<Import Project="..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3\build\MSBuild.Microsoft.VisualStudio.Web.targets.props" Condition="Exists('..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3\build\MSBuild.Microsoft.VisualStudio.Web.targets.props')" />
Надеюсь это поможет!!! Удачи,
Ура,
павана
Взломайте, но решите это, скопировав: c:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications*.* В c:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications*.*
Я получил эту ошибку в конце ноября, не внося никаких изменений ни в конфигурацию моей установки TeamCity, ни в установку MSBuild, ни в исходный код. На моем сервере сборки Visual Studio даже не установлена, и переход с VS2010 на VS2012 был сделан в конце августа без каких-либо проблем.
Моя версия MSBuild - 4.0.30319.18408, мой сервер сборки - Windows Server 2008 R2 SP1 с TeamCity v6.5.3.
Я решил проблему, просто скопировав папку v11 с другого сервера сборки, который не пострадал.
Я предполагаю, что это могло произойти двумя способами:
Что-то было обновлено, что вызвало удаление v11-папки. Это может быть обновление Windows до.NET или что-то еще?
Что-то было обновлено, что изменило мою конфигурацию TeamCity/MSBuild с использования v10 на v11, и сборки перестали работать, так как v11 никогда не существовало.
3 декабря у меня есть обновление.NET Framework 4.5.1, может ли это быть причиной?
Brgds
Jonas
Когда я искал, как решить эту проблему, почти все рекомендовали либо скопировать отсутствующую папку MSBUILD, либо установить какой-нибудь SDK какой-либо версии.
К счастью, я нашел этот удивительно полезный пост Донована Брауна: http://donovanbrown.com/post/So-sick-of-MicrosoftWebApplicationtargets-was-not-found-build-errors!
Короче говоря, идея состоит в том, чтобы настроить версию VisualStudio, которую ваша сборка должна использовать в своем определении сборки:
Щелкните правой кнопкой мыши -> "Изменить определение сборки..."
Перейдите в "Procss" -> "3. Дополнительно"
и установите "Аргументы MSBuild" с
/p:VisualStudioVersion=12.0
Я недавно застрял с той же проблемой. И мой вывод заключается в том, что каждая версия VS (v10, v11, v12) меняет путь переменной сборки, как MSBuildBinPath
,
Таким образом, указание точной версии VS не является хаком, поскольку у вас может даже не быть установлена соответствующая версия файлов. Таким образом, лучше указать параметр и использовать цели, которые существуют на вашем компьютере.
В некоторых редких случаях вам может потребоваться установить определенную версию VS и пакет Web Deploy. В моем случае для решения проблемы было достаточно одной версии.
Вы можете добавить свойство VisualStudioVersion следующим образом:
<ItemGroup>
<ProjectToBuild Include="$(MSBuildProjectDirectory)\..\MySolution.sln">
<Properties>Configuration=$(BuildConfiguration);WarningLevel=0;VisualStudioVersion=12.0</Properties>
</ProjectToBuild>
</ItemGroup>
<MSBuild Projects="@(ProjectToBuild)" Targets="Rebuild"/>