【问题标题】:Configure web reference VS 2010 for different environments为不同环境配置web参考VS 2010
【发布时间】:2013-01-12 23:26:39
【问题描述】:

我有一个遗留项目,其中有多个 Web 引用,我想根据环境(本地、开发、登台、生产)配置不同的端点。

我读过这个article,但是VS使用Settings.settings和applicationSettings而不是appSettings,所以不是使用

this.Url = System.Configuration.ConfigurationSettings.AppSettings["foo_Api"]

正在使用this.Url = global::foo.Properties.Settings.Default.foo_Api;

我的 app.config 如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="foo.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <applicationSettings>
        <foo.Properties.Settings>
            <setting name="foo_Api" serializeAs="String">
                <value>http://myserver/server/Api.asmx</value>
            </setting>
        </foo.Properties.Settings>
    </applicationSettings>
</configuration>

我已经阅读了有关使用machine.config 进行配置的信息,但这在我的情况下不起作用,因为同一台机器上有不同的环境。在运行时更改 Url 属性也不是最好的解决方案,因为我需要更改 Web 引用的所有用法。

理想情况下,我想使用appSettings,这样我就可以放置一个local.config 来覆盖端点的值,但是如果有一种简单的方法可以覆盖applicationSettings 的值也可以。

编辑

这是一个 dll 项目。不知道会不会有影响。

【问题讨论】:

  • 能否请您澄清您的问题 - Settings.settings 类有什么问题?它只是升级了视觉支持的应用程序配置,具有所有优点。将其更改为旧的应用配置样式有什么问题?
  • 问题是它使用applicationSettings,而我无法使用&lt;applicationSettings file=local.config>之类的东西,因为它与appSettings一起使用

标签: c# asp.net .net .net-4.0 configuration


【解决方案1】:

您可以将外部配置文件包含到您的 applicationSettings 部分,从而允许您针对不同的环境调整配置:

<applicationSettings>
    <foo.Properties.Settings configSource="ConfigFolder\local.config">
    </foo.Properties.Settings>
</applicationSettings>

local.config:

<applicationSettings>
    <foo.Properties.Settings configSource="local.config">
        <setting name="foo_Api" serializeAs="String">
            <value>http://myserver/server/Api.asmx</value>
        </setting>
    </foo.Properties.Settings>
</applicationSettings

【讨论】:

  • 这是一个很好的解决方案,但现在我遇到了另一个问题:configSource 似乎已正确配置为Settings.settings 更新local.config 的更改,但在运行应用程序时,它只是简单忽略local.config 中的任何值。如果GeneratedDefaultValueInCodeTrue,则使用Settings.settings 中的值,否则为null
  • 什么是GeneratedDefaultValueInCode
  • 它是Settings.settings 中网络引用的属性。如果为 true,则将默认值添加到代码中。
  • 所有配置值实际上都存储在 app.config 中,而不是 Settings.settings 中。您应该查看您的 app.config 文件和 local.config 文件。顺便说一句,当您在 VS 中调试您的应用程序时,您应该查看 vshost.exe.config 文件。
  • 最终通过在 Web 应用项目的 Web.config 上添加 applicationSettings 解决了 null 端点的问题。看来dll项目中的app.config没用了。
【解决方案2】:

如果它可以帮助任何人:最后经过一些研究,我发现的最佳解决方案是为每个环境添加一个 Visual Studio 配置文件和一个 Web.config 转换。然后,我只需将本地 Web 引用端点添加到 Web.config,并在每个 Web.{environment}.config 中添加一个替换端点值的转换。

更多信息here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 2021-04-30
    • 2015-07-30
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 2018-06-15
    相关资源
    最近更新 更多