1

3〜4の異なるバージョンではないにしても、少なくとも2つのバージョンを持つアプリケーションを開発しています(尋ねないでください)。アプリケーションは基本的に同じですが、製品名、ウィンドウ タイトル、アプリケーション アイコンが異なり、文字列または画像リソースに若干の違いがあります。

私の主な目標は、実行可能ファイルごとに複数のプロジェクトを作成する必要がないようにすることです。私は 1 つのメイン アプリケーション プロジェクトを持ち、それらのリソース (名前、アイコンなど) をロードするだけで、それがどのバージョンであるかにとらわれないようにしたいと考えています。このようにして、セットアップ プロジェクトを簡単に構成して、そのアプリケーションのバージョンで適切なリソースをデプロイできます。理想的には、インストール後にエンド ユーザーに表示されないようにすることです。

私が試したこと: さまざまな .resx ファイルを作成し、ビルド構成に基づいてそれらを交換することを実験しました。または、環境変数と #if を変数に追加することも実験しました。しかし、複数のビルド構成は本当に必要ありません。展開のみに依存するようにしたい。

別のプロジェクトまたは同じプロジェクトで resx ファイルを作成してビルドから除外し、ローカリゼーションと同様にサテライト .DLL アセンブリに生成してから、アプリケーションと共にデプロイされたものをロードすることはできますか?

独自の RESGEN および AL タスクの実行を検討する必要があるのか​​、それとも DLL プロジェクトを作成するだけなのか、私は混乱しています (ただし、1 つのリソース ファイルに対して複数の DLL プロジェクトを作成する必要があるかもしれません)。また、.RESX ファイルの使用に関する記事はすべてローカライズ用です。使用する特定のリソースを解決するには、CurrentCulture の設定に依存します。私のシナリオは文化とは何の関係もありません...アプリケーションのさまざまな展開に対してさまざまなリソースをロードしたいだけです。

4

1 に答える 1

1

どの程度深く掘り下げる必要があるかを知らなくても、リソースを個別の .dll ファイルにパッケージ化し、その方法で区別することができます。たとえば、さまざまなバージョンを個別の DLL にビルドし、アプリケーションが期待するものと一致するようにインストーラーに名前を調整させるか、XML 構成ファイルを使用してロードするものを指定し、そのようにロードします。

Assembly.Load()を使用すると、代替アセンブリをロードできます。

Assembly _assembly;
_assembly = Assembly.GetExecutingAssembly();

Stream _imageStream;
_imageStream = 
    _assembly.GetManifestResourceStream(
    "ThumbnailPictureViewer.resources.Image1.bmp");
Bitmap theDefaultImage = new Bitmap(_imageStream);

参照: http://www.attilan.com/2006/08/accessing-embedded-resources-using.html

于 2013-01-10T22:58:03.367 に答える