代码之家  ›  专栏  ›  技术社区  ›  omatase

.Net在哪里查找我的配置文件?

  •  1
  • omatase  · 技术社区  · 14 年前

    我有一个WCF ASP.Net 4.0web服务,我们称之为“web service”。WebService正在使用一个类库程序集,我们称之为“WebService class library”。WebServiceClassLibrary正在引用另一个类库程序集(“ExternalClassLibrary”)。ExternalClassLibrary是为使用配置文件而构建的。它使用此文件来了解在运行时将在何处发送一些HTTP帖子。我遇到了一个问题,无论我把ExternalClassLibrary的配置部分放在哪里,它似乎都在使用默认配置(当它在运行时找不到配置文件时,这是我所期望的行为)。

    有人能告诉我如何确定我需要把这个覆盖配置信息放在哪里吗?我曾试图使用SysInternals的进程监视器来查看失败的文件系统读取尝试,但它只显示了两个可能的地方来重写配置,而这两个地方都没有成功。

    谢谢你!

    --更新,这是我试图加载的XML文件的内容--

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
            <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
                <section name="MyAppName.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
            </sectionGroup>
        </configSections>
        <applicationSettings>
            <MyAppName.Properties.Settings>
                <setting name="APIURL" serializeAs="String">
                    <value>http://servername/default.html</value>
                </setting>
                <setting name="APIAPPINI" serializeAs="String">
                    <value>app.ini</value>
                </setting>
                <setting name="ApiUrlRoot" serializeAs="String">
                    <value>https://www.domain.com/company[instance]test/index.htm</value>
                </setting>
                <setting name="ApiInstances" serializeAs="Xml">
                    <value>
                        <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                            <string>usa</string>
                            <string>eu</string>
                            <string>asia</string>
                            <string>lat</string>
                            <string>jpn</string>
                        </ArrayOfString>
                    </value>
                </setting>
                <setting name="ApiKey" serializeAs="String">
                    <value>password</value>
                </setting>
                <setting name="ApiUrlRoot" serializeAs="String">
                    <value>http://site[instance].domain.com/</value>
                </setting>
                <setting name="ProductId" serializeAs="String">
                    <value>12345</value>
                </setting>
            </MyAppName.Properties.Settings>
        </applicationSettings>
    </configuration>
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   anivas    14 年前

    ExternalClassLibrary应将配置加载为

    ConfigurationManager.OpenExeConfiguration("ExternalClassLibrary.dll.config"); 
    

    默认情况下,.Net配置管理器只加载主进程配置(exe.config/web.config),使用dll.config的任何dll都应显式加载。

        2
  •  1
  •   omatase    14 年前

    我试图通过在 web.config文件。。。

    在.Net中,当使用程序集时,框架将查找使用程序集的配置文件中的配置。所以这就是问题的答案。这是我过去学习放置程序集配置信息的地方,但在本例中,此方法似乎使我失败。

    密码是这样的:

    Properties.Settings.Default.Properties["ApiUrlRoot"].DefaultValue;
    

    我在开发过程中没有意识到会是这样。在索引属性时,我必须反复尝试以获取值,而不是用标准强类型的方法读取值:

    Properties.Settings.Default.ApiUrlRoot;
    

    Properties.Settings.Default.PropertyValues["ApiUrlRoot"].PropertyValue;