我有3个环境:Dev,QA,Prod on .NET 4.每个环境都有一个唯一的web.config文件。我们在管理所有三个版本时遇到了问题。在TFS中手动合并web.config文件时,很容易忽略一些关键的东西。我们不止一次最终得到了一个指向Prod的QA的连接字符串。
所以,I read up on web.config transformations.这些似乎需要MSBUILD。我们没有构建服务器,所以我不确定如何尝试使用此解决方案。有没有办法让转换适用于普通的网络发布?
您对管理3个web.config文件有任何其他建议吗?
答案 0 :(得分:1)
您对管理3个web.config文件有任何其他建议吗?
是的,不要管理它们。我们管理的越少,犯错的机会就越少。为您的所有环境提供完全相同的web.config文件。在任何地方都部署了相同的分发包。
所有特定于环境的键(如基本URL,连接字符串......)都可以在machine.config
中定义,您只需在每台服务器上部署一次,并从所有应用程序中重复使用。或者IIS网站根目录下的web.config
,所有应用程序都可以从中获取。
答案 1 :(得分:1)
有没有办法进行转换 使用正常的网络发布?
当然,请看一下this MSDN link。你不需要MSBUILD。您可以在单独的配置文件中为各种环境设置连接字符串。例如,您可以使用Web.config,Web.QA.config和Web.Prod.config,其中QA和Prod是分开的Visual Studio Build configurations。
或者,您可以使用默认添加的构建配置:Web.config(本地开发),Web.Debug.config(用于QA)和Web.Release.config(用于生产)。
使用此设置作为示例,Web.config将具有所有配置,Web.Debug.config将仅具有针对该环境更改的配置(连接字符串,应用程序设置等),并且Web.Release.config具有只有为该环境更改的配置。
设置完配置和转换后,只需更改构建配置,从Visual Studio构建和发布。
答案 2 :(得分:1)
如果使用websetup项目创建msi,则可以向websetup添加自定义安装程序类。这将使您可以选择创建预定义的批处理脚本,以便在web.config中正确设置值
msiexec.exe /Qb! /i "MyWebsiteMsi.MSI" SQL_SERVER_ConnStr="ABC"
这是一些旧例子的页面 enter link description here
答案 3 :(得分:0)
另一种方法是创建移动您的设置,将其更改为外部文件&使用configSource属性将该文件链接回来。对于不同的部分,请将其放在外部文件中。
然后你可以拥有单独命名的文件,例如dev.config,qa.config,live.config&更改web.config中的名称,或者有一个名为environment.config&的文件。你永远不会在环境之间进行合并。
缺点是整个设置部分必须移动到文件中。
西蒙