Зовнішня помилка побудови VS2013 "помилка MSB4019: імпортований проект <шлях> не знайдено"


201

Я будую проект через командний рядок, а не всередині Visual Studio 2013. Зауважте, я модернізував свій проект з Visual Studio 2012 до 2013 року. Проект добре створюється всередині IDE. Крім того, я повністю видалив VS2012 спочатку, перезавантажив і встановив VS2013. Єдина версія Visual Studio, яку я маю, - це 2013 Ultimate.

ValidateProjects:
    39>path_to_project.csproj(245,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 <Import> declaration is correct, and that the file exists on disk.
    39>Done Building Project "path_to_project.csproj" (Clean target(s)) -- FAILED.

Ось два питання, про які йдеться:

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />

Початковий другий рядок був v10.0, але я вручну змінив його на v12.0.

$ (VSToolsPath) подовжується від того, що я бачу, до папки v11.0 (VS2012), якої, очевидно, більше немає. Шлях повинен був до v12.0.

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications\

Я спробував вказати VSToolsPath в таблиці змінних системного середовища, але зовнішня утиліта побудови все ще використовує v11.0. Я спробував пошукати реєстр, і це нічого не придумало.

На жаль, я не бачу простого способу отримати точний командний рядок. Я використовую інструмент збірки.

Думки?


Подібне запитання тут stackoverflow.com/questions/17433904/…
Ентоні Ф

У моєму випадку мені довелося вказати правильний VisualStudioVersion у події збірки, яка будувалась із цільою WebPublish.
user145400

Відповіді:


250

У мене було те саме питання і знайти простіше рішення

Це пов'язано з тим, що Vs2012 додає у файл csproj наступне:

<PropertyGroup>
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>

Ви можете безпечно видалити цю частину, і ваше рішення буде створено.

Як зазначає Sielu, ви повинні переконатися, що файл .proj починається з <Project ToolsVersion="12"іншого, коли ви відкриєте проект разом із візуальною студією 2010 року, він знову додасть видалений вузол.

В іншому випадку, якщо вам потрібно використовувати webdeploy або ви використовуєте сервер збирання, вищевказане рішення не працюватиме, але ви можете вказати VisualStudioVersionвластивість у своєму сценарії збірки:

msbuild myproject.csproj /p:VisualStudioVersion=12.0

або відредагуйте визначення побудови:

редагувати визначення збірки, щоб вказати властивість <code> VisualStudioVersion </code>


1
Я отримав помилку за допомогою msbuild з командного рядка. Видалення цієї частини з файлу проекту вирішило проблему.
Пітер Хедберг

7
Я використав цю відповідь, і вона спрацювала лише в тому випадку, якщо я переконався, що мій файл * proj починається з <Project ToolsVersion = "12", перш ніж я мав <Project ToolsVersion = "4", і кожного разу, коли я відкривав проект у VS, він додавав два вузли знову (тобто він переніс проект на останню версію).
Сіелу

3
@giammin, я вже знайшов рішення. НЕ видаляйте розділ із файлу проекту. Встановіть правильну версію інструментів у своєму визначенні збірки. Це зробити дуже просто. Відкрийте своє визначення побудови та перейдіть на сторінку "Обробити". Тоді під групою "3. Advanced" ви маєте властивість під назвою "Аргументи MSBuild". Розмістіть параметр там із таким синтаксисом "/p:VisualStudioVersion=12.0". Звичайно без цитат. Якщо у вас більше параметрів, розділіть їх пробілом, а не комою. Конфігурація, яку ви запропонували видалити, використовується іншими частинами візуальної студії у вашому процесі збирання ...
Ральф Янсен

9
Видалення цієї лінії, здається, порушує Веб-розгортання
Colin Pear

4
У мене те саме питання було вирішено за допомогою властивості /p:VisualStudioVersion=12.0, як було рекомендовано вище. Спасибі
Рандіп

70

У мене це було і ви можете це виправити, встановивши версію інструментів у своєму визначенні збірки.

Це зробити дуже просто. Відкрийте визначення збірки та перейдіть до розділу " Процес ". Тоді під групою " 3. Advanced " ви маєте властивість під назвою " Аргументи MSBuild ". Розмістіть параметр там із наступним синтаксисом

/p:VisualStudioVersion=12.0 

Якщо у вас більше параметрів, розділіть їх пробілом, а не комою.


1
Ми щойно завершили оновлення з TFS 2005 до TFS 2013, і це було нашим останнім перешкодою. Це безумовно працювало для нас і врятувало мене від витягування волосся. Дуже дякую! +1.
Саймон Уайтхед

2
У цій статті Саєда Ібрагіма Хашімі описана проблема у Visual Studio 2010/2012. Збірка командного рядка використовує формат файлу sln версії -1 як VisualStudioVersion. Ви можете змінити це значення з командного рядка, як описано Ральфом, або як властивість завдання MSBuild із скрипту збірки. У мене була така ж проблема з Visual Studio 2013, і переосмислення VisualStudioVersion вирішило проблему.
mcdon

1
Це працювало і для нас. Ми також розглядали можливість зміни самого шаблону збірки, описаного тут , що може бути кращим варіантом, якщо у вас є десятки визначень збірки.
JamesQMurphy

це працювало для мене. Я видалив у файлах csproj будь-яку посилання на visualstudioversion, а потім додав, що аргумент
msbuild

51

Це тісно пов'язане, але може вирішити конкретну проблему ОП, яка може, або не може. У моєму випадку я намагався автоматизувати розгортання сайту Azure за допомогою VS2013. Створення та розгортання через роботи VS, однак, використовуючи MSBuild, показала подібну помилку навколо "цілей". Виявляється, MSBuild відрізняється у VS2013, і тепер він є частиною VS, а не .Net Framework (див. Http://timrayburn.net/blog/visual-studio-2013-and-msbuild/ ). В основному використовуйте правильну версію MSBuild:

СТАРИЙ, VS2012

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

НОВИЙ, VS2013

C:\Program Files (x86)\MSBuild\12.0\bin\msbuild.exe

Новіша, VS2015

C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe

Ще новіший, VS2017 (не повністю перевірений, але виявлений - вони трохи перемістили речі)

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\msbuild.exe

Це зафіксувало це для мене. Також подібна відповідь на подібне запитання тут: stackoverflow.com/a/19826448/61569
Anthony F

22

Щойно я отримав відповідь від Kinook, який дав мені посилання :

В основному, мені потрібно зателефонувати наступне перед складанням. Я думаю, що Visual Studio 2013 спочатку автоматично не реєструє середовище, але 2012 рік це зробив, або я це зробив і забув.

call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86

Сподіваємось, цей пост допомагає комусь іншому.


Дякую так, це вирішило мою проблему, коли побудова nodeJS node-gypthe Cpp default.propsне знайдено! +1
Pogrindis

21

Рішення giammin частково неправильне. Ви НЕ БУДЕТЕ видаляти цілу PropertyGroup зі свого рішення. Якщо це зробити, функція "DeployTarget = Package" MSBuild перестане працювати. Ця функція покладається на встановлений "VSToolsPath" .

<PropertyGroup>
  <!-- VisualStudioVersion is incompatible with later versions of Visual Studio.  Removing. -->
  <!-- <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion> -->
  <!-- VSToolsPath is required by MSBuild for features like "DeployTarget=Package" -->
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
...
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

10

У мене була ця проблема для наших цілей FSharp (FSharpTargetsPath порожній).

Багато шляхів побудовано з посиланням на версію VS.

З різних причин наша збірка працює із системними привілеями, а змінна середовища "VisualStudioVersion" була встановлена ​​лише (інсталятором VS 2013) лише на рівні "користувач" - що досить справедливо.

Переконайтесь, що VisualStudioVersionзмінна середовища " " встановлена ​​на рівні " 12.0" (Система або Користувач), на якому ви працюєте.


5
Це, мабуть, поширений сценарій під час запуску сервера збірки (наприклад, CruiseControl або TeamCity), де служба працює під певним обліковим записом служби, який може не мати навіть дозволів на інтерактивний робочий стіл. Ця порада вирішила проблему для мене (VS 2013 встановлений на чистій установці сервера 2008 R2, з CruiseControl.NET)
Девід Кіавен,

Де я можу побачити свій "VisualStudioVersion"?
WEFX

@WEFX перегляньте змінні середовища, вибравши Systemна панелі керування, потім виберіть Advanced system settingsі, нарешті, натиснітьEnvironment Variables
Скотт

6

Запуск цього в командному рядку також вирішить проблему. SETX VisualStudioVersion "12.0"


Це працювало для мене і було переважніше для зміни файлу проекту.
Шон

4

Якщо ви перенесете Visual Studio 2012 на 2013 рік, відкрийте файл * .csprorj з редактором.
і встановіть прапорець елемент ToolsVersion тегу "Project".

Це значення 4,0
Ви досягаєте 12,0

  • З

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0"
  • До

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="12.0"

Або Якщо ви будуєте з msbuild, тоді просто вкажіть властивість VisualStudioVersion

msbuild /p:VisualStudioVersion=12.0


1
Інструмент ToolsVersion не повинен бути єдиною змінною для виправлення цього повідомлення про помилку, оскільки я побачив проект із ToolsVersion, який не міг скластися правильно.
Патрік Дежардінс

2

Я використовував зовнішню утиліту побудови. Придумайте щось на зразок мурашок, якщо я правильно розумію продукт, просто комерційну версію. Для відповіді довелося звернутися до виробника.

Як виявляється, у проекті є глобальний макрос, DEVSTUDIO_NET_DIR. Мені довелося змінити шлях на .Net туди. Вони перелічують різні версії візуальної студії як "Дії", які через мене відключаються, але всі дороги ведуть до тієї глобальної змінної за лаштунками. Я б перерахував це як дефект проти товару, якби я мав свій шлях, якщо тільки я щось не пропускаю в розумінні. Виправлення шляху там вирішило проблему збірки.


2

У мене встановлена ​​Visual Studio 2013. Це працювало для мене:

<PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' != ''">12.0</VisualStudioVersion>`
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>

Тому я змінив умову з ==на !=і значення з 10.0на 12.0.


2

У мене було подібне питання. Всі запропоновані рішення просто вирішують цю проблему, але не вирішують джерело помилок. Рішення @giammin не слід застосовувати, якщо ви використовуєте сервер збирання tfs, оскільки це просто збій функціоналу публікації. @ cat5dev рішення - вирішує проблему, але не вирішує її джерело.

Я майже впевнений, що ви використовуєте шаблон процесу збірки для VS2012 ReleaseDefaultTemplate.11.1.xaml or DefaultTemplate.11.1.xaml ці шаблони збирання були зроблені для VS2012 і $ (VisualStudioVersion), встановлених на 11,0

ти повинні використовувати шаблон процесу складання для VS2013 ReleaseTfvcTemplate.12.xaml or TfvcTemplate.12.xaml якого $ (VisualStudioVersion) встановлено на 12.0

Це працює без змін у файлі проекту.


2

У мене теж була така ж помилка .. Я це зробив, щоб виправити це

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" />

перейти

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />

і це зроблено.


2

У моєму випадку я просто прокоментую нижче рядка, відкривши .csproj файл і зробив трюк

.<!-- <Import Project="..\PRPJECTNAME.targets" /> -->

Моя проблема може бути різною, але мене тут тягнуть, але це може комусь допомогти.

Я вибрав один веб-проект зі свого рішення і спробую відкрити його як самостійний проект, який створював проблему, після того, як вище, можливо, я можу вирішити проблему.


2

Використовуйте правильну версію MSBuild. Установіть змінну середовища для:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin

Це також буде працювати для проектів VS 2019

Раніше ми встановлювали це C:\Windows\Microsoft.NET\Framework\v4.0.30319


Я використовував "C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Enterprise \ MSBuild \ Current \ Bin \ MSBuild.exe" замість "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild. exe "та її працювали
ЕЛКАЛАХІ Мухаммед

Так, я використовую проект SSDT (.sqlproj), з VisualStudioVersion = 14,0 у файлі проекту. Я встановив ядро ​​3.1, яке встановило моє оточення для цілей, щоб Бог знав лише куди. Використання msbuild у запропонованій вами папці працювало як шарм!
Метью Бек

1

У моєму випадку середовище розробників - це VS2013, і я використовую TFS 2010. Будівництво було націлене на .NET 4.5.1. Я налаштовував автоматичну збірку для CI. всякий раз, коли я намагався вирішити вищезгадані способи вирішення проблем, як-от видалити групу властивостей повністю або замінити деякі рядки і т.д. Я не зміг досягти обох одночасно.

Тож нарешті мені довелося передати аргумент MSBuild, щоб вирішити проблему.

Перейдіть до редагування визначення збірки> Процес> 3. Додатково> Аргументи MSBuild (встановлено) /p:VisualStudioVersion=12.0

Це працювало для мене.


1

Вам слід скопіювати папку WebApplications з C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ to C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \


Або скопіюйте лише файл Microsoft.WebApplication.targets з місця, де встановлено Visual Studio 2013.
ThatBlairGuy

0

Ви знайдете

C:\Program Files  (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets 

у файлі csproj, для якого з’являється ця помилка. Просто видаліть це з csproj, а потім складіть.


0

Для вирішення проблеми необхідно зробити лише одне: оновити TeamCity до версії 8.1.x або новішої, оскільки підтримка Visual Studio 2012/2013 та MSBuild Tools 2013 була представлена ​​лише в TeamCity 8.1. Після оновлення TeamCity змініть налаштування версії MSBuild Tools на етапі збирання, відповідно, проблема зникне. Детальніше читайте тут: http://blog.turlov.com/2014/07/upgrade-teamcity-to-enable-support-for.html


0

Я - ніщо не допомогло змінити значення v11.0 змінної VisualStudioVersion на v10.0. Зміна змінної у .csproj-файлі не відбулася. Встановити його через командний рядок не вдалося. І т.д. ...

Закінчилося копіюванням моєї локальної папки цієї конкретної версії (v11.0) на мій сервер збирання.


0

Я спробував усі перераховані вище рішення і досі не пощастило. Я чув, як люди встановлювали візуальну студію на своїх серверах збирання, щоб виправити це, але у мене було лише 5 Гб вільних просторів, тому я просто скопіював C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio на мій сервер побудови і назвав це день . Почав працювати після цього, використовуючи команду city 9.x та візуальну студію 2013.


0

На основі сервера побудови TFS 2015

Якщо ви протидієте цій помилці ... Error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.

Відкрийте .csprojфайл проекту, названого у повідомленні про помилку, та прокоментуйте розділ нижче

<!-- <PropertyGroup> --> <!-- <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion> --> <!-- <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath> --> <!-- </PropertyGroup> -->


0

Я отримав цю помилку під час встановлення деяких компонентів VS. На жаль, жодна з цих відповідей мені не допомогла. Я використовую TFS для розробки команд і не маю дозволів редагувати визначення збірки. Я вирішив цю проблему, видаливши змінні середовища, які викликали VS110COMNTOOLSі VS120COMNTOOLS. Я думаю, він був встановлений з моїми компонентами VS.


0

Я виявив, що мені не вистачає папки WebApplications на моєму локальному ПК, не встановлювався з Visual Studio 2017, як це було у 2012 році.


0

У моєму випадку я використовував неправильну версію MSBuild.exe.

Версія, яку потрібно використовувати, залежить від того, яку версію Visual Studio ви використовували для створення свого проекту. У моєму випадку мені було потрібно 14,0 (використовуючи Visual Studio 2015).

Це було знайдено за адресою:

C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe

Ви можете подивитися під:

C:\Program Files (x86)\MSBuild

Щоб знайти інші версії.

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