我正在寻找一种部署到多个不同环境的方法。
即dev,uat,prod1和prod2服务器
我的印象是msdeploy可以为此工作。目前我们有一些使用像
这样的命令进行部署"C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:contentPath="D:\sourcepath" -dest:contentPath="D:\destpath", computerName=PRODSERVER1
"C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:contentPath="D:\sourcepath" -dest:contentPath="D:\destpath", computerName=PRODSERVER2
这可行,但在我正在开发的应用程序中,需要部署的数据库连接涉及到需要根据环境进行更改。
<connectionStrings>
<add name="DEVServer" connectionString="Data Source=DEVServer\SQLinstance;Initial Catalog=DBNAME;User ID=sqluser;Password=sqlpassword" providerName="System.Data.SqlClient" />
</connectionStrings>
此外,由于这是一个WCF服务,我有一个端点的标识,也需要根据环境进行更改
<identity>
<dns value="DEVServer" />
</identity>
有没有办法参数化这个?我应该设置多个web.config文件吗?最简单的方法是什么?
答案 0 :(得分:1)
假设您使用的是Visual Studio 2010或2012,您可以为每个环境设置发布配置文件并将数据库连接字符串放入其中,为每个发布配置文件设置Web.config转换以使端点更改,以及您可以从命令行使用MSBuild而不是直接使用msdeploy进行部署。
有关如何设置发布配置文件的详细信息,请参阅http://msdn.microsoft.com/en-us/library/dd465337.aspx
对于Web.config转换示例,请参阅http://www.asp.net/web-forms/tutorials/deployment/deployment-to-a-hosting-provider/deployment-to-a-hosting-provider-web-config-file-transformations-3-of-12
从命令行发布时,格式如下所示,用于发布解决方案:
msbuild path \ to \ solution.sln / p:DeployOnBuild = true / p:PublishProfile = [nameofprofile] / p:Password = [password]
要发布项目而不是解决方案,请指定.csproj / .vbproj文件,并为VS 2012添加/p:VisualStudioVersion=11.0(对于VS 2010为10.0)。