我有一个托管 DLL,它在内部引用了几个非托管 DLL。添加此托管 DLL 作为对我的 WCF 服务项目的引用。但是,必须手动将非托管 DLL 复制到我的项目的构建输出路径中。它们不能在 Visual Studio 中引用。
如果我尝试在 Visual Studio 的 WCF 服务主机中运行我的服务 DLL,后者会崩溃而没有任何异常并自动重新启动。如果我尝试在 IIS 中托管服务 DLL,则适用示例。尝试在 IIS 中托管时,我能够捕获 WERReportMetadata 崩溃日志之一,并且 ProblemSignatures 说:
<ProblemSignatures>
<EventType>CLR20r3</EventType>
<Parameter0>webdev.webserver40.exe</Parameter0>
<Parameter1>10.0.0.0</Parameter1>
<Parameter2>4d5f345a</Parameter2>
<Parameter3>GTAPIASM</Parameter3>
<Parameter4>2.0.5.0</Parameter4>
<Parameter5>4e9254a5</Parameter5>
<Parameter6>166</Parameter6>
<Parameter7>23</Parameter7>
<Parameter8>System.AccessViolationException</Parameter8>
</ProblemSignatures>
这是什么意思,我能做些什么呢?任何有关使用非托管 DLL 托管 WCF 的参考资料也将很有用。
编辑 1: 将非托管 DLL 复制到 %systemroot%\syswow64 允许我使用 Visual Studio WCF 服务主机托管我的服务。我从这里得到了小费。但是,这并不能阻止 WebDev.WebDServer40.exe 崩溃。
编辑 2 这是从事件查看器捕获的 .NET 运行时错误:
应用程序:WebDev.WebServer40.exe 框架版本:v4.0.30319 描述:进程因未处理的异常而终止。异常信息:System.TypeInitializationException 堆栈:在 System.RuntimeMethodHandle._InvokeConstructor(System.IRuntimeMethodInfo, System.Object[], System.SignatureStruct ByRef, System.RuntimeType) 在 System.RuntimeMethodHandle.InvokeConstructor(System.IRuntimeMethodInfo, System.Object[] , System.SignatureStruct, System.RuntimeType) 在 System.Reflection.RuntimeConstructorInfo.Invoke(System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo) 在 System.ServiceModel.Description.ServiceDescription .CreateImplementation(System.Type) 在 System.ServiceModel.Description.ServiceDescription.SetupSingleton(System.ServiceModel.Description。
编辑2:
原来我必须始终以管理员身份运行 Visual Studio。这消除了之前的错误。
谢谢。