-
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.
|
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
Ü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 Zurück Weiter
|
|
|
|
|
|
|