1

ある C# ソリューションでは、CommonAssemblyInfo.cs ファイルを共有する複数のプロジェクトがあり、特定のアセンブリ属性がすべてのプロジェクトで共有されます。CommonAssemblyInfo.cs ファイルが 1 つしかない限り、これは問題なく機能します。ただし、これらのプロジェクトを使用するソリューション (アプリケーション) がいくつかあり、各ソリューションには独自のバージョンの CommonAssemblyInfo.cs があります。

どのソリューションに含まれているかに応じて、プロジェクトで異なる CommonAssemblyInfo.cs ファイルを使用するにはどうすればよいですか?

最後に、アセンブリに、コンパイル元のソリューションに固有の属性を持たせたいと考えています。

すべてを同じファイル名で同じディレクトリに置くことはできないため、ファイルをソリューション ファイルにすることはできないと思います。常に最初にビルドされる特定のプロジェクトがないため、ビルド前イベントを使用できません。Visual Studio 環境でソリューションをビルドして実行できるようにしたいので、ビルド スクリプトは使用したくありません。

4

3 に答える 3

2

いいえ、私はあなたがこれを行うことができないとは思わない - そして私には、そもそもそれは本当に悪い考えのように思えます. 2 つのバイナリがまったく同じソースからまったく同じ構成でビルドされている場合、それらが異なる属性を持つことがなぜ理にかなっているでしょうか?

これで何を達成しようとしていますか?IMOビルドをより複雑にして通常のやり方に反する前に、本当に正当な理由が必要です。

また、ファイルには本当に一般的なもの (CommonAssemblyInfo.cs会社名など) のみを指定することをお勧めします。AssemblyInfo.csその後、各プロジェクトは、通常どおり、プロジェクト固有の設定を持つ独自のものを持つことができます。個人的には、プロジェクト間でソース ファイルを共有することはあまり好きではありませんがこの場合、ある程度の意味があることは理解できます。

于 2009-12-08T17:13:39.157 に答える
0

ここで、他のすべてのアセンブリが参照する単純なライブラリを構築している場合は、CommonAssemblyInfo.csファイルを含むクラスライブラリプロジェクトをソリューションに追加し、他のプロジェクトからの参照を追加します。

ただし、各プロジェクトには少し異なるバージョンが必要なので、2つのオプションがあります。

  1. 参照されるプロジェクトに親のジェネリッククラスが含まれる継承モデルを作成する必要があります。その後、各プロジェクトはジェネリックを実装し、使用する新しいクラスにラップします。
  2. 十分に具体的にするために、各プロジェクトでクラスを作成するだけです。

ソリューションスペースについてもう少し知らなくても、これらは私の推奨事項です。

于 2009-12-08T17:27:45.467 に答える
0

条件付きコンパイル (#if) を使用してハックすることができます。急ぎの仕事でこれをやったことがありますが、ひどいです。Jon Skeet が説明するように、プロジェクトをより適切にリファクタリングするだけです。

于 2010-06-11T13:59:17.607 に答える