2012-11-15 24 views
8

Sto eseguendo Visual Studio 2012 e sto scrivendo un servizio Web di back-end e un software desktop in soluzioni separate. Poiché il software desktop deve essere eseguito a livello elevato ("come amministratore"), è necessario eseguire la soluzione desktop in un'istanza di Visual Studio con privilegi elevati. Entrambe le soluzioni includono un progetto di libreria firmato.Utilizzo di una dipendenza firmata in due istanze di Visual Studio, un elevato/amministratore, uno normale

Quando apro la soluzione web service in un'istanza di Visual Studio senza elevare, ottengo un errore di generazione come

Non è possibile importare il file seguente chiave: Redacted.pfx. Il file chiave può essere protetto da password. Per correggere ciò, provare a importare nuovamente il certificato o installare manualmente il certificato nel CSP Strong Name con il seguente nome del contenitore di chiavi: VS_KEY_Redacted.

Quando si tenta di risolvere questo by doing that, non riesce con un messaggio di errore che dice che la chiave esiste già.

Quando si tenta di escludere e quindi ri-includere il file PFX non mette le cose a posto, ma rende il menu a discesa "file chiave forte" in Proprietà progetto → Firma in bianco. In seguito, la soluzione del servizio Web viene creata, ma sembra che la libreria non venga firmata poiché nella (elevata) soluzione desktop, fallisce con "Assemblaggio non riuscito - Assemblaggio referenziato" redatto "non ha un nome sicuro".

Se provo a scegliere il file PFX di nuovo dal menu a discesa all'interno della soluzione servizio web (e immettere nuovamente la password), ottengo:

Errore importazione chiave
stato effettuato un tentativo di fare riferimento a un token non esiste

L'impostazione del file PFX dalla soluzione desktop (elevata) funziona, ma mi riporta al punto di partenza.

Sembra che, a seconda dell'elevazione, Visual Studio cerchi in diversi keystore l'accesso a qualsiasi cosa sblocchi il PFX. Devo eseguire entrambe le istanze di Visual Studio elevate per aggirare il problema o posso in qualche modo dirlo di cercare nello stesso posto?

+0

funziona se si include AssemblyKeyFile hardcoded? – cppanda

+0

C'è un motivo per cui non si desidera eseguire entrambi "Come amministratore"? - Sembra che tutto il mio codice che firma il mal di testa vada via, e l'unico lato negativo che ho trovato è che devi fare una voce di registro per la condivisione del contesto (cioè le unità mappate e simili) per funzionare correttamente. [FYI, i dettagli sulla voce di registro possono essere trovati qui: http://www.winability.com/how-to-make-elevated-programs-recognize-network-drives/] – BrainSlugs83

+0

Attualmente sto eseguendo sia come amministratore che lo risolve Le mie preoccupazioni sono che voglio correre con la minore variabilità possibile su tutti i miei progetti e, dal momento che alcuni funzionano bene senza bisogno di privilegi elevati, il meno possibile senza eseguire come amministratore. Microsoft ha più o meno infranto la possibilità di impostare Visual Studio per funzionare sempre in posizione elevata (mi sono avvicinato ma rompe le soluzioni con doppio clic) e tuttavia non è sempre possibile ottenere eseguendo Visual Studio senza elevazione. – Jesper

risposta

0

Il commento di @ ccpanda ha risolto questo problema. L'inclusione di un archivio AssemblyKeyFile rende questo lavoro. Es .:

[assembly: AssemblyKeyFile("HerpDerpWarblerManagementStudioProTM.snk")] 

Il lungo e breve di questo è che i due di Visual Studio assumerà cose diverse a seconda della loro modalità. La soluzione non è farli assumere la stessa cosa, è dire loro cosa fare.

(Ho scelto di utilizzare un file .snk poiché questo è il modo in cui è necessario farlo se non si desidera reinserire una password ogni volta che ogni altro sviluppatore tenta di creare. This question has a lot more information. Fondamentalmente, si ha a uno utilizzare un file .snk o rendere il vostro processo di compilazione compilare e quindi firmare il file con un'invocazione di sn.exe che in qualche modo sapere per utilizzare un file .pfx per tutti)

(@ccpanda:. Se si scrive il commento come un risposta (e forse lo hai fatto e Stack Overflow ha deciso che era banale), lo contrassegnerò come risposta.)