26

我想签署 dll 的原因是因为我想将它添加到全局程序集缓存中。该程序集是一个用 Java 编写并移植到 J# 的 css 解析引擎。我使用 VS2008,所以我无法制作 J# 项目。它没有分配给它的强名称键,我不知道现在它已经构建了怎么做。

有人有想法么?

4

5 回答 5

47

经过一番搜索,我发现这篇文章解释了一种方法。

摘录:

在 VS.NET 命令提示符下,输入以下内容:

  1. 生成密钥文件: sn -k keyPair.snk
  2. 获取提供的程序集的 MSIL: ildasm providedAssembly.dll /out:providedAssembly.il
  3. 重命名/移动原始程序集: ren providedAssembly.dll providedAssembly.dll.orig
  4. 从 MSIL 输出和您的程序集 KeyFile 创建一个新程序集: ilasm providedAssembly.il /dll /key=keyPair.snk
于 2009-09-04T15:39:38.267 回答
19

第 1 步:拆卸组件

ildasm myTest.dll /out:myTest.il 

第 2 步:使用您的强名称密钥重新组装

ilasm myTest.il /res:myTest.res /dll /key:myTest.snk /out:myTestSN.dll 

您可以使用以下命令进行验证:

sn -vf myTestSN.dll

希望这可以帮助!

于 2010-02-12T18:56:31.523 回答
3

此链接还显示了如何执行此操作,包括当您正在签署的第 3 方程序集之一引用您正在签署的另一个未签名程序集时:

http://buffered.io/posts/net-fu-signing-an-unsigned-assembly-without-delay-signing

编辑:对不起,链接被破坏了。

于 2012-05-24T22:40:16.480 回答
1

强名称工具可以使用 -R 选项对现有程序集重新签名。但是,据我了解,程序集必须事先签名或延迟签名......不确定您是否可以将它与未签名的程序集一起使用,但您可以尝试一下

于 2009-09-04T18:29:19.520 回答
1

谢谢,尤其是 PJ8,因为它在 8 年前发布了一个答案,今天仍然救了我。“我的”程序集需要进入 GAC,但依赖于 SQLite-pcl-net,从 1.3.1 版开始,它不是强命名的,尽管它现在依赖于强命名的 SQLitePCLRaw.bundle_green。因此,换句话说,我必须签署 SQLite-pcl-net 才能签署我自己的程序集。我最终得到了一个从这篇文章和我今天旅行的其他一些地方的信息中整合而成的从摇篮到坟墓的 .bat 文件。“优点”是 1. 此 .bat 在您要签名的程序集的位置运行 2. 至少显示了三个工具可能位于开发机器上的位置的提示。3.按顺序显示所有步骤。当然,“缺点”是您的里程可能会因 ildasm、ilasm 和 sn 实际位于您的特定 PC 上的位置而异。

REM Create a new, random key pair
"c:\program files (x86)\microsoft sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\sn" -k SQLite-net.snk
REM Store the key in the container MySQLiteKeys in the strong name Cryptographic Services Provider (CSP).
"c:\program files (x86)\microsoft sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\sn" -i SQLite-net.snk MySQLiteKeys
REM Disassemble to Intermediate Language
"c:\program files (x86)\microsoft sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\ildasm" SQLite-net.dll /out:SQLite-net.il
REM Rename original file
ren SQLite-net.dll SQLite-net.dll.orig
REM Reassemble to a strong-named version
"c:\Windows\Microsoft.NET\Framework\v2.0.50727\ilasm" SQLite-net.il /dll /key=SQLite-net.snk /out:SQLite-net.dll 
REM Verify the assembly 
"c:\program files (x86)\microsoft sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\sn" -v SQLite-net.dll
REM Deletes MySQLiteKeys from the default CSP
"c:\program files (x86)\microsoft sdks\windows\v8.1a\bin\NETFX 4.5.1 Tools\sn" -d MySQLiteKeys
REM View results 
pause
于 2017-04-06T22:38:36.590 回答