AssemblyVersion 属性と AssemblyFileVersion 属性をプログラムで変更する
-
20-09-2019 - |
質問
セットアップ作成プロセス中に、次のことを実行する予定です ( C# スクリプト):
- 読む
AssemblyVersion
そしてAssemblyFileVersion
1 つの DLL の属性値。 - プロジェクト内のすべての DLL と実行可能ファイルを反復し、それらのバージョンを
AssemblyVersion
そしてAssemblyFileVersion
属性値。
今の質問は次のとおりです。 ステップ2はどうやって行うのでしょうか?
ステップ 1 は正常に実行できますが、ステップ 2 については実際の開始点がわかりません。属性は DLL/実行可能ファイルのバージョン情報リソース情報を直接変更するため、おそらくネイティブの P/Invoke メソッドを使用する必要があります。
これについて何かヒントはありますか?
解決
のみ、それをコンパイルし、なぜあなたは、ビルドプロセスの間に、1つのDLLのAssemblyVersion
とAssemblyFileVersion
を読んでいない、と他のバックcsprojectのAssemblyInfo.cs
にそれを保存する?
実際のところ、私は空想的な何かに頼ることなく、直接DLLファイルを変更することが可能であるかどうかわからない。
または代わりに、すべてのあなたのDLLは、一つの共通AssemblyInfo.cs
を共有していることを確認してください。あなたはcsprojectに新しい項目を追加するときに「リンクに追加」としてAssemblyInfo.cs
を追加することによってこれを行うことができます。あなたがコンパイルを行うこの方法では、すべてのDLLが同じAssemblyInfo.cs
ので、出力同じAssemblyVersion
を共有することになります。
他のヒント
私の場合、私はのAssemblyVersionとAssemblyFileVersionを変更するためのT4テンプレートを作成しました。私は、テンプレートAssembly.ttと呼ばれ、そのリンク先のファイル(あなたはそれが代わりに追加の、リンクの追加]を選択します追加)しました。すべての私のアセンブリは、リンクされAssembly.ttファイルに引きます。
あなたは、1つの場所からT4テンプレートを実行することができ、それがすべてのAssemblyVersionとAssemblyFileVersionsを更新します。あなたは、あなたのdllに引き込まれるべき情報のファイルAssemblyInfo.csを呼び出す必要はありません。
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;
#>
T4テンプレートの出力は、上記のようになります。
//
// 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")]
は、あなたが問題になるかもしれません。おそらくあなたはILDASMで分解し、ILASMで組み立て直すことができます。しかし、これは厳密な名前付きアセンブリのために動作しません。