多个ASP.NET配置文件

3
我发现了一些关于在Web部署中使用多个ASP.NET配置文件的信息,但我仍然不确定是否能实现我想要的目标。
基本上,我正在处理的网站可以部署到三个不同的站点。根据部署到的站点,需要更改配置设置。我想做的是为每个可能的配置(完整的web.config文件)创建配置文件,然后能够告诉部署构建使用哪个配置文件进行特定的部署(如果必要,我可以手动编辑此内容)。
是否有像指向不同的.config文件这样简单的方法,还是我需要做更复杂的事情?
编辑:我特别担心的是,我还需要在系统.net中设置邮件设置等设置。因此,我不仅要覆盖appSettings。
谢谢
3个回答

4

任何配置部分 - 比如 <smtp> - 都可以“外部化”,例如存储在外部文件中。

除了 <appSettings> 上的 file= 语句(仅适用于应用程序设置 :-(),它不是“额外”的设置 - 您只需将配置系统指向外部文件即可。

因此,您可以在您的 app.config/web.config 中拥有以下内容:

  <system.net>
    <mailSettings>
      <smtp configSource="smtp.test.config" />
    </mailSettings>
  </system.net>

并且在您的smtp.test.config文件中添加以下内容:

<?xml version="1.0" encoding="utf-8" ?>
<smtp>
  <network host="smtp.test.com" port="244" userName="test" password="secret" />
  <specifiedPickupDirectory pickupDirectoryLocation="C:\temp\mails"/>
</smtp>

这在.NET 2.0(甚至1.x)中有效,适用于每个配置部分,但不适用于配置部分组,如<system.web>
当然,您现在可以创建其他配置文件,例如smtp.staging.config等,现在您的问题已减少到替换web.config中的单行。
您可以使用安装脚本、XML预处理器或人工干预来实现这一点。
它并不能完全解决问题,因为.NET 4和web.config变换有望实现,但这是一个步骤和一点帮助。

好的。我认为这可能是解决方案(感谢您的验证)。我希望我只需要两个完整的配置文件,然后可以告诉构建或其他什么东西使用哪一个。 - JasCav
你可以在Visual Studio或MSBuild环境中定义后构建步骤,将适当的配置文件复制到输出目录。 - marc_s
@marc_s - 我遇到了一个(小)问题。我收到了一个警告:“未声明'smtp'元素。”并且这是在外部文件中发生的。您有什么想法或建议,为什么会发生这种情况? - JasCav
@Jason:那只是Visual Studio的智能感知功能还不够完善。VS并不完全知道如何处理这些“部分”配置文件。但它确实可以工作! - marc_s
@marc_s - 是的。 :-) 我看到它起作用了。我只是不喜欢在我的项目中有警告。嗯,好吧,我想我对此无能为力。不过还是非常感谢你的帮助! - JasCav

1
在您的主要web.config文件中,向appSettings添加以下属性。
<appSettings file="Web.site1.config">

然后,asp.net将把这两个文件视为一个文件。您可以编辑web.config以便根据站点包含不同的外部文件。


好的,这是我开始的内容。但是,我还需要其他设置,例如system.net中的SMTP设置。这个解决方案是否考虑到了这一点?(我更新了我的问题以反映这一点。) - JasCav
请查看此处:https://dev59.com/1XRA5IYBdhLWcg3w2xsI - pvieira
很遗憾,这仅适用于<appSettings>。其他配置部分不支持此功能。 - marc_s

0
你可以在 .Net Framework 4 中完成这个操作。ScottGu 在他最近在瑞典的演讲中展示了一个快速演示。在他的例子中,他有不同的环境,如 staging、production 等,每个文件都可能有不同的内容。

很高兴听到这个消息。然而,我仍然在使用.NET 2,并且在可预见的未来不会升级。 - JasCav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接