8

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

  1. 1つのDLLのAssemblyVersionおよび属性値を読み取ります。AssemblyFileVersion
  2. プロジェクト内のすべてのDLLと実行可能ファイルを繰り返し、それらのバージョンをそれらの値AssemblyVersionAssemblyFileVersion属性値に適用します。

今の質問は:ステップ2を行う方法は?

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

これに関するヒントはありますか?

4

3 に答える 3

13

ビルドプロセス中に、1つのDLLのとを読み取り、AssemblyVersionそれAssemblyFileVersionを他のcsprojectに保存してからAssemblyInfo.cs、コンパイルしてみませんか?

実のところ、架空のものに頼らずに、DLLファイルを直接変更できるかどうかはわかりません。

または、すべてのDLLが1つの共通を共有していることを確認してくださいAssemblyInfo.cs。これを行うAssemblyInfo.csには、csprojectに新しいアイテムを追加するときに、「リンクとして追加」として追加します。このようにコンパイルを行うと、すべてのDLLが同じを共有するため、同じAssemblyInfo.csを出力しAssemblyVersionます。

于 2009-10-11T09:20:09.217 に答える
2

私の場合、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")]
于 2016-10-11T17:48:06.170 に答える
1

ソースにアクセスできる場合は、Gravitonからアドバイスを受けてください

そうしないと、問題が発生する可能性があります。おそらく、ILDASMで逆アセンブルし、ILASMで再アセンブルできます。ただし、これは厳密な名前のアセンブリでは機能しません。

于 2009-10-11T09:31:25.887 に答える