【发布时间】:2011-12-21 05:29:09
【问题描述】:
我有一个 WCF 服务,其中包含一些 C# 代码,它引用了一个 C++/CLI dll,它引用了一些本机 DLL。我在我的 IIS 应用程序的 bin 文件夹中包含所有必要的 DLL,但是当 IIS 加载托管 DLL 时,它似乎将它们复制到一个深层目录,例如:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\testwcf\73473be6\e625098c\assembly\dl3\aada7c33\85a7332b_2f9acc01
它将每个托管 DLL 复制到自己的目录并加载它。当它到达我的 C++/CLI DLL 时,它会将其复制到上述目录中,然后无法加载依赖项。如果我手动将所有本机 DLL 复制到此文件夹中,它将运行,但这不是一个很好的解决方案。
我的 web.config 是 VS 创建的常用配置,其端点基于 MSDN 文章定义。
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<services>
<service name="WcfService.Service1">
<endpoint address=""
binding="wsHttpBinding"
contract="WcfService.IService1" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
如何让这些 DLL 被自动提取?
【问题讨论】:
-
web.config 的内容将有助于更好地理解它
-
是的,看不出有什么问题,您的 AppPool 是否启用了 32 位?您可以在 IIS\Application Pools 下找到您的应用程序池,然后选择一个您正在运行 Web 应用程序的应用程序池
-
所有 DLL 都编译为 x64,问题与此无关。当我将它们放在 ASP.NET 创建的托管 DLL 旁边时,它们可以正常加载。我只需要 ASP.NET 从加载所有托管 DLL 的 bin 目录中获取它们。