Ich habe eine Lösung mit mehreren Projekten. Ich versuche, AssemblyInfo.cs-Dateien zu optimieren, indem ich eine lösungsweite Assembly-Info-Datei verknüpfe. Was sind die Best Practices dafür? Welche Attribute sollten in der lösungsweiten Datei enthalten sein und welche sind projekt- / montagespezifisch?
Bearbeiten: Wenn Sie interessiert sind, gibt es eine Folgefrage Was sind die Unterschiede zwischen AssemblyVersion, AssemblyFileVersion und AssemblyInformationalVersion?
.net
assemblies
attributes
assemblyinfo
Jakub Šturc
quelle
quelle
AssemblyCultureAttribute
verdient eine bessere Erklärung. Das Attribut sollte am besten vollständig fehlen (es sei denn, es handelt sich um eine Satellitenbaugruppe). Wenn Sie Satellitenbaugruppen in großem Maßstab verwenden, sind möglicherweise drei und nicht zwei Ebenen von Baugruppeninformationsdateien erforderlich (globale Baugruppe, Hauptbaugruppe und Satellitenbaugruppe, die in diesem Fall nur die Kultur angeben).In meinem Fall erstellen wir ein Produkt, für das wir eine Visual Studio-Lösung mit verschiedenen Komponenten in ihren eigenen Projekten haben. Die gemeinsamen Attribute gehen. Die Lösung enthält ungefähr 35 Projekte und eine allgemeine Assembly-Information (CommonAssemblyInfo.cs) mit den folgenden Attributen:
Die anderen Attribute wie AssemblyTitle, AssemblyVersion usw. werden pro Baugruppe bereitgestellt. Beim Erstellen einer Assembly werden sowohl AssemblyInfo.cs als auch CommonAssemblyInfo.cs in jede Assembly integriert. Dies gibt uns das Beste aus beiden Welten, in denen Sie möglicherweise einige gemeinsame Attribute für alle Projekte und spezifische Werte für einige andere haben möchten.
Hoffentlich hilft das.
quelle
<Compile Include="$(MSBuildThisFileDirectory)..\Common\CommonAssemblyInfo.cs"/>
, einer MSBuild-Direktive, die sich möglicherweise sogar in einer gemeinsam genutztenCommon.targets
Datei befindet. Yay Code Wiederverwendung.Die von @JRoppert vorgestellte Lösung ist fast die gleiche wie meine. Der einzige Unterschied besteht darin, dass ich die folgenden Zeilen in die lokale AssemblyInfo.cs-Datei eingefügt habe, da sie mit jeder Assembly variieren können:
Ich verwende auch (im Allgemeinen) eine allgemeine Baugruppeninformation pro Lösung, mit der Annahme, dass eine Lösung eine einzelne Produktlinie / ein freisetzbares Produkt ist. Die allgemeine Assembly-Info-Datei enthält außerdem:
Dadurch wird der vom Windows Explorer angezeigte Wert für "ProductVersion" festgelegt.
quelle
MSBuild Community Tasks enthält eine benutzerdefinierte Aufgabe namens AssemblyInfo, mit der Sie Ihre Assemblyinfo.cs generieren können. Die Verwendung Ihrer csproj-Dateien erfordert eine kleine manuelle Bearbeitung, lohnt sich jedoch.
quelle
Meiner Meinung nach ist die Verwendung einer GlobalAssemblyInfo.cs mehr Mühe als es wert ist, da Sie jede Projektdatei ändern und daran denken müssen, jedes neue Projekt zu ändern, während Sie standardmäßig eine AssemblyInfo.cs erhalten.
Bei Änderungen an globalen Werten (z. B. Unternehmen, Produkt usw.) sind die Änderungen normalerweise so selten und einfach zu verwalten, dass ich nicht denke, dass DRY eine Überlegung sein sollte. Führen Sie einfach das folgende MSBuild-Skript aus (abhängig vom MSBuild Extension Pack ), wenn Sie die Werte in allen Projekten einmalig manuell ändern möchten:
quelle
Um eine Datei für mehrere Projekte freizugeben, können Sie eine vorhandene Datei als Link hinzufügen.
Fügen Sie dazu eine vorhandene Datei hinzu und klicken Sie in der Dateiauswahl auf "Als Link hinzufügen". (Quelle: free.fr )
Was in die freigegebene Datei eingefügt werden soll, würde ich vorschlagen, Dinge zu platzieren, die für mehrere Assemblys freigegeben werden. Dinge wie Urheberrecht, Firma, vielleicht Version.
quelle
Die Verwendung einer einzelnen AseemblyInfo.cs-Datei für mehrere Projekte wird nicht empfohlen. Die AssemblyInfo-Datei enthält Informationen, die möglicherweise nur für diese bestimmte Assembly relevant sind. Die zwei offensichtlichsten Informationen sind das
AssemblyTitle
undAssemblyVersion
.Eine bessere Lösung könnte darin bestehen,
targets
Dateien zu verwenden , die von MSBuild verarbeitet werden, um Assembly-Attribute in mehr als ein Projekt zu "injizieren".quelle
Eine Sache, die ich als nützlich empfunden habe, ist das Generieren der AssemblyVersion-Elemente (usw.) durch Anwenden der Tokensubstitution in der Vorbereitungsphase.
Ich benutze TortoiseSvn und es ist einfach, daraus
SubWCRev.exe
eine VorlageAssemblyInfo.wcrev
zu machenAssemblyInfo.cs
. Die relevante Zeile in der Vorlage könnte ungefähr so aussehen:Das dritte Element ist dann die Revisionsnummer. Ich verwende das vierte Element, um zu überprüfen, ob ich vergessen habe, neue oder geänderte Dateien festzuschreiben (das vierte Element ist 00, wenn alles in Ordnung ist).
Fügen Sie übrigens
AssemblyInfo.wcrev
Ihre Versionskontrolle hinzu und ignorierenAssemblyInfo.cs
Sie sie , wenn Sie diese verwenden.quelle