COM +组件无法从静态上下文中读取配置

时间:2011-01-19 21:34:36

标签: c# configuration com+

我有2个用C#构建的COM +应用程序。他们需要访问配置,因此为了获取它们(因为它们位于服务器上下文中),我将COM +应用程序中的应用程序根目录设置为包含application.manifest和application.config文件的目录。我用这种方式构建的第一个组件有效。第二个组件,我在编写它的方式上找不到任何有意义的差异,但却没有。

如果您尝试从静态上下文使用ConfigurationManager.GetSection("unity")访问配置,它将返回null。从非静态上下文调用相同的东西会产生预期的结果(返回该部分)。由于第一个组件正确地从静态上下文调用它,我做错了什么?

在DLL 1中工作,但不在DLL 2中工作:

private static IUnityContainer m_unityContainer = new UnityContainer().LoadConfiguration()

在DLL 2中运行:

private IUnityContainer m_unityContainer = new UnityContainer().LoadConfiguration()

private IUnityContainer m_unityContainer; public void Process() { m_unityContainer = new UnityContainer().LoadConfiguration(); }

2 个答案:

答案 0 :(得分:0)

我不确定,但我认为这与x64和x86的差异有关。我通过将代码更改为

来解决它
private static readonly Lazy<IUnityContainer> m_unityContainer = new Lazy<IUnityContainer>(() => new UnityContainer().LoadConfiguration());

答案 1 :(得分:0)

在我的COM +程序集中读取配置文件时遇到了类似的问题。

对我有用的是什么:

1)同时,application.config文件和application.manifest需要与程序集位于同一文件夹中(在我的案例中是调试文件夹)。

2)需要在COM +应用程序的“激活”选项卡中指定应用程序根目录。运行组件服务,右键单击“属性”,转到“激活”选项卡。也可以使用regsvcs / appdir:option。

执行此操作