Удалить подпись из сборки
У меня есть проект, открытый в Visual Studio (это Enyim.Caching). Эта сборка хочет быть подписана с задержкой. На самом деле, он так сильно хочет быть подписанным с задержкой, что я не могу заставить Visual Studio скомпилировать его без подписи с задержкой.
Я снял флажок "Только подписать задержку" и "Подписать сборку" в окне свойств проекта Visual Studio и перестроил. Сборка все еще помечена для знака задержки (как показано
sn.exe -v
).Я выгрузил проект и убедился, что подпись установлена на false. При перезагрузке проекта флажки "Подписать" и "Задержка подписи" отмечены.
Я проверил, что в AssemblyInfo (или где-либо еще) отсутствуют атрибуты, которые могли бы вызвать это.
Я искал в Интернете решение, но не нашел ни одного.
Как я могу это сделать?
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