【发布时间】:2011-09-27 14:14:04
【问题描述】:
我有一个从非托管进程加载的 C# 库 DLL。到目前为止一切都很好。现在我想将 Enterprise Library 5.0 与其日志记录功能结合起来。我添加了这些参考:
- 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 应用程序日志:
**Sig[0].Name=应用程序名称
Sig[0].Value=terminal64.exe
Sig[1].Name=应用程序版本
Sig[1].Value=5.0.0.507
Sig[2].Name=应用程序时间戳
Sig[2].Value=003f5e00
Sig[3].Name=故障模块名称
Sig[3].Value=clr.dll
Sig[4].Name=故障模块版本
Sig[4].Value=4.0.30319.237
Sig[5].Name=故障模块时间戳
Sig[5].Value=4dd2333e
Sig[6].Name=异常代码
Sig[6].Value=c00000fd
Sig[7].Name=异常偏移量
Sig[7].Value=000000000007382a**
我在网上搜索了异常代码 c00000fd,发现它是一个 stackoverflow :-) 异常。 我玩了一下,每次企业库中涉及一个实例时都会发生这种崩溃。如果没有使用该库,则不会发生崩溃。这里发生了什么?是因为该类处于不安全的上下文中还是还有什么? 提前致谢。
【问题讨论】:
-
@Billy:对不起,我还在学习这个网站。我会照顾的。
标签: c# logging crash enterprise-library stack-overflow