Czym dokładnie jest Assembly w C # lub .NET?

102

Czy mógłbyś wyjaśnić, co to jest zestaw w C # lub .NET?

  1. Gdzie to się zaczyna i gdzie się kończy?
  2. Jakie ważne informacje powinienem wiedzieć o zespołach?
Roee Adler
źródło
5
Ściśle mówiąc, czy zestaw nie jest koncepcją .NET, a nie koncepcją C #?
JeffH
14
@JeffH: kiedy zadałem pytanie, pomyślałem, że to koncepcja C #. Teraz rozumiem, że to .NET. Niemniej jednak, ponieważ myślę, że inni ludzie mogą być zdezorientowani, tak jak ja, celowo nie zmieniłem tego, aby Google dostosował się do tego błędu ...
Roee Adler

Odpowiedzi:

114

Zestaw to skompilowane dane wyjściowe kodu, zwykle biblioteka DLL, ale plik EXE jest również zestawem. Jest to najmniejsza jednostka wdrożenia dla dowolnego projektu .NET.

Zestaw zazwyczaj zawiera kod .NET w MSIL (język pośredni firmy Microsoft), który zostanie skompilowany do kodu natywnego („JITted” - kompilowany przez kompilator Just-In-Time) przy pierwszym uruchomieniu na danym komputerze. Ten skompilowany kod będzie również przechowywany w zestawie i ponownie używany w kolejnych wywołaniach.

Zestaw może również zawierać zasoby, takie jak ikony, mapy bitowe, tabele ciągów i tak dalej. Ponadto zestaw zawiera również metadane w manifeście zestawu - informacje, takie jak numer wersji, silna nazwa, kultura, zestawy przywoływane i tak dalej.

W 99% przypadków jeden zespół równa się fizycznemu plikowi na dysku - przypadek zespołu złożonego z wielu plików (jeden zespół, rozłożony na więcej niż jeden plik) wydaje się być raczej dziwnym przypadkiem krawędziowym, nigdy nie spotkałem się do tej pory w moim ponad 5-letnim rozwoju .NET.

W zestawie wieloplikowym nadal byłby tylko jeden manifest zestawu w bibliotece DLL lub EXE, a kod MSIL w wielu plikach modułu sieciowego.

marc_s
źródło
1
@marc_s: Myślę, że masz na myśli plik z wieloma złożeniami. Możliwe jest spakowanie wielu zestawów w jednym pliku za pomocą narzędzi wiersza poleceń studia, ale nie bezpośrednio przez IDE.
Greg D
5
Bardzo ważną rzeczą w zestawie są metadane w manifeście zestawu. Manifest zawiera informacje, takie jak wersja, silna nazwa, kultura, zestawy przywoływane itp. W zestawie wieloplikowym nadal będzie tylko jeden manifest zestawu w bibliotece dll lub exe, a kod MSIL w wielu plikach .netmodule. Zasadniczo zespół to minimalna jednostka rozmieszczenia w> net
softveda
@marc_s: Byłbym wdzięczny, gdybyś dodał punkt @ Pratik do odpowiedzi, dzięki
Roee Adler
@rax: gotowe; @pratik: teraz mylisz mnie: znowu mówisz o „zespole złożonym z wielu plików”, podczas gdy @GregD wspomniał, że to naprawdę był „plik z wieloma asemblerami” - co to teraz jest? (jak powiedziałem - nigdy nie spotkałem takiej bestii, więc nie jestem pewien, czy jest to wiele zestawów na plik, czy wiele plików na zestaw ...)
marc_s
3
„Ten skompilowany kod będzie również przechowywany w zestawie i ponownie używany w kolejnych wywołaniach”. Jest to mylące i / lub mało jasne. Żaden skompilowany kod nie jest „przechowywany” w zestawie. Myślę, że możesz odnosić się do sposobu, w jaki każda metoda / funkcja jest „podłączana” do kodu natywnego, kiedy jest po raz pierwszy wywoływana. Następnie, gdy zestaw znajduje się w pamięci, wywoływana jest wersja kodu natywnego metody. Jeśli zestaw zostanie zwolniony, a później załadowany ponownie, proces jit będzie się powtarzał. Oczywiście zakłada się, że nie używasz NGEN do wstępnej kompilacji swoich zestawów do kodu natywnego (niezalecane).
Ash,
13

Montaż .NET

W środowisku Microsoft .NET zestaw jest częściowo skompilowaną biblioteką kodu używaną do wdrażania, przechowywania wersji i zabezpieczeń.


źródło
7

http://www.codeguru.com/columns/csharp_learning/article.php/c5845

Zestaw to plik, który jest automatycznie generowany przez kompilator po pomyślnej kompilacji każdej aplikacji .NET. Może to być biblioteka dołączana dynamicznie lub plik wykonywalny. Jest generowany tylko raz dla aplikacji i przy każdej kolejnej kompilacji zestaw jest aktualizowany.

Raghav
źródło
2
Zestawy różnią się od plików, które je zawierają.
Greg D
1
@Raghav - Zaktualizuj swoje zdjęcie, dodając coś zwyczajnego, na miłość boską! Wiesz, nie pozujemy tutaj do paszportów!
TheFlash
3

Oto kolejne wyjaśnienie tworzenia zestawów .NET, mini-cytat:

Platforma .NET składa się z koncepcji modułów, zestawów, które przechowują metadane i manifestują informacje. Zespół może zawierać wiele modułów. Visual C # zawsze tworzy tylko jeden moduł, który jest przekształcany w zestaw przez kompilator C # (csc.exe), ale zestaw może łączyć ze sobą wiele modułów .NET za pomocą narzędzia wiersza polecenia konsolidatora zestawu (al.exe). Na przykład każdy plik .cs z kodem źródłowym można skompilować do modułu i połączyć ze sobą, aby utworzyć zestaw - zestaw to po prostu zbiór modułów i zasobów. Jednak jeden z tych modułów; musi zawierać manifest metadanych (patrz poniżej), aby zestaw był zrozumiały dla środowiska CLR.
....
Po utworzeniu nowego pliku .exe lub .dll w VS.NET zobaczysz swój plik w folderze bin. Otwarcie go w notatniku wyda bełkot, a nawet w edytorze szesnastkowym bez znajomości struktury pliku, potrzebujesz narzędzia takiego jak ildasm.exe lub eksplorator CFF, aby nadać mu znaczenie. Struktura zestawu jest następująca:

Nagłówek PE Nagłówek
CLR
Metadane
CLR
Kod CLR IL
Dane rodzime

Chris S.
źródło
Gdzie, do diabła, prowadzi mnie ten link? Rodzaj nieskończonych przekierowań! Po kilku przekierowaniach przekierował mnie na stronę, która to mówi . Nie ma też możliwości uzyskania oryginalnego opublikowanego adresu URL.
Sнаđошƒаӽ
2

Odpowiedź jest potrzebna do natychmiastowego uchwycenia.

Mówiąc prościej, jest to skompilowany projekt zawierający Twoje klasy i dodatkowe pliki, jeśli takie istnieją. Oznacza to, że każdy projekt w rozwiązaniu jest montażem .

Lub bardziej technicznie,

Montaż jest, gdy typ jest przechowywany w flesystem. Zestawy są mechanizmem do wdrażania kodu. Na przykład System.Data.dll zestaw zawiera typy do zarządzania danymi. Aby używać typów w innych zestawach, należy się do nich odwoływać. - Źródło

Skąd to wiemy? Jeśli spojrzysz na właściwości projektu w ramach rozwiązania , zobaczysz następujące obrazy.

Kiedy kompilujesz projekt, okazuje się, że jest to DLL lub EXE .

wprowadź opis obrazu tutaj wprowadź opis obrazu tutaj wprowadź opis obrazu tutaj

snr
źródło
1

Gdy kod źródłowy jest kompilowany przez kompilator języka, generuje zestaw zarządzany i MSIL (język pośredni MisroSoft). Ten zestaw zawiera plik .dll lub .exe . Assebmly może mieć dwa typy Private Assembly i Shared Assembly , udostępnione Assembly jest przechowywane w GAC (Global Assembly Cache), dzięki czemu każda aplikacja może się do niego odwoływać, podczas gdy zestaw prywatny jest przechowywany w folderze aplikacji, z którego może korzystać tylko jedna aplikacja.

gaurav patni
źródło
0

Zestaw to biblioteka DLL lub EXE, która zostanie utworzona podczas publikowania lub kompilowania aplikacji.

Anup Shetty
źródło
0

Assembly to zbiór jednostek logicznych. Jednostki logiczne odnoszą się do typów i zasobów, które są wymagane do zbudowania aplikacji i wdrożenia ich przy użyciu platformy .Net. Zasadniczo Assembly to zbiór plików Exe i DLL. Jest przenośny i wykonywalny.

Abhay.Patil
źródło
-1

Po napisaniu kodu źródłowego programu (projektu) tworzony jest plik, który może być DLL lub EXE w zależności od projektu. Robi tylko raz dla jednego projektu. Ma dwa typy 1: - pojedynczy 2: - wspólny lub wieloprogramowy pojedynczy zespół używany tylko w jednym programie, podczas gdy współdzielony może być używany do wielu programów

kirti kant pareek
źródło
Po napisaniu kodu źródłowego programu (projektu) powstaje plik, który może być DLL lub EXE w zależności od projektu - po napisaniu kodu źródłowego? Wydaje się, że nie jest to bardzo dobra wskazówka, kiedy ten plik jest tworzony, co przy okazji nie ma znaczenia, biorąc pod uwagę pytanie.
Sнаđошƒаӽ