«Невозможно найти сертификат подписи манифеста в хранилище сертификатов» - даже при добавлении нового ключа


154

Я не могу создавать проекты со строгой подписью ключа - сообщение в заголовке всегда появляется.

Да, проект изначально был скопирован с другого компьютера. Однако даже если я добавлю новый ключ на вкладке «Подпись» в «Свойствах проекта», эта ошибка все еще отображается.

Я попытался запустить Visual Studio в качестве администратора и попытался вручную добавить ключи в хранилище сертификатов Windows.

Помогите!

Редактировать: я не получаю эту ошибку с новым проектом, но я бы очень хотел, чтобы этот существующий проект работал. Это не сработает, даже если я создам новый сертификат!


3
Какой тип проекта VS? Вы также сняли флажок «Подписывать манифесты ClickOnce» на вкладке «Подписывание свойств проекта»?
Саймон Мурье

@ Симон Мурье, если я сниму этот флажок, файл не будет подписан. Я хочу, чтобы это было подписано! Это проект на C #. Прекрасно работает на моей основной машине, но не на ноутбуке.
Маркус

Сообщение об ошибке отображается в вашем журнале сборки, или каким-либо другим способом? Это может помочь, если вы копируете и вставляете журнал.
Оуэн Венгерд

Ошибка в журнале сборки: «Не удалось найти сертификат подписи манифеста в хранилище сертификатов»
Маркус

Я не видел строк кода в принятом ответе. Но это сработало для меня: я создал новый ключ в VS2015. Я снял флажок Подписать сборку и сохранил. Затем я нажал кнопку «Выбрать из файла», выбрал только что созданный файл, снова щелкнул «Подписать сборку» и сохранил. Перестроен.
Тим

Ответы:


234

Я наконец нашел решение и очень надеюсь, что это поможет кому-то еще.

  1. Отредактируйте .csprojфайл для рассматриваемого проекта.
  2. Удалите следующие строки кода:

    <PropertyGroup>
       <ManifestCertificateThumbprint>...........</ManifestCertificateThumbprint>
    </PropertyGroup>
    <PropertyGroup>
       <ManifestKeyFile>xxxxxxxx.pfx</ManifestKeyFile>
    </PropertyGroup>
    <PropertyGroup>
       <GenerateManifests>true</GenerateManifests>
    </PropertyGroup>
    <PropertyGroup>
       <SignManifests>false</SignManifests>
    </PropertyGroup>
    

1
У меня тоже сработало. Есть какие-нибудь предостережения о таких действиях?
Доктор Кодер

1
Да, удалил что-нибудь с "Манифестом", и это сработало :-)
s1cart3r

2
Я бы не стал этого делать, не зная последствий ... так или иначе
barnacle.m

В моем случае удаляем ManifestCertificateThumbprintи ManifestKeyFileрешаем проблему.
Ахмед

Работал на меня. Понятия не имею, какие последствия это имеет, но, по крайней мере, один из них - рабочий проект, так что для меня этого достаточно.
Parrotmaster

149

Перейдите в раздел «Свойства» вашего проекта в рамках визуальной студии. Затем перейдите на вкладку подписи.

Затем убедитесь, что Подпись манифестов Click Once отключена.


Обновленные инструкции:

В вашем обозревателе решений:

  1. щелкните правой кнопкой мыши на вашем проекте
  2. нажмите на свойства
  3. обычно с левой стороны, выберите вкладку «Подписание»
  4. отметьте галочкой знак манифестов ClickOnce
  5. Убедитесь, что вы экономите!

введите описание изображения здесь


2
То, что вы сказали, хорошо и должно работать, но не. В конце концов мне пришлось удалить строки кода, как указано в ответе ниже
Хамид Шахид

1
Что это делает / что означает это действие?
LazerSharks

@TrailMix Это изменит ваш файл конфигурации соответствующим образом.
ADL

1
это дало мне решение для vs2010 :) up!
Джейс

1
Хороший ответ! Я использую VS2012, и это действительно работает! +1
kiLLua

15

Это просто!!

Я решил эту проблему, выполнив следующие действия:

  1. Открыть свойства проекта IMG
  2. Нажмите на вкладку подписи
  3. И сними галочку "Подписать собрание"

Это оно!!


13
  1. Откройте файл .csproj в Блокноте.
  2. Удалите следующую информацию, связанную с подписанием сертификата, в хранилище сертификатов.

    <PropertyGroup>
      <ManifestCertificateThumbprint>xxxxx xxxxxx</ManifestCertificateThumbprint>
      <ManifestKeyFile>xxxxxxxx.pfx</ManifestKeyFile>
    <GenerateManifests>true</GenerateManifests>
    <SignManifests>false</SignManifests>
    </PropertyGroup>
    

11

Попробуйте это: Щелкните правой кнопкой мыши на вашем проекте -> Перейти к свойствам -> Нажмите подписи , который с левой стороны экрана -> Uncheck Подписать нажмите один раз манифестов -> Save & Сложение


6

Зайдите в свои проекты "Свойства" в рамках визуальной студии. Затем перейдите на вкладку подписи.

Затем убедитесь, что Подпись манифестов Click Once отключена.

ИЛИ

1. Откройте файл .csproj в Блокноте.

2. Удалите следующую информацию, связанную с подписанием сертификата в хранилище сертификатов xxxxx xxxxxx xxxxxxxx.pfx true false `

Работал на меня.


3

Предполагая, что это личный сертификат, созданный Windows в системе, из которой вы скопировали проект, вы можете использовать диспетчер сертификатов в системе, в которой находится проект, и импортировать сертификат. Запустите диспетчер сертификатов (certmgr) и выберите личные сертификаты, затем щелкните правой кнопкой мыши под списком существующих сертификатов и выберите импорт из задач. Используйте поиск, чтобы найти .pfx в проекте (.pfx из предыдущей системы, которую вы скопировали с проектом). Он должен находиться в подкаталоге с тем же именем, что и каталог проекта. Я знаком с C # и VS, поэтому, если это не ваша среда, может быть .pfx будет где-то еще, или, возможно, это предложение не применимо. После импорта вы должны получить статусное сообщение. Если вам это удалось, ошибка сертификата компиляции должна исчезнуть.экран certmgr


Ясно и сжато!
Гвидо Линдерс

0

Недостаточно вручную добавить ключи в хранилище сертификатов Windows. Сертификат содержит только подписанный открытый ключ. Вы также должны импортировать закрытый ключ , связанный с открытым ключом в сертификате. Файл .pfx содержит как открытый, так и закрытый ключи в одном файле. Это то, что вам нужно импортировать.


Спасибо, но уже попробовал это. Visual Studio должен автоматически добавить сертификат при создании нового. Однако я попытался добавить файл .pfx вручную. Оставил окна, чтобы установить его в правильном хранилище сертификатов, а также добавил его в мой личный магазин.
Маркус

Закрытый ключ не хранится в хранилище сертификатов. Пожалуйста, прочитайте это, возможно, это поможет вам понять разницу: technet.microsoft.com/en-us/library/cc962112.aspx
Оуэн Венгерд

Я должен добавить, что вы можете проверить, что связанный закрытый ключ доступен, открыв окно свойств сертификата в диспетчере сертификатов. Если закрытый ключ доступен, в нижней части страницы «Общие» отображается следующий текст: «У вас есть закрытый ключ, соответствующий этому сертификату». Если вы не видите этот текст, закрытый ключ не установлен.
Оуэн Венгерд

Да, он говорит: «У вас есть закрытый ключ, соответствующий этому сертификату».
Маркус

Я думаю, что исключает ключ или сертификат как проблему.
Оуэн Венгерд

0

Вы сказали, что скопировали файлы с другого компьютера. После того, как вы их скопировали, вы их «разблокировали»? В частности, необходимо проверить файл .snk, чтобы убедиться, что он не помечен как небезопасный.


Это не заблокировано, оно пришло из программы синхронизации Windows Live Mesh. Однако это не имеет значения, поскольку даже создание нового ключа в Visual Studio на ноутбуке не будет работать.
Маркус

0

Чтобы подписать сборку со строгим именем, используя атрибуты

Открыть AssemblyInfo.cs$(SolutionDir)\Properties)

AssemblyKeyFileAttributeили AssemblyKeyNameAttribute, указав имя файла или контейнер , который содержит пару ключей для использования при подписании сборки с сильным именем.

добавьте следующий код:

[assembly:AssemblyKeyFileAttribute("keyfile.snk")]

Добавление этой строки не имеет значения, я все еще получаю ту же ошибку.
Маркус

0

Если вам нужно просто построить проект или решение локально, то удаление подписи может быть просто простым решением, как предлагают другие.

Но если у вас есть эта ошибка на вашем сервере сборки автоматизации, таком как TeamCity, где вы собираете свои фактические выпуски для развертывания или распространения, вы можете подумать, как правильно установить этот сертификат в хранилище сертификатов на компьютере сборки, чтобы получить подписанные пакеты в конце сборки.

Как правило, не рекомендуется регистрировать / фиксировать любые сертификаты PFX в системе контроля версий , поэтому вопрос о том, как получить эти файлы на сервере сборки во время процесса сборки, - это немного другой вопрос, но иногда люди хранят этот файл вместе с решением. код, так что вы можете найти его в папке проекта.

Все, что вам нужно сделать, это просто установить этот сертификат под соответствующей учетной записью на сервере сборки.

  1. Загрузите PsExec из Windows Sysinternals .

  2. Откройте командную строку и введите следующее. Он создаст новую командную строку, работающую как локальная система (при условии, что ваш TeamCity работает под учетной записью локальной системы по умолчанию):

    > psexec.exe -i -s cmd.exe

  3. В этой новой командной строке перейдите в каталог, содержащий сертификат, и введите имя файла для установки (измените имя файла на ваше):

    > mykey.pfx

  4. Запустится мастер импорта сертификатов. Нажмите и выберите все предложенные значения по умолчанию.

  5. Запустите сборку.

Все кредиты идут к Стюарту Noble (и затем далее Лоран Кемпа Я считаю , ☺).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.