gpt4 book ai didi

c# - 部署 .dacpac 缺少程序集引用

转载 作者:行者123 更新时间:2023-11-30 21:51:11 26 4
gpt4 key购买 nike

我有一个 SSDT(Sql Server 数据库项目),它引用外部 .dll(C# 类库)以提供一些 CLR 功能。如果我在本地部署/发布一切正常,但远程使用 Microsoft.SqlServer.Dac.DacPackage 它会爆炸。

经过进一步调查,问题出在.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 但没有任何变化。

最佳答案

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

  • 与放置 dacpac 的目录相同。因此,如果您的构建系统将 dacpac 和引用复制到 1 个目录,部署将起作用
  • 原始文件路径,作为后备机制

本质上,您应该在部署前确保 dacpac 和所有引用都在 1 个目录中。构建系统应该自动为您执行此操作,但如果不是,您应该更新以复制到目录(或创建一个 nuget 包作为构建的一部分,为您执行所有这些操作)。

关于c# - 部署 .dacpac 缺少程序集引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35848280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com