2013-03-18 11 views
7

Ho un progetto aperto in Visual Studio (sembra essere Enyim.Caching). Questa assemblea vuole essere firmata con ritardo. Infatti, desidera fortemente firmare il ritardo, che non sono in grado di forzare Visual Studio a compilarlo senza la firma del ritardo.Rimuovere la firma da un assembly

  1. devo incontrollato "Delay solo segno" e "Firmare l'assembly" sulla proprietà del progetto di Visual Studio, e ricostruito. L'assieme è ancora contrassegnato per il segno di ritardo (come mostrato da sn.exe -v).

  2. Ho scaricato il progetto e verificato che la firma è impostata su falso. Quando si ricarica il progetto, le caselle di controllo per "Segno" e "Segno di ritardo" sono selezionate.

  3. Ho verificato che nessun attributo è presente in AssemblyInfo (o altrove) che causerebbe questo.

  4. Ho cercato Internet per una soluzione, ma non ne ho trovato.

Come posso fare questo?

risposta

9

In questo caso, il problema è un riferimento di "proprietà comuni" del progetto.

All'interno del progetto .csproj file è questa piccola linea di innocuo:

< Importa progetto = ".. \ costruire \ CommonProperties.targets"/>

Purtroppo, il file (CommonProperties.targets) indica a VS di riscrivere le proprietà, ma non fornisce alcuna chiara indicazione nell'interfaccia utente in corso. Secondo me, chiunque abbia progettato questo dovrebbe essere tartrato e piumato.

La soluzione è quello di andare nel file CommonProperties.targets ed eliminare le seguenti righe:

<!-- delay sign the assembly if the PrivateKeyPath property is not specified --> 
<PropertyGroup Condition=" '$(PrivateKeyPath)' == '' And '$(PrivateKeyName)' == ''"> 
    <AssemblyOriginatorKeyFile>..\public_key.snk</AssemblyOriginatorKeyFile> 
    <DelaySign>true</DelaySign> 
</PropertyGroup> 

<!-- sign the assembly using the specified key file containing both the private and public keys --> 
<PropertyGroup Condition=" '$(PrivateKeyPath)' != '' "> 
    <AssemblyOriginatorKeyFile>$(PrivateKeyPath)</AssemblyOriginatorKeyFile> 
    <DelaySign>false</DelaySign> 
</PropertyGroup> 

<!-- sign the assembly using the specified key container containing both the private and public keys --> 
<PropertyGroup Condition=" '$(PrivateKeyName)' != '' "> 
    <AssemblyOriginatorKeyFile></AssemblyOriginatorKeyFile> 
    <DelaySign>false</DelaySign> 
</PropertyGroup> 

Sostituire quelle linee con il seguente:

<PropertyGroup> 
    <DelaySign>false</DelaySign> 
    <SignAssembly>false</SignAssembly> 
    </PropertyGroup> 
+0

grazie per la risposta .... stesso problema, stesso assembly. Mi ha salvato un sacco di capelli tirando :) – GrahamB

+0

Se questo non risolve il problema, puoi anche vedere cosa c'è in 'AssemblyInfo.cs': http://stackoverflow.com/a/13200542/1869660 – Sphinxxx

0

Met lo stesso problema. Anche dopo che ho disabilitato "Segno di ritardo solo" e "Firmare l'assembly", ho ancora ottenuto l'errore

error MSB3325: Cannot import the following key file: . The key file may be password protected". 

E il .csproj è corretta:

<PropertyGroup> 
    <SignAssembly>false</SignAssembly> 
    <DelaySign>false</DelaySign> 
</PropertyGroup> 

Tuttavia, c'è ancora una linea difficile sotto :

<SignAssembly Condition="Exists('..\xxx.pfx')">true</SignAssembly> 

Solo dopo ho rimosso la linea in csproj, o rimosso il file sul disco, poi il VS è OK per andare.

Sembra un insetto di VS.La versione che sto usando:

Microsoft Visual Studio 2010 
Version 10.0.40219.1 SP1Rel 
Microsoft .NET Framework 
Version 4.5.50709 SP1Rel 
Problemi correlati