dacpac - проблема с ссылочным путем сборки CLR
Ниже приведен точный сценарий в моем проекте базы данных, где я создаю dacpac для развертывания баз данных на целевом экземпляре SQL:
- проект базы данных имеет ссылку на сборку CLR.
- Сервер сборки TFS используется для сборки проекта
- dacpac создается в процессе сборки TFS
- когда я пытаюсь запустить sqlpackage.exe для развертывания dacpac (сгенерированного в процессе сборки TFS) в моей среде, я получаю сообщение об ошибке -
*** Не предоставлен файл для справки XXXX.XXXX.XXXX.dll; Развертывание может закончиться неудачей. Когда C:\Temp\Dacpac_testing\XXX.XXXXX.XXXX.dacpac был создан, исходный ссылочный файл находился в C:\BUILDS\1\XXXX\XXXX\SRC\XXXXXXXX\ASSEMBLIES\XXXX.XXXX.XXXX.dll
Как создать dacpac для ссылки на путь сборки CLR в среде развертывания (а не тот, который использовался во время создания dacpac)
Любая помощь по этому вопросу будет высоко ценится.
2 ответа
Извините, я сейчас выбрал только эту тему, но у меня была похожая проблема. Откройте ссылки в проекте Sql Server, перейдите в dll, на который вы ссылаетесь, щелкните правой кнопкой мыши и выберите свойства.
Измените следующие параметры: Сгенерировать сценарий SQL: True Model Aware: True
Выберите соответствующий набор разрешений, как того требует код clr.
Я смог решить эту проблему, включив все файлы в папку bin/output, созданную проектом SSDT на машине, на которой развертывается dacpac. Эта папка включает в себя все библиотеки DLL и DAPAC, на которые есть ссылки. Я также включил файл publish.xml и некоторые примеры файлов SQLPackage cmd в выходные данные сборки, чтобы упростить развертывание.
Я нашел ответ из поста Ричарда Гавела на форуме SQL Server Data Tools. https://social.msdn.microsoft.com/Forums/sqlserver/en-US/aba60b70-396f-4624-890c-015c1f2d68f7/dacpac-dependencies-for-sqlpackageexe?forum=ssdt
Я не знаю, помогает ли это, но у меня возникли проблемы с запуском SqlPackage /Action: сценария между моим скомпилированным DACPAC и извлеченным DACPAC, и я получил похожую ошибку (при добавлении ссылок произошла ошибка). Я решил это, скопировав все DACPACS из каталога \bin\debug моего DACPAC (он содержит ссылки на 15 других проектов баз данных, а также master и msdb). После этого все заработало. Таким образом, кажется, что при поиске ссылок он сначала проверяет каталог (я не знаю, просматривал ли он конкретно текущий каталог или тот, в котором находился корневой DACPAC, потому что это были одни и те же).