我如何从GAC加载程序集?

Rob*_*Rob 3 c# .net-3.5

我正在尝试使用Assembly.Load()来加载GAC中的程序集.例如,假设我要列出PresentationCore.dll中存在的所有类型,我将如何加载PresentationCore.dll

当我尝试这个:

Assembly a = Assembly.Load("PresentationCore.dll");
Run Code Online (Sandbox Code Playgroud)

我得到一个FileNotFoundException.关于SO的另一个答案建议我使用Assembly.LoadFrom()来完成这个 - 我很犹豫,因为根据Visual Studio 2008,不推荐使用Assembly.LoadFrom() - 而且它似乎并没有真正起作用.

有任何想法吗?

And*_*are 11

如果程序集在GAC中,则必须通过其完全限定名称加载它.

例如,如果我想加载,mscorlib.dll我会做这样的事情:

Assembly a = Assembly.Load
    ("mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
Run Code Online (Sandbox Code Playgroud)

确定程序集的完全限定名称的最简单方法是在Reflector中加载程序集,并使用下部显示窗格中的Name字段,如下所示:

http://i42.tinypic.com/2m30ocn.png


And*_*ndy 5

您需要将程序集的名称传递给Assembly.Load(),而不是DLL的名称.如果在Reflector中打开DLL,则名称应位于窗口的底部.在PresentationCore.dll的情况下,名称应该是类似的PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.

  • +1好点 - 它是程序集的逻辑名称 - 而不是物理文件名 - 这是必需的 (2认同)