C# 当程序集包含引用另一个程序集的类型时使用反射

C# 当程序集包含引用另一个程序集的类型时使用反射,c#,C#,我从以下代码中获取ReflectionTypeLoadException: var myAssembly = Assembly.LoadFrom(myDLL); var types = myAssembly.GetTypes()) myDLL引用其他程序集中另一个文件中的类(“myDependency.dll”) 我确保该文件位于应用程序目录中,并且与“myDLL”文件位于同一文件夹中 在这种情况下如何正确加载myDLL?我会尝试调用: AssemblyName[] reference

我从以下代码中获取ReflectionTypeLoadException:

var myAssembly = Assembly.LoadFrom(myDLL);    
var types = myAssembly.GetTypes())
myDLL引用其他程序集中另一个文件中的类(“myDependency.dll”)
我确保该文件位于应用程序目录中,并且与“myDLL”文件位于同一文件夹中

在这种情况下如何正确加载myDLL?

我会尝试调用:

AssemblyName[] referenced = myAssembly.GetReferencedAssemblies();
然后在调用
myAssembly.GetTypes()之前,迭代AssemblyName对象并尝试加载这些对象

  • 确保所有程序集(DLL和exe包括引用的程序集)都是最新的(平台、配置和版本/构建日期)并且位于exe目录中

    尝试在构建之前删除所有项目的OBJ和BIN目录,以帮助验证这一点

  • 确保GAC中没有其他版本,或者%PATH%中没有目录


  • 好吧,我很自豪地宣布,我已经在VisualStudio2010(我猜)引起的一些愚蠢的“眼睛持久性”现象上破坏了我的周五晚上。我只是将我的DependencyDLL项目复制粘贴到一个全新的程序集/项目中,删除了旧的程序集/项目,更新了旧的引用以指向新的DependencyDLLNew,瞧,这就成功了。问题解决了。感谢那些提供帮助的人。

    可能在
    AppDomain.CurrentDomain.AssemblyResolve
    事件中加载未解析的程序集会有帮助您确定异常是由对外部dll的引用引起的吗?它可能是由过期的dll引起的@KendallFrey:是的,我做了一些安全检查:首先,当对依赖项的引用在重新编译myDLL之前被抑制时,我没有得到任何错误。其次,我删除了所有myDependency.dll和myDLL文件,并重建和清理了项目,确保所有内容都是新的和正确的位置。。听起来很奇怪:引用的AssemblyName[]的调试/监视确实显示了“myDependency”。。。我不知道该怎么想我很困惑。特别是我重试并从我的DLL中删除了myDependency的引用(实际上是接口实现),它工作得很好。只是为了确保这确实是导致问题的原因:-/如何才能获得异常“无法加载文件或程序集'myDependency,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null'或其某个依赖项。系统找不到指定的文件。”虽然我可以在.GetReferencedAssembly()输出中看到它,但是,正如您所说,通过迭代myAssembly.getReferenceAssemblys()输出,我能够从assemblyName加载可能出现故障的依赖项DLL。它只是吹向GetTypes()。太奇怪了……您可能可以在myDependency上调用AssemblyName.CodeBase getter来查看找到它的位置,然后查看该位置是否属于此处描述的加载上下文。本页似乎建议您可以尝试Assembly.Load作为默认上下文,而不是LoadFrom,其中包括Loader未搜索的位置感谢您的支持,它帮助我了解了一些事情。我终于找到了一个解决办法,调整了程序集引用(见我自己的答案),当我被邀请去酒吧时,我本应该和同事一起去的。“不,只是一个小问题需要解决,我要走了。不会花太长时间的。”。现在已经过了午夜。叹息