DacFx忽略Cmd变量:DefaultDataPath& DefaultLogPath

时间:2017-10-03 20:01:04

标签: sql-server-data-tools dac

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

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

2 个答案:

答案 0 :(得分:1)

我花了一点时间使用反射器但是不能轻易看出这些是否被忽略:)

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

sql非常简单:

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

end

SSDT / DacFx之类的东西让你大部分都在那里,但有时候你需要先帮助它:)。如果您无法更改默认文件,那么首先运行一个sql脚本进行设置,您已经拥有了所需的所有细节和权限,因此您可以更轻松地对自己进行操作。

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

答案 1 :(得分:1)

为了对此进行一些关闭,我最终找到了一种方法来使用Deployment Contributors。可以在DacFx Public Samples

中找到更改数据库位置的示例