2015-06-05 5 views
9

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

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

FSC: ошибка FS2014: Возникла проблема записи двоичного «Obj \ Release \ ExcelFinancialFunctions.dll»: Вызов StrongNameGetPublicKey неудачу (Значение не попадает в ожидаемый диапазон.)

Что я делаю неправильно?

ответ

6

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

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

Вы можете увидеть (почти) все мельчайшие детали в репо ZeroToNine, в том числе the actual build script I use for signing. Единственная деталь, отсутствующая в публичном репо, является фактическим файлом .snk, потому что было бы бессмысленно иметь сильный ключевой ключ, если он был общедоступным.

Вот как я называю сценарий сборки из Bash:

build-release.sh ../ZeroToNine.snk 

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

+0

Это действительно приятное решение. Я не знал, что у msbuild есть собственный механизм подписки, однако мне удалось решить проблему подписи с помощью ilmerge (сборщик-компоновщик тоже не работал!), Хотя это и не цель ilmerge. Поскольку это лучшее решение, чем мое, я буду отмечать его как правильный ответ. Благодаря! –