在Mono上使用F#签名dll时出现问题

5

我在使用F#和mono签署dll时遇到了错误:

$ mono /usr/local/share/FSharp-2.0.0.0/bin/fsc.exe\
   --target:library \
   --keyfile:../../external/MyKeyFile.snk\
   AssemblyInfo.fs\
   ../../fs/FooBar.fs\  
   -o:FooBar.dll

没有生成任何 dll 文件,我收到了以下错误信息:
Microsoft (R) F# 2.0 Compiler build 2.0.0.0 Copyright (c) Microsoft Corporation. All Rights Reserved.`

error FS2014: A problem occurred writing the binary '': A call to StrongNameGetPublicKey failed (mscoree.dll)`

这个密钥文件是在Windows上生成的,这会有什么影响吗?

更新:

使用Mono 2.6.4。

$ mono --version 

Mono JIT compiler version 2.6.4 (tarball Mon Jun 21 19:26:21 UTC 2010) 
Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com
TLS:           __thread
GC:            Included Boehm (with typed GC and Parallel Mark)
SIGSEGV:       altstack
Notifications: epoll
Architecture:  amd64
Disabled:      none

你使用的是哪个版本的Mono?(你可以通过mono --version命令来查找) - Édgar Sánchez Gordón
@Edgar,我已经将信息添加到问题中。 - Benjol
2个回答

3

看起来fsc正在使用本地的Windows API,这是不可移植的。你应该向F#团队提出此问题。


@Benjol:你有听到什么消息吗? - mmacaulay
@mmacaulay,不是很确定,我想我被抄送了一封“内部”邮件,说他们会试着去解决这个问题。我猜测这可能在微软和Mono之间的无人区...但如果/当我听到任何消息时,我会在这里发布的。 - Benjol

2
尝试在生成程序集后使用 sn 进行签名。
首先,您需要使用 --delaysign flag 进行编译,以生成延迟签名的程序集。
然后,您可以使用 sn 实用程序并使用 -R 标志进行程序集的签名。
我不能百分之百确定这会起作用,因为我周围没有 Linux 或 Mac 机器可供测试,但还是值得一试的。

我已经查看了,但无法弄清如何为以前未签名的程序集签名...欢迎任何指针... - Benjol
我添加了更多信息。希望这可以帮助到你。 - Rick Minerich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接