Подписание сборки F#

У меня большие проблемы с попыткой подписать проект библиотеки классов F#. Сначала я попробовал этот поток, используя AssemblyKeyFileAttribute но безуспешно. Я также попытался добавить флаг «--keyfile:keyfile.snk» в свойства проекта (поле «Другие флаги» на вкладке «Сборка»), и это тоже не сработало. Я использую Visual Studio 2013, и он не отображает вкладку «Подписание», как проекты библиотеки классов С#.

Все попытки приводят к следующей ошибке:

FSC: ошибка FS2014: возникла проблема при записи двоичного файла 'obj\Release\ExcelFinancialFunctions.dll': не удалось выполнить вызов StrongNameGetPublicKey (значение не попадает в ожидаемый диапазон).

Что я делаю не так?


person Vinícius Oliveira    schedule 05.06.2015    source источник


Ответы (1)


FWIW, вот как я подписываю ZeroToNine: вместо использования Visual Studio я делаю это как часть скрипта сборки. По сути, это делается с помощью AssemblyOriginatorKeyFile и SignAssembly:

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

Вы можете увидеть (почти) все важные детали в репозитории ZeroToNine, включая фактический скрипт сборки. Я использую для подписи. Единственная деталь, отсутствующая в общедоступном репозитории, — это фактический файл .snk, потому что не было бы смысла иметь ключ строгого имени, если бы он был общедоступным.

Вот как я вызываю скрипт сборки из Bash:

build-release.sh ../ZeroToNine.snk

Как видите, у меня есть файл .snk, находящийся за пределами репозитория, и я передаю его в качестве аргумента скрипту.

person Mark Seemann    schedule 07.06.2015
comment
Это действительно хорошее решение. Я не знал, что msbuild имеет собственный механизм подписи, однако мне удалось решить проблему подписи с помощью ilmerge (компоновщик сборки - тоже не работал!), хотя это не цель ilmerge. Поскольку это лучшее решение, чем мое, я отмечу его как правильный ответ. Спасибо! - person Vinícius Oliveira; 08.06.2015