首页 > 代码库 > BUG

BUG

一个让我很郁闷的问题。。。  使用Prism  module开发的时候 用目录方式加载 老是提示  Failed to load type for module  XXXXX . 可是跟踪代码什么的 都能看到我的 module对象。很是郁闷。

最后在项目中加入了Prism的源代码才找到原因。

在 Microsoft.Practices.Prism.Modularity.FileModuleTypeLoader(ModuleInfo moduleInfo)中

moduleInfo.Ref 返回的module的路径 是

file:///F:/XXXXX/abc.dll形式的

在Microsoft.Practices.Prism.Modularity.AssemblyResolver.LoadAssemblyFrom(string assemblyFilePath) 中

 Uri assemblyUri = GetFileUri(assemblyFilePath); //得到资源标识符

AssemblyName assemblyName = AssemblyName.GetAssemblyName(assemblyUri.LocalPath);//根据资源的本机地址获取程序集名称

因为assemblyFilePath 是file:///F:/XXXXX/abc.dll形式的,当XXXX有中文路径的时候  assemblyUri.LocalPath就不会返回一个正确的值 所以报错提示 Failed to load type for module  XXXXX
我测试了 如果只是使用F:/XXXXX/abc.dll 创建Uri 没有问题 
很是郁闷  看来以后中文名称路径问题还是需要注意 不过我可以不再中文路径下 但是客户也许会安装在中文路径下 
没办法我重写了下 出问题地方
不清楚还有没有更好的解决办法  希望提供谢谢

 

BUG