Frage

Während eines Setup-Erstellungsprozess plane ich die folgende (innerhalb eines C # Script ) zu tun:

  1. Lesen Sie die AssemblyVersion und AssemblyFileVersion Attributwerte von einer DLL.
  2. Iterate alle DLLs und ausführbare Dateien im Projekt und gelten jene Version ihrer AssemblyVersion und AssemblyFileVersion Attributwerte.

Frage ist jetzt:? Wie 2 Schritt zu tun,

Ich kann erfolgreich tun Schritt 1, aber für Schritt 2 Ich habe keinen wirklichen Startpunkt sehen. Was ich wohl tun müssen, ist einige einheimische P / Invoke Methoden zu verwenden, da die die Versionsinformationen Ressourceninformationen einer DLL direkt ändern Attribute / ausführbare Datei.

Für Hinweise auf das?

War es hilfreich?

Lösung

Warum gehst du nicht, während des Bauprozesses, den AssemblyVersion und AssemblyFileVersion einer DLL lesen, und speichern Sie es zurück zu anderen csproject der AssemblyInfo.cs, nur dann kompilieren?

Wie in der Tat, ich weiß nicht, ob es möglich ist, die DLL-Datei direkt zu ändern, ohne zu etwas abstrus greifen zu müssen.

oder alternativ, stellen Sie sicher, dass alle Ihre DLLs einen gemeinsamen AssemblyInfo.cs teilen. Sie können dies tun, indem Sie die AssemblyInfo.cs als „As-Link“ hinzuzufügen, wenn Sie ein neues Element in csproject hinzuzufügen. Auf diese Weise, wenn Sie eine Zusammenstellung zu tun, alle DLLs die gleiche AssemblyInfo.cs teilen und damit die gleichen Ausgang AssemblyVersion.

Andere Tipps

In meinem Fall habe ich eine T4-Vorlage die Assembly und Assembly zum Ändern. Ich rief die Vorlage Assembly.tt und machte es eine verknüpfte Datei (wenn Sie es hinzufügen wählen anlegen, statt Add). Alle meine Baugruppen ziehen in der verknüpften Assembly.tt Datei.

Sie können dann die T4-Vorlage von einem Ort laufen und es wird alle Assembly und AssemblyFileVersions aktualisieren. Sie müssen nicht die Datei AssemblyInfo.cs rufen für die Informationen in Ihrem dlls gezogen werden.

Der Code für die Assembly.tt Datei ist:

<#@ template language="C#" hostspecific="true" #>
// 
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
// 

using System.Reflection;

[assembly: AssemblyVersion("4.<#= this.RevisionYear #>.<#= this.RevisionNumber #>.<#= this.RevisionTime #>")]
[assembly: AssemblyFileVersion("4.<#= this.RevisionYear #>.<#= this.RevisionNumber #>.<#= this.RevisionTime #>")]
<#+
    int RevisionYear = DateTime.UtcNow.Year;
    int RevisionNumber = (int)(DateTime.UtcNow - new DateTime(DateTime.UtcNow.Year,1,1)).TotalDays;
    int RevisionTime = (int)(DateTime.UtcNow - new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day)).TotalMinutes;
#>

Der Ausgang der T4-Vorlage oben wird sein:

// 
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
// 

using System.Reflection;

[assembly: AssemblyVersion("4.2016.284.1066")]
[assembly: AssemblyFileVersion("4.2016.284.1066")]

Wenn Sie den Zugriff auf die Quellen haben, nehmen Sie die Beratung von Graviton

Wenn Sie nicht tun, könnten Sie in Schwierigkeiten. Vielleicht können Sie mit ILDASM zerlegen und wieder zusammenbauen, mit ILASM. Aber das wird nicht funktionieren, für Assemblys mit starken Namen.

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