问题描述
我创建了一个带有 WCF 服务的 .NET Framework 4.7.2 网站。要通过此服务公开数据,我必须从 C:\InstallLocation 引用具有 copy Local = False 的第三方 DLL。该网站正在运行时加载此 DLL,但在访问 DLL 中的功能时出现错误,该功能需要它在同一 InstallLocation 文件夹中加载辅助 DLL。我与 Process Monitor 确认 W3WP.exe 正在 C:\InstallLocation 中找到主 DLL,但 W3WP.exe 根本无法在 C:\InstallLocation 中查找辅助 DLL。应用程序错误是预期的,
无法加载文件或程序集“[assembly-info-ommitted]”或其依赖项之一。系统找不到指定的文件。
我还在控制台应用程序中测试了完全相同类型的引用,该应用程序正常工作。进程监视器显示了在 C:\InstallLocation 中查找辅助 DLL 的可执行文件。
有没有办法配置 .NET Web 应用程序以允许进程在与引用的主 DLL 相同的目录中查找?我尝试了以下但没有(完全)成功:
- 将 C:\InstallLocation 添加到我的系统路径(并重新启动)。好像没什么影响。我在应用程序启动时验证添加的路径确实出现在 Environment.GetEnvironmentvariable("PATH") 中。
- 将 C:\InstallLocation 移动到我的网络根目录并尝试
- 将 C:\InstallLocation 移动到 bin 文件夹并注释掉 .与上述结果相同。
- 授予应用程序池用户对 C:\InstallLocation 的完全权限。用户:IIS APPPOOL\{网站名称}、IUSR、IIS_IUSRS
编辑
我已经实现了一个初始化程序,如下所示,https://stackoverflow.com/a/16867088/2544926。我已更改代码以检查 C:\InstallLocation 中是否存在 DLL 以从该文件夹加载 DLL。从 Process Monitor 的输出来看,这似乎让我更接近了。但是,我在此过程的后期看到了一个错误。这是我现在看到的错误(多级异常)。
“
在导致 C++ 模块无法加载的主要异常之后发生嵌套异常。
“
在 vtable 初始化期间无法加载 C++ 模块。
无法加载文件或程序集“XYZ,版本=N.N.N.N.N,Culture=neutral,PublicKeyToken=NNNNNNNNN”或其依赖项之一。系统找不到指定的文件。
有趣的是,在我的自定义程序集初始化程序代码中,我看到从 C:\InstallLocation 加载了 XYZ.DLL。此 C++ 模块是否可能尝试以不同方式加载它或以 ASP.NET 不支持的方式加载它?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)