DacFx 忽略 Cmd 变量:DefaultDataPath & DefaultLogPath

DacFx ignores Cmd Variables: DefaultDataPath & DefaultLogPath

我在自定义安装程序中使用 DacFX。我试图通过传入 Cmd 变量 DefaultDataPath 和 DefaultLogPath 来覆盖默认数据和日志文件位置,但数据库文件仍在默认位置创建。这看起来应该非常简单和容易,但即使在生成脚本并将其保存到文件并逐步执行代码之后,我也可以看到 DacOptions 对象具有 SqlCommmandVariableValues 的正确值,但生成的脚本没有值。好像他们被忽略了。

dacOptions.SqlCommandVariableValues.Add("DefaultDataPath", dataPath);
dacOptions.SqlCommandVariableValues.Add("DefaultLogPath", logPath);

我花了一些时间研究反射器,但无法轻易看出这些是否被忽略了:)

我过去所做的是 运行 首先创建一个脚本来创建数据库,如果它不存在我想要的任何文件设置,那么部署将升级一个空数据库或升级现有的

sql 非常简单:

if not exists(Select * from sys.databases where name = 'XX')
begin
  create database blah blah

end

SSDT/DacFx 的特点是它可以让您大部分时间到达那里,但有时您只需要先伸出援助之手 :)。如果您不能更改默认文件,那么首先 运行 一个 sql 脚本来设置它,您已经拥有了所需的所有详细信息和权限,因此您也可以让自己更轻松。

我也会提出一个连接作为一个错误,它可能会被修复,或者至少我们可能会知道为什么它不能被改变。

为了结束这个,我最终找到了一种使用 Deployment Contributors. An example of changing the DB location can be found in the DacFx Public Samples 的方法。