C# 装配载荷失效
我遇到了一个托管程序集加载问题,该问题源于派生的混合模式进程。详情见下文。假设BinPath和ExecutablePath是两个不同的有效路径 我有一个在BinPath中启动的web应用,并使用以下ProcessStartInfo创建了一个进程:C# 装配载荷失效,c#,c++,process,.net-assembly,mixed-mode,C#,C++,Process,.net Assembly,Mixed Mode,我遇到了一个托管程序集加载问题,该问题源于派生的混合模式进程。详情见下文。假设BinPath和ExecutablePath是两个不同的有效路径 我有一个在BinPath中启动的web应用,并使用以下ProcessStartInfo创建了一个进程: new ProcessStartInfo() { FileName = ExecutablePath + "PerformanceRunner.exe", WorkingDirectory = ExecutablePath ,
new ProcessStartInfo()
{
FileName = ExecutablePath + "PerformanceRunner.exe",
WorkingDirectory = ExecutablePath ,
UseShellExecute = true
};
PerformanceRunner.exe然后成功加载驻留在ExecutablePath中的多个非托管DLL(这通过查看VS中的“模块”窗口进行验证)。然后它尝试加载同样位于ExecutablePath中的托管程序集,但失败。这是此的融合日志-请注意,BinPath是“G:\tops\tops New\Common\Service\Bin”,托管程序集是TPSSCDQ.dll。TPSSCDQ驻留在可执行路径中
*装配活页夹日志条目(2012年11月29日下午4:16:11)* 操作失败。绑定结果:hr=0x80070002。系统不能 查找指定的文件 从以下位置加载程序集管理器: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll运行于 可执行文件G:\TOPSS\TOPSS New\Common\Service\Bin\PerformanceRunner.exe
==预绑定状态信息=== 日志:User=CORP\lbhra 日志:DisplayName=TpssCDQ,版本=1.0.4612.26218,区域性=中性, PublicKeyToken=null(完全指定) 日志:Appbase=file:///G:/TOPSS/TOPSS 新的/通用的/服务的/垃圾桶/ 日志:初始PrivatePath=NULL 日志:动态基数=NULL 日志:缓存基数=NULL 日志:AppName=PerformanceRunner.exe 调用程序集:(未知)。 == LOG:此绑定在默认加载上下文中启动 日志:未找到应用程序配置文件 日志:使用主机配置文件: 日志:使用来自 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config 日志:此时未将策略应用于引用(私有, 自定义、部分或基于位置的部件绑定) 日志:尝试下载新URLfile:///G:/TOPSS/TOPSS 新建/Common/Service/Bin/TpssCDQ.DLL 日志:尝试下载新URLfile:///G:/TOPSS/TOPSS 新建/Common/Service/Bin/TpssCDQ/TpssCDQ.DLL 日志:尝试下载新URLfile:///G:/TOPSS/TOPSS 新建/Common/Service/Bin/TpssCDQ.EXE 日志:尝试下载新URLfile:///G:/TOPSS/TOPSS 新建/Common/Service/Bin/TpssCDQ/TpssCDQ.EXE 日志:所有探测URL都已尝试但失败
我不完全理解PrivatePath、Appbase或Dynamicbase是什么,但这些路径中不应该至少有一个是工作目录(ExecutablePath)吗?我已使用GetCurrentDirectory验证工作目录设置是否正确。我真的很想帮忙,因为我很困惑。你说得对,它应该在存储可执行文件的根文件夹中查找。它不会在工作目录中查找-但我知道在本例中,这些路径是相同的。如果查看错误消息,
APPBASE
设置正确,因此我认为它在正确的位置查找,但由于其他原因找不到它
其他需要检查的事项:
- 在应用程序/机器配置文件中是否有任何程序集加载提示
- 托管DLL是否为正确的平台构建
- 托管DLL是否已重命名?文件名是否与清单匹配
- 所有托管DLL的依赖项是否存储在同一位置