Wir haben derzeit eine hitzige interne Debatte darüber, ob der tatsächliche .NET-Assemblyname die Versionsnummer des Codes enthalten sollte (z. B. CodeName02.exe oder CompanyName.CodeName02.dll). Kennt jemand eine autoritative Quelle wie Microsoft, die eine Anleitung zu diesem Thema bietet?Sollten .NET Assembly-Namen eine Versionsnummer enthalten?
Antwort
Dies ist Wozu dient die Datei Properties/AssemblyInfo.cs?
Es gibt zwei Versionen in dieser Datei, die Dateiversion und die Montage Version:
[assembly: AssemblyVersion("1.1.0.256"]
[assembly: AssemblyFileVersion("1.1.0.256")]
Sind diese gesetzt Sie sie verwenden können die Versionen Sie Binärdateien zu verfolgen. Es ist leicht im Explorer mit Rechtsklick-> Eigenschaften zu sehen.
Keiner der Dll- oder EXE-Namen, die in den Anwendungen von Microsoft (und dem Betriebssystem) enthalten sind, verwenden diese Konvention.
Andere Systeme verwenden diese Nummern, um Abhängigkeiten aufzulösen und die Version zu verifizieren. Zum Beispiel aktualisiert das MSI-System Binärdateien basierend auf den Versionseigenschaften.
Mir ist nichts Autorielles bekannt, aber es scheint mir, dass die Verwendung eines konsistenten Namens alles vom Prozess der Installationsskripte bis zur Dokumentation vereinfachen würde. Da man die Version als Metadaten für die Datei speichern kann, weiß ich nicht, warum sie im Dateinamen benötigt wird. Warum sollten Sie sich die Mühe machen, unterschiedlich benannte Dateien zu berücksichtigen?
Die Versionsinformationen können in Assembly Datei enthalten sein und dann über Reflexion abgefragt werden können usw.
Einige Anbieter sind die Versionsnummer im Namen es einfacher zu machen, auf einen Blick zu sehen, was es ist. Die Microsoft DLL-Namen enthalten keine Versionsnummer im Framework-Verzeichnis.
schauen Sie sich einfach das .NET-Framework oder ein anderes Microsoft-Produkt an. Eine Versionsnummer als Teil des Assemblynamens zu setzen klingt nach einer schlechten Idee.
Es gibt einen Platz dafür (und andere Informationen) im Metadatenabschnitt der Versammlung. (AssemblyInfo.cs)
Diese Informationen können im Windows Explorer angezeigt werden (Eigenschaftsdialog, Statusleiste, Tooltip - sie alle zeigen diese Informationen).
Da die Version als Eigenschaft eingestellt werden kann, ist das nicht halbredundant?
ich auch auf einem Bein gehen würde und schlagen MS keinen Standard ein kurzer Blick auf ihre DLL-Namen gegeben hat: user32.dll, tcpmon.dll, winsock.dll usw.
Dies sind keine .NET-Komponenten - sie sind native Win32 und unterliegen "DLL-Hölle". In .NET wird der gac verwendet, um Versionierung bereitzustellen, und ermöglicht nachfolgenden DLLs, denselben physischen Namen zu haben. – x0n
Ich bin mir nicht sicher, ob die Angabe von 20 Jahren Softwarearchäologie fürchterlich relevant ist! Die Namen aus dieser Zeit mussten 8,3 sein, was die Debatte eher dominiert. –
Framework Design Guidelines von Krzysztof Cwalina und Brad Abrams von Microsoft Namensgebung schlägt Montage wie
<Company>.<Component>.dll
ich diese weiter unterstützen (NOT # mit Version), da die GAC und DLL-Datei-Eigenschaften wird die Version angezeigt.
Und wie gesagt, die Assembly-Version kann über die Assembly-Eigenschaften in AssemblyInfo.cs zugegriffen werden –
Ich denke, die Hauptidee, eine Versionsnummer in den Dateinamen einer DLL zu setzen, wird aus DLL Hell, wo mehrere Versionen der DLL, alle mit dem gleichen Namen verursachte Probleme (dh welche aktuelle Version von eine DLL haben Sie und hat es die erforderlichen Funktionen, usw.).
Die .NET Framework behandelt Abhängigkeiten völlig anders als die C/C++ DLL-Dateien, die traditioneller sind, ist es möglich, mehrere Versionen einer Bibliothek in der GAC, vor allem, weil die GAC ein "gefälschter" Ordner ist Links zu anderen Dateien im Dateisystem, zusätzlich dazu, dass die Assemblies in Ihrer ausführbaren Installation enthalten sein können (gleicher Ordner, usw.).
Ich kenne DevExpress website verwenden Versionsanzeigen als Teil ihrer Assemblynamen wie XtraEditors8.2.dll. Ich vermute, der Grund ist, dass Sie in der Lage sein möchten, mehrere Versionen der Assembly im selben Verzeichnis zu haben. Zum Beispiel haben wir ungefähr 15 Smartclients, die als Teil der gleichen Shell/Client verteilt werden. Jeder Smartclient kann eine andere Version von DevExpress Controls haben und daher müssen wir in der Lage sein, XtraEditors7.1.dll und XtraEditors8.2 in demselben Verzeichnis zu haben.
Ich würde sagen, wenn Sie gemeinsame Bibliotheken haben, die Abhängigkeiten von wiederverwendbaren Modulen sind und in mehreren Versionen 1.0, 1.1, 1.2 usw. existieren können, dann wäre es ein gültiges Argument, dass Versionsnummern in den Namen enthalten sein könnten, zu vermeiden Kollisionen. Angesichts der Tatsache, dass die gemeinsamen Bibliotheken nicht in der GAC leben.
Ich mache es genau aus diesem Grund habe ich Dlls auf einem Netzlaufwerk freigegeben, das von mehreren Programmen und Personen verwendet wird. Wenn es ein Problem in der Betriebszeit gibt, kann ich eine DLL und ein Programm, das darauf basiert, aktualisieren, ohne die Benutzer zu beeinträchtigen. – PeteT
Microsoft verwendete ein Suffix von 32, um 32-Bit-DLL-Versionen zu bezeichnen, sodass diese DLLs mit den vorhandenen 16-Bit-DLL-Dateien koexistieren konnten.
Wie erhöhen Sie die Build-Nummer automatisch nach jedem Build? Oder muss ich diese Datei manuell öffnen und die Maj, Min, Build Nummer jedes Mal ändern? –
verwenden und * lieber als eine Zahl und der Build wird automatisch den Wert erhöhen. 1.1. * –
Sie können auch AssemblyInformationalVersion festlegen, die als VERSIONINFO-Feld "ProductVersion" endet. –