2009-04-29 7 views
5

Von Can I build 2 or more dlls from C# project in Visual Studio 2008? habe ich eine andere Idee, nur ein großes Projekt zu erstellen. Danach zerlege ich eine Projekt-DLL (die viele Klassen enthält) in 1 DLL pro Klasse, indem ich ein Post-Build-Event verwende, um Win App-Projekt aufzurufen (für separate eine große DLL). Wie macht man das?Kann ich eine große DLL in 1 DLL pro Klasse trennen?

Darüber hinaus muss ich angehängte Datei in einer großen DLL zu verwalten.

aktualisieren ich einige Trick gefunden, die mich führen könnte dieses Problem durch zu lösen individuelle bauen? Darüber hinaus denke ich, dass ich einen benutzerdefinierten Handler erstellen kann, der eine dynamische Assemblydatei durch Verwendung der separaten Moduldatei & al.exe generiert. Aber dieses Feature ist über meinen Erwartungen und Unnessaries (Quellcode wird selten geändert).

Multi-file Assemblies: What and How

How to: Build a Multifile Assembly

POCO Custom Multifile Assembly and ReSharper

Danke,

+6

Warum möchten Sie das tun? –

+0

Ich denke, Sie würden bessere Antworten erhalten, wenn Sie hervorheben, dass dies für die Zwecke der Silverlight-Steuerelemente ist ... –

+0

Wenn Sie große Website haben, die Silverlight verwenden, um anzuzeigen, werden Sie lange Zeit verbringen, um Homepage zu laden. –

Antwort

3

Dieses Problem wird durch benutzerdefinierten Skript für MSBuild gelöst wird, die in einer anderen Frage erklärt wurde.

<ItemGroup> 
    <Compile Include="Class1.cs"> 
    <Plugin>true</Plugin> 
    </Compile> 
    <Compile Include="Class2.cs" /> 
    <Compile Include="Class3.cs"> 
    <Plugin>true</Plugin> 
    </Compile> 
    <Compile Include="Program.cs" /> 
    <Compile Include="Properties\AssemblyInfo.cs" /> 
</ItemGroup> 

Visual studio one project with several dlls as output?

Dank @franko_camron für Vorschlag.

7

Die Antwort, die Sie hier erhalten wird, ist nicht anders als die Antwort in der anderen Frage: put in a separate project for each separate dll.

Was ich dich fragen möchte ist, was dein Verständnis der Definition einer "Klasse" ist. Eine Klasse pro DLL bedeutet wahrscheinlich, dass Sie mit der Funktionsweise von Assemblys, Namespaces und Klassen nicht vertraut sind.

Sagen Sie uns, was Sie wirklich tun möchten? Weil das, was Sie tun sollten, um dieses Problem zu lösen (z. B. Erstellen einer DLL pro Klasse) nicht praktikabel ist.

aktualisieren

den Kontext Ihrer Anforderung Unter Berücksichtigung (zB Silverlight Web-Anwendung), meine Schlussfolgerung ist, dass Aufspalten Ihre Klassen auf mehrere DLLs nicht in einer Leistungsverbesserung führen in einer ASP.NET Web Seite, weil:

  • DLLs nur vom Server verwendet werden, sind sie über HTTP nicht heruntergeladen zu Ihrem Browser
  • Sobald eine DLL von einer Webanwendung geladen wurde, wird sie nicht erneut geladen - unabhängig davon, wie viele Benutzer Ihre Site gleichzeitig verwenden. Eine DLL-Instanz pro Server
  • Wenn Sie Ihre Webanwendung starten, wird es geladen alle DLLs, die abhängig von der Kompilierung, ob Sie es verwenden werden oder nicht.
  • Mit Ihren Anforderungen ist es wahrscheinlich am besten, nicht Silverlight für Ihre Anwendung zu verwenden, unter Berücksichtigung des Bandbreitenlimits. Die Möglichkeiten, die Sie erforschen können, sind:

  • Learning AJAX-Techniken, insbesondere JSON (und wahrscheinlich nicht ASP.NET AJAX und seine leicht zu Missbrauch Update)
  • Learning jQuery Kontrollen zu finden, die in JavaScript implementieren wird, was Sie tun wollen, mit Silverlight
+0

möchten Sie vielleicht einen Link zur verwandten Frage hinzufügen – karlipoppins

+2

Mit anderen Worten: "Sie stellen diese Frage immer wieder. Ich glaube nicht, dass es bedeutet, was Sie denken, dass es bedeutet!" :) –

+0

es ist in seiner Frage. :) –

8

Nur ... warum? Viele Dlls können sich auf den Start der App auswirken (aufgrund von "Fusion"). Es wird auch ziemlich viel sofort leiden von kreisförmigen Referenzen, die eine schlechte Sache ist.

Da .NET-Code (standardmäßig) JITted bei der ersten Verwendung erhält, hat dies keine großen Auswirkungen auf die Verwendung zusätzlicher Klassen in einer DLL, die in dieser Anwendung nicht verwendet werden. Sie sitzen einfach still da und sind für niemanden lästig.

Die schiere Verwaltungskosten für eine DLL pro Klasse wird die Bereitstellung usw. quälenden machen.

Alles in allem kann ich denke nicht an einer vernünftigen Grund, dies zu tun ...

+0

Da ich Silverlight-Anwendung wie Webformular erstellen möchte (1 Silverlight usercontrol entspricht 1 Webseite). Also, ich muss 1 DLL für 1 Silverlight usercontrol erstellen. –

+0

Ich entferne gelegentlich große Klassen wie die DAL, um die Bauzeit der BLL-Klassen zu verkürzen. Aber um das für jede Klasse zu tun, hast du recht; kein "vernünftiger Grund". – rizzle

+0

Es ist wahr. Für alle Anwendungen an einem Ort ist diese Idee unwichtig. Aber für die Server/Client-Anwendung ist diese Idee großartig, wenn es wahr sein kann (creating silverlight page fast gleich erstellen der Webseite). –