我有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();
}
答案 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。
执行此操作