1

アセンブリに埋め込まれているコンパイル時の値を指定したいのですが。基本的に私が欲しいのは、コードで使用して実行時に参照できるCプリプロセッサ定義を定義することです。.NETでこれを正確に行うことはできないことを私は知っているので、次善の選択肢が何であるかを理解しようとしています。

編集:うまくいけば私の目標をもう少し明確にするために例を追加します。コンパイルされたアセンブリにいくつかのタイムスタンプと作成者情報を埋め込みたいのですが。したがって、実行可能ファイルを別のマシンにコピーすると、実行可能ファイルがいつ誰によって作成されたかを正確に知ることができます(たとえば、アバウトボックスで)。

4

2 に答える 2

4

あなたが望むものを正確に明確にすることはできませんが、環境/コマンドライン引数に基づいて定数値を生成する必要があるのでしょうか?

1 つのオプション (C プリプロセッサで自分自身を撃つこともできます): ビルド時に .CS ファイルを生成してコンパイルします。「ビルド前」のステップで簡単に実行でき、生成されたファイルをプロジェクトに追加するだけです。


ビルド時にファイルを生成するための基本的な手順を次に示します。プロジェクト フォルダーに CS を作成するための CMD ファイルを用意します。

:-----   generate.cmd {file.Name}  - generates some CS:
echo class Generated { public const int Value=42;} >%1

ビルド ステップの前に追加します (ソリューション -> プロパティ -> ビルド イベント

$(ProjectDir)generate.cmd $(ProjectDir)Generated.cs

プロジェクトに「Generated.cs」を追加します (上記の手順では、プロジェクト ルートになります)。

必要に応じて使用Generated.Valueしてください。


このアプローチのより良い実装は、プロジェクト ファイル (.csproj) でカスタム プロパティを定義し、ビルドの実行時に設定することです ( MSBuildの "/property:name=value" 引数を参照)。プロジェクトで必要なものを直接実装するか ( WriteLinesToFile taskを使用して .csproj でファイルを生成できます)、プロパティを外部ツールに渡します。

于 2013-01-30T17:31:26.857 に答える
3

次のように定数フィールドを宣言すると、他のフィールドと同じようにアクセスできます。

private const string c_String = "FooFooFoo!";
于 2013-01-30T16:51:50.250 に答える