2011-01-19 71 views
1

我有2個使用C#構建的COM +應用程序。他們需要訪問配置,因此爲了獲得它們(因爲它們在服務器上下文中),我將COM +應用程序中的Application Root Directory設置爲包含application.manifest和application.config文件的目錄。我以這種方式構建的第一個組件是有效的第二個組成部分,我沒有在我寫的方式中找到一個有意義的差異,但沒有。COM +組件不能從靜態環境中讀取配置

如果您嘗試從靜態上下文中使用ConfigurationManager.GetSection("unity")訪問配置,它將返回空值。從非靜態的上下文中調用相同的東西會產生預期的結果(該部分被返回)。由於第一個組件可以正確地從靜態上下文中調用它,所以我做錯了什麼?

工程在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

I」米不確定,但我認爲這與x64和x86的差異有關。我通過更改代碼來解決問題

private static readonly Lazy<IUnityContainer> m_unityContainer = new Lazy<IUnityContainer>(() => new UnityContainer().LoadConfiguration()); 
0

在我的COM +程序集中讀取配置文件時出現類似問題。

什麼工作對我來說:

1)無論是application.config文件和application.manifest需要在同一文件夾中的組件(在我的情況debug文件夾)。

2)應用程序根目錄需要在COM +應用程序的激活選項卡中指定。運行組件服務,右鍵單擊屬性,轉到激活選項卡。也可以使用regsvcs/appdir:選項來執行此操作。