.net 签署F#大会

.net 签署F#大会,.net,f#,strongname,assembly-signing,.net,F#,Strongname,Assembly Signing,我在签署F#class library项目时遇到了很多麻烦。 首先,我尝试了使用AssemblyKeyFileAttribute,但没有成功。 我还尝试将标志“-keyfile:keyfile.snk”添加到项目属性(“Build”选项卡中的“Other Flags”字段)中,但它也不起作用。我使用的是Visual Studio 2013,它不像C#类库项目那样显示“签名”选项卡 所有尝试都会导致以下错误: FSC:错误FS2014:写入二进制文件“obj\Release\ExcelFinanc

我在签署F#class library项目时遇到了很多麻烦。 首先,我尝试了使用AssemblyKeyFileAttribute,但没有成功。 我还尝试将标志“-keyfile:keyfile.snk”添加到项目属性(“Build”选项卡中的“Other Flags”字段)中,但它也不起作用。我使用的是Visual Studio 2013,它不像C#类库项目那样显示“签名”选项卡

所有尝试都会导致以下错误:

FSC:错误FS2014:写入二进制文件“obj\Release\ExcelFinancialFunctions.dll”时出现问题:调用StrongNameGetPublicKey失败(值不在预期范围内)。

我做错了什么?

FWIW,以下是我的签名方式:我不使用Visual Studio,而是将其作为构建脚本的一部分。基本上,它是通过使用
assemblyOriginateWorkyFile
SignAssembly
完成的:

MSBuild.exe /property:AssemblyOriginatorKeyFile=mykey.snk /property:SignAssembly=true
你可以在ZeroToNine回购协议中看到(几乎)所有的细节,包括。公共回购协议中唯一缺少的细节是实际的.snk文件,因为如果强名称密钥是公开的,那么使用它是没有意义的

下面是我如何从Bash调用构建脚本:

build-release.sh ../ZeroToNine.snk

如您所见,我的.snk文件位于repo之外,并将其作为参数传递给脚本。

这确实是一个不错的解决方案。我不知道msbuild有自己的签名机制,但是我使用ilmerge解决了签名问题(程序集链接器-al也不起作用!),尽管这不是ilmerge的目的。因为这是一个比我的更好的解决方案,所以我将它标记为正确答案。谢谢