.NET Blog   ·   .NET Casts   ·   .NET GUI Foren   ·   .NET BlogBook   ·   WPF Blogger   ·   visual studio one   ·   ASP.NET professional

  • ACHTUNG - NEUES BLOG

    Ab sofort steht unter http://devtyr.norberteder.com mein neues Blog zur Verfügung. Dieses Blog wird nicht weiter betreut, bleibt aber erhalten. Neue Eintr%auml;ge erfolgen nur mehr im neuen Blog. Kommentare werden ebenfalls nicht mehr behandelt. Wer weiterhin meinen Einträgen und Aktivitäten folgen möchte, möge bitte RSS-Feeds, Verlinkungen etc. an die neue Location anpassen.
Download .NET Essentials Installer
Trickkiste

ILMerge im Einsatz

18.02.07 - .NET, Allerlei
Beitrag von Norbert Eder
 Mit Hilfe des ILMerge-Tools können mehrere Assemblies zu einer einzigen Assembly zusammengefügt werden. Vor allem bei größeren Projekten entsteht nicht nur eine einzige ausführbare Datei. Durch die Kapselung der Funktionalität in unterschiedliche Bibliotheken werden diese als eigenständige Assemblies abgelegt.

In einigen Fällen kann es nun erwünscht sein, diese Dateien in eine einzige zusammen zu fassen. Ein Paradebeispiel wäre die Vereinfachung des Deployment-Prozesses, da in diesem Fall lediglich eine "Anwendungsdatei" berücksichtigt werden muss (abgesehen von anderen Dateien, Einstellungen, etc. die ausgeliefert werden müssen).

Als Beispiel dient eine simple Anwendung, die nur eine Funktionalität besitzt: das Multiplizieren zweier Integer-Werte. Dafür wurde zusätzlich zur Windows Forms Anwendung eine Klassenbibliothek angelegt. Darin enthalten ist die Klasse Calculator.



Nach einem Build im Release-Modus werden die Dateien ILMergeDemo.exe und IlMergeDemo.Core.dll angelegt. Diese fassen wir nun zu einer einzigen Assembly zusammen. Dies geschieht mit dem folgenden Aufruf:

ILMerge.exe /t:winexe
/out:ILMergeDemoMerged.exe ILMergeDemo.exe ILMergeDemo.Core.dll

ILMerge selbst ist eine Konsolen-Anwendung, die mittels Parameter gesteuert werden kann:

/t:filename bzw. /target:filename
Hiermit wird eingestellt, ob es sich um eine Windows Anwendung, eine Konsolenanwendung oder eine Klassenbibliothek handelt. Wird dieser Parameter nicht angegeben, entspricht der Ausgabetyp dem Typ der ersten Assembly (Primary Assembly), die der Ausgabe hinzugefügt wird.

/out:filename
Dadurch wird der Name des Ziels angegeben.

/v1 oder /v1.1 oder /v2
Diese Option ist nur bei ILMerge für das .NET Framework 2.0 verfügbar. Damit kann eine Assembly gelinkt werden, die auch unter einer anderen Framework-Version lauffähig ist.

/log:filename
Für eine automatisierte Verwendung bietet sich der Parameter /log an. Durch ihn kann die Ausgabe des Vorgangs in eine anzugebende Logdatei geschrieben werden. Etwaige Fehler können dadurch zu einem späteren Zeitpunkt gefunden und analysiert werden.

Natürlich können noch weitere Parameter angegeben werden. Diese können der Dokumentation zu ILMerge entnommen werden (ist im Download enthalten).

Vergleich mittels Reflector for .NET

Sehen wir uns die Beispielanwendung in Lutz Roeder's Reflector for .NET an, sind die beiden Assemblies extra ausgewiesen:



Nach dem Merge-Vorgang ist ersichtlich, dass sich alles in einer einzigen Assembly befindet:



Was passiert mit den Ressourcen?

ILMerge kann Ressourcen nicht zusammenführen, sondern lediglich kopieren, was bei der Ausführung auch passiert. Nun kann es bei der Laufzeit der zusammengeführten Assembly zu Fehlern kommen. Dies ist beispielsweise dann der Fall, wenn die Ressourcen Referenzen zu Typen kodieren. Diese können danach nicht mehr aufgelöst werden: Die Referenz verweist auf die ursprüngliche Assembly, die es nach dem Merge-Vorgang nicht in der "Sammel-Assembly" gibt.

Kann ich ILMerge direkt in ein Projekt einbinden?

Mit Visual Studio 2005 ist es möglich, ausführbare Assemblies als Referenz einzubinden. Dadurch kann ILMerge.exe in ein anderes Projekt quasi als Klassenbibliothek eingebunden werden.

Weitere Informationen

Kommerzielle Nutzung: Eine kommerzielle Nutzung von ILMerge ist laut Lizenz möglich.

PDB-Dateien zusammenführen: ILMerge kann auch PDB-Dateien (Debug-Informationen und Projektstatus) zusammenführen. Hierbei ist zu beachten, dass ILMerge für .NET 2.0 nur 2.0er PDB-Dateien zusammenführen kann. Jedoch können Assemblies früherer Versionen zusammengeführt werden. Mit ILMerge für das .NET Framework 1.1 können auch PDB-Dateien der 1.1er Version zusammengeführt werden.

Mono und Rotor: Bis zum aktuellen Zeitpunkt unterstützt ILMerge weder Rotor noch Mono.

GUI: Für ILMerge gibt es zur Erleichterung grafische Oberflächen von diversen Anbietern. Eine kostenlose Variante ist NuGenUnify.

Die zur Zeit aktuelle Version kann über das Microsoft Download Center bezogen werden.

  1 Kommentar - 1386 mal angesehen   |  1 Trackbacks   |  Permalink  |  Trackback-URL


Programme und Daten einfach von XP nach Vista bringen

18.02.07 - Internet
Beitrag von Norbert Eder
 ... das verspricht Windows Easy Transfer Companion (Beta).

Windows Easy Transfer Companion enables you to automatically transfer your most important programs from your Windows XP-based PC to your new Windows Vista-based PC. This way you can become productive on your new PC as soon as possible. Easy Transfer Companion is designed to be used in addition to Windows Easy Transfer—which transfers your data and settings.

... allerdings derzeit nur für den US-Markt verfügbar.

Klingt auf jeden Fall recht interessant - sofern es tatsächlich funktioniert.

  Kommentar hinzufügen - 15 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Architektur Links

18.02.07 - Entwicklung, Patterns, .NET, Allerlei
Beitrag von Norbert Eder
 Für viele sicherlich interessant sind die Application Blocks von Microsoft. Hierzu gibt es seit einigen Tagen neue Downloads:

Web Client Software Factory — January 2007
Smart Client Offline Application Block

Damit sollte sich der eine oder andere Abend ausfüllen lassen :)

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Übersicht der nächsten Livecasts

15.02.07
 Unsere Livecasts entwickeln sich weiter. Dies nicht nur bedingt durch unsere gemachten Erfahrungen, nein, auch Rückmeldungen geben hierzu einen entscheidenden Anhaltspunkt.

Zukünftig werden alle Livecasts unter einem bestimmten Thema stehen. Dieses Thema wird von uns rechtzeitig bekannt gegeben. Hier nun die Themen der nächsten drei Livecasts:

20. Februar 2007

Serialisierung

* Was ist Serialisierung?
* Einsatzgebiete
* Benutzerdefinierte Serialisierung
* und mehr


27. Februar 2007

Globalisierung / Lokalisierung

* Unterschied Globalisierung und Lokalisierung
* Ressourcen


6. März 2007

Webservices

* Grundlagen
* Einsatzgebiete
* und mehr

Die Livecasts beginnen stets um 20:00 Uhr.

Ablauf

Auch zum Thema Ablauf gibt es einige Änderungen. Wie bereits erwähnt, steht ab sofort jeder Livecast unter einem bestimmten Thema. Dieses Thema wird zuerst vorgetragen und anschließend in einer Diskussion besprochen. Anschließend können allgemeine Fragen gestellt werden.

Wer zu einem jeweiligen Thema bereits Fragen hat, kann uns diese gerne zusenden. Diese werden im Livecast von uns vorrangig behandelt. Fragen können auch an diesem Beitrag als Kommentar hinterlassen werden.

  3 Kommentare - 966 mal angesehen   |  1 Trackbacks   |  Permalink  |  Trackback-URL


Liste der installierten ADO.NET Provider abrufen

14.02.07 - .NET, Datenverwaltung
Beitrag von Norbert Eder
 Möchte man überprüfen ob ein bestimmter ADO.NET Provider am System registriert ist, kann dies mit einigen Zeilen Code erledigt werden. Das nachfolgende Beispiel liefert eine Liste aller verfügbaren ADO.NET Provider.

Zu beachten ist an dieser Stelle, dass Provider, die über die App.Config eingebunden wurden, hier ebenfalls mit aufgelistet werden.

private List GetDbFactoryClasses()
{
    List factClasses = new List();
    DataTable dt = DbProviderFactories.GetFactoryClasses();
    if (dt != null)
    {
        foreach (DataRow dr in dt.Rows)
        {
            factClasses.Add(dr[2].ToString());
        }
    }
    return factClasses;
}

Eine Überprüfung ist nicht nur in Problemfällen sinnvoll, sondern sollte auch vor dem Laden eines Providers über DbProviderFactory geschehen. Dadurch kann eine Exception vermieden und der Benutzer entsprechend benachrichtigt werden (oder Eintrag in eine Logdatei und ähnliches).

Zur Vollständigkeit:

Ein Provider kann folgendermaßen dynamisch geladen werden:

// Nur der Vollständigkeit halber
// Wird normalerweise aus einer Konfiguration gelesen
 
string strProviderInvariantName = "System.Data.SqlClient";
string strConnectionString = "...";


// Laden des Providers
// Erstellen der Datenbank-Verbindung
// Zuweisung des notwendigen ConnectionStrings
 
DbProviderFactory dbFactory = 
    DbProviderFactories.GetFactory(strProviderInvariantName);
DbConnection dbConnection = dbFactory.CreateConnection();
dbConnection.ConnectionString = strConnectionString;

Wie bereits in den Code-Kommentaren angemerkt, werden diese Einstellungen normalerweise aus einer Konfiguration geladen oder in einer anderen Form an die Anwendung übergeben. Der Vorteil liegt darin, dass die Anwendung damit mit einem beliebigen ADO.NET Provider ausgeführt werden kann.

  Kommentar hinzufügen   |  1 Trackbacks   |  Permalink  |  Trackback-URL


String in eine XmlNode konvertieren

13.02.07 - .NET, Grundlagen, Datenverwaltung
Beitrag von Norbert Eder
 Es kommt vor, dass XML-Daten in einem String vorhanden sind und man daraus eine XmlNode erstellen muss. Dies ist ja ansich kein Problem, da hierzu die InnerText-Eigenschaft gesetzt werden kann. Was aber, wenn der String eine Node inklusive einiger ChildNodes enthält? Hier ein einfacher Weg die Konvertierung durchzuführen.

XmlDocument doc = new XmlDocument();
doc.Load("categories.xml");
XmlNode xnRoot = doc.SelectSingleNode("/categories");

XmlTextReader xtr = 
    new XmlTextReader(new StringReader(category.ToXml()));

XmlNode xnCategory = doc.ReadNode(xtr);
xnRoot.AppendChild(xnCategory);

Wie zu erkennen ist, wird dazu der XmlTextReader verwendet, da dadurch einfach Xml-Fragmente eingelesen werden können. Mit Hilfe der Methode ReadNode des XmlDocument-Objektes kann nun ein Node generiert werden, welcher anschließend dem Dokument hinzugefügt wird. Anzumerken ist auch, dass die Methode ToXml des Objektes category ein entsprechendes XML-Fragement aus dem besagten Objekt generiert und als String zurückliefert.


  Kommentar hinzufügen   |  1 Trackbacks   |  Permalink  |  Trackback-URL


Endlich ist es da, mein neues Smartphone

12.02.07 - Kunterbunt
Beitrag von Norbert Eder
  So, nun ist es endlich da, mein neues Smartphone. Ein süßer kleiner HTC TyTN mit Windows Mobile 5 und sämtlichen Kram den man so benötigen kann, oder auch nicht. Auf jeden Fall wird das Teil die nächsten Tage und Wochen kräftig getestet :)

  8 Kommentare - 744 mal angesehen   |  2 Trackbacks   |  Permalink  |  Trackback-URL


JavaScript Alert von CodeBehind-File aufrufen

10.02.07 - .NET, ASP.NET
Beitrag von Norbert Eder
 In vielen Foren wird oft die Frage gestellt, wie denn aus beispielsweise C# heraus eine MessageBox im Web angezeigt werden kann.

Folgende Klasse zeigt die Verwendung:

public static class Alert
{
    public static void Show(string message)
    {
        string repMessage = message.Replace("'", "'");
        string script = 
            String.Format("<script language={0}>alert('{1}');</script>", 
                "JavaScript", repMessage);

        Page page = HttpContext.Current.CurrentHandler as Page;

        if (page != null
         &&
         !page.ClientScript.IsClientScriptBlockRegistered("alert"))
        {
            page.ClientScript.RegisterClientScriptBlock(
                typeof(Alert),
                "alert", script);
        }
    }
}

Unsere Funktionalität kann nun von jeder beliebigen Stelle mit

Alert.Show("Dies ist ein Test");

aufgerufen werden.

  5 Kommentare - 3424 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Apple hat es so gut wie geschafft ...

09.02.07 - Kunterbunt
Beitrag von Norbert Eder
 ... mich als Kunden definitiv zu verlieren. Siehe hierzu Golem. Es ist doch eine Frechheit sondergleichen alle Vista-Nutzer derart im Regen stehen zu lassen. Zwar hab ich mit meinem iPod und Vista keine Probleme, aber wohl haben diese andere.

Zusammen mit ihren Videos gegen Vista ist Apple's Gehabe derzeit schlichtweg unter jeder Sau.

Ich freu mich ja schon, wenn es den Zune endlich bei uns gibt. Dann landet der iPod im Mülleimer und gut ist es.

Tschüss Apple.

  4 Kommentare - 706 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Aspect Oriented Programming

08.02.07 - Entwicklung, Diskussionen
Beitrag von Norbert Eder
 Ein heißes Thema und für viele sicherlich interessant. Und ein Blick über den Tellerrand schadet sowieso nie. Daher ein paar gute Links dazu:

Aspect oriented programming in C# :- Part I
Aspect oriented programming in C# :- Part II
Using AOP in C#
AOP (Aspect Oriented Programming) in C#
Aspect Oriented Programming using .NET - AOP in C#
AOP Support for C# (PDF)

  2 Kommentare - 2385 mal angesehen   |  1 Trackbacks   |  Permalink  |  Trackback-URL



Zurück Weiter