Verstehen von Dateiversion und Assembly-Version in .NET-Anwendungen

Bei der Arbeit an .NET-Anwendungen kann das Management der Versionierung eine herausfordernde Aufgabe sein. Insbesondere kämpfen Entwickler oft mit der korrekten Verwendung von Dateiversion und Assembly-Version. In diesem Blogbeitrag werden wir diese beiden Versionierungsattribute genauer betrachten, ihre Bedeutung erläutern und Anleitungen geben, wie Sie sie effektiv in Ihren Projekten einsetzen können.

Die Herausforderung der Versionierung

.NET-Projekte erfordern typischerweise zwei unterschiedliche Versionsnummern: die Dateiversion und die Assembly-Version. Diese beiden können manchmal verwirrend sein, insbesondere hinsichtlich ihrer Anwendung und wie sie miteinander interagieren. Hier ist ein kurzer Überblick:

  • Assembly-Version: Dieses Attribut gibt die Version des Assembly-Manifests selbst an, was während der Assembly-Auflösung entscheidend ist. Es geht mehr um die Kompatibilität Ihres Codes, wenn er von anderen Assemblies aufgerufen wird.

  • Dateiversion: Dies bezieht sich auf die Version der physischen Datei auf der Festplatte und wird nicht von der .NET-Laufzeit verwendet. Das bedeutet, dass die Benutzer diese Version in den Datei-Eigenschaften der Assembly sehen können, jedoch die Referenzierung von Assemblies zur Laufzeit nicht beeinflusst.

Beste Praktiken für die Verwendung der Dateiversion und der Assembly-Version

Trennung der Versionen

Eine gängige Praxis besteht darin, die Assembly-Version konstant zu halten, während die Dateiversion aktualisiert wird. Wenn Sie beispielsweise mehrere Assemblies wie ein ausführbares Programm (exe) und mehrere Dynamic-Link-Bibliotheken (dlls) haben, können Sie:

  • Die gleiche Assembly-Version für alle Assemblies (exe und dlls) festlegen. Auf diese Weise bleibt Ihre Assembly-Schnittstelle konsistent.
  • Die Dateiversion für einzelne Assemblies unterscheiden (z.B.: exe hat die Version 1.0.0.0, während dll1 1.0.0.1 hat, dll2 1.0.0.2, usw.). Dies ermöglicht es Ihnen, Änderungen an den ausführbaren Dateien spezifisch nachzuvollziehen.

Diese Strategie ermöglicht es Ihnen, ein klares Verständnis darüber zu behalten, welche Version von jeder DLL mit dem ausführbaren Programm übereinstimmt, was die Projektverwaltung vereinfacht und Komplikationen bei der Kompatibilität minimiert.

Automatisches Inkrementieren der Versionen

In einigen Fällen ziehen es Entwickler vor, die Dateiversion automatisch zu inkrementieren für jede Erstellung, während die Assembly-Version manuell nur bei wesentlichen Änderungen aktualisiert wird. Das bedeutet, dass die Dateiversion nach jedem Kompiliervorgang möglicherweise die spezifischen Bauinformationen widerspiegelt (zum Beispiel 1.0.0.1, 1.0.0.2 usw.), während die Updates der Assembly-Version in größeren Abständen erfolgen (z.B. 1.0.0 auf 1.0.1 usw.).

Die Rolle von AssemblyInformationalVersion

Das Attribut AssemblyInformationalVersion ist ein weiteres wichtiges Werkzeug zur Versionierung. Dieses Attribut kann eine Zeichenfolgenrepräsentation der Version speichern, die typischerweise für Informationszwecke verwendet wird, um zusätzliche Details über die aktuelle Version anzuzeigen, die möglicherweise nicht gut in die strukturierten Versionierungssysteme passen.

  • Dies könnte Labels wie “Beta”, “Release-Kandidat” oder andere qualitative Kennzeichnungen umfassen.
  • Es hilft den Benutzern, auf einen Blick den Stand der Software zu verstehen.

Fazit

Das Verständnis und die effektive Nutzung von Dateiversion, Assembly-Version und AssemblyInformationalVersion in Ihren .NET-Projekten kann zu einer besseren Versionskontrolle und einem reibungsloseren Entwicklungsprozess führen. Durch die Annahme konsistenter Versionierungskonventionen können Sie potenzielle Konflikte minimieren und Ihre Projekte manageable halten.

Für zusätzliche Informationen können Sie den Supportartikel von Microsoft konsultieren: So verwenden Sie Assembly-Version und Assembly-Dateiversion.

Indem Sie diese Praktiken befolgen, halten Sie nicht nur Ihren Code organisiert, sondern verbessern auch die Zusammenarbeit in Teamumgebungen, in denen mehrere Entwickler an der gleichen Anwendung arbeiten.