2010-03-14 7 views
5

Ich weiß, dass es ein Windows PE32 ist, aber ich weiß auch, dass die Bereitstellungseinheit in .NET eine Assembly ist, die wiederum ein Manifest enthält und aus mehreren verwalteten Modulen bestehen kann.Was ist ein .NET verwaltetes Modul?

Meine Fragen sind:

1) Wie würden Sie mehrere verwaltete Module zu erstellen, wenn ein Projekt wie eine Klasse lib oder eine Konsole app usw. Aufbau

2) Gibt es eine Möglichkeit, dies zu spezifizieren der Compiler (z. B. über die Projekteigenschaften), um Ihre Quellcodedateien in mehrere verwaltete Module zu partitionieren. Wenn ja, welchen Nutzen bringt das?

3) Können verwaltete Module Baugruppen überspannen?

4) Wird eine separate Datei auf der Festplatte erstellt, wenn der Quellcode kompiliert wird oder werden diese im Speicher erstellt und direkt in eine Assembly eingebettet?

EDIT:

@ Jon:

für 2): So ist die Erstellung/Gebäude Quelle in Visual Studio immer ein einzelnes verwaltetes Modul erstellen? Wenn dem so ist, verstehe ich nicht, warum VS dafür keinen Mechanismus bereitstellt, obwohl .NET dies unterstützt. Ich stimme zu, dass es nicht möglich wäre, eine Assembly mit Modulen aus verschiedenen Sprachen zu erstellen. Ist das der einzige Grund, warum .NET das Erstellen von Baugruppen mit mehreren Modulen ermöglicht? Ich habe in Richters CLR über C# gelesen, dass Module auch Assemblys umspannen können. Dies kann dazu beitragen, die Baugruppengröße zu reduzieren und den Speicherbedarf durch Herunterladen von Assemblys bei Bedarf zu reduzieren, wenn bestimmte Funktionen zum ersten Mal aufgerufen werden, aber ich bin nicht ganz sicher Warum sollte man ein Modul über Baugruppen hinweg aufteilen? Warum nicht einfach eine neue Baugruppe erstellen, die im Prozess ein neues Modul erstellt? Sie würden immer noch die gleichen Vorteile erhalten.

Punkt 4) war in Bezug auf ". Netmodul" Dateien. Als Teil des VS-Buildprozesses habe ich keine ".netmodule" -Dateien im obj-Verzeichnis erstellt. Ich habe in der Regel .pdb, .dll/.exe und eine * FileListAbsolute-Datei bemerkt und daher die Frage, ob separate Dateien für verwaltete Module erstellt werden.

EDIT: @ Jon: Hier ist der Auszug aus CLR via C# (3. Auflage) Pg 43: Vielleicht bin ich Verlesen aber es klingt für mich, dass ein Modul (die eine Datei zu einer Baugruppe gehör) kann auf Anfrage heruntergeladen werden.

„Zum Beispiel kann eine Anordnung von mehreren Typen bestehen. Sie die häufig verwendeten Typen in einer Datei setzen könnte und die weniger häufig verwendeten Typen in eine andere Datei. Wenn die Montage durch das Herunterladen es über das Internet bereitgestellt wird, Die Datei mit die selten verwendeten Typen müssen möglicherweise nie auf den Client heruntergeladen werden, wenn der Client niemals auf die Typen zugreift.Zum Beispiel könnte ein unabhängiger Softwarehersteller (ISV), der auf UI-Steuerelemente spezialisiert ist, Active Accessibility-Typen implementieren Ein separates Modul (bis erfüllt die Microsoft Logo-Anforderungen.) Nur Benutzer, die die zusätzlichen Funktionen benötigen, müssen dieses Modul herunterladen oaded.

Sie konfigurieren eine Anwendung zum Herunterladen von Baugruppendateien, indem Sie in der Konfigurationsdatei der Anwendung ein codeBase-Element (siehe Kapitel 3) angeben.Die Codebasis Element identifiziert eine URL, die auf das alle Der Dateien einer Baugruppe kann gefunden werden „

Antwort

6

1) Sie können dies in Visual Studio nicht tun Sie es von der mit der Befehlszeile tun:..

csc /target:module Foo.cs Bar.cs 

In diesem Fall, dass Sie mit einem fle Foo.netmodule

2) Siehe Frage 1 genannt würden am Ende -. Sie dies von Visual Studio nicht tun können, aber man kann es von der Kommandozeile kann ich dies nicht tun kenne irgendwelche Vorteile EDIT: Ich stimme der Aussage von Andrew zu, dass Sie eine Assembly aus mehreren Sprachen auf diese Weise erstellen könnten - aber ich glaube es wäre unpraktisch. Sie müssten eine geeignete Abhängigkeitskette ausarbeiten, damit Sie zuerst ein vollständiges Modul erstellen können, dann das nächste usw. An diesem Punkt sollten Sie nicht einfach separate Assemblies erstellen. Es wäre tatsächlich eine zusätzliche Zugänglichkeitsdomäne, zugegebenermaßen ... aber das ist alles. Ich glaube, dass die Nachteile in fast allen Szenarien die Vorteile überwiegen werden. Wenn Sie wirklich eine einzelne Baugruppe erstellen möchten, können Sie nach dem Erstellen von separaten Baugruppen immer ilmerge verwenden.

3) Nun, in der Theorie könnte ein einzelnes Modul in mehreren Baugruppen enthalten sein, aber das hätte keinen Sinn - es würde ein sehr verwirrendes System schaffen.

4) Ich bin nicht wirklich sicher, was du meinst. Visual Studio erstellt einige Zwischendateien im Verzeichnis obj, wenn Sie das meinen. Der Befehlszeilencompiler lässt keine zusätzlichen Dateien herumliegen, aber er kann Zwischendateien erstellen, die er bei Fertigstellung löscht - ich weiß es nicht wirklich.

EDIT: Ich glaube nicht, VS baut Module als Zwischenschritt. Beim Kompilieren in Visual Studio wird immer eine einzelne Assembly pro Projekt erstellt, und diese Assembly verfügt über ein einzelnes Modul. Wenn Sie sagen, dass CLR über C# sagt, dass "Module Baugruppen umfassen können", sind Sie sicher, dass Sie nicht meinen, dass Baugruppen mehrere Module umfassen können? Sie können Module einer Baugruppe auf Anfrage herunterladen, aber nicht umgekehrt. Wenn Sie eine bestimmte Referenz haben, könnte ich nachschlagen ...

+0

@ Jon: Danke für die Antwort. Ich habe nicht genug Zeichen, um meine Kommentare in diesen Bereich einzufügen, also habe ich sie zum ursprünglichen Beitrag hinzugefügt. Einblicke würden sehr geschätzt werden. –

+0

@Jon: Du hast Recht. Das Buch sagt nicht, dass ein Modul Assemblies umfassen kann. Das habe ich falsch verstanden. aber es heißt, dass ein Modul bei Bedarf heruntergeladen werden kann. Ich habe den Auszug aus CLR über C# (3. Auflage) Pg 43 in den Originalbeitrag eingefügt. –

5

Sie können keine Module mit VS erstellen, aber Sie können es mit Compiler tun. Module sind separate Dateien auf dem Dateisystem, es ist möglich, mehrere Module in einer Assembly in verschiedenen Sprachen zu haben.

EDIT: Sie können auch selten verwendete Klassen in den separaten Modulen einfügen. Solche Module werden nur geladen, wenn Klassen benötigt werden.

+1

Das wäre interessant ... Erstellen einer einzigen Assembly aus Sprachen, die am besten für das Problem geeignet sind. –

+0

@Andrew: Wenn Sie an nur einer .NET-Sprache festhalten, gibt es bestimmte Gründe/Szenarien, in denen es sinnvoll wäre, Multi-Modul-Assemblies zu haben? –

+0

@Abhijeet Patel: Ich habe die Antwort aktualisiert. –

Verwandte Themen