none
Assemblys in Control-DLL einschließen RRS feed

  • Frage

  • Hallo!

    Gibt es die Möglichkeit die in einem Control-Projekt eingebundenen Assemblys mit in die Ausgabe-DLL einzuschließen?

    Am Beispiel. Ich habe ein Uhr-Control, dass die Assemblys ar_WPF und Interactivity einschließt.

     

     

    Beim Compilieren werden mir nun 3 DLL's im Ausgabeordner eingebunden:

    - Die Control-DLL und beide eingeschlossenen Assembly-DLL's.

    Ich möchte aber nur eine DLL weitergeben, in der die anderen DLL's "enthalten" sind.

    Ist das möglich?





    • Bearbeitet perlfred Montag, 20. Juni 2022 14:11
    Montag, 20. Juni 2022 14:08

Antworten

  • Hallo Ivan!

    Danke für deine Bemühungen.

    ILMerge kann nicht für Projekte die auf .Net Core aufbauen verwendet werden (unabhängig davon, ob es WPF-Projekte sind oder nicht). Unterstützung bis .Net 4.8.

    Die grundlegende Lösung/Methode besteht ja darin, die in dem Projekt verlinkten (ab Core 3.1) Assemblys als lokale Resourcen zur Verfügung zu stellen um sie dann zusammen mit der Projekt-Assembly in eine DLL (bei Controls oder Exe-Datei bei einer Anwendung) zu kompilieren.

      

    Bei mir hat sich folgende Arbeitsweise bewährt.

      

    1. Einbinden der NuGet-Package Fody und Costura.Fody in das (UserControl) Projekt. (Die Packages übernehmen die Umwandlung der referenzierten Assemblys in die lokalen Resourcen bei der Kompilierung des Projektes.)

    2. Einfügen einer FodyWeavers XML-Datei in das Root-Verzeichnis des (UserControl) Projektes. (Konfiguration von Costura.Fody)

    3. Modifizieren der (UserControl) Projektdatei um eine Kompiler-Warnung auszuschalten.

    4. Kompilieren des (UserControl) Projektes, damit alle referenzierten Assemblys in die (UserControl) Assembly integriert werden.

      

    zu1.) Fody und Costura.Fody NuGet-Package installieren.

     

      

    zu2.)  FodyWeavers XML-Datei dem Root-Verzeichnis des Control-Projektes hinzufügen.


    Im VS -> Projektmappe "MyProjektName" selektieren -> KontextMenü (re. Maustaste) ->
    Hinzufügen -> Neues Element -> XML-Datei Bezeichnung: FodyWeavers eingeben -> OK

    Festen Inhalt eingeben:

      

    <?xml version="1.0" encoding="utf-8"?>
    <Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
      <Costura />
    </Weavers>


    Ergebnis:  

        

    zu 3.) Kompiler-Warnung ausschalten.

    Durch das Hinzufügen der Fody und Costura.Fody NuGet-Packages die mit dem .Net-Framwork 4.8 erstellt wurden, wird beim Kompilieren durch den Compiler in einem .Net Core Projekt eine Warnung erzeugt:

     

     

    Diese Compilerwarnung kann man durch Modifizierung der Projekt-Datei ("MyProjekt".csproj) ausschalten. 

    Dazu muss im Abschnitt <ItemGroup> der Eintrag: <IncludeAssets> gelöscht oder auskommentiert (<-- ... -->) werden.

     

    zu4.) Projekt kompilieren -> Ergebnis

     

    Ausgabeordner des UserControl:


    Vor der Umstellung Nach der Umstellung
       

      

      

    Sieht erst einmal etwas aufwendig aus, aber im Prinzip müssen nur die zwei NuGet-Package dem Projekt hinzugefügt werden, die (feste) Konfigurationsdatei im Stammverzeichnis angelegt werden und beim nächsten Kompilieren ist alles erledigt.  :-)


      
    • Als Antwort markiert perlfred Freitag, 24. Juni 2022 16:46
    • Bearbeitet perlfred Freitag, 24. Juni 2022 16:58
    Freitag, 24. Juni 2022 16:39

Alle Antworten

  • Hallo Fred,

    Es gibt einige Möglichkeiten, mehrere Assemblys zu einer zusammenzuführen:
    • Verwendest Du ILMerge, ein kostenloses Tool;
    • Gebrauchst Du einen kurzen Beispielcode, der von Dir ein wenig geändert werden muss;
    • kommerzielles Tool zu nutzen;
    Diese Optionen werden in folgendem Thread diskutiert:
    How to merge multiple assemblies into one?
    Es wird berichtet, dass ILmerge mit WPF-Assemblys nicht ordnungsgemäß funktioniert. Einige Alternativen sind hier als Link bereitgestellt:
    How to merge assemblies of a WPF application?

    Gruß,
    Ivan Dragov

    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 21. Juni 2022 08:03
    Moderator
  • Hallo Ivan!

    Danke für deine Bemühungen.

    ILMerge kann nicht für Projekte die auf .Net Core aufbauen verwendet werden (unabhängig davon, ob es WPF-Projekte sind oder nicht). Unterstützung bis .Net 4.8.

    Die grundlegende Lösung/Methode besteht ja darin, die in dem Projekt verlinkten (ab Core 3.1) Assemblys als lokale Resourcen zur Verfügung zu stellen um sie dann zusammen mit der Projekt-Assembly in eine DLL (bei Controls oder Exe-Datei bei einer Anwendung) zu kompilieren.

      

    Bei mir hat sich folgende Arbeitsweise bewährt.

      

    1. Einbinden der NuGet-Package Fody und Costura.Fody in das (UserControl) Projekt. (Die Packages übernehmen die Umwandlung der referenzierten Assemblys in die lokalen Resourcen bei der Kompilierung des Projektes.)

    2. Einfügen einer FodyWeavers XML-Datei in das Root-Verzeichnis des (UserControl) Projektes. (Konfiguration von Costura.Fody)

    3. Modifizieren der (UserControl) Projektdatei um eine Kompiler-Warnung auszuschalten.

    4. Kompilieren des (UserControl) Projektes, damit alle referenzierten Assemblys in die (UserControl) Assembly integriert werden.

      

    zu1.) Fody und Costura.Fody NuGet-Package installieren.

     

      

    zu2.)  FodyWeavers XML-Datei dem Root-Verzeichnis des Control-Projektes hinzufügen.


    Im VS -> Projektmappe "MyProjektName" selektieren -> KontextMenü (re. Maustaste) ->
    Hinzufügen -> Neues Element -> XML-Datei Bezeichnung: FodyWeavers eingeben -> OK

    Festen Inhalt eingeben:

      

    <?xml version="1.0" encoding="utf-8"?>
    <Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
      <Costura />
    </Weavers>


    Ergebnis:  

        

    zu 3.) Kompiler-Warnung ausschalten.

    Durch das Hinzufügen der Fody und Costura.Fody NuGet-Packages die mit dem .Net-Framwork 4.8 erstellt wurden, wird beim Kompilieren durch den Compiler in einem .Net Core Projekt eine Warnung erzeugt:

     

     

    Diese Compilerwarnung kann man durch Modifizierung der Projekt-Datei ("MyProjekt".csproj) ausschalten. 

    Dazu muss im Abschnitt <ItemGroup> der Eintrag: <IncludeAssets> gelöscht oder auskommentiert (<-- ... -->) werden.

     

    zu4.) Projekt kompilieren -> Ergebnis

     

    Ausgabeordner des UserControl:


    Vor der Umstellung Nach der Umstellung
       

      

      

    Sieht erst einmal etwas aufwendig aus, aber im Prinzip müssen nur die zwei NuGet-Package dem Projekt hinzugefügt werden, die (feste) Konfigurationsdatei im Stammverzeichnis angelegt werden und beim nächsten Kompilieren ist alles erledigt.  :-)


      
    • Als Antwort markiert perlfred Freitag, 24. Juni 2022 16:46
    • Bearbeitet perlfred Freitag, 24. Juni 2022 16:58
    Freitag, 24. Juni 2022 16:39