Удалить подпись из сборки

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

  1. Я снял флажок "Только подписать задержку" и "Подписать сборку" в окне свойств проекта Visual Studio и перестроил. Сборка все еще помечена для знака задержки (как показано sn.exe -v).

  2. Я выгрузил проект и убедился, что подпись установлена ​​на false. При перезагрузке проекта флажки "Подписать" и "Задержка подписи" отмечены.

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

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

Как я могу это сделать?

2 ответа

Решение

В этом случае проблемой является ссылка "общие свойства" проекта.

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

К сожалению, файл (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>

Встретил ту же проблему. Даже после того, как я отключил "Delay Sign only" и "Sign the Assembly", я все равно получил ошибку

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
Другие вопросы по тегам