VS 2010 部署 (打包、一键部署和 Web.config 转换)






4.91/5 (23投票s)
VS 2010 部署 (打包、一键部署和 Web.config 转换)
VS 2010 部署 (打包、一键部署和 Web.config 转换)
引言和目标
部署问题
打包和 “MSDeploy”
创建包
部署包
一键部署
Web.config 转换
定位和转换
定位器和转换的更多细节
引言和目标
在本文中,我们将讨论 VS 2010 提供的 3 项重要功能,以简化我们在生产和其他环境中的部署任务。我们将首先了解部署方面的问题,然后继续创建打包、一键部署和 web.config 转换。
部署问题
当我们谈论部署时,它不仅仅是编译和将 DLL 传输到生产服务器。它涉及许多其他方面,如 IIS 设置、SQL 脚本、文本文件、配置等。
作为开发人员,您可能希望将一个包含所有依赖项的包交给管理员进行安装,或者您希望直接从 Visual Studio IDE 中安装它。
打包和 “MSDeploy”
包就是一个 ZIP 文件,其中包含您的应用程序所需的所有必要组件(DLL、SQL 脚本、配置文件、IIS 设置等)。
创建包
要创建包,请单击项目 – 属性选项卡,您会找到两个选项卡“package/publish web”(打包/发布 Web)和“package / publish SQL”(打包/发布 SQL)。第一个选项卡包含所有 IIS 和通用设置,而 SQL 选项卡用于在生产环境中部署 SQL 脚本。
“Package/Publish Web”(打包/发布 Web)选项卡包含一些关键项,您可以从 IIS 的角度定义这些项以及哪些内容应包含在包中。下图描述了一些重要的关键功能。
“Package/Publish SQL”(打包/发布 SQL)选项卡帮助您配置所有与 SQL Server 相关的内容。第一点是您可以导入“web.config”文件,然后 web.config 的所有连接字符串都将用于生成 SQL 脚本。
您还可以指定包的 SQL Server 的源和目标。源目标会从“Web.config”自动导入,但您可以根据需要随时进行更改。
“Package/Publish SQL”(打包/发布 SQL)选项卡还有三个要点:
• 您可以看到自动生成的架构,换句话说,架构是从指定的源 SQL Server 自动生成的。
• 如果您想手动添加一些脚本,例如插入模拟数据等,您可以随时使用如图所示的“add script”(添加脚本)选项卡。
• 我个人喜欢的是最后一个功能,您可以控制脚本的运行顺序。例如,在下图所示的情况下,首先运行自动生成的架构 SQL,然后执行“indexes.sql”脚本。这是一个很好的功能,可以从版本控制的角度进行利用。
要创建包,请单击“build deployment package”(生成部署包)菜单,您应该会在项目的包文件夹中看到必要的包文件。
部署包
好的,现在包已生成,让我们了解如何安装它。要安装包,我们需要 Microsoft Web Deploy 软件。Microsoft Web Deploy,又名“msdeploy”,由 Microsoft IIS 团队创建,用于从 IIS 6 迁移到 IIS 7。
为了充分利用其功能,它被用作安装 VS 2010 创建的包的骨干。
如果您还记得,在第一步中创建的包文件夹包含一些 XML 文件。有三个文件非常重要:一个是源清单,一个是目标清单,还有一个是 cmd 文件。清单文件由 MS Deploy 读取以获取元数据和部署配置,然后所有这些都通过 cmd 文件执行。
您首先应该做的是检查包是否正确,并且它是否能在环境中正常执行。要进行试安装,您需要转到“Microsoft Web Deploy”命令并使用“/t”执行 cmd 文件。这实际上并不会安装,但会简要检查实际安装过程中是否存在任何问题。
C:\Program Files\IIS\Microsoft Web Deploy>E:\deleteit\MyWebApplicationToPackage\ MyWebApplicationToPackage\obj\Debug\Package\MyWebApplicationToPackage.deploy.cmd /t
执行 cmd 文件后,您应该会看到将在生产服务器上进行的更改摘要,如下图所示。
在进行交叉检查后,您可以使用“/y”属性部署包,如下面的代码片段所示。如果您使用“y”命令运行您的包,它应该会创建 IIS 应用程序并执行必要的数据库脚本来创建 SQL Server 对象。
C:\Program Files\IIS\Microsoft Web Deploy>E:\deleteit\MyWebApplicationToPackage\ MyWebApplicationToPackage\obj\Debug\Package\MyWebApplicationToPackage.deploy.cmd /y
一键部署
很多时候,您希望直接从 VS IDE 安装包,而不是交给管理员进行安装。为了实现这一点,VS 2010 IDE 提供了“一键部署”。
顾名思义,您可以通过单击“Build”(生成)然后“Publish”(发布)菜单,以不同的模式一键部署您的包。下图是“one deploy publish”(一键发布)的屏幕截图。
您可以发布到 FTP、Web Deploy、文件系统等。
Web.config 转换
最后值得讨论的功能是“Web.config”转换。很多时候,您为不同的环境准备了不同的配置文件。在处理不同版本的 web.config 文件时,这会导致很多混淆。
因此,转到 Tools(工具)– Configuration Manager(配置管理器)并添加一个新配置文件,如下图所示。您可以看到它创建了一个父“Web.config”文件,该文件可以通过具有自己设置的子配置文件覆盖。
要查看您新添加的配置,需要右键单击 web.config 文件并选择“add config transforms”(添加配置转换),如下图所示。
根据您选择的活动配置,将为该环境创建相应的“Web.config”文件。
定位和转换
您可能会想到的一个问题是如何在子 web 配置文件中进行转换。换句话说,您的父 web.config 文件有一个连接字符串,如何在像 production、acceptance、test 等子配置文件中覆盖/转换它?
配置文件转换是一个两步过程:首先是搜索/定位需要转换的内容,第二步是进行实际的转换。
有 3 种机制可以通过 Match(匹配)、Condition(条件)和 XPath 来搜索/定位特定的属性/元素。有八种方法可以设置/替换/转换搜索到的属性或元素,如下图所示。
让我们举一个搜索和转换如何工作的例子。下面是父“web.config”文件和包含“web.production.config”文件的子文件的图像代码片段。
我们想为生产环境更改连接字符串的值。您可以看到下面的代码片段,生产环境的配置文件使用了“xdt:locator”按“name”(名称)进行搜索,然后我们想将该属性设置为不同的值,因此我们使用了“setattribute”转换。
定位器和转换的更多细节
让我们简要看一下 3 种定位器和 8 种转换。
以下所有内容均摘自 http://vishaljoshi.blogspot.com/2009/03/web-deployment-webconfig-transformation_23.html。
xdt:Locators
下面将讨论内置的 xdt:Locators。
Match
在提供的语法示例中,只有当源 web.config 中的连接字符串列表中名称 Northwind 匹配时,才会发生 Replace(替换)转换。请注意,Match Locator 可以接受多个 attributeNames 作为参数,例如 Match(name, providerName)]
<connectionStrings> <add name="Northwind" connectionString="connectionString goes here" providerName="System.Data.SqlClient" xdt:Transform="Replace" xdt:Locator="Match(name)" /> </connectionStrings>
条件
Condition Locator 将创建一个 XPath 谓词,该谓词将被附加到当前元素的 XPath。下面示例生成的 XPath 为“/configuration/connectionStrings/add[@name='Northwind or @providerName=’ System.Data.SqlClient’ ]”
然后使用此 XPath 在源 web.config 文件中搜索正确的节点。
<connectionStrings> <add name="Northwind" connectionString="connectionString goes here" providerName="System.Data.SqlClient" xdt:Transform="Replace" xdt:Locator="Condition(@name=’Northwind or @providerName=’ System.Data.SqlClient’)" /> </connectionStrings>
Xpath
此 Locator 支持复杂的 XPath 表达式来识别源 web.config 节点。在语法示例中,我们可以看到提供的 XPath 允许用户替换 system.web 部分,无论它在 web.config 中的哪个位置(即,将删除任何 location 标签下的所有 system.web 部分)。
<location path="c:\MySite\Admin" >
<system.web xdt:Transform="RemoveAll" xdt:Locator="XPath(//system.web)">
...
</system.web>
</location>
xdt:Transform
替换
完全替换目标 web.config(例如,staging 环境的 web.config 文件)中的第一个匹配元素及其所有子元素。请注意,转换不会修改您的源 web.config 文件。
<assemblies xdt:Transform="Replace"> <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> </assemblies>
移除
删除第一个匹配的元素及其所有子元素。
<assemblies xdt:Transform="Remove"></assemblies>
RemoveAll
删除目标 web.config(例如,staging 环境的 web.config 文件)中所有匹配的元素。
<connectionStrings> <add xdt:Transform="RemoveAll"/> </connectionStrings>
Insert
将 web.staging.config 中定义的元素插入到目标 web.config(例如,staging 环境的 web.config 文件)中所有同级元素的末尾。
<authorization> <deny users="*" xdt:Transform="Insert"/> </authorization>
SetAttributes
将 web.staging.config 中指定属性的值,并设置为目标 web.config 中匹配元素的属性。此转换接受一个逗号分隔的属性列表,这些属性需要被设置。如果未为 SetAttributes 转换提供任何属性,则它假定您希望设置 web.staging.config 中相应节点上的所有属性。
<compilation batch="false" xdt:Transform="SetAttributes(batch)"> </compilation>
RemoveAttributes
从目标 web.config(即 staging 环境的 web.config 文件)中删除指定的属性。语法示例显示了如何删除多个属性。
<compilation xdt:Transform="RemoveAttributes(debug,batch)"> </compilation>
InsertAfter (XPath)
将 web.staging.config 中定义的元素精确地插入到传递给“InsertAfter()”转换的指定 XPath 定义的元素之后。在语法示例中,元素 <deny users="Vishal" /> 将精确地插入到目标 XML 中元素 <allow roles="Admins" /> 之后。
<authorization> <deny users="Vishal" xdt:Transform="InsertAfter(/configuration/system.web/authorization/allow[@roles='Admins'])” /> </authorization>
InsertBefore (XPath)
将 web.staging.config 中定义的元素精确地插入到传递给“InsertBefore()”转换的指定 XPath 定义的元素之前。在语法示例中,元素 <allow roles="Admins" /> 将精确地插入到目标 XML 中元素 <deny users="*" /> 之前。
<authorization> <allow roles=" Admins" xdt:Transform="InsertBefore(/configuration/system.web/authorization/ deny[@users='*'])" /> </authorization>
如需进一步阅读,请观看以下面试准备视频和分步视频系列。