2013-03-18 11 views
7

Mam projekt otwarty w Visual Studio (zdarza się Enyim.Caching). To zgromadzenie chce być podpisane z opóźnieniem. W rzeczywistości, tak bardzo pragnie podpisać się pod opóźnieniem, że nie jestem w stanie zmusić Visual Studio do skompilowania go bez podpisywania opóźnienia przez.Usuń podpis z zespołu

  1. mam odznaczone „Opóźnienie tylko znak” i „Zapisz zespół” na Visual Studio Project Properties skrzynki, i przebudowany. Zespół jest nadal oznaczony znakiem opóźnienia (jak pokazano w sn.exe -v).

  2. Załadowałem projekt i zweryfikowałem, że podpis jest ustawiony na wartość false. Podczas ponownego ładowania projektu zaznaczane są pola wyboru "Znak" i "Znak opóźnienia".

  3. Sprawdziłem, że nie ma atrybutów w AssemblyInfo (lub gdzie indziej), które by to spowodowało.

  4. Szukałem w Internecie rozwiązania, ale nie znalazłem.

Jak mogę to zrobić?

Odpowiedz

9

W tym przypadku problemem jest odniesienie do projektu "wspólne właściwości".

Wewnątrz projektu .csproj plik jest to nieszkodliwe mało linia:

< importu projektu = ".. \ budować \ CommonProperties.targets"/>

Niestety, plik (CommonProperties.targets) instruuje VS, aby ponownie zapisał właściwości, ale nie zapewnia wyraźnego wskazania w interfejsie użytkownika, że ​​ma to miejsce. Moim zdaniem, ktokolwiek to zaprojektował, powinien być smołowany i upierzony.

Rozwiązaniem jest, aby przejść do pliku CommonProperties.targets i usuń następujące wiersze:

<!-- 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> 

Wymień te linie z następujących czynności:

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

dzięki za odpowiedź .... sam problem, ten sam montaż. Zaoszczędziłam mnóstwo ciągnących włosów :) – GrahamB

+0

Jeśli to nie rozwiąże problemu, możesz także zobaczyć, co jest w 'AssemblyInfo.cs': http://stackoverflow.com/a/13200542/1869660 – Sphinxxx

0

spotkał ten sam problem. Nawet po tym, jak wyłączyć „Opóźnienie tylko znak” i „Zapisz zespół”, nadal mam błąd

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

A .csproj jest poprawna:

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

Istnieje jednak jeszcze jedna linia trudne poniżej :

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

Dopiero po usunięto linię .csproj lub usunięty plik na dysku, a następnie VS jest OK, aby przejść.

Wydaje się być błędem VS.Wersja, której używam:

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