使用企业库时 C# 非托管应用程序崩溃

标签 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 语句。
    这是该类(class)的摘录:
    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].Value=terminal64.exe

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

    信号[1].值=5.0.0.507

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

    信号[2].值=003f5e00

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

    SIG[3].Value=clr.dll

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

    信号[4].值=4.0.30319.237

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

    信号[5].值=4dd2333e

    Sig[6].Name=异常代码

    信号[6].值=c00000fd

    Sig[7].Name=异常偏移

    信号[7].值=000000000007382a**

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

    最佳答案

    我找到了解决这个问题的方法。必须在非托管应用程序文件夹中放置一个 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 可以绑定(bind)程序集并在正确的文件夹中搜索。我不清楚配置文件是否对非托管应用程序也有用。

    谢谢,于尔根

    关于使用企业库时 C# 非托管应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7570614/

    相关文章:

    c# - 在 C# 中使用 CsvHelper 写入文件

    Django 调试工具栏日志记录

    java - google app engine java的应用监控

    java - 为什么公共(public)方法需要记录调用?

    android - Sqlite 数据库 Pragma 的异常?

    ruby-on-rails - 从1.9.1-> 1.9.3开始,将Rails App部署到Heroku时崩溃,不确定由什么组成的日志

    c# - ASP.NET Core 3.1 Web API : can it be self-hosted as Windows service with https and use some certificate like IIS?

    c# - 使用可从 Excel(或非 VFP)读取的 C# 代码创建 .DBF

    c# - Web 界面和 API 之间的差异

    flash - Flash OCX错误使IE6/7崩溃