2016-03-07 2 views
2

У меня есть SSDT (проект базы данных сервера Sql), который ссылается на внешнюю DLL-библиотеку (C# Class Library), чтобы предоставить некоторые функции CLR. Если я Deploy/Publish локально, все работает отлично, но удаленно, используя Microsoft.SqlServer.Dac.DacPackage, он бомбит.Развернуть .dacpac отсутствует ссылка на сборку

Проблема, после дальнейшего изучения, находится внутри генерируемого .dacpac. Так или иначе, мой файл .dacpac имеет «жестко запрограммированный» ссылочный путь, который относится к моей локальной среде DEV, но когда он запускается на TFS, путь источника отличается.

Я развернуть .dacpac с помощью этого класса:

var file = FileFinder.GetFirstFile("MyFile.dacpac"); 
    var package = DacPackage.Load(file); 
    var deployOptions = new DacDeployOptions 
    { 
     BlockOnPossibleDataLoss = false, 
     CreateNewDatabase = true, 
     IncludeCompositeObjects = true 
    }; 

    var dacService = new DacServices(ApplicationConfiguration.GetConnection("MyConn"));    

    dacService.Deploy(
     package: package, 
     targetDatabaseName: "MyDB", 
     upgradeExisting: true, 
     options: deployOptions); 
} 

и удаленно ошибка всегда одинаково, даже если находятся в библиотек .dll той же папке файла .dacpac:

No file was supplied for reference Utilities.dll; 
deployment might fail. 
When C:\MyFile.dacpac was created, the original referenced file was located **C:\DEV\MAIN\UTILITIES.DLL**. 

Это, конечно, мой локальный путь.

Я использую: DacDeployOptions.IncludeCompositeObjects, но ничего не меняется.

ответ

3

Dacpacs будет искать ссылочные сборки в следующем порядке:.

  • Тот же каталог, как dacpac помещается в Таким образом, если ваша системе сборки копирует dacpac и ссылки на 1 каталог, развертывание будет работать
  • Исходный путь к файлу в качестве резервного механизма

По существу, вы должны обеспечить, чтобы dacpac и все ссылки находились в 1 каталоге перед развертыванием. Система сборки должна делать это за вас автоматически, но если нет, вам следует обновить ее для копирования в каталог (или создать пакет nuget как часть сборки, которая сделает все это для вас).

+0

Просто попробовал и работает – Raffaeu

Смежные вопросы