Microsoft.WebApplication.targets не был найден на сервере сборки. Какое у вас решение?

Попытка построить мой проект на сервере сборки приводит к следующей ошибке:

Microsoft (R) Build Engine Version 4.0.30319.1
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.SqlTasks.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.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.
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.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.

Я решил эту проблему несколько месяцев назад, установив Visual Studio 2010 на Build Server. Но теперь я настраиваю новый сервер с нуля, и я хочу знать, есть ли лучшее решение для решения этой проблемы.

24 ответа

Чтобы ответить на заголовок вопроса (но не на вопрос о выводе, который вы получаете):

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

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

Удалите x86 в зависимости от того, как ломается ваша сборка. Если у вас есть другие типы проектов, вам, вероятно, потребуется скопировать всю папку msbuild.

Прямо сейчас, в 2017 году, вы можете установить редиректы WebApplication с помощью MSBuildTools. Просто перейдите на эту страницу, чтобы загрузить MSBuild 2017 Tools и во время установки нажмите Web development build tools чтобы установить эти цели также:

Это приведет к установке отсутствующих библиотек в C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications по умолчанию

Создание и публикация WAP не поддерживается, если VS не установлен. С учетом сказанного, если вы действительно не хотите устанавливать VS, то вам нужно будет скопировать все файлы в %ProgramFiles32%\MSBuild\Microsoft\,

Вам также необходимо установить Web Deploy Tool. Я думаю, что это так.

UPD: с VS2017 в Build Tools есть рабочая нагрузка, которая полностью устраняет эту проблему. Смотрите ответ @SOReader.

Если вы предпочитаете не изменять что-либо на сервере сборки и по-прежнему хотите, чтобы проект создавался прямо из системы контроля версий, возможно, было бы неплохо поставить необходимые двоичные файлы под систему контроля версий. Вам нужно изменить раздел импорта в вашем файле проекта, чтобы он выглядел так:

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

Первая строка - это фактический импорт из нового местоположения относительно каталога решения. Вторая версия отключена (Condition="false") исходной строки, которая позволяет Visual Studio по-прежнему рассматривать ваш проект как допустимый проект веб-приложения (это хитрость, которую VS 2010 SP1 делает сам).

Не забудьте скопировать C:\Program Files (x86)\Microsoft\VisualStudio\v10.0\WebApplications в BuildTargets папка под вашим контролем источника.

Вы также можете использовать пакет NuGet http://www.nuget.org/packages/MSBuild.Microsoft.VisualStudio.Web.targets/, ссылаясь на них в своих проектах Visual Studio, а затем изменить свои ссылки, как рекомендует Андрей К.

Основываясь на этом посте, вы можете просто загрузить распространяемый пакет оболочки Microsoft Visual Studio 2010 (интегрированный), и цели будут установлены.

Это избавляет от необходимости устанавливать Visual Studio на сервере сборки.

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

До:

ошибка MSB4019: импортированный проект "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" не найден. Убедитесь, что путь в объявлении правильный, и что файл существует на диске.

После установки:

[Строит правильно]

Очевидно, что это гораздо лучшее решение, чем установка Visual Studio на сервере сборки.

Последний Windows SDK, как упоминалось выше, в дополнение к "Распространяемому пакету оболочки Microsoft Visual Studio 2010" для Microsoft.WebApplication.targets и "Microsoft Visual Studio Team System 2008 Database Edition GDR R2" для Microsoft.Data.Schema.SqlTasks.targets должен облегчить необходимость установки Visual Studio 2010. Однако установка VS 2010 может быть на самом деле менее общей для загрузки и меньше работы в конце.

При сборке на сервере build/CI отключите импорт Microsoft.WebApplication.targets в целом, указав /p:VSToolsPath='', Это, по существу, сделает условие следующей строки ложным:

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


Вот как это делается в TeamCity:

Добавить зависимость через NuGet и установить параметр сборки

Цель: никаких изменений / установок, необходимых для агентов сборки

Я использовал гибридный подход к подходу NuGet Ллойда, который был основан на решении фиксации бинарных зависимостей Андрика.

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

  1. На компьютере с Visual Studio откройте решение; игнорируйте, что веб-проект терпит неудачу.
  2. В диспетчере пакетов NuGet добавьте http://www.nuget.org/packages/MSBuild.Microsoft.VisualStudio.Web.targets/, как упоминал Ллойд.
  3. Это разрешит двоичные файлы в [solution]\packages\MSBuild.Microsoft.VisualStudio.Web.targets.nn.n.n.n\tools\VSToolsPath\
    1. Вы можете скопировать их в папку ссылок и зафиксировать,
    2. Или просто используйте их там, где они есть. Я выбрал это, но мне придется иметь дело с номером версии в пути позже.
  4. Затем в вашей конфигурации сборки TeamCity добавьте параметр сборки для env.VSToolsPath и установите его в папку VSToolsPath; я использовал ..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath

Когда я остановлюсь на том, что считаю лучшим с точки зрения обслуживания и возможности задействовать новых агентов сборки, я обновлю этот пост.

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

Измените его значение с 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

Источник решения

Кажется, что новая версия msbuild не поставляется с Microsoft.WebApplication.targets. Для исправления необходимо обновить файл csproj следующим образом:

1) Отредактируйте веб-приложение csproj (щелкните правой кнопкой мыши). Найдите раздел в csproj внизу, посвященный инструментам сборки. Это должно выглядеть так.

<PropertyGroup>  
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
</PropertyGroup>  
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />  
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />  
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />  

2) Вам нужно добавить одну строку VSToolsPath ниже тега VisualStudioVersion, чтобы она выглядела так

<PropertyGroup>  
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  <!--Add the below line to fix the project loading in VS 2017 -->
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  <!--End -->
</PropertyGroup>  
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />  
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />  
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />  

Ссылочная ссылка: https://alastaircrabtree.com/cannot-open-vs-2015-web-project-in-vs-2017/

Это все, что вам нужно. Всего 103 МБ. Не устанавливайте все

Я нашел это на MS Connect:

Да, вам нужно установить Visual Studio 2010 на свой компьютер для сборки проектов базы данных. Для этого не требуется дополнительная лицензия Visual Studio.

Итак, это единственный вариант, который у меня есть на данный момент.

Если вы используете MSBuild, как в случае с сервером сборки, у меня сработало следующее:

Измените следующее:

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

чтобы:

<Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />

Моя команда Msbuild: *"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" solution.sln /p:Configuration=Debug /p:Platform="Any CPU"*

Надеюсь, это кому-нибудь поможет.

Любой, кто приезжает сюда для Visual Studio 2017. У меня была похожая проблема, и я не смог скомпилировать проект после обновления до 15.6.1. Я должен был установить инструменты MSBulild, но все же ошибка была там.

Я смог решить проблему, скопировав v14.0 папка из C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio в ту же папку, что и v15.0 и это решило все ошибки. Теперь моя структура папок выглядит следующим образом: обе папки содержат одинаковое содержимое.

Я перепробовал кучу решений, но в конце концов этот ответ мне помог: /questions/35173348/v110webapplicationsmicrosoftwebapplicationtargets-ne-najden-kogda-fajl-fakticheski-ssyilaetsya-na-v10/35173382#35173382

Это в основном влечет за собой вызов MSBuild из каталога MSBuild, а не из каталога Visual Studio.

Я также добавил каталог MSBuild в свой путь, чтобы скрипты было легче кодировать.

Я исправил это, добавив
/p:VCTargetsPath="C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V120"

в
Build > Build a Visual Studio project or solution using MSBuild > Command Line Arguments

Мое решение состоит из нескольких ответов здесь.

Я проверил сервер сборки, и Windows7/NET4.0 SDK уже был установлен, поэтому я нашел путь:

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

Тем не менее, на этой строке:

$(MSBuildExtensionsPath) раскрывается в C:\Program Files\MSBuild, у которого нет пути.

Поэтому я создал символическую ссылку с помощью этой команды:

mklink / J "C:\Program Files\MSBuild \ Microsoft \ VisualStudio" "C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio"

Таким образом, $(MSBuildExtensionsPath) расширяется до допустимого пути, и никаких изменений в самом приложении не требуется, только на сервере сборки (возможно, можно создать символическую ссылку при каждой сборке, чтобы убедиться, что этот шаг не потерян и "задокументирован" ").

У меня возникла эта проблема при создании проекта SQL Server на конвейере CI/CD. На самом деле, у меня это тоже было локально, и мне не удалось решить.

Что сработало для меня, так это использование MSBuild SDK, способного создавать пакет приложения уровня данных SQL Server (.dacpac) из набора SQL-скриптов, что подразумевает создание нового проекта. Но я хотел сохранить проект SQL Server, чтобы я мог связать его с действующей базой данных через обозреватель объектов SQL Server в Visual Studio. Я предпринял следующие шаги, чтобы все заработало:

  1. Сохранил мой проект SQL Server с .sql скрипты базы данных.
  2. Создал проект библиотеки классов.NET Standard 2.0, убедившись, что целевая платформа -.NET Standard 2.0, в соответствии с рекомендациями в приведенной выше ссылке.
  3. Установите содержимое .csproj следующим образом:

    <?xml version="1.0" encoding="utf-8"?>
    <Project Sdk="MSBuild.Sdk.SqlProj/1.0.0">
      <PropertyGroup>
        <SqlServerVersion>Sql140</SqlServerVersion>
        <TargetFramework>netstandard2.0</TargetFramework>
      </PropertyGroup>
    </Project>
    
  4. Я выбрал Sql140 в качестве версии SQL Server, потому что я использую SQL Server 2019. Проверьте этот ответ, чтобы узнать соответствие используемой версии.

  5. Игнорируйте проект SQL Server при сборке, чтобы он перестал ломаться локально (он построен на Visual Studio, но не работает на VS Code).

  6. Теперь нам просто нужно убедиться, что .sqlфайлы находятся внутри проекта SDK при его создании. Я добился этого с помощью простой процедуры PowerShell в конвейере CI/CD, которая копировала файлы из проекта SQL Server в проект SDK:

Copy-Item -Path "Path.To.The.Database.Project\dbo\Tables\*" -Destination (New-item -Name "dbo\Tables" -Type Directory -Path "Path.To.The.DatabaseSDK.Project\")

PS: файлы должны физически находиться в проекте SDK, либо в корне, либо в какой-либо папке, поэтому ссылки на .sdkфайлы в проекте SQL Server работать не будут. Теоретически можно было бы скопировать эти файлы с предварительным условием сборки, но по какой-то неясной причине у меня это не сработало. Я также пытался.sql файлы в проекте SDK и связать их с проектом SQL Server, но это легко разорвало бы связь с обозревателем объектов SQL Server, поэтому я решил также отказаться от этого.

В моем случае это был просто порт-блок.

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

        <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  </PropertyGroup>
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />

В случае, если вы пытаетесь развернуть проект с использованием VSTS, проблема может быть связана с проверкой опции "Hosted Windows Container" вместо "Hosted VS2017"(или 18 и т. Д.):

введите описание изображения здесь

Я исправил это, запустив сборку в контейнере , а именно в докеровdotnet / framework / sdk . Он включает в себя инструменты сборки VS.

  • После установки средств MSBuild от Microsoft определите путь MSBuild в переменной среды, чтобы его можно было запускать с любого пути.
  • Отредактируйте файл.csproj в любом редакторе блокнота, например notepad++, и прокомментируйте
  • Проверьте следующие элементы, ->
    • Убедитесь, что вы используете импорт только один раз, выберите то, что работает.
    • Убедитесь, что на диске существует следующая папка: "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0" или какая бы версия ни использовалась для цели MSBuild в "C: \ Program Files (x86). \MSBuild\Microsoft\VisualStudio\v14.0\WebApplications\Microsoft.WebApplication.targets"
    • В командной строке выполните следующую команду, чтобы проверить

C:>msbuild "C:\\DotnetCi.sln" /p:Configuration=Release /p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=false

Другие вопросы по тегам