C#: 如何从全局程序集缓存中加载程序集?

12

我在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 命令),并且在所有其他情况下都正常工作,但是我自己无法加载它。

我在这里做错了什么?我有遗漏吗?


1
你尝试过在程序集名称中不加扩展名 ".dll" 吗? 程序集 assembly = Assembly.Load("mycomp.myassembly"); - Vitaliy Liptchinsky
不幸的是,这也没有帮助。 - Artem
2个回答

22

您尝试使用完全限定的程序集名称了吗?(例如:"ycomp.myassembly.dll,版本=1.0.2004.0,文化=neutral,PublicKeyToken=8744b20f8da049e3"


双引号很重要,各位。 - Usman Younas
你使用完整的名称是因为在使用 Assembly.Load(new AssemblyName {...}) 时无法提供公钥吗? - mins

1

尝试简单地使用完整名称进行加载

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

通常我可以加载没有版本、文化和公钥的程序。


我认为需要公钥,没有公钥就会被视为完全不同的程序集。GAC中的所有程序集都有一个公钥。 - erikkallen
你是对的。我脑子一片空白,一直在想着加载本地程序集。 - Sky Sanders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接