2012-11-29 35 views
2

我有一个托管程序集加载问题源自衍生的混合模式进程。详情请参阅下文。假设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中。


*大会粘结剂日志条目(2012年11月29日@下午4时16分11秒)*

操作失败。绑定结果:hr = 0x80070002。系统不能 找到指定的文件。 C:从加载

大会经理\的Windows \ Microsoft.NET \框架\ v4.0.30319 \ clr.dll下 可执行摹运行:\ TOPSS \ TOPSS新建\ COMMON \服务\ BIN \ PerformanceRunner.exe


===预绑定状态信息===

LOG:用户= CORP \ lbhra

LOG:DisplayName的= TpssCDQ,版本= 1.0.4612.26218文化=中性, 公钥=空(完全指定的)

LOG:应用平台=文件:/// G:/ TOPSS/TOPSS新建/公共/服务/滨/

LOG:初始PrivatePath = NULL

LOG:动态基地= NULL

LOG:高速缓存基址= NULL

LOG:AppName的= PerformanceRunner.exe

调用组件:(未知)。

===

LOG:此绑定默认加载上下文开始。

LOG:找不到应用程序配置文件。

LOG:使用主机配置文件:

LOG:从 C使用计算机配置文件:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ CONFIG \ machine.config中。

LOG:政策没有被在这个时间(私人, 定制,部分,或基于位置的组件绑定)施加到参考。

LOG:试图下载新的URL文件:/// G:/ TOPSS/TOPSS New/Common/Service/Bin/TpssCDQ.DLL。

LOG试图下载新的URL文件:/// G:/ TOPSS/TOPSS New/Common/Service/Bin/TpssCDQ/TpssCDQ.DLL。

LOG:尝试新的URL文件下载:/// G:/ TOPSS/TOPSS 新/通用/服务/斌/ TpssCDQ.EXE。

LOG试图下载新的URL文件:/// G:/ TOPSS/TOPSS New/Common/Service/Bin/TpssCDQ/TpssCDQ.EXE。

LOG:所有探测URL尝试失败。


我不完全理解的PrivatePath,应用平台或DYNAMICBASE是,但不应将这些路径中的至少一个是工作目录(ExecutablePath)?我已验证使用GetCurrentDirectory工作目录设置正确。我真的很感激这个,因为我很困惑。

回答

0

你说得对,它应该在存储可执行文件的根文件夹中查找。它不会查看工作目录 - 但我明白在这种情况下,这些路径是相同的。如果你看看你的错误信息,APPBASE设置正确,所以我认为它在正确的位置看,但没有找到它的其他原因。

http://msdn.microsoft.com/en-us/library/yx7xezcf(v=vs.90).aspx

其他检查事项:

  • 你在你的应用程序/机器的配置文件中的任何组件加载提示?
  • 是否为正确的平台构建了托管DLL?
  • 托管的DLL是否已被重命名 - 文件名是否与清单匹配?
  • 所有托管DLL的依赖项都存储在同一位置吗?

另外,你是如何加载此程序集?它是否列为项目的参考,或者您是否在调用Assembly.Load(或类似的)?