Dodałem słabo nazwany zestaw do mojego projektu Visual Studio 2005 (który jest mocno nazwany). Teraz pojawia się błąd:
„Zespół przywoływany„ xxxxxxxx ”nie ma mocnej nazwy”
Czy muszę podpisać to zgromadzenie strony trzeciej?
Dodałem słabo nazwany zestaw do mojego projektu Visual Studio 2005 (który jest mocno nazwany). Teraz pojawia się błąd:
„Zespół przywoływany„ xxxxxxxx ”nie ma mocnej nazwy”
Czy muszę podpisać to zgromadzenie strony trzeciej?
Odpowiedzi:
Aby uniknąć tego błędu, możesz:
Instrukcje dotyczące podpisywania zestawów innych firm znajdują się w .NET-fu: Podpisywanie niepodpisanego zestawu (bez podpisywania z opóźnieniem) .
Podpisywanie zespołów innych firm
Podstawową zasadą podpisywania partii pragnącej jest
Zdemontuj zespół za pomocą
ildasm.exe
i zapisz język pośredni (IL):Odbuduj i podpisz zestaw:
Naprawianie dodatkowych odniesień
Powyższe kroki działają poprawnie, chyba że zespół innej firmy ( A.dll ) odwołuje się do innej biblioteki ( B.dll ), która również musi zostać podpisana. Możesz zdemontować, odbudować i podpisać zarówno A.dll, jak i B.dll, używając powyższych poleceń, ale w czasie wykonywania ładowanie B.dll nie powiedzie się, ponieważ A.dll został pierwotnie zbudowany z odniesieniem do niepodpisanej wersji B.dll .
Rozwiązaniem tego problemu jest załatanie pliku IL wygenerowanego w kroku 1 powyżej. Musisz dodać token klucza publicznego B.dll do odwołania. Otrzymasz ten token dzwoniąc
co da ci następujące wyniki:
Ostatni wiersz zawiera token klucza publicznego. Następnie należy przeszukać IL A A.dll pod kątem odwołania do B.dll i dodać token w następujący sposób:
źródło
Rozwiń plik projektu, który używa projektu, który nie ma „silnego klucza nazwy” i poszukaj
.snk
pliku (.StrongNameKey).Przeglądaj do tego pliku w Eksploratorze Windows (tak, abyś wiedział, gdzie on jest).
Z powrotem w Visual Studio w projekcie, który nie ma „silnego klucza nazwy”, zrób
<Browse>
do.snk
pliku, który znalazłeś wcześniejTo powinno wystarczyć. To rozwiązało problem dla jednego projektu, używając formularza w innym projekcie w tym samym rozwiązaniu.
Mam nadzieję, że to pomoże.
źródło
Szukałem rozwiązania tego samego problemu i odznaczenie opcji „Podpisz zespół” działa dla mnie:
(jak możesz zauważyć, zrzut ekranu pochodzi z VS2010, ale mam nadzieję, że komuś pomoże)
źródło
Napisałem narzędzie do automatycznego tworzenia silnych nazw zespołó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 przestarzałych instrukcji.
http://brutaldev.com/post/2013/10/18/NET-Assembly-Strong-Name-Signer
Mam nadzieję, że pomoże to każdemu, kto musi podpisać zgromadzenie osoby trzeciej, bez konieczności przeskakiwania przez obręcze, aby się tam dostać.
źródło
Możesz używać niepodpisanych zespołów, jeśli twój zespół również jest niepodpisany.
źródło
Podpisanie zewnętrznego zespołu działało dla mnie:
http://www.codeproject.com/Tips/341645/Referenced-assembly-does-not-have-a-strong-name
EDYCJA : Dowiedziałem się, że pomocne jest publikowanie kroków na wypadek, gdyby linkowany artykuł nie był już ważny. Wszystkie podziękowania należą się Hiren Khirsaria :
Uruchom wiersz polecenia programu Visual Studio i przejdź do katalogu, w którym znajduje się biblioteka DLL.
For Example my DLL is located in
D:/hiren/Test.dll
Teraz utwórz plik IL za pomocą poniższego polecenia.
D:/hiren> ildasm /all /out=Test.il Test.dll
(to polecenie generuje bibliotekę kodów)Wygeneruj nowy klucz do podpisania swojego projektu.
D:/hiren> sn -k mykey.snk
Teraz podpisz bibliotekę za pomocą
ilasm
polecenia.D:/hiren> ilasm /dll /key=mykey.snk Test.il
źródło
Jak podpisać niepodpisany zespół zewnętrzny
sn
ildasm
iilasm
sn –k Cool.Library.snk
aby utworzyć nową parę kluczyildasm Cool.Library.dll /out:Cool.Library.il
zdemontować bibliotekęmove Cool.Library.dll Cool.Library.unsigned.dll
aby zachować oryginalną bibliotekę jako kopię zapasowąilasm Cool.Library.il /dll /resource=Cool.Library.res /key=Cool.Library.snk
złożyć bibliotekę o silnej nazwiepowershell -command "& {[System.Reflection.AssemblyName]::GetAssemblyName($args).FullName} Cool.Library.dll"
aby uzyskać pełną nazwę zespołu. Potrzebujesz tego bitu, jeśli musisz odwoływać się do biblioteki DLL w zewnętrznych plikach konfiguracyjnych, takich jak web.config lub app.config.źródło
Miałem ten problem z aplikacją o silnej nazwie, a następnie musiałem ją zmienić, aby odwoływał się do zespołu o niezbyt silnej nazwie, więc odznaczałem opcję „Podpisz zestaw” w sekcji podpisywania właściwości projektu, ale nadal narzekałem. Uznałem, że musiał to być artefakt, który powodował problem, ponieważ wszystko inne zrobiłem poprawnie i po prostu tak było. Znalazłem i usunąłem wiersz: [assembly: AssemblyKeyFile ("twoja_plik_pliku.snk")] z jego pliku assemblyInfo.cs. Potem nie będzie żadnych reklam kompilacji.
źródło
Działało mi się to z biblioteką dll ServiceStack, którą zainstalowałem z nuget. Okazuje się, że był dostępny inny zestaw bibliotek dll, które zostały oznaczone jako podpisane. Nie będzie to odpowiedź dla wszystkich, ale może być konieczne sprawdzenie istniejącej podpisanej wersji zestawu.
źródło
Dla mnie moim problemem było to, że miałem dwa takie same pakiety NuGet zainstalowane z różnymi wersjami.
źródło
Usunięcie zaznaczenia „Podpisz zespół” pod zakładką „Podpisywanie” działa tak, jak powiedział @Michal Stefanow.
Dodaj tutaj to najprostszy sposób na podpisanie własnych plików i / lub plików innych osób. Wystarczy dodać ten wiersz w wierszu polecenia „Zdarzenie po kompilacji”:
Możesz podpisywać pliki innych osób lub własne pliki i dowolną ich liczbę.
źródło
Stare pytanie, ale jestem zaskoczony, że nikt jeszcze nie wspomniał o ilmerge. ilmerge jest od Microsoft, ale nie jest dostarczany z VS lub SDK. Możesz go pobrać stąd . Istnieje również repozytorium github . Możesz także zainstalować z nuget:
Używać:
W razie potrzeby możesz wygenerować własny plik klucza za pomocą sn (z VS):
źródło
1> Register-PackageSource -ProviderName NuGet -Name NuGet -Location http://www.nuget.org/api/v2
2> Install-Package -Name ILMerge
3> $env:path += ';C:\Program Files\PackageManagement\NuGet\Packages\ilmerge.2.14.1208\tools'
4> ILMerge.exe .\packages\WireMock.Net.1.0.4.2\lib\net452\WireMock.Net.dll /keyfile:key.snk /out:WireMock.Net.dll /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 /ndebug /lib:.\packages\Newtonsoft.Json.10.0.3\lib\net45\ /lib:.\packages\Handlebars.Net.1.9.0\lib\net40 /lib:.\packages\SimMetrics.Net.1.0.4\lib\net45 /lib:.\packages\Microsoft.Owin.2.0.2\lib\net45 /lib:.\packages\Owin.1.0\lib\net40 /lib:.\packages\Microsoft.Owin.Hosting.2.0.2\lib\net45 /lib:.\packages\MimeKitLite.2.0.1\lib\net45 /lib:.\packages\XPath2.1.0.5.1\lib\net40 /lib:.\packages\RestEase.1.4.4\lib\net45
Sytuacja: Miałeś projekt A, B, C, D w roztworze X, Y
Projekt A, B, C w X Projekt A, C, D w Y
Potrzebuję użyć projektu C w projekcie A, ale później go nie używam. W bin Debug projekt A miał C.dll.
Jeśli skompiluję rozwiązanie X, wszystko dobrze (w tym rozwiązaniu usuwam odniesienie A -> C.), ale w rozwiązaniu Y dostaję ten problem.
Rozwiązaniem jest usunięcie C.dll w projekcie A bin Debug
źródło
Najpierw upewnij się, że wszystkie pakiety nuget są w tej samej wersji dla wszystkich projektów w twoim rozwiązaniu. np. nie chcesz, aby jeden projekt odwoływał się do NLog 4.0.0.0, a inny projekt odwoływał się do NLog 4.1.0.0. Następnie spróbuj ponownie zainstalować pakiety nuget za pomocą
Update-Package -reinstall
Miałem 3 zespoły stron trzecich, do których odwoływało się moje złożenie A, a tylko dwa zostały uwzględnione w Odsyłaczach przez mój zespół B, który również odwoływał się do A.
Brakujące odwołanie do zestawu innej firmy zostało dodane przez polecenie aktualizacji pakietu i błąd zniknął.
źródło