Как упаковать участника развертывания в dacpac?
Я не могу найти никаких ссылок на то, как упаковать участника развертывания в dacpac.
- Мы используем метод DacServices.Deploy для развертывания наших баз данных как dacpacs на SQL Server.
- Аргумент этого метода имеет свойство DacDeployOptions.AdditionalDeploymentContributors, которое имеет описание "Определяет дополнительных участников развертывания, которые должны запускаться - в дополнение к тем, которые указаны в dacpac [выделение добавлено]".
Итак, мой вопрос: как указать этих участников развертывания в dacpac?
Я попытался поместить класс участника развертывания в проект SSDT в Visual Studio, но это мешает сборкам CLR, загруженным в SQL Server (т. Е. Он загружается в SQL Server, и если его зависимости также не установлены для загрузки, возникает ошибка выброшен).
Пожалуйста, порекомендуйте. Спасибо.
1 ответ
Чтобы поместить в dacpac нужный загрузчик, вам нужно вручную отредактировать файл.sqlproj и добавить его:
<PropertyGroup>
<DeploymentContributors>$(DeploymentContributors);AgileSqlClub.DeploymentPlanLogger</DeploymentContributors>
</PropertyGroup>
ПОСЛЕ
<Import Condition="'$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
Измените "AgileSqlClub.DeploymentPlanLogger" на то, что ваш вкладчик экспортирует под своим именем (т.е. [ExportDeploymentPlanModifier("AgileSqlClub.DeploymentPlanLogger", "0.1.0.0")])
Добавление этого xml приведет к тому, что ваш "Origin.xml" в вашем dacpac будет иметь следующее:
<RequiredContributors>
<DeploymentContributor Name="AgileSqlClub.DeploymentPlanLogger" Version="0.1.0.0" />
</RequiredContributors>
</DeploymentContributors>
Вы, наверное, один из немногих, кто когда-либо использовал эту функцию, поэтому кто знает, работает ли она?? Пусть все знают!
Вам также потребуется развернуть вкладчик на машине, на которой вы создаете свой dacpac, и на машине, на которой вы развертываете или генерируете сценарий развертывания. На машине вы будете развертывать с:
Путь, по которому dacfx ищет участников развертывания, жестко запрограммирован:
Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.ProgramFilesX86), @ "Microsoft SQL Server \ 120 \ DAC \ bin \ Extensions")
Поэтому в моей системе это "c:\program files(x86)\Microsoft SQL Server\120\DAC\bin\Extensions".
На компьютере, который вы будете использовать при компиляции dacpac, он вам нужен в пути к Visual Studio, который находится по ссылке:
http://agilesqlclub.codeplex.com/wikipage?title=Deploying&referringTitle=Documentation
Смотрите раздел "Если вы публикуете в SSDT":
(в моей системе с vs 2015 это C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120\Extensions)
Еще одна вещь заключается в том, что когда вы копируете свой вкладчик в каталоги расширений, вы можете поместить их в другую папку, чтобы вы могли сохранить свои расширения и любые зависимости, которые отделены от любых других участников, которые будут иметь свой собственный набор зависимостей (и dll hell умрет с.net lol)
Из интереса, что делает ваш автор?
Если это OSS, пожалуйста, поделитесь им:
https://github.com/DacFxDeploymentContributors/Contributors
издание