質問

セットアップ作成プロセス中に、次のことを実行する予定です ( C# スクリプト):

  1. 読む AssemblyVersion そして AssemblyFileVersion 1 つの DLL の属性値。
  2. プロジェクト内のすべての DLL と実行可能ファイルを反復し、それらのバージョンを AssemblyVersion そして AssemblyFileVersion 属性値。

今の質問は次のとおりです。 ステップ2はどうやって行うのでしょうか?

ステップ 1 は正常に実行できますが、ステップ 2 については実際の開始点がわかりません。属性は DLL/実行可能ファイルのバージョン情報リソース情報を直接変更するため、おそらくネイティブの P/Invoke メソッドを使用する必要があります。

これについて何かヒントはありますか?

役に立ちましたか?

解決

のみ、それをコンパイルし、なぜあなたは、ビルドプロセスの間に、1つのDLLのAssemblyVersionAssemblyFileVersionを読んでいない、と他のバック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で組み立て直すことができます。しかし、これは厳密な名前付きアセンブリのために動作しません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top