Headless MSBuild Support for SSDT (*.sqlproj) Projects [利用msbuild自动化部署 .sqlproj]- 摘自网络
Update: breaking change: http://sqlproj.com/index.php/2012/10/dacfx-sept-2012-updates-break-headless-build/
This article describes how to install the required components to build and publish SQL Server Data Tools projects (*.sqlproj) using MSBuild without installing the full SQL Server Data Tool hosted inside the Visual Studio IDE.
In order to acquire the binaries needed you have to create an Administrative install of SSDT, which is described in detail in this previously published article.
NOTE: You could download all but one components from the SQL Server 2012 Feature Pack download page, however there currently is no separate download of the SSDTBuildUtilities.msi available.
Before we start, let’s setup a small test environment first. In this example I will start with a Windows Server 2008 installation, which has .NET 4.0 installed. I created a sample project on another machine using the IDE which I want to build and publish from my server. The sample project is available online: nw-sqlproj.zip, for this example I extracted the project in to the “c:\projects\nw-sqlproj” directory.
Second step is that we have to be able to call MSBuild.exe from the command prompt. In my example I am using a 32-bit Windows Server 2008 installation, after starting a command window using cmd.exe, I can invoke MSBuild.exe using:
- %WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
Normally I create a command file, named msbuild.cmd which I place in %WINDIR%, which looks like this:
- @echo off
- if (%PROCESSOR_ARCHITECTURE%)==(AMD64) (
- %WINDIR%\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe %*
- ) else (
- %WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe %*
- )
Let’s start a command window and see what happens when we try to build our test project!
The result is clear, and expected at this point. The build fails, since the project system references the SSDT build task via the Microsoft.Data.Tools.Schema.SqlTasks.targets file.
Below the MSBuild output as text:
- C:\Projects\nw-sqlproj>%WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
- Microsoft (R) Build Engine Version 4.0.30319.1
- [Microsoft .NET Framework, Version 4.0.30319.239]
- Copyright (C) Microsoft Corporation 2007. All rights reserved.
- Build started 3/7/2012 3:31:19 PM.
- Project "C:\Projects\nw-sqlproj\nw-sqlproj.sln" on node 1 (default targets).
- ValidateSolutionConfiguration:
- Building solution configuration "Debug|Any CPU".
- Project "C:\Projects\nw-sqlproj\nw-sqlproj.sln" (1) is building "C:\Projects\nw-sqlproj\nw-sqlproj.sqlproj" (2) on node 1 (default targets).
- C:\Projects\nw-sqlproj\nw-sqlproj.sqlproj(90,3): error MSB4019: The imported project "C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
- Done Building Project "C:\Projects\nw-sqlproj\nw-sqlproj.sqlproj" (default targets) -- FAILED.
- Done Building Project "C:\Projects\nw-sqlproj\nw-sqlproj.sln" (default targets)
- -- FAILED.
- Build FAILED.
- "C:\Projects\nw-sqlproj\nw-sqlproj.sln" (default target) (1) ->
- "C:\Projects\nw-sqlproj\nw-sqlproj.sqlproj" (default target) (2) ->
- C:\Projects\nw-sqlproj\nw-sqlproj.sqlproj(90,3): error MSB4019: The imported project "C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
- 0 Warning(s)
- 1 Error(s)
- Time Elapsed 00:00:00.04
- C:\Projects\nw-sqlproj>
In order to get the MSBuild task and dependent components installed, you need to perform the following five steps:
- Install the Microsoft® SQL Server® 2012 Data-Tier Application FrameworkX86 Package(dacframework.msi)X64 Package (dacframework.msi)
- Install the Microsoft® SQL Server® 2012 Transact-SQL ScriptDomX86 Package(SQLDOM.MSI)X64 Package (SQLDOM.MSI)
- Install the Microsoft® SQL Server® 2012 Transact-SQL Compiler ServiceX86 Package(SQLLS.MSI)X64 Package (SQLLS.MSI)
- Install the Microsoft® System CLR Types for Microsoft® SQL Server® 2012X86 Package(SQLSysClrTypes.msi)X64 Package (SQLSysClrTypes.msi)
- Install the SQL Server Data Tools Build Utilities from the Administrative install point.\ssdt\x86\SSDTBuildUtilities.msi
Now we are ready to try again!
And we can now successfully build our project.
Below the MSBuild output as text:
- C:\Projects\nw-sqlproj>%WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
- Microsoft (R) Build Engine Version 4.0.30319.1
- [Microsoft .NET Framework, Version 4.0.30319.239]
- Copyright (C) Microsoft Corporation 2007. All rights reserved.
- Build started 3/7/2012 3:52:23 PM.
- Project "C:\Projects\nw-sqlproj\nw-sqlproj.sln" on node 1 (default targets).
- ValidateSolutionConfiguration:
- Building solution configuration "Debug|Any CPU".
- Project "C:\Projects\nw-sqlproj\nw-sqlproj.sln" (1) is building "C:\Projects\nw-sqlproj\nw-sqlproj.sqlproj" (2) on node 1 (default targets).
- GenerateSqlTargetFrameworkMoniker:
- Skipping target "GenerateSqlTargetFrameworkMoniker" because all output files are up-to-date with respect to the input files.
- CoreCompile:
- Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files.
- SqlBuild:
- Skipping target "SqlBuild" because all output files are up-to-date with respect
- to the input files.
- CopyFilesToOutputDirectory:
- nw-sqlproj -> C:\Projects\nw-sqlproj\bin\Debug\nw_sqlproj.dll
- SqlPrepareForRun:
- nw-sqlproj -> C:\Projects\nw-sqlproj\bin\Debug\nw-sqlproj.dacpac
- Done Building Project "C:\Projects\nw-sqlproj\nw-sqlproj.sqlproj" (default targ
- ets).
- Done Building Project "C:\Projects\nw-sqlproj\nw-sqlproj.sln" (default targets)
- .
- Build succeeded.
- 0 Warning(s)
- 0 Error(s)
- Time Elapsed 00:00:00.40
- C:\Projects\nw-sqlproj>
Now that we can build lets publish our project, using MSBuild.
- C:\Projects\nw-sqlproj>msbuild /t:Publish /p:SqlPublishProfilePath=nw-sqlproj.publish.xml
This will publish the project to the server specified in the publish profile, which is an MSBuild structure XML file.
nw-sqlproj.publish.xml
- <?xml version="1.0" encoding="utf-8"?>
- <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <IncludeCompositeObjects>True</IncludeCompositeObjects>
- <TargetDatabaseName>NorthwindTest</TargetDatabaseName>
- <DeployScriptFileName>nw-sqlproj.sql</DeployScriptFileName>
- <TargetConnectionString>Data Source=localhost;Integrated Security=True;Pooling=False</TargetConnectionString>
- <ProfileVersionNumber>1</ProfileVersionNumber>
- </PropertyGroup>
- </Project>
MSBuild output of the Deploy operation:
- C:\Projects\nw-sqlproj>msbuild /t:Publish /p:SqlPublishProfilePath=nw-sqlproj.pblish.xml
- Microsoft (R) Build Engine Version 4.0.30319.1
- [Microsoft .NET Framework, Version 4.0.30319.239]
- Copyright (C) Microsoft Corporation 2007. All rights reserved.
- Build started 3/7/2012 5:37:52 PM.
- Project "C:\Projects\nw-sqlproj\nw-sqlproj.sln" on node 1 (Publish target(s)).
- ValidateSolutionConfiguration:
- Building solution configuration "Debug|Any CPU".
- Project "C:\Projects\nw-sqlproj\nw-sqlproj.sln" (1) is building "C:\Projects\nw -sqlproj\nw-sqlproj.sqlproj" (2) on node 1 (Publish target(s)).
- SqlPublish:
- Deployment script generated to:
- C:\Projects\nw-sqlproj\bin\Debug\nw-sqlproj.publish.sql
- Creating NorthwindTest...
- Creating [dbo].[Categories]...
- Creating [dbo].[Categories].[CategoryName]...
- Creating [dbo].[CustomerCustomerDemo]...
- Creating [dbo].[CustomerDemographics]...
- Creating [dbo].[Customers]...
- Creating [dbo].[Customers].[City]...
- Creating [dbo].[Customers].[CompanyName]...
- Creating [dbo].[Customers].[PostalCode]...
- Creating [dbo].[Customers].[Region]...
- Creating [dbo].[Employees]...
- Creating [dbo].[Employees].[LastName]...
- Creating [dbo].[Employees].[PostalCode]...
- Creating [dbo].[EmployeeTerritories]...
- Creating [dbo].[Order Details]...
- Creating [dbo].[Order Details].[OrderID]...
- Creating [dbo].[Order Details].[OrdersOrder_Details]...
- Creating [dbo].[Order Details].[ProductID]...
- Creating [dbo].[Order Details].[ProductsOrder_Details]...
- ...
- ...<lines deleted for clarity>
- Update complete.
- Done Building Project "C:\Projects\nw-sqlproj\nw-sqlproj.sqlproj" (Publish target(s)).
- Done Building Project "C:\Projects\nw-sqlproj\nw-sqlproj.sln" (Publish target(s)).
- Build succeeded.
- 0 Warning(s)
- 0 Error(s)
- Time Elapsed 00:00:06.43
- C:\Projects\nw-sqlproj>
And if we would publish it again, by default it will only perform an incremental update!
- C:\Projects\nw-sqlproj>msbuild /t:Publish /p:SqlPublishProfilePath=nw-sqlproj.publish.xml
- Microsoft (R) Build Engine Version 4.0.30319.1
- [Microsoft .NET Framework, Version 4.0.30319.239]
- Copyright (C) Microsoft Corporation 2007. All rights reserved.
- Build started 3/7/2012 5:41:23 PM.
- Project "C:\Projects\nw-sqlproj\nw-sqlproj.sln" on node 1 (Publish target(s)).
- ValidateSolutionConfiguration:
- Building solution configuration "Debug|Any CPU".
- Project "C:\Projects\nw-sqlproj\nw-sqlproj.sln" (1) is building "C:\Projects\nw-sqlproj\nw-sqlproj.sqlproj" (2) on node 1 (Publish target(s)).
- SqlPublish:
- Deployment script generated to:
- C:\Projects\nw-sqlproj\bin\Debug\nw-sqlproj.publish.sql
- Update complete.
- Done Building Project "C:\Projects\nw-sqlproj\nw-sqlproj.sqlproj" (Publish target(s)).
- Done Building Project "C:\Projects\nw-sqlproj\nw-sqlproj.sln" (Publish target(s)).
- Build succeeded.
- 0 Warning(s)
- 0 Error(s)
- Time Elapsed 00:00:11.50
- C:\Projects\nw-sqlproj>
We are done, we enabled build and publishing from MSBuild, without installing the SQL Server Data Tools IDE inside the Visual Studio shell.
I hope this helps you getting started with SQL Server Data Tools (SSDT)
Headless MSBuild Support for SSDT (*.sqlproj) Projects [利用msbuild自动化部署 .sqlproj]- 摘自网络的更多相关文章
- 利用 Ansiable 自动化部署 Veeam Backup & Replication 9.5U4b
利用 Ansiable 自动化部署 Veeam Backup & Replication 9.5U4b 前言 上周出差期间接到一个做CMP(云管平台)Partner的需求,要在无人值守的安装 ...
- Headless MSBuild Support for SSDT (*.sqlproj) Projects
http://sqlproj.com/index.php/2012/03/headless-msbuild-support-for-ssdt-sqlproj-projects/ Update: bre ...
- 如何使用SSDT进行SQL数据库的自动化部署到生产环境和版本控制
简介 在开发过程,我们常常会遇到数据库环境部署的问题,当部署正式环境中,数据库产生的多文件脚本在管理上就容易出现混乱,特别是你还没有权限访问正式环境的情况,就更为困难.SSDT为我们提供了很好的解决方 ...
- 利用PowerShell+Jenkins,实现项目的自动化部署
当项目越来越庞大,部署环境越来越多以后,就会越来越依赖于自动化.比如本人公司的项目,目前有6个web和4个windows service,同时本地有两套环境:开发自测试环境和QA测试环境.每次版本发布 ...
- 利用WSGI来部署你的网站
利用WSGI来部署你的网站 当需要部署你的django项目的时候,可以使用apache+python来部署访问你的网站. 由于网上的有关的都是老版本的.所以这里使用apache2.4和python3. ...
- Android利用tcpdump和wireshark抓取网络数据包
Android利用tcpdump和wireshark抓取网络数据包 主要介绍如何利用tcpdump抓取andorid手机上网络数据请求,利用Wireshark可以清晰的查看到网络请求的各个过程包括三次 ...
- 利用jenkins做项目的自动化部署
最近领导要求上海本地的项目需要使用进jenkins实现自动化部署,以便可以直接将项目移交给运维的同学,减轻开发的工作量.记录下这次爬坑的过程. 一.前言 Jenkins是基于Java开发的一种持续集成 ...
- Asp.Net Core 轻松学-利用xUnit进行主机级别的网络集成测试
前言 在开发 Asp.Net Core 应用程序的过程中,我们常常需要对业务代码编写单元测试,这种方法既快速又有效,利用单元测试做代码覆盖测试,也是非常必要的事情:但是,但我们需要对系统进行集 ...
- 自动化部署-Jenkins+SVN+MSBuild
这篇文章主要介绍下使用Jenkins实现自动化部署 下载 https://jenkins.io/download/ 安装 按步骤安装即可,下载的是windows版本,安装完成后,会看到这样一个正在运行 ...
随机推荐
- SQLServer数据库通用访问类
private static string connString=ConfigurationManager.ConnStrings["connString"].ToString() ...
- codevs 1540 银河英雄传说
题目描述 Description 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米 ...
- 映像备份与恢复管理工具Easy Image X使用说明
Easy Image X(简称EIX)是一个支持Ghost映像(.gho)和ImageX映像(.wim)的映像管理工具,具有友好的图形界面,仅需几步简单操作即可完成映像备份与恢复工作.维护时使用最多的 ...
- BZOJ 1688: [Usaco2005 Open]Disease Manangement 疾病管理
Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) is running through the fa ...
- LFI & RFI & PHP封装协议之安全问题研究
目录 . 文件包含的基本概念 . LFI(Local File Include) . RFI(Remote File Include) . PHP中的封装协议(伪协议).PHP的流式文件操作模式所带来 ...
- 【NOIP 2012 疫情控制】***
题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都, 也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控制疫情,不让疫情扩散 ...
- MySQL学习笔记之一
MySQL装有一个名为mysql的命令行,在提示符下输入mysql将出现如下的简单提示: ➜ ~ mysql Welcome to the MySQL monitor. Commands end wi ...
- crtmpserver系列之一:流媒体概述
阅读目录 概述 流媒体系统的组成 媒体文件封装 传输协议 回到顶部 概述 所谓流媒体按照字面意思理解就是像流一样的媒体,看起来像是废话.流媒体现在司空见惯,所以一般人大概不会有疑问.事实上在流媒体还没 ...
- java比较器Comparable接口和Comaprator接口
Comparable故名思意是比较,意思就是做比较的,然后进行排序. 1.什么是comparable接口 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 ,类的 compar ...
- html5学习链接
http://www.runoob.com/tags/html-colorpicker.html