【问题标题】:Create dacpac file programmatically from SSDT project从 SSDT 项目以编程方式创建 dacpac 文件
【发布时间】:2015-11-14 20:11:40
【问题描述】:

是否可以从现有的 SSDT 项目创建一个“新的”.dacpac 文件?我希望能够在每次自动端到端测试之前重新创建数据库(拆卸 + 设置):

const string dacPacFileName = @"D:\Bla.dacpac";
var connectionString = ConfigurationManager.ConnectionStrings["BlaConnectionString"].ConnectionString;

var dacPackage = DacPackage.Load(dacPacFileName);
var dacServices = new DacServices(connectionString);      
var dacOptions = new DacDeployOptions();
dacOptions.CreateNewDatabase = true;
dacServices.Deploy(dacPackage, "Bla", true, dacOptions); 

【问题讨论】:

  • 你看过这个帖子吗:stackoverflow.com/questions/10438258/… ?
  • @DavidTansey - 抱歉,但此时代码会在 const string dacPacFileName = @"D:\Bla.dacpac"; 处创建上面所需的('新鲜')dacpac 文件?跨度>
  • 也许我可以直接发布 ssdt 项目而不是使用 dacpac 文件?

标签: c# sql-server sql-server-2014 sql-server-data-tools sql-server-data-project


【解决方案1】:

我已经使用 PowerShell 通过调用类似的方法来完成此操作

> msbuild.exe <mysolution>.sln /p:Configuration=<myconfig>

这将构建解决方案并应生成 dacpac。

然后我打电话给

> sqlpackage.exe /Action:<someaction> /SourceFile:<thatdacpac> /Profile:<publishprofile>

但如果您要部署 dacpac 而不是进行架构比较和发布,则可能只需要第一步。这有帮助吗?

【讨论】:

  • 优秀。我希望我可以“纯粹以编程方式”执行此操作(如 C# 中的示例,请参见我的问题中的示例),但没关系(-:
【解决方案2】:
var process = new System.Diagnostics.Process();
var startInfo = new System.Diagnostics.ProcessStartInfo
{
    WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden,
    FileName = @"C:\Program Files\Microsoft SQL Server\150\DAC\bin\SqlPackage.exe",
    Arguments = "/TargetFile:D:/output_target.dacpac /Action:Extract 
                /SourceServerName:ServerName /SourceDatabaseName:DatabaseName 
                /SourceUser:UserId /SourcePassword:Password"
};
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();

【讨论】:

  • 在方法中使用这段代码并尝试一下。不要忘记用字段替换您的数据
  • 您可以从现有数据库创建 dacpac
猜你喜欢
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
  • 2012-02-06
  • 1970-01-01
相关资源
最近更新 更多