Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Ошибка внешней сборки VS2013 MSB4019: импортированный проект ‹path› не найден

Автор вопроса: Sarah WeinbergerОтветов: 12

Я создаю проект через командную строку, а не внутри 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/ Anthony F 15.04.2015
  • В моем случае мне пришлось указать правильную версию VisualStudioVersion в событии сборки, которое создавалось с целью WebPublish. user145400 06.02.2017

buildweb-applicationsvisual-studio-2013visual-build-professional

Ответы

Ответ 1 · рейтинг 256 · giammin

У меня была такая же проблема, и я нашел более простое решение

Это связано с тем, что Vs2012 добавляет в файл csproj следующее:

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

Вы можете безопасно удалить эту часть, и ваше решение будет построено.

Как отметил Сиелу убедитесь, что файл .proj начинается с <Project ToolsVersion="12", иначе при следующем открытии проекта с помощью Visual Studio 2010 удаленный узел снова будет добавлен.

В противном случае, если вам нужно использовать webdeploy или вы используете сервер сборки, вышеуказанное решение не будет работать, но вы можете указать свойство VisualStudioVersion в своем скрипте сборки:

msbuild myproject.csproj /p:VisualStudioVersion=12.0

или отредактируйте определение сборки:

Ответ 2 · рейтинг 71 · LockTar

У меня тоже было это, и вы можете исправить это, указав версию инструментов в определении сборки.

Сделать это очень просто. Откройте определение сборки и перейдите на страницу "Процесс". Затем в группе "3. Дополнительно" у вас есть свойство под названием "Аргументы MSBuild". Поместите туда параметр со следующим синтаксисом

/p:VisualStudioVersion=12.0

Если у вас есть другие параметры, разделите их пробелом, а не запятой.

Ответ 3 · рейтинг 51 · Jester

Это тесно связано, но может или не может исправить конкретную проблему OP. В моем случае я пытался автоматизировать развертывание сайта 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

Ответ 4 · рейтинг 22 · Sarah Weinberger

Я только что получил ответ от Kinook, который дал мне ссылку:

В принципе, мне нужно позвонить по следующему адресу перед постройкой. Я предполагаю, что Visual Studio 2013 не регистрирует среду автоматически, но 2012 год сделал, или я это сделал и забыл.

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

Надеюсь, этот пост поможет кому-то другому.

Ответ 5 · рейтинг 21 · cat5dev

Решение giammin частично неверно. Вам НЕ СЛЕДУЕТ удалять всю эту группу PropertyGroup из решения. Если да, Функция MSBuild "DeployTarget = Package" перестанет работать. Эта функция зависит от установленного "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)' != ''" />

Ответ 6 · рейтинг 10 · Scott

У меня была эта проблема для наших целей FSharp (FSharpTargetsPath был пуст).

Многие пути построены со ссылкой на версию VS.

По разным причинам наша сборка выполняется с системными привилегиями, а переменная среды "VisualStudioVersion" была установлена ​​(установщиком VS 2013) только на "пользовательском" уровне, что вполне справедливо.

Убедитесь, что для переменной среды "VisualStudioVersion" установлено значение "12.0" на уровне (системном или пользовательском), на котором вы работаете.

Ответ 7 · рейтинг 6 · Steve

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

Ответ 8 · рейтинг 4 · Kim Ki Won

Если вы переносите Visual Studio 2012 на 2013, откройте файл проекта * .csprorj с помощью edior.
и проверьте элемент ToolsVersion тега Project.

Это значение 4,0
Вы доведете до 12,0

  • # P3 #
    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0"
    
  • To

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

Или, если вы строите с помощью msbuild, просто укажите свойство VisualStudioVersion

msbuild /p:VisualStudioVersion=12.0

Ответ 9 · рейтинг 2 · Sarah Weinberger

Я использовал внешнюю утилиту для сборки. Подумайте о чем-то вроде Муравьев, если я правильно понимаю продукт, просто коммерческую версию. Пришлось связаться с производителем для ответа.

Как оказалось, в проекте есть глобальный макрос DEVSTUDIO_NET_DIR. Мне пришлось изменить там путь к .Net. Они перечисляют различные версии визуальной студии как "Действия", которые через меня отключены, но все дороги ведут к этой единственной скрытой глобальной переменной. Я бы перечислил это как дефект продукта, если бы у меня был свой путь, если я не упустил что-то в своем понимании. Исправление пути там устранило проблему сборки.

Ответ 10 · рейтинг 2 · pinus.acer

У меня установлена ​​Visual Studio 2013. Это сработало для меня:

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

Итак, я изменил условие с == на != и значение с 10.0 на 12.0.

Ответ 11 · рейтинг 2 · Imaginary

У меня была аналогичная проблема. Все предлагаемые решения просто обходят эту проблему, но не устраняют источник ошибки. Решение @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

Это работает без каких-либо изменений в файле проекта.

Ответ 12 · рейтинг 2 · Pyro

У меня тоже была такая же ошибка .. Я сделал это, чтобы исправить

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

изменить на

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

и дело сделано.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы