it-swarm.com.ru

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

77
drs9222

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

111
NathanAldenSr

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

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

50
Daniel de Zwaan

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

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

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

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

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

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

23
samdubey

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

9
Thomas F. Abraham

Вот это да. Мы только что увидели то же самое на нашей сборочной машине. Мы используем 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. До сегодняшнего дня это не вызывало проблем.

8
lesscode

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

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

Ура,

Павана

5
user2964808

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

3
Wolf5

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

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

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

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

  1. Что-то было обновлено, что вызвало удаление v11-папки. Это может быть обновление Windows до .NET или что-то еще?

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

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

Brgds

Jonas

1
Jonas

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

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

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

0
Johnny_D

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

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

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

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

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

Щелкните правой кнопкой мыши -> «Изменить определение сборки ...»

Перейдите в «Procss» -> «3. Дополнительно» 

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

/p:VisualStudioVersion=12.0
0
A. Yosupov