我有一个从非托管进程加载的C#库DLL。到目前为止一切都很好。现在我想将Enterprise Library 5.0与其日志记录功能结合起来。我添加了这些参考文献:
...以及所有需要的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 :-)异常。 我玩了一下,每次有企业库涉及的实例时都会发生这种崩溃。如果没有使用该库,则不会发生崩溃。这里发生了什么?是因为班级处于不安全的环境中还是其他什么? 提前谢谢。
答案 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