Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 装配载荷失效_C#_C++_Process_.net Assembly_Mixed Mode - Fatal编程技术网

C# 装配载荷失效

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 ,

我遇到了一个托管程序集加载问题,该问题源于派生的混合模式进程。详情见下文。假设BinPath和ExecutablePath是两个不同的有效路径

我有一个在BinPath中启动的web应用,并使用以下ProcessStartInfo创建了一个进程:

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的依赖项是否存储在同一位置
另外,如何加载此程序集?它是作为项目的引用列出的,还是您正在调用Assembly.Load(或类似程序)