我需要在ASP.NET应用程序中使用不同的数据库连接字符串和SMTP服务器地址,具体取决于它是在开发环境还是生产环境中运行。
应用程序通过WebConfigurationManager.AppSettings属性从Web.config文件中读取设置。
我使用Build / Publish命令通过FTP将应用程序部署到生产服务器,然后用正确的方法手动替换远程Web.config。
是否有可能以某种方式简化部署过程?谢谢!
答案 0 :(得分:148)
在Visual Studio 2010及更高版本中,您现在可以根据构建配置将转换应用于web.config。
创建web.config时,您可以在解决方案资源管理器中展开该文件,您将看到两个文件:
它们包含可用于
的转换代码有关详细信息,请参阅MSDN上的Web.config Transformation Syntax for Web Application Project Deployment。
虽然官方不支持,但也可以将相同类型的转换应用于非Web应用程序app.config
文件。请参阅Phil Bolduc blog,了解如何修改项目文件以向msbuild添加新任务。
这是一个长期坚持request on the Visual Studio Uservoice。
extension for Visual Studio 2010及以上,“SlowCheetah,”可用于处理为任何配置文件创建转换。从Visual Studio 2017.3开始,SlowCheetah has been integrated into the IDE和代码库由Microsoft管理。这个新版本也支持JSON转换。
答案 1 :(得分:79)
web.config中的<appSettings>
标记支持一个文件属性,该属性将使用自己的一组键/值加载外部配置。这些将覆盖您在web.config中的任何设置或添加到它们。
我们通过在安装时修改web.config并使用与安装该站点的环境相匹配的文件属性来利用此功能。我们通过安装程序开关来完成此操作。
例如
<appSettings file=".\EnvironmentSpecificConfigurations\dev.config">
<appSettings file=".\EnvironmentSpecificConfigurations\qa.config">
<appSettings file=".\EnvironmentSpecificConfigurations\production.config">
注意:
答案 2 :(得分:24)
您是否参与过Web部署项目?
如果您不在2008年,还有VS2005的版本。
答案 3 :(得分:12)
我也想知道。这有助于我解决问题
<connectionStrings configSource="connectionStrings.config"/>
然后我保留了connectionStrings.config以及“{host} connectionStrings.config”。这仍然是一个问题,但如果您对两个环境中不同的部分执行此操作,则可以部署和版本化相同的web.config。
(我不使用VS,顺便说一句。)
答案 4 :(得分:6)
我使用NAnt构建脚本部署到我的不同环境。我让它通过XPath修改我的配置文件,具体取决于它们被部署到的位置,然后使用Beyond Compare自动将它们放入该环境。
设置一两分钟,但您只需要执行一次。然后批处理文件接管我去另外一杯咖啡。 :)
Here's我发现的一篇文章。
答案 5 :(得分:4)
在我们有4个环境(开发,测试,登台和生产)的一个项目中,我们开发了一个系统,其中应用程序根据部署的机器名称选择适当的配置。
这对我们有用,因为:
在这种情况下,它对我们很有用,但可能无处不在。
答案 6 :(得分:3)
企业库配置编辑器可以帮助您完成此任务。它允许您创建基本配置文件,然后为每个环境进行增量。然后,您可以合并基本配置和增量,以创建特定于环境的web.config。请查看信息here,它可以让您更好地了解它。
答案 7 :(得分:3)
您还可以将其作为构建后步骤。除了Debug和Release之外,还设置一个“Deploy”的新配置,然后通过正确的web.config进行构建后步骤复制。
我们为所有项目使用自动构建,并且构建脚本更新web.config文件以指向正确的位置。但是,如果你正在做VS的所有事情,这对你没有帮助。
答案 8 :(得分:3)
这是使用machine.config的巨大好处之一。在我上一份工作中,我们有开发,测试和生产环境。我们可以使用machine.config来处理连接字符串(到相应的dev / test / prod SQL机器)。
如果您无法访问实际的生产计算机(例如,如果您在共享主机上使用托管公司),这可能不适合您。
答案 9 :(得分:0)
您还可以使用扩展名“ Configuration Transform”与“ SlowCheetah”相同,