当前位置: 首页 > 编程语言 > C#

使用Microsoft.Build.Evaluation发布数据库项目(.sqlproj)分享

时间:2023-04-10 21:33:29 C#

C#学习教程:使用Microsoft.Build.Evaluation发布数据库项目(.sqlproj)我正在使用Microsoft.Build这样做,但找不到任何文档。创建.dacpac似乎很简单,但我如何发布到现有数据库或至少发布到.sql文件。我的想法是当我右键单击该项目并选择发布时让它执行它的操作。它应该与选定的数据库进行比较并生成升级脚本。这是我到目前为止创建的.dacpac:partialclassDBDeploy{Projectproject;internalvoidpublishChanges(){Console.WriteLine("Buildingproject"+ProjectPath);秒表sw=new秒表();sw.开始();project=ProjectCollection.GlobalProjectCollection.LoadProject(ProjectPath);项目.Build();//此时.dacpac已构建并放入项目sw.Stop()的调试文件夹中;Console.WriteLine("项目构建完成。总时间:{0}",sw.Elapsed.ToString());基本上我正在尝试做这个MSBuild示例显示的内容,但在代码中。对不起,我只有这些。Build类的文档很差。任何帮助将不胜感激。谢谢。我不得不做类似的事情,因为我们之前使用的VSDBCMD没有部署到SQLServer2012,我们需要支持它。我发现的是Microsoft.SqlServer.Dac程序集,它似乎是SQLServerDataTools(http://msdn.microsoft.com/en-us/data/tools.aspx)的一部分。在客户端机器上运行此命令,您将需要完整版的.NET4框架以及SQLCLR类型和SQLT-SQLScriptDOM包,可在此处找到:http://www.microsoft.com/en-us/download/details.aspx?id=29065下面的代码来自我生成的模型,用于测试新的部署方法并使用System;部署给定的.dacpac文件。使用System.Collections.Generic;使用System.Linq;使用系统文本;使用Microsoft.SqlServer.Dac;使用System.IO;namespaceConsoleApplication3{classProgram{privatestaticTextWriteroutput=newStreamWriter("output.txt",false);staticvoidMain(string[]args){Console.Write("连接字符串:");//负责部署的类。(目前由控制台输入提供的连接字符串)DacServicesdbServices=newDacServices(Console.ReadLine());//为部署消息和任务进度连接事件(为了不那么冗长的输出,不要订阅消息事件(也许方便调试?)dbServices.Message+=newEventHandler(dbServices_Message);dbServices.ProgressChanged+=newEventHandler(dbServices_ProgressChanged);//此快照应由我们的构建过程使用MSDeployConsole.WriteLine("SnapshotPath:")创建;DacPackagedbPackage=DacPackage.Load(Console.ReadLine());DacDeployOptionsdbDeployOptions=newDacDeployOptions();//这里删掉了很多配置部署的选项,但是都是DacDeployOptions的一部分dbDeployOptions.SqlCommandVariableValues.Add("debug","false");dbServices.Deploy(dbPackage,"trunk",true,dbDeployOptions);输出.关闭();}staticvoiddbServices_Message(objectsender,DacMessageEventArgse){output.WriteLine("DACMessage:{0}",e.Message);}staticvoiddbServices_ProgressChanged(objectsender,DacProgressEventArgse){output.WriteLine(e.Status+":"+e.Message);这似乎适用于2005年及更高版本的所有SQLServer版本Microsoft.SqlServer.Management.Dac有一组类似的对象,但我相信这是在DACFx的早期版本中并且不包含在最新版本中。如果可以,请使用最新版本。我们需要一种方法来告诉msbuild发布的方式和位置。在VisualStudio中打开您的项目并开始发布它。在对话框中输入所有必需的信息,包括数据库连接信息和任何自定义SQLCMD变量值。SaveProfileAs...文件SaveProfileAs...到文件,例如Northwind.publish.xml。(然后你可以取消。)现在我们可以使用它和项目文件来构建和发布://Createalogger.FileLoggerlogger=newFileLogger();logger.Parameters=@"logfile=Northwind.msbuild.log";//设置properties.varprojects=ProjectCollection.GlobalProjectCollection;projects.SetGlobalProperty("配置","调试");projects.SetGlobalProperty("SqlPublishProfilePath",@"Northwind.publish.xml");//加载并构建项目。vardbProject=ProjectCollection.GlobalProjectCollection.LoadProject(@"Northwind.sqlproj");dbProject.Build(new[]{"Build","Publish"},new[]{logger});这可能需要一段时间,似乎可能会卡住。要有耐心。?您应该使用SqlPackage.exe来分发您的dacpac。SqlPackage.exe/Action:Publish/SourceFile:C:/file.dacpac/TargetConnectionString:[Connectionstring]此外,您可以将设置保存到DAC发布配置文件中,而不是传递太多参数(这可以通过visualstudio完成)我想基于sqlproj文件构建和发布数据库,并将有用的信息记录到控制台。这是我到达的地方:使用Microsoft.Build.Framework;使用Microsoft.Build.Execution;publicvoidUpdateSchema(){varprops=newDictionary{{"UpdateDatabase","True"},{"PublishScriptFileName","schema-update.sql"},{"SqlPublishProfilePath","path/to/publish.xml")}};varprojPath="path/to/database.sqlproj";varresult=BuildManager.DefaultBuildManager.Build(newBuildParameters{Loggers=new[]{newConsoleLogger()}},newBuildRequestData(newProjectInstance(projPath,props,null),new[]{"Publish"}));if(result.OverallResult==BuildResultCode.Success){Console.WriteLine("架构更新成功!");}else{Console.ForegroundColor=ConsoleColor.Red;Console.WriteLine("模式更新失败!");控制台.ResetColor();}}privateclassConsoleLogger:ILogger{publicvoidInitialize(IEventSourceeventSource){eventSource.ErrorRaised+=(sender,e)=>{Console.ForegroundColor=ConsoleColor.Red;Console.WriteLine(e.Message);康索尔e.ResetColor();};eventSource.MessageRaised+=(sender,e)=>{if(e.Importance!=MessageImportance.Low)Console.WriteLine(e.Message);};}publicvoidShutdown(){}publicLoggerVerbosityVerbosity{get;放;}公共字符串参数{get;放;这适用于.NET4及更高版本确保并包括对Microsoft.Build和Microsoft.Build.Framework的程序集引用。以上就是C#学习教程:使用Microsoft.Build.Evaluation发布数据库项目(.sqlproj)共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收藏,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: