„Nie można znaleźć certyfikatu podpisującego manifest w magazynie certyfikatów” - nawet po dodaniu nowego klucza

153

Nie mogę budować projektów z silnym podpisem kluczem nazwy - zawsze pojawia się wiadomość w tytule.

Tak, projekt został pierwotnie skopiowany z innego komputera. Jednak nawet jeśli dodam nowy klucz za pośrednictwem karty Podpisywanie we właściwościach projektu, ten błąd jest nadal wyświetlany.

Próbowałem uruchomić program Visual Studio jako administrator i próbowałem ręcznie dodać klucze do magazynu certyfikatów systemu Windows.

Wsparcie!

Edycja: nie pojawia się ten błąd przy nowym projekcie, ale chciałbym, aby ten istniejący projekt działał. To nie zadziała, nawet jeśli utworzę nowy certyfikat!

Marcus
źródło
3
Jaki typ projektu VS? Czy odznaczyłeś również opcję „Podpisz manifesty ClickOnce” na karcie Podpisywanie właściwości projektu?
Simon Mourier
@Simon Mourier, jeśli odznaczę tę opcję, plik nie zostanie podpisany. Chcę, żeby to było podpisane! To projekt C #. Działa dobrze na moim głównym komputerze deweloperskim, ale nie na laptopie.
Marcus
Czy komunikat o błędzie jest wyświetlany w dzienniku kompilacji, czy w inny sposób? Może pomóc, jeśli skopiujesz i wkleisz dziennik.
Owen Wengerd,
Błąd w dzienniku kompilacji: „Nie można znaleźć certyfikatu podpisywania manifestu w magazynie certyfikatów”
Marcus,
Nie widziałem linii kodu w zaakceptowanej odpowiedzi. Ale to zadziałało dla mnie: utworzyłem nowy klucz w VS2015. Otworzyłem Podpisz zgromadzenie i zapisałem. Następnie kliknąłem przycisk Wybierz z pliku, wybrałem plik, który właśnie utworzyłem, ponownie kliknąłem Podpisz zestaw i zapisałem. Odbudowany.
Tim

Odpowiedzi:

234

W końcu znalazłem rozwiązanie i mam nadzieję, że pomoże to również komuś innemu.

  1. Edytuj .csprojplik dla danego projektu.
  2. Usuń następujące wiersze kodu:

    <PropertyGroup>
       <ManifestCertificateThumbprint>...........</ManifestCertificateThumbprint>
    </PropertyGroup>
    <PropertyGroup>
       <ManifestKeyFile>xxxxxxxx.pfx</ManifestKeyFile>
    </PropertyGroup>
    <PropertyGroup>
       <GenerateManifests>true</GenerateManifests>
    </PropertyGroup>
    <PropertyGroup>
       <SignManifests>false</SignManifests>
    </PropertyGroup>
    
Marcus
źródło
1
Dla mnie też zadziałało. Jakieś zastrzeżenia dotyczące takiego działania?
Doctor Coder,
1
Tak,
usunąłem
2
Nie zrobiłbym tego, nie wiedząc o konsekwencjach ... i tak to robi
barnacle. M
W moim przypadku usunięcie ManifestCertificateThumbprinti ManifestKeyFilerozwiązanie problemu.
Ahmed Shamel
Pracował dla mnie. Nie mam pojęcia, jakie to ma konsekwencje, ale przynajmniej jeden z nich to działający projekt, więc to mi wystarczy.
Parrotmaster
148

Przejdź do „Właściwości” swojego projektu w programie Visual Studio. Następnie przejdź do zakładki podpisywania.

Następnie upewnij się, że manifesty Podpisz raz są wyłączone.


Zaktualizowane instrukcje:

W Eksploratorze rozwiązań:

  1. kliknij prawym przyciskiem myszy swój projekt
  2. kliknij właściwości
  3. zwykle po lewej stronie należy wybrać zakładkę „Podpisywanie”
  4. zaznacz manifesty Sign the ClickOnce
  5. Upewnij się, że oszczędzasz!

wprowadź opis obrazu tutaj

ADL
źródło
2
To, co powiedziałeś, jest w porządku i powinno działać, ale nie zadziałało. Ostatecznie musiałem usunąć linie kodu, jak wspomniano w odpowiedzi poniżej
Hamid Shahid
1
Co to oznacza / co oznacza ta akcja?
LazerSharks
@TrailMix Odpowiednio zmodyfikuje plik konfiguracyjny.
ADL
1
to dało mi rozwiązanie dla vs2010 :) up!
jace
1
Niezła odpowiedź! Używam VS2012 i to naprawdę działa! +1
kiLLua
15

To proste!!

Rozwiązałem ten problem, wykonując następujące kroki:

  1. Otwórz właściwości projektu img
  2. Kliknij kartę Podpisywanie
  3. Odznacz „Podpisz zestawienie”

Otóż ​​to!!

Amit Kadam
źródło
13
  1. Otwórz plik .csproj w Notatniku.
  2. Usuń następujące informacje związane z podpisywaniem certyfikatu w magazynie certyfikatów

    <PropertyGroup>
      <ManifestCertificateThumbprint>xxxxx xxxxxx</ManifestCertificateThumbprint>
      <ManifestKeyFile>xxxxxxxx.pfx</ManifestKeyFile>
    <GenerateManifests>true</GenerateManifests>
    <SignManifests>false</SignManifests>
    </PropertyGroup>
    
Rajamohan Rajendran
źródło
11

Spróbuj to: prawym przyciskiem myszy na projekcie -> przejdź do właściwości -> Kliknij podpisanie która jest po lewej stronie ekranu -> Odznacz Znak kliknięcie raz manifestach -> Zapisz i budowy

Kamala Hanchinal
źródło
6

Przejdź do „Właściwości” swoich projektów w programie Visual Studio. Następnie przejdź do zakładki podpisywania.

Następnie upewnij się, że manifesty Podpisz raz są wyłączone.

LUB

1. Otwórz plik .csproj w Notatniku.

2. Usuń następujące informacje związane z podpisywaniem certyfikatu w magazynie certyfikatów xxxxx xxxxxx xxxxxxxx.pfx prawda fałsz ''

Pracował dla mnie.

Popiół
źródło
3

Zakładając, że jest to certyfikat osobisty utworzony przez Windows w systemie, z którego skopiowałeś projekt, możesz użyć menedżera certyfikatów w systemie, w którym znajduje się projekt, i zaimportować certyfikat. Uruchom menedżera certyfikatów (certmgr) i wybierz certyfikaty osobiste, a następnie kliknij prawym przyciskiem myszy poniżej listy istniejących certyfikatów i wybierz import z zadań. Użyj funkcji przeglądania, aby znaleźć plik .pfx w projekcie (plik .pfx z poprzedniego systemu, który został skopiowany z projektem). Powinien znajdować się w podkatalogu o tej samej nazwie, co katalog projektu. Znam C # i VS, więc jeśli to nie jest twoje środowisko, może .pfx będzie gdzie indziej lub może ta sugestia nie ma zastosowania. Po imporcie powinien pojawić się komunikat o stanie. Jeśli ci się udało, błąd certyfikatu kompilacji powinien zniknąć.ekran certmgr

dpminusa
źródło
Jasne i zwięzłe!
Guido Leenders
0

Nie wystarczy ręcznie dodawać klucze do magazynu certyfikatów systemu Windows. Certyfikat zawiera tylko podpisany klucz publiczny. Musisz także zaimportować klucz prywatny, który jest powiązany z kluczem publicznym w certyfikacie. Plik .pfx zawiera zarówno klucze publiczne, jak i prywatne w jednym pliku. To jest to, co musisz zaimportować.

Owen Wengerd
źródło
Dzięki, ale już próbowałem. Program Visual Studio powinien automatycznie dodać certyfikat podczas tworzenia nowego. Jednak próbowałem ręcznie dodać plik .pfx. Zostawiłem okna, aby zainstalować go w odpowiednim magazynie certyfikatów, a także dodałem go do mojego osobistego magazynu.
Marcus
Klucz prywatny nie jest przechowywany w magazynie certyfikatów. Przeczytaj to, może pomoże ci to zrozumieć różnicę: technet.microsoft.com/en-us/library/cc962112.aspx
Owen Wengerd
Powinienem dodać, że możesz sprawdzić, czy powiązany klucz prywatny jest dostępny, otwierając okno właściwości certyfikatu w menedżerze certyfikatów. Jeśli klucz prywatny jest dostępny, u dołu strony Ogólne zostanie wyświetlony następujący tekst: „Masz klucz prywatny, który odpowiada temu certyfikatowi”. Jeśli nie widzisz tego tekstu, klucz prywatny nie jest zainstalowany.
Owen Wengerd
Tak, wyświetla się komunikat „Masz klucz prywatny, który odpowiada temu certyfikatowi”.
Marcus
Myślę, że to wyklucza klucz lub certyfikat jako problem.
Owen Wengerd
0

Powiedziałeś, że skopiowałeś pliki z innego komputera. Czy po skopiowaniu ich „odblokowałeś”? W szczególności należy sprawdzić plik .snk, aby upewnić się, że nie jest oznaczony jako niebezpieczny.

Owen Wengerd
źródło
Nie jest zablokowany, pochodzi z oprogramowania do synchronizacji Windows Live Mesh. Jednak nie ma to znaczenia, ponieważ nawet utworzenie nowego klucza w programie Visual Studio na laptopie nie zadziała.
Marcus,
0

Aby podpisać zestaw silną nazwą przy użyciu atrybutów

Otwórz AssemblyInfo.cs(w $(SolutionDir)\Properties)

AssemblyKeyFileAttributelubAssemblyKeyNameAttribute , podając nazwę pliku lub pojemnika, który zawiera parę kluczy do użytku podczas podpisywania zespół z silną nazwę.

dodaj następujący kod:

[assembly:AssemblyKeyFileAttribute("keyfile.snk")]
QuangNHb
źródło
Dodanie tej linii nie robi różnicy, nadal pojawia się ten sam błąd.
Marcus
0

Jeśli potrzebujesz po prostu zbudować projekt lub rozwiązanie lokalnie, usunięcie podpisu może być martwym prostym rozwiązaniem, jak sugerują inni.

Ale jeśli masz ten błąd na serwerze kompilacji automatyzacji, takim jak TeamCity, na którym tworzysz rzeczywiste elementy wydania do wdrożenia lub dystrybucji, możesz rozważyć, w jaki sposób można poprawnie zainstalować ten certyfikat w magazynie certyfikatów na maszynie kompilacji, aby uzyskać podpisane pakiety na końcu kompilacji.

Generalnie nie zaleca się wpisywania / zatwierdzania jakichkolwiek certyfikatów PFX do kontroli źródła, więc sposób pobierania tych plików na serwerze kompilacji podczas procesu kompilacji jest nieco innym pytaniem, ale czasami ludzie mają ten plik przechowywany wraz z rozwiązaniem kod, dzięki czemu można go znaleźć w folderze projektu.

Wszystko, co musisz zrobić, to po prostu zainstalować ten certyfikat na odpowiednim koncie na serwerze kompilacji.

  1. Pobierz PsExec z Windows Sysinternals .

  2. Otwórz wiersz polecenia i wprowadź następujące informacje. Pojawi się nowy wiersz poleceń, działający jako system lokalny (zakładając, że TeamCity działa na domyślnym koncie systemu lokalnego):

    > psexec.exe -i -s cmd.exe

  3. W tym nowym wierszu polecenia przejdź do katalogu zawierającego certyfikat i wprowadź nazwę pliku do zainstalowania (zmień nazwę pliku na swoją):

    > mykey.pfx

  4. Uruchomi się kreator importu certyfikatu. Kliknij i wybierz wszystkie sugerowane ustawienia domyślne.

  5. Uruchom kompilację.

Wszystkie kredyty należą się Stuart Noble (a następnie, jak sądzę, Laurentowi Kempé ).

Siedem
źródło