2011-09-27 28 views
1

我有一個從非託管進程加載的C#庫DLL。到目前爲止,一切都很好。現在我想將Enterprise Library 5.0與其日誌記錄功能結合起來。我添加了這些引用:C#使用企業庫時的非託管應用程序崩潰

  • Microsoft.Practices.EnterpriseLibrary.Common.dll
  • Microsoft.Practices.Unity.dll
  • Microsoft.Practices.Unity.Interception.dll
  • Microsoft.Practices.ServiceLocation .dll文件
  • Microsoft.Practices.EnterpriseLibrary.Logging.dll

...和所有所需的using語句。 這裏是從類的摘錄:

using Microsoft.Practices.EnterpriseLibrary.Common; 
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration; 
using Microsoft.Practices.Unity; 
using Microsoft.Practices.Unity.InterceptionExtension; 
using Microsoft.Practices.ServiceLocation; 
using Microsoft.Practices.Unity.Configuration;  

[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode,Pack=2)] 
unsafe public static class DLLDispatch 
{ 
    private static IConfigurationSourceBuilder LoggingBuilder = new ConfigurationSourceBuilder(); 
    ... 
} 

的問題是,當該字段被定義的非託管過程崩潰。如果它被註釋掉,這個崩潰不會發生。這裏是Windows應用程序日誌此崩潰:

**西格[0] =請將.Name應用程序名稱

西格[0] .value的= terminal64.exe

西格[1],請將.Name =應用程序版本

西格[1]。價值= 5.0.0.507

西格[2] =請將.Name程序時間戳

西格[2]。價值= 003f5e00

西格[3]請將.Name =故障模塊名稱

西格[3]。價值= clr.dll

西格[4]請將.Name =故障模塊版本

西格[4]。值= 4.0.30319.237

西格[5]請將.Name =故障模塊時間戳

西格[5]。價值= 4dd2333e

西格[6]請將.Name =抗辯N個碼

西格[6]。價值= C00000FD

西格[7] =請將.Name異常偏移

西格[7]。價值= 000000000007382a **

我搜索網絡爲例外代碼c00000fd,並發現它是一個計算器:-)異常。 我玩過一段時間,每次有企業庫涉及的實例時都會發生此故障。如果沒有使用該庫,那麼就沒有崩潰。這裏發生了什麼?這是否因爲班級處於不安全的環境中,或者還有什麼可能? 在此先感謝。

+0

@比利:對不起,我仍然在這個網站的學習過程。我會保重的。 – Juergen

回答

1

我找到了解決這個問題的辦法。一個人把一個應用程序,配置文件在非託管的應用程序文件夾與此內容:

<?xml version="1.0" encoding="UTF-8" ?> 
<configuration> 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <probing privatePath="Unmanaged application startup folder" /> 
    </assemblyBinding> 
</runtime> 
</configuration> 

有了這些信息,CLR可以綁定組件和搜索正確的文件夾。我不清楚配置文件對非託管應用程序也很有用。

謝謝,尤爾根

相關問題