Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在有符号程序集中使用无符号程序集_C#_.net - Fatal编程技术网

C# 在有符号程序集中使用无符号程序集

C# 在有符号程序集中使用无符号程序集,c#,.net,C#,.net,找到了这些有用的链接 我遵循这个过程。这似乎很容易做到。只是想知道是否有一个点击式自动工具可以为我做到这一点——特别是在未签名的第三方a.dll引用未签名的B.dll引用未签名的C.dll的情况下。您可以自己对程序集进行签名,以便在无法获得签名的情况下也可以在已签名的项目中引用它们作者为你在上面签名 为此,请将程序集分解为IL,然后使用您自己的强名称密钥文件重新组装它 打开Visual Studio命令提示符,浏览到包含未签名程序集的目录。从命令提示符下运行以下命令 ildasm.exe /

找到了这些有用的链接


我遵循这个过程。这似乎很容易做到。只是想知道是否有一个点击式自动工具可以为我做到这一点——特别是在未签名的第三方a.dll引用未签名的B.dll引用未签名的C.dll的情况下。

您可以自己对程序集进行签名,以便在无法获得签名的情况下也可以在已签名的项目中引用它们作者为你在上面签名

为此,请将程序集分解为IL,然后使用您自己的强名称密钥文件重新组装它

打开Visual Studio命令提示符,浏览到包含未签名程序集的目录。从命令提示符下运行以下命令

ildasm.exe /all /typelist /out=My.Unsigned.Assemby.il My.Unsigned.Assemby.dll
这将创建名为My.Unsigned.Assemby.IL的程序集的IL版本

接下来,您将需要使用强名称键重新组装此文件,而无需修改

ilasm.exe /dll /optimize /key=MyKeyFile.snk My.Unsigned.Assemby.il
现在,您将得到相同的程序集,只是它的签名版本。你可以阅读更多关于这个问题的内容,但我想你已经知道如何根据这个问题来做这件事了


更新:我已经编写了一个应用程序,可以从UI、命令行或通过API以编程方式自动执行此操作。它处理所有边缘情况,就像使用正确的标志组装回正确的版本一样。你可以在这里阅读更多的信息并下载工具:

注意,你应该最终考虑签署它。延迟签名应该就是这样。在开发过程中推迟签署程序。您不应该在没有签名的情况下真正部署延迟签名的程序集。IDE、Project+属性、签名选项卡支持这一点。这是最简单的点击方式。“在构建之后再这样做既没有多大用处,也没有多大成效。@汉斯·帕桑:这个问题针对的是您无法控制的程序集。更改您无法控制的程序集是一个兔子洞。”。第三方运送未签名的程序集是犯罪行为,特别是考虑到签名是多么容易。练习你的支持选项,让他们签名。你救了我!我想合并到我的项目中的开源项目没有签名,但太复杂了,不能简单地按签名重建。你的工具是救命的工具!如果要签名的程序集本身依赖于另一个未签名的程序集(这两个程序集都必须在主项目中引用),您知道如何做到这一点吗?如果我只是使用此方法分别对两个程序集进行签名,似乎第一个程序集在生成时不再识别第二个程序集,即使我引用了两个新签名的程序集,我也会收到“您必须添加引用…”错误。@GabrielS。您需要同时对它们进行签名,这样每个程序集将检查它们是否引用了任何新签名的程序集,并更新引用以使用强名称引用。如有必要,还将更新InternalsVisibleTo。手册上都有: