La situazione è la seguente:Rilascio dell'origine della libreria di classi, senza firma del file chiave, ma i test unitari richiedono l'accesso alle classi interne, cosa fare?
- voglio rilasciare il sorgente completo per una libreria di classi
- Voglio liberare i binari e, firmata da me, con un file di chiave che non voglio Pubblicare
- Fornirò file batch e stepbuild pre-build, che creano un nuovo file di chiavi localmente se non presente, in modo che chiunque possa iniziare rapidamente a utilizzare il codice sorgente
- Il progetto di test deve fare riferimento a una classe interna in il progetto principale
- Per accedere al classe interna, ho bisogno di aggiungere un attributo
[assembly: InternalsVisibleTo("...")]
ai principali AssemblyInfo.cs file di progetto - Dal momento che sto firmando l'output del progetto, ho bisogno di specificare una parte PublicKey di quell'attributo
- Questo sarà quindi vincolato al file chiave, che non sono disposto a pubblicare
Quindi, come posso risolvere questo?
Se firmo l'uscita principale del progetto, e non la libreria di test, e si specifica solo il nome assembly nell'attributo InternalsVisibleTo
, ottengo questo errore di compilazione:
Error 1 Friend assembly reference 'Mercurial.Net.Tests' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations. C:\Dev\VS.NET\Mercurial.Net\Mercurial.Net\Properties\AssemblyInfo.cs 22 31 Mercurial.Net
Quindi a quanto pare non firmare il test l'output del progetto non è abbastanza
È la mia unica opzione per rimuovere le impostazioni che firmano i progetti e modificare i file di progetto come parte dello script di compilazione dei miei binari? vale a dire. cacciare l'elemento <SignAssembly>false</SignAssembly>
del file di progetto e modificarlo, prima di costruire?
Sì, sembra un piano. –
Ho usato solo '#if DEBUG', RELEASE-build ora richiede la mia chiave privata, e posso facilmente scriptare quella parte come parte dello script che produrrà i miei binari. Non sono ancora lì comunque, quindi mi occuperò di quella parte più tardi. Buone opzioni da tutte le risposte qui però, ma questo era quello che ho finito per fare, quindi ho accettato questo. –
Beh, ecco qua. Sono contento di poterti aiutare. –