代码之家  ›  专栏  ›  技术社区  ›  Anzurio

如何注册要加载的非强名称程序集,就像它在GAC中一样?

  •  6
  • Anzurio  · 技术社区  · 16 年前

    我们的一个合作伙伴向我们提供了一个从应用程序访问所需的程序集。不幸的是,这不是强名称,因此我们无法将其安装到GAC。我们不能把它和可执行文件放在同一个地方。

    有解决办法吗?

    编辑:这只是一个临时的测试解决方案,当它们进入RC时,我们将有一个强名称的程序集。

    4 回复  |  直到 7 年前
        1
  •  5
  •   casperOne    16 年前

    在那一点上你有几个选择。

    第一种方法是将程序集放置在具有 name of the assembly (without the extension) which is a subdirectory of the application directory .

    第二种方法是指定希望clr使用 probing element .

    最后,可以使用 Load methods on the Assembly class 但我想说那是 非常 在这种情况下,如果您有程序集,并且您有想要在其中使用的具体类型,那么这是个坏主意。像这样的后期程序集加载通常在您想要将某些抽象的实现替换为子类时使用,这里似乎不适用。

        2
  •  4
  •   Evalds Urtans    12 年前

    使用反编译和签名的解决方法(使用Visual Studio的开发人员命令提示):

    ildasm.exe /all /typelist /out=DataSystem.il DataSystem.dll
    ilasm.exe /dll /optimize /key=DataSystem.snk DataSystem.il
    

    可以使用Visual Studio IDE将dataSystem.snk生成为文件 http://www.bloggedbychris.com/2011/09/29/signing-a-net-assembly-in-visual-studio/

    那你就可以跑了

    gacutil.exe -i DataSystem.dll
    
        3
  •  0
  •   Anzurio    16 年前

    另一种解决方案是将以下内容添加到machine.config文件中:

    <runtime>
      <developmentMode developerInstallation="true"/>  
    </runtime>
    

    并将devpath=path添加到系统环境变量中。

        4
  •  0
  •   Jack    7 年前

    签署和注册我发现的程序集的最佳和最直接的解决方案是: http://codeingaddiction.blogspot.com/2011/06/how-to-add-strong-name-to-existing-dll_16.html

    对于我来说,为了让它更容易工作,我把CD放到了C:\temp这样的目录中——这对我来说似乎工作得更好,可能是因为在类似的地方文件权限更容易访问。

    推荐文章