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

谢谢,尤尔根

相关问题