Domanda

Nel corso di un processo di creazione di setup, sto progettando di fare quanto segue (entro un C # Script ):

  1. Leggi le AssemblyVersion e AssemblyFileVersion valori degli attributi di una DLL.
  2. Scorrere tutte le DLL ed eseguibili nel progetto e applicare quelle di versione per i loro valori e attributi AssemblyVersion AssemblyFileVersion.

domanda ora è:? Come fare il punto 2

I successo posso fare passo 1, ma per la fase 2 non vedo un vero e proprio punto di partenza. Quello che probabilmente devo fare è quello di utilizzare alcuni P nativa / richiamare i metodi in quanto gli attributi modificare direttamente le informazioni di informazioni sulla versione di risorse di una DLL / eseguibile.

Eventuali suggerimenti su questo?

È stato utile?

Soluzione

Perché non, durante il processo di compilazione, leggere la AssemblyVersion e AssemblyFileVersion di una DLL, e salvare di nuovo a AssemblyInfo.cs di altri csproject, solo allora compilarlo?

È un dato di fatto, non so se sia possibile modificare il file DLL direttamente, senza ricorrere a qualcosa di fantasia.

In alternativa, assicurarsi che tutti le DLL condividono un AssemblyInfo.cs comune. Si può fare questo con l'aggiunta del AssemblyInfo.cs come "Aggiungi Come Link" quando si aggiunge un nuovo elemento in csproject. In questo modo, quando si fa una compilation, tutte le DLL condivideranno lo stesso AssemblyInfo.cs, e quindi emettono lo stesso AssemblyVersion.

Altri suggerimenti

Nel mio caso, ho creato un modello T4 per cambiare l'AssemblyVersion e AssemblyFileVersion. Ho chiamato il modello Assembly.tt, e ne ha fatto un file collegato (quando lo si aggiunge scegliere Aggiungi link, invece di Add). Tutti i miei gruppi di tirare nel file Assembly.tt collegato.

È quindi possibile eseguire il modello T4 da una posizione e sarà aggiornare tutti i AssemblyVersion e AssemblyFileVersions. Non è necessario chiamare le AssemblyInfo.cs file per le informazioni da tirato nelle DLL.

Il codice per il file Assembly.tt è:

<#@ 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;
#>

L'uscita del modello T4 sopra sarà:

// 
// 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")]

Se si ha accesso alle fonti, prendere la da Graviton

Se non lo fate, potreste essere nei guai. Forse si può smontare con ILDASM e rimontare con ILASM. Ma questo non funzionerà per assembly con il nome.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top