签署 F# 程序集

Signing F# Assembly

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

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

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

我做错了什么?

FWIW,这是我签署 ZeroToNine 的方式:我没有使用 Visual Studio,而是将其作为构建脚本的一部分。本质上,它是通过使用 AssemblyOriginatorKeyFileSignAssembly:

完成的
MSBuild.exe /property:AssemblyOriginatorKeyFile=mykey.snk /property:SignAssembly=true

您可以在 ZeroToNine 存储库中看到(几乎)所有细节,包括 the actual build script I use for signing。 public 存储库中唯一缺少的细节是实际的 .snk 文件,因为如果 public 仅可用,那么拥有强名称密钥是没有意义的。

以下是我从 Bash 调用构建脚本的方式:

build-release.sh ../ZeroToNine.snk

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