Frage

Ich habe eine Lösung mit mehrere Projekt. Ich versuche, AssemblyInfo.cs Dateien durch die Verknüpfung einer Lösung breiter Montage-Info-Datei zu optimieren. Was sind die besten Praktiken, dies zu tun? Welche Attribute in Lösung weiter Datei und welches Projekt / Montag spezifisch?

sein sollte

Edit: Wenn Sie daran interessiert sind gibt es eine Follow-up-Frage

Andere Tipps

In meinem Fall bauen wir ein Produkt, für das wir eine Visual Studio-Lösung haben, mit verschiedenen Komponenten in ihren eigenen Projekten. Die gemeinsamen Eigenschaften gehen. In der Lösung gibt es rund 35 Projekte und eine gemeinsame Montage info (CommonAssemblyInfo.cs), die folgende Merkmale aufweist:

[assembly: AssemblyCompany("Company")]
[assembly: AssemblyProduct("Product Name")]
[assembly: AssemblyCopyright("Copyright © 2007 Company")]
[assembly: AssemblyTrademark("Company")]

//This shows up as Product Version in Windows Explorer
//We make this the same for all files in a particular product version. And increment it globally for all projects.
//We then use this as the Product Version in installers as well (for example built using Wix).
[assembly: AssemblyInformationalVersion("0.9.2.0")]

Die anderen Attribute wie Assembly, Assembly usw. liefern wir auf einer Pro-Montagebasis. Bei Verwendung einer Montagehalle beide AssemblyInfo.cs CommonAssemblyInfo.cs und werden in jeder Baugruppe eingebaut. Dies gibt uns das Beste aus beiden Welten, in denen Sie einige gemeinsame Attribute für alle Projekte und spezifische Werte für einige andere haben wollen.

Ich hoffe, das hilft.

Die Lösung von @JRoppert präsentiert ist fast das gleiche wie das, was ich tue. Der einzige Unterschied ist, dass ich die folgenden Zeilen in der lokalen Datei AssemblyInfo.cs setzen, wie sie mit jeder Anordnung variieren können:

#if DEBUG
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif
[assembly: AssemblyVersion("This is set by build process")]
[assembly: AssemblyFileVersion("This is set by build process")]
[assembly: CLSCompliant(true)]

I (in der Regel) auch eine gemeinsame Montage Info pro Lösung, mit der Annahme verwenden, dass eine Lösung eine einzige Produktlinie / lösbares Produkt. Die gemeinsame Montage-Info-Datei hat auch:

[assembly: AssemblyInformationalVersion("0.9.2.0")]

Welche den "Product" Wert von Windows Explorer angezeigt eingestellt.

MSBuild Community-Aufgaben eine benutzerdefinierte Aufgabe enthält genannt Assembly, die Sie verwenden können, um AssemblyInfo.cs zu erzeugen . Es erfordert eine kleine Hand-Bearbeitung Ihrer csproj Dateien zu verwenden, aber lohnt sich.

Meiner Meinung nach mit einem GlobalAssemblyInfo.cs mehr Mühe, als es wert ist, weil Sie jede Projektdatei ändern müssen und daran erinnern, jedes neues Projekt zu ändern, während Sie eine AssemblyInfo.cs standardmäßig erhalten.

Für Änderungen an globalen Werten (dh Unternehmen, Produkt etc.) die Änderungen sind in der Regel so selten und einfach zu verwalten sind glaube ich nicht sollte DRY eine Überlegung sein. Führen Sie einfach den folgenden MSBuild-Skript (abhängig von der MSBuild Extension Pack ), wenn Sie die Werte manuell ändern in allen Projekten als Einmal:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="UpdateAssemblyInfo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <AllAssemblyInfoFiles Include="..\**\AssemblyInfo.cs" />
    </ItemGroup>

    <Import Project="MSBuild.ExtensionPack.tasks" />

  <Target Name="UpdateAssemblyInfo">
    <Message Text="%(AllAssemblyInfoFiles.FullPath)" />
    <MSBuild.ExtensionPack.Framework.AssemblyInfo 
        AssemblyInfoFiles="@(AllAssemblyInfoFiles)"
        AssemblyCompany="Company"
        AssemblyProduct="Product"
        AssemblyCopyright="Copyright"
        ... etc ...
        />
  </Target>

</Project>

eine Datei zwischen mehreren Projekten teilen Sie eine vorhandene Datei als Link hinzufügen können.

Um dies zu tun, fügen Sie eine vorhandene Datei, und klicken Sie auf „Hinzufügen als Verknüpfung“ in der Dateiauswahl. As-Link
(Quelle: free.fr )

Wie für das, was in der gemeinsamen Datei zu setzen, würde ich, Dinge vorschlagen, die über Baugruppen geteilt werden würden. Dinge wie Copyright, Firma, vielleicht Version.

eine einzige AseemblyInfo.cs Datei für mehrere Projekte wird nicht empfohlen. Die Assemblydatei enthält Informationen, die relevant sein könnte nur für die jeweilige Baugruppe. Die beiden offensichtlichsten Stücke von Informationen sind die AssemblyTitle und AssemblyVersion.

Eine bessere Lösung könnte sein, targets-Datei zu verwenden, die von der MSBuild behandelt werden, um zu „injizieren“ Montage auf mehr als eine Projektattribute.

Eine Sache, die ich gefunden habe ist nützlich, um die Assembly Elemente zu erzeugen (usw.) durch die Anwendung Token-Substitution in der Pre-Build-Phase.

Ich verwende TortoiseSVN, und es ist einfach, seine SubWCRev.exe verwenden, um eine Vorlage AssemblyInfo.wcrev in AssemblyInfo.cs zu drehen. Die entsprechende Zeile in der Vorlage etwas könnte wie folgt aussehen:

[assembly: AssemblyVersion("2.3.$WCREV$.$WCMODS?1:0$$WCUNVER?1:0$")]

Das dritte Element ist dann die Revisionsnummer. Ich das vierte Element, um zu überprüfen Ich habe keine neuen oder geänderten Dateien zu begehen vergessen (das vierte Element ist 00, wenn es alles in Ordnung ist).

übrigens, fügt AssemblyInfo.wcrev zu Ihrer Versionskontrolle und ignorieren AssemblyInfo.cs, wenn Sie diese verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top