为什么我的DLL.config文件不会在某些机器上加载

时间:2012-02-16 17:25:29

标签: c# app-config outlook-addin system.diagnostics traceswitch

我有一个用C#,MyAddin.dll编写的Outlook加载项,它有一个配置文件MyAddin.dll.config。两者都存储在同一目录中。它们放在那里并由安装人员安装。在大多数安装中,查找和读取配置文件没有问题。但是,在一些安装(完全相同的版本,安装等)上,.config永远不会打开。

配置文件内容如下所示......

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
      ...
    </configSections>
    <system.diagnostics>
      <switches>
        <add name="MySwitch" value="4" />
      </switches>
    </system.diagnostics>
</configuration>

我隐式加载这个配置文件,在我的一个类中添加了一个调用...

internal static TraceSwitch myTraceSwitch = 
    new TraceSwitch("MySwitch", "My Trace Level Switch");

就像我说的,这适用于许多安装,但不是少数。我已经运行PROCMON来监视配置文件中的文件事件。在加载文件的系统上,PROCMON会在跟踪中显示它。在没有加载的系统上,PROCMON没有提到配置文件。

为什么我的C#编译应用程序扩展(DLL)会在一个实例中正确加载,但是甚至不会尝试在另一个实例中加载配置文件?或者,您能否提供诊断建议?在哪里等等。

更多信息:加载项编译为“任何CPU”,它安装在Windows 7 x64上。安装了32位版本的Office 2010(Outlook)。所有这些参数对于工作版本和不打开配置文件的版本都适用。

更多信息(2/21/2012):插件是在发布模式下构建的。在VS2008 Project Properties&gt; Build下,选中“Define TRACE constant”。该解决方案面向.NET 3.5 Framework。行为似乎是,此失败的计算机上的System.Diagnostics.TraceSwitch实现与其他计算机上的实现不同。我已经使用进程资源管理器将故障机器与工作机器进行比较,不同之处主要在于故障机器主要是预编译组件,而工作机器则没有。那有关系吗?

1 个答案:

答案 0 :(得分:1)

您能否更明确地告诉您的代码使用ConfigurationChannelFactory查找配置信息?

http://msdn.microsoft.com/en-us/library/dd575430%28v=VS.100%29.aspx