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

410

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

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. Но теперь я настраиваю новый сервер с нуля, и я хочу знать, есть ли лучшее решение для решения этой проблемы.

укладчик
источник
1
Являются ли проекты веб-приложений устаревшими? Интересно, в чем смысл требовать старых версий Visual Studio для их сборки?
brianary
1
Точнее говоря, вы действительно развертываете через сервер сборки? например, у меня нет, у меня даже есть отдельный проект веб-установщика в решении ... и он все еще хочет эту чертову штуку ... answer = удалить его из файла proj! легко.
Пол Захра
1
Исправлено путем замены <Import Project="..\Packages\MSBuild.Microsoft.VisualStudio.Web.targets.14.0.0.3\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets" />пути $(VSToolsPath)на:<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" />
GJ

Ответы:

207

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

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

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

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

Крис С
источник
11
Это работало для m2 с проектом VS2012, после замены v10.0 на v11.0
DenNukem
2
мы можем просто установить инструменты MSBuild вместо этого? microsoft.com/en-us/download/confirmation.aspx?id=40760
user20358
1
Увы, установки инструментов MSBuild недостаточно для создания проектов, которые прекрасно компилируются в VisualStudio 2013
Майкл Шоу,
Мне пришлось скопировать папку Web в v11.0, чтобы она заработала после установки VS2013, там ее не было. Может компилироваться в VS, но не через MSBUILD напрямую.
Мартин Браун
9
работал на VS2017. просто скопируйте C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ vXX.0 \ WebApplications в C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v15.0 \ WebApplications
jokab
96

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

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

Сказал Ибрагим Хашими
источник
4
Сказал - смотри ниже ответ от dansomething - ваш ответ правильный? Даже при установке интегрированного пакета VS 2010 Shell, и .NET SDK не будет правильно устанавливать поддержку проекта веб-приложения?
Адам
@SayedIbrahimHashimi Вы должны зарегистрировать библиотеки DLL в GAC, если вы делаете ручную копию папки?
TheOptimusPrimus
А как насчет Microsoft.TextTemplating.targets? Что мне нужно сделать, чтобы получить их в папке? C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0
разработчик
@ClarkKent, извините, я не могу говорить с файлом TextTemplating. Я не знаком с ними.
сказал Ибрагим Хашими
77

Прямо сейчас, в 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по умолчанию

SOReader
источник
2
Я очень удивлен тем, что мой пятилетний ребенок собирает libs в систему управления версиями, и его модификации все еще получают голоса даже сегодня, хотя это правильный ответ из коробки.
Андрей К
2
@AndriyK Ваше решение немного отличается от того, что я предложил, и я понимаю, почему кто-то может предпочесть ваше, а не мое ... если только это не лень; D
SOReader
2
Чтобы сделать это более общим, для будущих версий Visual Studio вы можете загрузить последние инструменты сборки с visualstudio.microsoft.com/downloads. Прокрутите страницу вниз и в нижней части разверните раздел «Инструменты для Visual Studio», а затем загрузите « Инструменты сборки для Visual Studio ". В настоящее время это для VS 2017, но я предполагаю, что это будет то же самое для будущих версий. Кстати, если вам нужен путь к msbuild.exe для вашего инструмента CI (например, Jenkins), для VS 2017 он будет установлен в C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ BuildTools \ MSBuild \ 15.0 \ Bin \ msbuild.exe.
Саймон Тьюси
2
Совместимый с сервером сборки (читай: командная строка) способ сделать это choco install visualstudio2017-workload-webbuildtools.
Пол Хикс
1
Также отмечу , что пакет «Веб сборки разработки инструментов» , Microsoft.VisualStudio.Workload.WebBuildToolsможет быть установлен с помощью командной строки с помощью вызова vs_BuildTools.exe --add Microsoft.VisualStudio.Workload.WebBuildTools. Добавить --passiveне нужно вмешательство пользователя.
Вай Ха Ли
77

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папку под вашим контролем источника.

Андрей К
источник
Это решение сработало для меня и было действительно лучшим вариантом в моем случае. Это потому, что у меня нет доступа к серверу сборки. Я использую Эластичный бамбук Atlassian, который раскручивает новый сервер в качестве сервера сборки. На первый взгляд не кажется, что эти AMI включают цели веб-приложений ?? Это не имеет смысла для меня, но так кажется.
Коди Кларк
1
Это хороший подход, но это изменение требует изменения каждого файла csproj. Это сложно, если вы добавляете новые проекты в решение. Конечно, это можно решить с помощью пользовательских шаблонов проектов, но все же ... В любом случае, этот ответ указал мне верное направление. Спасибо!
100
70

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

Ллойд Холман
источник
2
Невозможно использовать, потому что сначала я должен открыть решение, но не могу из-за ошибки.
Разработчик
Если в решении более одного проекта, вы все равно сможете: 1. открыть решение - не обращайте внимания на то, что веб-проект не загружается; 2. добавить ссылку на nuget; 3. использовать один из подходов, упомянутых после этого; Вы можете вручную отредактировать файл проекта или переопределить переменную env.VSToolsPath в TeamCity.
Деймон
1
Это официально выпущенный пакет MS Nuget или кто-то только что создал его?
Simon_Weaver
Прекрасное решение - работает для разных версий VS. Мне нужно было отредактировать файл .csproj, YMMV
Jonno
39
Это не официально выпущенный пакет Microsoft Nuget. Я знаю это, потому что я создал это.
Мак
54

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

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

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

Перед:

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

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

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

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

Мэтью Скелтон
источник
7
Это самое простое и простое решение ИМО. Я использую VS 2013, и я обнаружил, что распространяемая оболочка Visual Studio 2013 (Изолированная) была тем, что работало (Интегрированный не мог быть установлен из-за зависимости от Изолированного).
Мэтт Миллер
@MatthewSkelton - Что означает сервер сборки ?
Мохаммед Замир
2
@BountyMan - сервер сборки - это сервер, который осуществляет или контролирует сборки программного обеспечения в режиме непрерывной интеграции (CI). Примеры: Дженкинс, TeamCity, CruiseControl и т. Д.
Мэтью Скелтон,
3
К сожалению, для VS v14.0 способ установки пакета - через nuget, но, поскольку моя проблема заключалась в том, что на сервере сборки не была установлена ​​VS (только MSBuild), установка пакета оказалась практически невозможной. Я часами возился с PowerShell и различными полу-поддерживаемыми установками Nuget, прежде чем просто скопировать папку с моего компьютера на сервер.
pasx
1
@pasx Если сообщение об ошибке содержит «v14», вы можете вместо этого установить изолированную оболочку Visual Studio 2015, для меня это сработало - visualstudioextensibility.com/downloads/vs-shells (в разделе «Скачать URL-адреса»; есть обязательный опрос, наслаждайтесь!)
Dunc
38

Последний 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 может быть на самом деле менее общей для загрузки и меньше работы в конце.

dansomething
источник
К вашему сведению - если вы пытаетесь построить Sql-проекты на сервере сборки без установки полнофункциональной VS, вам не повезло с упомянутым здесь установщиком GDR R2 для Team System 2008 Database Edition. Предварительные требования: Visual Studio Team System 2008 Database Edition SP1 (на английском языке) или Visual Studio Team System 2008 Suite SP1 (на английском языке) и Visual Studio 2008 с пакетом обновления 1. Однако, похоже, вы можете скопировать SqlServer.targets из .NET Framework \ Каталог v4 и команда TeamData msbuild выбирают файлы из \ program files \ msbuild \ microsoft \ visual studio \ v10.0 \, и ваш csprojs будет собираться.
Итан Дж. Браун,
Это определенно не самое красивое решение, но для меня время является самым важным. Простое копирование в каталог MSBuild просто приведет к новым проблемам для меня.
21
Это действительно важный ответ, потому что, если вы являетесь независимым разработчиком, настраивающим сервер сборки для клиента, вы не хотите, чтобы клиенту приходилось поддерживать лицензию Visual Studio, чтобы иметь возможность создавать свое программное обеспечение.
thelsdj
Для сборки мне понадобился только интегрированный пакет оболочки VS2010 и EntLib 5. Не нужно Team System.
Робин Уинслоу
1
Оболочка VS 2010 больше не доступна по этой ссылке: «Ресурс, который вы ищете, был удален, изменилось его имя или временно недоступен».
Кристиан
22

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

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

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

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

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

В версии 7 я сделал следующее. Это, возможно, не было необходимо, и на основе комментариев определенно не нужно сейчас. Пожалуйста, смотрите комментарии ниже.

  1. Затем, в вашей конфигурации сборки TeamCity, добавьте параметр сборки для env.VSToolsPathи установите его в папку VSToolsPath; я использовал..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath
Damon
источник
8
Нет необходимости выполнять шаг 4, если вы просто замените элемент <Import> в файле проекта следующим:<Import Project="..\..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.12.0.1\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets" />
knocte
Это должен быть принятый ответ ... и пункт 4 должен быть удален.
Иззи
@ Изясно, ты сделал комментарий, как вместо этого указал knocte? Я не использовал TC в течение нескольких лет, версия 7 iirc.
Деймон
@ Дэймон Я использую Дженкинс, а не ТС, поэтому, возможно, именно поэтому мне не нужен был твой последний пункт.
Иззи
21

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

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


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

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

Алекс Р.
источник
Цели сборки необходимы, если вы используете механизм публикации в Visual Studio. Это позволяет выполнить сборку и завершить ее, но она может быть неполной.
Старлок
14

Если вы перенастроили 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

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

Korayem
источник
4
Добавление /p:VisualStudioVersion=12.0 в MSBuild Аргументы в определении сборки TFS 2013 (для решения, созданного в Visual Studio 2013) работало для меня. По какой-то причине он будет искать файлы в папке v11.0 без каких-либо параметров.
Саша К
3
Это решение сработало для меня, я использовал эту команду:msbuild /p:Platform=x86 /p:VisualStudioVersion=12.0
E.Meir
9

Кажется, что новая версия 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/

Хай Труонг
источник
8

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

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

Simon_Weaver
источник
Как я могу поставить галочку в этой форме, не устанавливая ничего?
Кристиан
5

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

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

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

укладчик
источник
2
Ссылка кажется битой.
Разочарованный
2

Мое решение представляет собой смесь нескольких ответов здесь.

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

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

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

<Import Project = "$ (MSBuildExtensionsPath) \ 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) расширяется до допустимого пути, и никаких изменений в самом приложении не требуется, только на сервере сборки (возможно, можно создать символическую ссылку при каждой сборке, чтобы убедиться, что этот шаг не потерян и «задокументирован» «).

Кэт Лим Руис
источник
2

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

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

MonoThreaded
источник
2

Я попробовал кучу решений, но в конце концов этот ответ работал для меня: https://stackoverflow.com/a/19826448/431522

В основном это вызывает вызов MSBuild из каталога MSBuild, а не из каталога Visual Studio.

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

hendrikswan
источник
2

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

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

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

Хабиб
источник
2

Если вы используете 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"*

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

Колин Кью
источник
чтобы упомянуть, изменения должны быть сделаны в оскорбительных файлах .csproj, vbproj.
Колин Q
0

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

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

Арсен Хачатурян
источник
0
  • После установки инструментов 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: конфигурация = выпуск / p: UseWPP_CopyWebApplication = true / p: PipelineDependsOnBuild = false

Панкадж Авастхи
источник
0

У меня была эта проблема при создании проекта 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).

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

Copy-Item -Path "Path.To.The.Database.Project \ dbo \ Tables \ *" -Destination (новый элемент -Name "dbo \ Tables" -Тип каталога -Path "Path.To.The.DatabaseSDK.Project \ ")

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

ccoutinho
источник