即时创建我的程序集的签名副本

Posted

技术标签:

【中文标题】即时创建我的程序集的签名副本【英文标题】:Create a signed copy of my assembly on the fly 【发布时间】:2015-04-01 15:00:15 【问题描述】:

我需要即时制作我的程序集的签名副本。

我已尝试通过在构建后事件中添加此脚本来做到这一点:

call "$(DevEnvDir)..\Tools\vsvars32.bat"
ildasm /all /out=MyAssemblySignedVersion.il $(TargetFileName)
ilasm /dll /key=MyAssembly.snk MyAssemblySignedVersion.il

但是,当我引用签名的程序集时,我得到一个运行时异常“无法加载文件或程序集 'MyAssembly, Version=1.2.5511.31417, Culture=neutral, PublicKeyToken=b025765091e877ec' 或其依赖项之一。系统无法找到指定的文件。”

我尝试使用反射器从 MyAssemblySignedVersion.dll 创建一个项目,但它无法编译,因为缺少某些命名空间,可能是由于重新组装了反汇编的 dll。这有关系吗?

我怎样才能做到这一点? 提前非常感谢。

【问题讨论】:

【参考方案1】:

我找到了一种方法来制作我的程序集的签名副本:我创建了新的解决方案配置:“ReleaseSigned”,并在构建后事件中放置了这个脚本:

if $(ConfigurationName) == Debug (
     echo "Building in DEBUG. Skipping signing..."
) else if $(ConfigurationName) == ReleaseSigned (
call "$(DevEnvDir)..\Tools\vsvars32.bat"
     msbuild.exe "$(ProjectPath)" /property:Configuration=Release
)

随后这篇文章发生了变化: same project different solution sign configuration

【讨论】:

以上是关于即时创建我的程序集的签名副本的主要内容,如果未能解决你的问题,请参考以下文章

C# 防止 AppDomain 程序集的类实例访问文件

C# 依赖同一个强签名程序集的不同版本

plist,sqlite3,xml?

Maven Shade 插件 + MsSQL JDBC -> 即时 JNI 错误 - 无效的签名文件清单

C# 中签名程序集的公钥的结构是啥?

通过 Windows 中的 OpenSSL 为我的 Android 应用程序创建带有自签名证书的 PKCS#12 文件