sha*_*oth 5 .net c# reflection azure
在我的Windows Azure角色C#代码中,我执行以下操作:
Assembly.Load( "Microsoft.WindowsAzure.ServiceRuntime" );
Run Code Online (Sandbox Code Playgroud)
而FileNotFoundException被抛出.问题是存在这样的名称的程序集,甚至在上面的代码运行之前加载 - 我在调试器"输出"窗口中看到相应的行,当我这样做时:
AppDomain.CurrentDomain.GetAssemblies().Any(
assembly => assembly.FullName.StartsWith("Microsoft.WindowsAzure.ServiceRuntime"));
Run Code Online (Sandbox Code Playgroud)
结果是true,如果我使用Where(),那么SingleOrDefault()我得到一个相应的Assembly对象的引用.
为什么我不能加载程序集Assembly.Load()?
仅当 Microsoft.WindowsAzure.ServiceRuntime.dll 存储在应用程序的探测路径中时,该 Load() 调用才能成功。默认情况下与您的 EXE 目录相同。问题是,它不存储在那里,而是存储在 GAC 中。
GAC 的目的是充当具有相同名称但不同 [AssemblyVersion]、文化或处理器架构的程序集的存储库。这是您的 Load() 的问题,您没有指定任何问题。fusion 没有合理的方法可以为您选择一个程序集,它很容易给您错误的程序集。所以即使只有一个可供选择,也没关系。
需要指定完整的 AsssemblyName.FullName。使用项目+添加引用来避免。