Jak naprawić błąd "odwołany zespół nie ma silnej nazwy"?

Dodałem do mojego projektu Visual Studio 2005 (który jest mocno nazwany) słabo nazwany assembly. I ' m now getting the error:

"zbiór odniesienia' xxxxxxxx 'nie ma mocnej nazwy"

Czy muszę podpisać to zgromadzenie?

Author: Luke Girvin, 2008-12-01

12 answers

Aby uniknąć tego błędu możesz:

  • załaduj zespół dynamicznie lub
  • podpisz Zgromadzenie stron trzecich.

Znajdziesz instrukcje dotyczące podpisywania zestawów stron trzecich w . NET-fu: podpisanie unsigned Assembly (bez podpisywania).

Podpisywanie Zgromadzeń Osób Trzecich

Podstawową zasadą podpisywania trzeciej strony jest

  1. Zdemontować zespół za pomocą ildasm.exe i zapisać język średniozaawansowany (IL):

    ildasm /all /out=thirdPartyLib.il thirdPartyLib.dll 
    
  2. Odbudować i podpisać Zgromadzenie:

    ilasm /dll /key=myKey.snk thirdPartyLib.il
    

Naprawianie Dodatkowych Odniesień

Powyższe kroki działają dobrze, chyba że zespół innej firmy ( A.dll ) odwołuje się do innej biblioteki (B.dll ), który również musi zostać podpisany. Możesz zdemontować, odbudować i podpisać oba A.dll i B.dll za pomocą powyższych poleceń, ale w czasie wykonywania, Ładowanie B.dll zawiedzie, Ponieważ A.dll został pierwotnie zbudowany z odniesieniem do unsigned Wersja B.dll .

Poprawką tego problemu jest łatanie pliku IL wygenerowanego w kroku 1 powyżej. Musisz dodać token klucza publicznego B.dll do referencji. Możesz otrzymać ten token dzwoniąc

sn -Tp B.dll 

Co daje następujące wyjście:

Microsoft (R) .NET Framework Strong Name Utility  Version 4.0.30319.33440
Copyright (c) Microsoft Corporation.  All rights reserved.

Public key (hash algorithm: sha1):
002400000480000094000000060200000024000052534131000400000100010093d86f6656eed3
b62780466e6ba30fd15d69a3918e4bbd75d3e9ca8baa5641955c86251ce1e5a83857c7f49288eb
4a0093b20aa9c7faae5184770108d9515905ddd82222514921fa81fff2ea565ae0e98cf66d3758
cb8b22c8efd729821518a76427b7ca1c979caa2d78404da3d44592badc194d05bfdd29b9b8120c
78effe92

Public key token is a8a7ed7203d87bc9

Ostatnia linia zawiera token klucza publicznego. Następnie musisz przeszukać IL A.dll w odniesieniu do B.dll i dodać token w następujący sposób:

.assembly extern /*23000003*/ MyAssemblyName
{
  .publickeytoken = (A8 A7 ED 72 03 D8 7B C9 )                         
  .ver 10:0:0:0
}
 193
Author: Dirk Vollmar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-12 13:46:39

Rozwiń plik projektu, który jest używając projektu, który nie ma "silnego klucza nazwy" i poszukaj .plik snk (.StrongNameKey).

Przejrzyj ten plik w Windows Explorer (tylko po to, aby wiedzieć, gdzie on jest).

Powrót do Visual Studio w projekcie, który nie "ma silnego klucza nazwy", do

  • kliknij prawym przyciskiem myszy na pliku projektu
  • Select Properties
  • wybierz "zakładkę podpisywania" (po lewej)
  • kliknij pole wyboru "podpisz zespół"
  • Then & ltBrowse> to the .plik snk, który znalazłeś wcześniej

To powinno załatwić sprawę. To rozwiązało problem dla mnie dla jednego projektu za pomocą formularza wewnątrz innego projektu w tym samym rozwiązaniu.

Mam nadzieję, że to pomoże.

 92
Author: MrOli3000,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-24 12:57:54

Szukalem rozwiazania tego samego problemu i u mnie dziala opcja "Sign The assembly":

Tutaj wpisz opis obrazka

(Jak można zauważyć zrzut ekranu pochodzi z VS2010, ale mam nadzieję, że komuś pomoże)

 51
Author: Michal Stefanow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-06 16:49:45

Napisałem narzędzie do automatycznego podpisywania znaków, w tym tych, dla których nie masz kodu źródłowego lub projektów, które zostały porzucone. Wykorzystuje wiele technik opisanych w odpowiedziach w prosty sposób, bez żadnych wad lub wad istniejących narzędzi lub datowanych instrukcji.

Http://brutaldev.com/post/2013/10/18/NET-Assembly-Strong-Name-Signer

Mam nadzieję, że to pomoże każdemu, kto musi podpisać Zgromadzenie stron trzecich bez konieczności skakać przez obręcze, aby się tam dostać.

 43
Author: BrutalDev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-18 21:52:11

Możesz użyć unsigned Assembly, jeśli twój assembly jest również unsigned.

 39
Author: Alexandr Nikitin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-14 16:06:02

Podpisanie trzeciego zgromadzenia pracowało dla mnie:

Http://www.codeproject.com/Tips/341645/Referenced-assembly-does-not-have-a-strong-name

Edytuj : Dowiedziałem się, że pomocne jest publikowanie kroków w przypadku, gdy powiązany artykuł nie jest już ważny. Wszystkie podziękowania należą się Hiren Khirsaria :

  1. Uruchom wiersz poleceń programu visual studio i przejdź do katalogu, w którym znajduje się Twoja biblioteka DLL.

    For Example my DLL is located inD:/hiren/Test.dll

  2. Teraz Utwórz plik IL używając poniższego polecenia.

    D:/hiren> ildasm /all /out=Test.il Test.dll (polecenie to generuje bibliotekę kodu)

  3. Wygeneruj nowy klucz do podpisania projektu.

    D:/hiren> sn -k mykey.snk

  4. Teraz podpisz bibliotekę za pomocą polecenia ilasm.

    D:/hiren> ilasm /dll /key=mykey.snk Test.il

 19
Author: mateuscb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-04 15:14:06

Jak podpisać niepodpisane Zgromadzenie stron trzecich

  1. Otwórz wiersz poleceń programisty dla programu Visual Studio. To narzędzie jest dostępne w programach okien i można je znaleźć przy użyciu domyślnego wyszukiwania systemu Windows.
  2. upewnij się, że monit ma dostęp do następujących narzędzi, wykonując je raz: sn ildasm oraz ilasm
  3. przejdź do folderu, w którym Twoje fajne.Biblioteka.dll znajduje się
  4. sn –k Cool.Library.snk aby utworzyć nową parę kluczy
  5. ildasm Cool.Library.dll /out:Cool.Library.il do demontażu biblioteka
  6. move Cool.Library.dll Cool.Library.unsigned.dll aby zachować oryginalną bibliotekę jako kopię zapasową
  7. ilasm Cool.Library.il /dll /resource=Cool.Library.res /key=Cool.Library.snk aby ponownie złożyć bibliotekę o silnej nazwie
  8. powershell -command "& {[System.Reflection.AssemblyName]::GetAssemblyName($args).FullName} Cool.Library.dll" aby uzyskać pełną kwalifikowaną nazwę zespołu. Będziesz potrzebował tego bitu, jeśli musisz odwołać się do DLL w zewnętrznych plikach konfiguracyjnych, takich jak web.config lub app.config.
 12
Author: Martin Devillers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-10 11:35:20

Miałem ten problem dla aplikacji, która została silnie nazwana, a następnie musiałem ją zmienić, aby odwołać się do nie-silnie nazwanego zespołu, więc odznaczyłem "podpisz zespół" w sekcji podpisywanie właściwości projektu, ale nadal narzekał. Pomyślałem, że to musi być artefakt, który gdzieś powoduje problem, ponieważ wszystko inne zrobiłem poprawnie i tylko to. Znalazłem i usunąłem linię: [assemblykeyfile: AssemblyKeyFile ("yourkeyfilename.snk")] z jego assemblyInfo.plik cs. Wtedy nie ma budowy skargi po tym.

 5
Author: Joe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-17 16:56:31

Natknąłem się na to z servicestack dll, który zainstalowałem z nuget. Okazało się, że był inny zestaw bibliotek DLL, które zostały oznaczone jako Podpisane. Nie będzie to odpowiedź dla wszystkich, ale być może będziesz musiał sprawdzić, czy istnieje podpisana wersja twojego zestawu. ServiceStack.Podpisane

 4
Author: Henry Crans,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-03 15:55:32

Usunięcie znacznika "Sign The assembly" pod zakładką "Signing" działa tak, jak powiedział @Michal Stefanow.

Dodaj tutaj jest najprostszym sposobem, aby podpisać własne pliki i / lub pliki innych osób. Wystarczy dodać tę linię pod "post-build event command line":

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\signtool.exe" sign /f "$(ProjectDir)\YourPfxFileNameHere.pfx" /p YourPfxFilePasswordHere /d "Your software title here" /du http://www.yourWebsiteHere.com /t http://timestamp.verisign.com/scripts/timstamp.dll /v "$(BaseOutputPath)$(TargetFileName)"

Możesz podpisywać Pliki innych osób lub własne pliki i tyle, ile chcesz.

Tutaj wpisz opis obrazka

 2
Author: Pabinator,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-21 05:20:21

Stare pytanie, ale dziwię się, że nikt jeszcze nie wspomniał o ilmerge. ilmerge jest z firmy Microsoft, ale nie jest dostarczany z VS lub SDK. Możesz go pobrać z tutaj . Istnieje również repozytorium github . Można również zainstalować z nuget:

PM>Install-Package ilmerge

Do użycia:

ilmerge assembly.dll /keyfile:key.snk /out:assembly.dll /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 /ndebug

W razie potrzeby możesz wygenerować własny plik kluczowy za pomocą sn (from VS):

sn -k key.snk
 2
Author: Jahmic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-08 12:23:07

Moim problemem było to, że miałem zainstalowane dwa takie same pakiety NuGet z różnymi wersjami.

 0
Author: Demodave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-02 16:03:50