从SSDT项目中以编程方式创建dacpac文件

4

是否可以从现有的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); 

1
你看过这篇帖子吗:https://dev59.com/1Wkv5IYBdhLWcg3wqiiS? - David Tansey
@DavidTansey - 抱歉,但是在那段代码的哪个位置创建了上面需要的(“新鲜的”)dacpac文件,该文件已在这个常量字符串中定义:dacPacFileName = @"D:\Bla.dacpac";? - cs0815
也许我可以直接发布SSDT项目,而不是使用dacpac文件? - cs0815
2个回答

3
我已经使用PowerShell完成了这个任务,通过调用类似以下代码的内容。
> msbuild.exe <mysolution>.sln /p:Configuration=<myconfig>

这将构建解决方案,并应该生成dacpac。
之后,我调用
> sqlpackage.exe /Action:<someaction> /SourceFile:<thatdacpac> /Profile:<publishprofile>

如果您部署的是 dacpac 而不是执行模式比较和发布,则只需要第一步。这能对您有所帮助吗?


1
太好了。我希望我可以“纯粹地以编程方式”完成这个任务(例如在我的问题中使用C#),但没关系(-: - cs0815

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();

将此代码放入方法中并尝试运行。不要忘记用字段替换您的数据。 - Bennet roy
您可以从现有数据库创建dacpac。 - Bennet roy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接