如何确定是从app.config还是machine.config加载配置节或元素?

时间:2012-05-16 20:38:38

标签: c# .net c#-4.0 .net-4.0 config

我正在从配置中加载绑定部分,如此

var bingingsSection = BindingsSection.GetSection(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None));

如何确定加载的配置元素是来自本地应用程序配置文件还是来自machine.config?

2 个答案:

答案 0 :(得分:3)

使用属性bindingsSection.EvaluationContext.IsMachineLevel。

EvaluationContext.IsMachineLevel也可用于ConfigurationElements,以便您可以为每个配置值确定它。

答案 1 :(得分:1)

我自己找到了正确答案。

我需要检查ElementInformation.Source属性。

给出以下配置:

<?xml version="1.0"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <netTcpBinding>
                <binding maxReceivedMessageSize="1000000"/>
            </netTcpBinding>
        </bindings>
    </system.serviceModel>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    </startup>
</configuration>

以下申请

using System;
using System.Configuration;
using System.ServiceModel.Configuration;

namespace ConsoleApplication49
{
    class Program
    {
        static void Main(string[] args)
        {
            var config          = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            var bingingsSection = BindingsSection.GetSection(config);

            string netTcpSource    = bingingsSection.NetTcpBinding.ElementInformation.Source;
            string basicHttpSource = bingingsSection.BasicHttpBinding.ElementInformation.Source;

            Console.WriteLine("Net TCP Binding came from \"{0}\"", netTcpSource);
            Console.WriteLine("Basic HTTP Binding came from \"{0}\"", basicHttpSource);
        }
    }
}

产生输出:

Net TCP Binding came from "c:\users\Jim\documents\visual studio 2010\Projects\ConsoleApplication49\ConsoleApplication49\bin\Debug\ConsoleApplication49.exe.Config"
Basic HTTP Binding came from ""
Press any key to continue . . .

因为您可以看到我本地可执行文件中定义的元素app.config显示了配置路径,但是,我引用的元素未在我本地可执行文件的app.config中指定一个空白字符串。大概是因为它是默认值。