GetReferencedAssemblies不返回所有程序集

Pro*_*ofK 27 .net reflection

我在Form中有以下代码,并且我试图找到一种方法来加载由被调用的表单引用的项目程序集DataObjects.使用以下代码,我只列出了六个程序集.查看表单所涉及的项目的引用,有十三个程序集引用.这有什么不对?

private void ListReferencedAssemblies()
{
    var assemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies();
    foreach (var assembly in assemblies)
    {
        referencesListBox.Items.Add(assembly.Name);
    }
} 
Run Code Online (Sandbox Code Playgroud)

And*_*nov 33

你能检查一下程序集的清单,看看这里引用了什么吗?

如果不使用C#编译器,则往往会从清单中删除引用的程序集.因此,如果您没有引用程序集B中的任何类型或仅引用程序集B中的常量(由编译器内联),那么您将不会有此引用.

  • 有没有办法强制加载'未使用'的程序集? (9认同)
  • 我相信你(我现在正在遇到同样的问题),但你碰巧有一个来源吗? (2认同)
  • @AndreyTaptunov:“或编写一些虚拟代码” - 不幸的是,只有在程序集包含任何公共类型时才可能实现。 (2认同)

Ric*_*ard 7

编译器不会在输出程序集中包含未在代码中实际使用的程序集引用.

只有在代码中使用的程序集才会在输出程序集中引用.

  • “实际上并未在代码中使用” - 我认为这应该以不同的方式编写。当我调用的东西依赖于通过反射(在我的例子中,通过 MEF)发现的类型的存在时,这些类型*被*使用。也就是说,如果编译器没有删除引用从而使我的应用程序崩溃,它们将被使用。 (2认同)
  • 如果引用是通过反射“使用”的,那真的很痛苦。 (2认同)