在我的 Windows Azure 角色 C# 代码中,我执行以下操作:
Assembly.Load( "Microsoft.WindowsAzure.ServiceRuntime" );
and FileNotFoundException
被抛出。问题是存在具有此类名称的程序集,甚至在运行上面的代码之前已加载 - 我在调试器“输出”窗口中看到相应的行,当我这样做时:
AppDomain.CurrentDomain.GetAssemblies().Any(
assembly => assembly.FullName.StartsWith("Microsoft.WindowsAzure.ServiceRuntime"));
结果是true
如果我使用Where()
, then SingleOrDefault()
我得到了相应的参考Assembly
object.
为什么我无法加载程序集Assembly.Load()
?
仅当 Microsoft.WindowsAzure.ServiceRuntime.dll 存储在应用程序的探测路径中时,该 Load() 调用才能成功。默认情况下与您的 EXE 目录相同。问题是,它不存储在那里,而是存储在 GAC 中。
GAC 的目的是充当具有相同名称但不同 [AssemblyVersion]、文化或处理器架构的程序集的存储库。这是您的 Load() 的问题,您没有指定任何问题。 fusion 没有合理的方法可以为您选择一个程序集,它很容易给您错误的程序集。所以即使只有一个可供选择,也没关系。
需要指定完整的 AsssemblyName.FullName。使用项目+添加引用来避免。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)