我遇到了源自混合模式进程的托管程序集加载问题。请参阅下文了解详情。假设BinPath和ExecutablePath是两个不同的有效路径。
我有一个在BinPath中启动的Web应用程序,并使用以下ProcessStartInfo创建进程:
new ProcessStartInfo()
{
FileName = ExecutablePath + "PerformanceRunner.exe",
WorkingDirectory = ExecutablePath ,
UseShellExecute = true
};
PerformanceRunner.exe然后成功加载驻留在ExecutablePath中的几个非托管DLL(通过查看VS中的“模块”窗口进行验证)。然后,它尝试加载也位于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新\ Common \ Service \ Bin \ PerformanceRunner.exe
===预绑定状态信息===
日志:用户= CORP \ lbhra
日志:DisplayName = TpssCDQ,Version = 1.0.4612.26218,Culture = neutral, PublicKeyToken = null(完全指定)
日志:Appbase = file:/// G:/ TOPSS / TOPSS新/公共/服务/ Bin /
日志:初始PrivatePath = NULL
日志:动态基础=空白
LOG :Cache Base = NULL
日志:AppName = PerformanceRunner.exe
调用程序集:(未知)。
===
日志:此绑定在默认加载上下文中启动。
日志:找不到应用程序配置文件。
日志:使用主机配置文件:
日志:使用来自的计算机配置文件 C:\的Windows \ Microsoft.NET \框架\ v4.0.30319 \ CONFIG \ machine.config中
。日志:此时政策未应用于参考(私人, 自定义,部分或基于位置的程序集绑定)。
日志:尝试下载新的URL文件:/// G:/ TOPSS / TOPSS New / Common / Service / Bin / TpssCDQ.DLL。
日志:尝试下载新的URL文件:/// G:/ TOPSS / TOPSS New / Common / Service / Bin / TpssCDQ / TpssCDQ.DLL。
日志:尝试下载新的网址文件:/// G:/ TOPSS / TOPSS 新/常用/服务/滨/ TpssCDQ.EXE。
日志:尝试下载新的URL文件:/// G:/ TOPSS / TOPSS New / Common / Service / Bin / TpssCDQ / TpssCDQ.EXE。
日志:所有探测网址都已尝试失败。
我不完全了解PrivatePath,Appbase或Dynamicbase是什么,但至少其中一条路径不应该是工作目录(ExecutablePath)?我已经使用GetCurrentDirectory验证了工作目录是否设置正确。我真的很感激这一点,因为我很困惑。
答案 0 :(得分:0)
你是对的,它应该在存储可执行文件的根文件夹中查找。它不会在工作目录中查找 - 但我理解在这个例子中,这些路径是相同的。如果您查看错误消息,APPBASE
设置正确,我认为它正在查找正确的位置,但由于其他原因找不到它。
http://msdn.microsoft.com/en-us/library/yx7xezcf(v=vs.90).aspx
其他要检查的事项:
另外,你是如何加载这个程序集的?它是作为项目的参考列出的,还是您正在调用Assembly.Load(或类似的)?