2013-03-18 2 views
7

У меня есть проект, открытый в Visual Studio (это, как правило, Enyim.Caching). Эта сборка хочет быть задержанной. На самом деле, он так сильно хочет быть задержанным, что я не могу заставить Visual Studio скомпилировать его без задержки подписания.Удалить подпись из сборки

  1. У меня есть флажок «Задержка только подписать» и «Подписать сборку» на свойствах проекта окне Visual Studio и перестроен. Сборка по-прежнему отмечена знаком задержки (как показано на рисунке sn.exe -v).

  2. Я выгрузил проект и подтвердил, что для подписи установлено значение false. При перезагрузке проекта проверяются флажки для «Знак» и «Значок задержки».

  3. Я проверил, что в AssemblyInfo (или в другом месте) нет атрибутов, которые могли бы вызвать это.

  4. Я искал в Интернете решение, но не нашел его.

Как это сделать?

ответ

9

В этом случае проблема связана с проектом «общие свойства».

Внутри проекта .csproj файл является эта безобидная маленькая линия:

< Import Project = ".. \ построить \ CommonProperties.targets"/>

К сожалению, файл (CommonProperties.targets) инструктирует VS переписать свойства, но в пользовательском интерфейсе это не дает четких указаний. На мой взгляд, тот, кто его проектировал, должен быть смоченным и пернатым.

Решение идти в файл CommonProperties.targets и удалите следующие строки:

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

Заменить эти строки со следующим:

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

спасибо, что ответ .... такой же проблема, такой же сборка. Сэкономил мне тонну притягивания волос :) – GrahamB

+0

Если это не исправить проблему, вы также можете увидеть, что находится в 'AssemblyInfo.cs': http://stackoverflow.com/a/13200542/1869660 – Sphinxxx

0

постигла та же проблема. Даже после того, как я отключил «Задержка Вход только» и «Подписать сборку», я все еще получил ошибку

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

И .csproj правильно:

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

Однако, есть еще одна сложная линия ниже :

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

только после того, как я удалил строку в .csproj или удалили файл на диске, то VS нормально идти.

Похоже на ошибку VS.Используемая версия:

Microsoft Visual Studio 2010 
Version 10.0.40219.1 SP1Rel 
Microsoft .NET Framework 
Version 4.5.50709 SP1Rel 
Смежные вопросы