2015-06-05 15 views
9

Sto avendo un sacco di problemi nel tentativo di firmare un progetto di libreria di classi F #. Prima ho provato questo thread, utilizzando il AssemblyKeyFileAttribute ma non ha avuto successo. Ho anche provato ad aggiungere il flag "--keyfile: keyfile.snk" alle proprietà del progetto (campo "Altre flag" nella scheda "Build") e non ha funzionato troppo. Sto usando Visual Studio 2013, e non mostra la scheda "Signing" come i progetti di libreria di classi C#.Firma assemblaggio F #

tutti i tentativi risultati nella seguente errore:

FSC: l'errore FS2014: Si è verificato un problema di scrittura binario 'obj \ Release \ ExcelFinancialFunctions.dll': Una chiamata a StrongNameGetPublicKey non riuscita (Valore non rientra l'intervallo previsto.)

Cosa sto facendo male?

risposta

6

FWIW, ecco come firmo ZeroToNine: invece di utilizzare Visual Studio, lo faccio come parte dello script di compilazione. In sostanza, è fatta utilizzando AssemblyOriginatorKeyFile e SignAssembly:

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

Si può vedere (quasi) tutti i dettagli essenziali nella repo ZeroToNine, tra cui the actual build script I use for signing. L'unico dettaglio mancante dal repository pubblico è il file .snk effettivo, perché non avrebbe senso avere una chiave con un nome forte se fosse pubblicamente disponibile.

Ecco come io chiamo lo script di build da Bash:

build-release.sh ../ZeroToNine.snk 

Come potete vedere, ho il mio file .snk risiedono al di fuori del pronti contro termine, e passarlo come argomento allo script.

+0

Questa è davvero una bella soluzione. Non sapevo che msbuild abbia il proprio meccanismo di firma, tuttavia sono riuscito a risolvere il problema della firma usando ilmerge (anche il linker assembly non funzionava!) Sebbene questo non sia lo scopo del ilmerge. Dal momento che questa è una soluzione migliore della mia, la contrassegnerò come risposta corretta. Grazie! –