C# Deploy.dacpac缺少程序集引用

C# Deploy.dacpac缺少程序集引用,c#,.net,sql-server-data-tools,dacpac,C#,.net,Sql Server Data Tools,Dacpac,我有一个SSDT(SQLServer数据库项目),它引用了一个外部的.dll(C#类库)来提供一些CLR函数。 如果我在本地部署/发布,一切正常,但使用Microsoft.SqlServer.Dac.Dac包进行远程部署 经过进一步调查,问题出现在生成的.dacpac中。不知何故,我的.dacpac文件有一个“硬编码”引用路径,它引用了我的本地开发环境,但当它在TFS上运行时,源路径是不同的 我使用以下类部署.dacpac: var file = FileFinder.GetFirstF

我有一个SSDT(SQLServer数据库项目),它引用了一个外部的.dll(C#类库)来提供一些CLR函数。 如果我在本地部署/发布,一切正常,但使用Microsoft.SqlServer.Dac.Dac包进行远程部署

经过进一步调查,问题出现在生成的.dacpac中。不知何故,我的.dacpac文件有一个“硬编码”引用路径,它引用了我的本地开发环境,但当它在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但没有任何更改。

Dacpacs将按以下顺序查找引用的程序集:

  • 与dacpac所在的目录相同。因此,如果您的构建系统将dacpac和引用复制到1个目录,那么部署将起作用
  • 作为回退机制的原始文件路径
基本上,在部署之前,您应该确保dacpac和所有引用都位于1个目录中。构建系统应该自动为您执行此操作,但如果没有,您应该更新以复制到目录(或者创建一个nuget包,作为构建的一部分,为您执行所有这些操作)