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

.NET配置管理器app.config混淆

  •  5
  • scope_creep  · 技术社区  · 16 年前

    我有一个app.config文件,其中包含以下内容

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
            <section name ="PowershellSnapIns" type ="System.Configuration.DictionarySectionHandler,System"/>
        </configSections>
    
        <PowershellSnapIns>
            <add key="SnapIn1" value="WebAdministration" />
            <add key="SnapIn2" value="Jimmy Hendrix" />
            <add key="SnapIn3" value="..." />
        </PowershellSnapIns>
    </configuration>
    

    我本来打算使用configurationsettings类来读取它,但这已经被否决了。使用起来相当简单。现在我必须使用configurationmanager类,现在我有了这个代码来读取它。

     System.Configuration.Configuration config =
         ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    
    IDictionary SnapInList = (IDictionary) config.GetSection("PowershellSnapIns");
    

    但它总是出错。我更改了app.config属性以复制到构建中,但它始终接受找不到该文件。例外情况是它正在寻找 TestConsole.vshost.exe.config . vs2k8sp1现在是否自动为您重命名app.config,如果是,我做错了什么?当然,我不需要重命名app.config文件来调试vhost。我知道它可能会被重新命名 TestConsole.exe.config . 怎么了?是代码错误还是什么?

    2 回复  |  直到 16 年前
        1
  •  12
  •   Graviton    16 年前

    我是这样做的:

    -确保 System System.Configuration.dll 在您的bin目录中。通过添加对两个DLL的引用并设置它们的 copy local 属性到 true .

    -确保在您的 App.Config 文件,设置 本地复制 属性到 false .

    -使用以下方法:

    public static string XMLCheck
    {
        get
        {
            var section =(Hashtable)ConfigurationManager.GetSection("PowershellSnapIns");
            return (string)section["SnapIn1"];
    
        }
    }
    

    - XMLCheck 应该回归“ WebAdministration 他说:“这是一个很好的选择。”

        2
  •  1
  •   jkelley    16 年前

    vs将app.config重命名为yourappname.exe,并将其与.exe一起放在bin目录中。

    你能确认这个文件和你的exe一起存在于bin目录中吗?