【问题标题】:C#: How to load assembly from GAC?C#:如何从 GAC 加载程序集?
【发布时间】:2010-02-17 08:55:38
【问题描述】:

我在 GAC 中有“mycomp.myassembly.dll”,但 Load 和 LoadFrom 抛出文件未找到异常,并且 LoadWithPartialName 返回 null。我正在执行以下操作:

    AssemblyName name = new AssemblyName();
    name.Name = "mycomp.myassembly.dll";

    Assembly assembly = Assembly.Load(name);

mycomp.myassembly.dll 文件的 FileNotFound 失败,并且

    Assembly assembly = Assembly.Load("mycomp.myassembly.dll");

以完全相同的消息失败。

我仔细检查了程序集是否在 GAC 中(甚至再次为它做了 gacutil /if),它在所有其他情况下都有效,我只是无法自己加载它。

我在这里做错了什么? 我错过了什么吗?

【问题讨论】:

  • 您是否尝试过提供不带扩展名“.dll”的程序集名称?程序集程序集 = Assembly.Load("mycomp.myassembly");
  • 很遗憾也没有帮助

标签: c# .net assemblies gac


【解决方案1】:

您是否尝试过使用完全限定的程序集名称? (例如"ycomp.myassembly.dll, Version=1.0.2004.0, Culture=neutral, PublicKeyToken=8744b20f8da049e3")

【讨论】:

  • 双引号很重要。
  • 要完整...您是否使用全名,因为使用Assembly.Load(new AssemblyName {...})时无法提供公钥?
【解决方案2】:

试试loading with the full name

 // You must supply a valid fully qualified assembly name.            
        Assembly SampleAssembly = Assembly.Load
            ("SampleAssembly, Version=1.0.2004.0, Culture=neutral, PublicKeyToken=8744b20f8da049e3");

我通常可以在没有版本、文化和公钥的情况下加载。

【讨论】:

  • 我认为需要公钥,如果没有公钥,它将被视为完全不同的程序集。 GAC 中的所有程序集都有一个公钥。
  • 你是对的。我脑子里放屁,想加载本地程序集
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
相关资源
最近更新 更多