我遇到了源于产生的混合模式进程的托管程序集负载问题。详情见下文。假设 BinPath 和 ExecutablePath 是两个不同的有效路径。
我有一个在 BinPath 中启动的 Web 应用程序,并使用以下 ProcessStartInfo 创建一个进程:
new ProcessStartInfo()
{
FileName = ExecutablePath + "PerformanceRunner.exe",
WorkingDirectory = ExecutablePath ,
UseShellExecute = true
};
PerformanceRunner.exe 然后成功地加载了驻留在 ExecutablePath 中的几个非托管 DLL(这可以通过查看 VS 中的 Modules 窗口来验证)。然后它尝试加载也位于 ExecutablePath 中的托管程序集,但这失败了。这是它的融合日志 - 请注意,BinPath 是“G:\TOPSS\TOPSS New\Common\Service\Bin”,托管程序集是 TPSSCDQ.dll。TPSSCDQ 驻留在 ExecutablePath 中。
*组装活页夹日志条目(11/29/2012 @ 4:16:11 PM)*
操作失败。绑定结果:hr = 0x80070002。该系统找不到指定的文件。
程序集管理器加载自:C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll 在可执行 G:\TOPSS\TOPSS New\Common\Service\Bin\PerformanceRunner.exe 下运行
=== 预绑定状态信息 ===
日志:用户 = CORP\lbhra
日志:DisplayName = TpssCDQ,版本=1.0.4612.26218,文化=中性,PublicKeyToken=null(完全指定)
LOG : Appbase = file:///G:/TOPSS/TOPSS New/Common/Service/Bin/
日志:初始 PrivatePath = NULL
日志:动态基数 = NULL
日志:缓存基础 = NULL
日志:AppName = PerformanceRunner.exe
调用程序集:(未知)。
===
LOG:此绑定在默认加载上下文中开始。
LOG:找不到应用程序配置文件。
LOG:使用主机配置文件:
LOG:使用 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config 中的机器配置文件。
LOG:此时未将策略应用于引用(私有、自定义、部分或基于位置的程序集绑定)。
日志:正在尝试下载新的 URL 文件:///G:/TOPSS/TOPSS New/Common/Service/Bin/TpssCDQ.DLL。
日志:正在尝试下载新的 URL 文件:///G:/TOPSS/TOPSS New/Common/Service/Bin/TpssCDQ/TpssCDQ.DLL。
日志:正在尝试下载新的 URL 文件:///G:/TOPSS/TOPSS New/Common/Service/Bin/TpssCDQ.EXE。
日志:正在尝试下载新的 URL 文件:///G:/TOPSS/TOPSS New/Common/Service/Bin/TpssCDQ/TpssCDQ.EXE。
LOG:所有探测 URL 都已尝试并失败。
我不完全理解 PrivatePath、Appbase 或 Dynamicbase 是什么,但这些路径中的至少一个不应该是工作目录(ExecutablePath)吗?我已经使用 GetCurrentDirectory 验证了工作目录设置正确。我真的很感激这个,因为我很困惑。