使用Enterprise Library时C#未受管应用程序崩溃

时间:2011-09-27 14:14:05

标签: c# logging crash enterprise-library stack-overflow

我有一个从非托管进程加载的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 =申请名称

西格[0]。价值= terminal64.exe

Sig [1] .Name =应用程序版本

西格[1]。价值= 5.0.0.507

Sig [2] .Name =应用程序时间戳

西格[2]。价值= 003f5e00

Sig [3] .Name =故障模块名称

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

Sig [4] .Name =故障模块版本

西格[4]。价值= 4.0.30319.237

Sig [5] .Name =故障模块时间戳

西格[5]。价值= 4dd2333e

Sig [6] .Name =例外代码

西格[6]。价值= C00000FD

Sig [7] .Name = Exception Offset

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

我在网上搜索了异常代码 c00000fd ,发现它是一个stackoverflow :-)异常。 我玩了一下,每次有企业库涉及的实例时都会发生这种崩溃。如果没有使用该库,则不会发生崩溃。这里发生了什么?是因为班级处于不安全的环境中还是其他什么? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我找到了解决这个问题的方法。必须将app-config文件放在具有以下内容的非托管应用程序文件夹中:

<?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可以在正确的文件夹中绑定程序集和搜索。我不清楚配置文件对非托管应用程序也很有用。

谢谢,Juergen