v11.0 \ WebApplications \ Microsoft.WebApplication.targets не знайдено, коли файл насправді посилається на v10


84

Спочатку деякий фон. Наприкінці 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 і не використовувати його, але я сподіваюся на щось чистіше, ніж це.


17
Я виявив, що додавання "/p:VisualStudioVersion=10.0" до командного рядка MSBuild змушує це зникати, але це все одно відчуває себе як хак.
drs9222

Відповіді:


116

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


1
Я опублікував запит на форумі TeamCity про включення нового шляху (а-ла, як обробляються налаштування NuGet). Сподіваємось, вони швидко вирішують це питання.
Девід Педен,

1
Пряме посилання у дописі блогу на окреме завантаження інструментів більше не діє. Правильне посилання: microsoft.com/en-us/download/details.aspx?id=40760 .
Девід Педен,

1
І саме так Jetbrains приходить на допомогу з версією 8.0.5. Офіційний допис у блозі: teamcitydev.blogspot.com/2013/11/…
Девід

1
Якщо у вас є локальні сценарії збірки Powershell, ви можете просто додати до свого шляху: $env:Path = $env:Path + ";C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications"і скористатися v4 msbuild (ви можете зробити це і у вашому вікні збірки)
Chris S

4
Так! Дякую - це правильне рішення.
Джош М.

52

Якщо у вас є сервер збірки, на якому не встановлений 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поточною версією.


1
Так само, чудова порада!
Kevin Obee

2
Дякую, чудове рішення
Павло

1
Можливо очевидно, але рядок, який ви замінюєте, повинен містити версію встановленого пакета. Той, який я встановив, був 12.0.4, тож, коли я помістив імпорт заміни, я отримав ту ж помилку. Коли я перейшов на ... Web.targets.12.0.4 \ ... все добре =) Велике спасибі!
joedragons

2
Вам більше не потрібна частина b цієї відповіді. З якоїсь причини SO відхилив мою редакцію, щоб видалити непотрібні деталі.
bbodenmiller

1
дякую, я зробив те саме з останньою версією MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3
Ахмед Самір

23

Просте рішення цієї проблеми:

Перейдіть до наступного шляху:

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

Ви побачите останню версію V10.0, v11.0, v12.0 залежно від інсталяції Visual Studio 2010, 2012 або 2013.

Копіювати WebApplications папку з каталогу останньої версії та вставте в інший.

Ваші проблеми слід вирішити.


1
Це ІМО - найкраще і просте рішення :)
gideon

Звичайно, для цього потрібно мати доступ на сервері збірки.
Дейв

1
... але чому ми повинні робити це вручну? Дякую .. це виправлено для мене у VS21017 (для мене це була нова установка лише з VS2017 - тепер я думаю, що це було тому, що я ще не встановив IIS)
Piotr Kula

Працює також під час копіювання у V14.0.
Уве Кейм,


8

Ого. Ми щойно побачили те саме, що трапилося на нашій машині збірки. Ми використовуємо 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. До сьогодні це не викликало проблем.


1
Це допомогло мені набагато більше, ніж відповідь з найбільшою оцінкою, яка, схоже, стосується зовсім іншої ситуації.
LambdaCruiser

Те саме тут @LambdaCruiser, ця відповідь дуже допомогла. Я подивився історію мого .sln-файлу і в другому рядку прочитав # Visual Studio 2010перший рядок, який закінчувався, Format Version 12.00оскільки на якомусь етапі я перейшов на vs2012, але переключився туди-назад на vs2010. Як Wayne ця проблема виникла після запуску оновлення вікна на сервері CI
валь

6

У мене була та ж проблема. Виправлено шляхом перегляду вищезазначених рішень. Проблема викликана тим, що відповідна версія інструментів Visual Studio (BuildTools) недоступна на сервері Build. Як справедливо зазначено вище, це можна вирішити встановленням BuildTools, але в моєму випадку це не варіант.

Ось ще одна альтернатива - використовувати Nuget

Install-Package MSBuild.Microsoft.VisualStudio.Web.targets -Version 14.0.0.3

Визначте стартовий проект та встановіть web.targets на основі використовуваної версії Visual Studio. Наступні файли будуть змінені, що включає необхідні зміни

У пакетах .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')" />

Сподіваюся, це допомагає !!! Щасти,

Ура,


1
Ідеальна відповідь - усуває необхідність мавпувати файлом csproj або копіювати речі на сервері збірки. Працював у декількох версіях Visual Studio та MSBuild 2017. Я видалив рядок "WebApplication.targets" вручну, хоча nuget не видалив його автоматично.
Гедас Кутка,

3

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


1

Я отримав цю помилку в кінці листопада, не внісши жодних змін ні в конфігурацію моєї установки 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 ніколи не існував.

Я отримав оновлення .NET Framework 4.5.1 3 грудня, чи не в цьому причина?

Brgds

Йонас


0

Нещодавно я застряг у тій же проблемі. І мій висновок полягає в тому, що кожна версія VS (v10, v11, v12) змінює шлях до змінної побудови, наприклад MSBuildBinPath.

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

У деяких рідкісних випадках вам може знадобитися встановити певну версію VS та пакет Web Deploy. У моєму випадку для вирішення проблеми було достатньо лише версії.


0

Ви можете додати властивість VisualStudioVersion так:

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

0

Коли я шукав, як це вирішити, майже всі рекомендували або скопіювати відсутні папки MSBUILD, або встановити якийсь SDK якоїсь версії.

На щастя, я знайшов цей надзвичайно корисний допис Донована Брауна: http://donovanbrown.com/post/So-sick-of-MicrosoftWebApplicationtargets-was-not-found-build-errors!

У двох словах, ідея полягає в тому, щоб налаштувати версію VisualStudio, яку ваша збірка повинна використовувати у визначенні збірки:

Клацніть правою кнопкою миші -> "Редагувати визначення збірки ..."

Перейдіть до "Procss" -> "3. Advanced"

і встановіть "Аргументи MSBuild" за допомогою

/p:VisualStudioVersion=12.0

Не вдається знайти "Редагувати визначення збірки ..." у VS2019
Laser42,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.