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, а не использовать его, но я надеюсь на что-то немного более чистое, чем это.

Ответ 1

Я столкнулся с той же проблемой с 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.

Ответ 2

Если у вас есть сервер сборки, на котором не установлен VS2012, вы можете исправить это с помощью

a) установив пакет MSBuild.Microsoft.VisualStudio.Web.targets в ваше решение и

b) заменив эту строку в файле .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 для текущей версии.

Ответ 3

Простое решение этой проблемы:

Перейдите к следующему пути:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio

В зависимости от установки Visual Studio 2010, 2012 или 2013 вы увидите последнюю версию V10.0, v11.0, v12.0.

Скопируйте папку WebApplications из любого из последних версий каталога и вставьте в другое.

Ваши проблемы должны быть решены.

Ответ 4

Я обнаружил, что при установке бесплатной оболочки Visual Studio 2012 (изолированный) устанавливаются файлы WebApplications v11 MSBuild. Легче, чем полная установка Visual Studio 2012 и никаких проблем с лицензированием.

Ответ 5

Ого. Мы только что увидели то же самое на нашей строительной машине. Мы используем VS2010 и целевой .NET 4.0. Наши файлы проектов явно импортируют версию этих целей v10.0. Без изменений в коде, вчера сборка была в порядке, и сегодня она не справляется с жалобой на отсутствующую версию v11.0..NET Framework 4.5.1 был установлен/обновлен прошлой ночью на этой машине сборки как автоматическое обновление. Мы собираемся заставить v10.0 с параметром (или env. Variable), но это, конечно же, застало нас врасплох...

UPDATE: что еще более странно, так это то, что, по-видимому, сегодня версия msbuild использует первую строку sln файла, чтобы определить, какой VisualStudioVersion использовать по умолчанию, тогда как в предыдущей версии не было:

Format Version 12.00

Мы проверили вручную, изменив это на 11.00, и сборка снова заработала.

В нашем случае, хотя мы планируем и создаем все для 2010/4.0, некоторые разработчики готовятся к VS2012 (поскольку MS заявила, что файлы проекта совместимы), и это конкретное решение было в последний раз сохранено (в месяцах назад) в VS2012. До сегодняшнего дня это не вызывало проблем.

Ответ 6

Я была такая же проблема. Исправлено, пройдя выше перечисленные решения. Проблема вызвана тем, что соответствующая версия 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')" />

Надеюсь это поможет!!! Удачи,

Ура,

Ответ 7

Взломайте, но решите его, скопировав: c:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications *. * в c:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications *. *

Ответ 8

Я получил эту ошибку в конце ноября, не внося никаких изменений ни в конфигурацию моей установки TeamCity, ни в установку MSBuild, ни в исходный код. На моем сервере сборки Visual Studio даже не установлена, а изменение с VS2010 на VS2012 было сделано в конце августа без каких-либо проблем в то время.

Моя версия MSBuild 4.0.30319.18408, мой сервер сборки - это Windows Server 2008 R2 SP1 с TeamCity v6.5.3.

Я решил выпустить, просто скопировав v11-папку с другого сервера сборки, который не был затронут.

Я предполагаю, что это могло произойти двумя способами:

  • Что-то было обновлено, что вызвало удаление v11-папки. Может быть, это Windows Update для .NET или что-то в этом роде?

  • Что-то было обновлено, что изменило мою конфигурацию TeamCity/MSBuild с помощью v10 на v11, и сборки перестали работать, поскольку v11 никогда не существовало.

У меня есть обновление для .NET Framework 4.5.1 3 декабря, может быть, это и есть причина?

Brgds

Джонас

Ответ 9

Недавно я столкнулся с той же проблемой. И мой вывод состоит в том, что каждая версия VS (v10, v11, v12) изменяет путь к переменной построения, например MSBuildBinPath.

Так что спецификация точной версии VS не является взломом, потому что у вас может даже не быть подходящей версии установленных файлов. Так что вам лучше указать параметр и использовать цели, которые существуют на вашем компьютере.

В некоторых редких случаях вам может потребоваться установить определенную версию пакета VS и Web Deploy. В моем случае достаточно просто решить эту проблему.

Ответ 10

Вы можете добавить свойство VisualStudioVersion следующим образом:

<ItemGroup>
  <ProjectToBuild Include="$(MSBuildProjectDirectory)\..\MySolution.sln">
    <Properties>Configuration=$(BuildConfiguration);WarningLevel=0;VisualStudioVersion=12.0</Properties>
  </ProjectToBuild>
</ItemGroup>
<MSBuild Projects="@(ProjectToBuild)" Targets="Rebuild"/>

Ответ 11

Поскольку я искал, как решить эту проблему, почти все рекомендовали либо скопировать отсутствующую папку MSBUILD, либо установить некоторый SDK какой-либо версии.

К счастью, я нашел этот ужасно полезный пост Донована Брауна: http://donovanbrown.com/post/So-sick-of-MicrosoftWebApplicationtargets-was-not-found-build-errors!

Вкратце, идея состоит в том, чтобы настроить версию VisualStudio, которую ваша сборка должна использовать в вашем определении сборки:

Щелкните правой кнопкой мыши → "Изменить определение сборки..."

Перейдите в раздел "Procss" → "3. Дополнительно"

и установите "Аргументы MSBuild" с помощью

/p:VisualStudioVersion=12.0