2012-03-19 10 views
6

私たちは、クライアントにカスタマイズされたexeをクライアントに提供したいと考えています。実行時に別のリソースを持つexeファイルのコピーを作成する

つまり、基本的に、別のxml構成ファイルを含むexeファイルのコピーを作成する機能です。 「インストール時にインクルード」はオプションではありません。クライアントのクライアント用にカスタマイズされているかのように見えます。

私は現在、リソース(AssemblyBuilderを使用)を含む実行時にDLLを作成し、ILMergeを呼び出して最終的なexeファイルに埋め込むことを考えていますが、これは私が望むよりも少し面白いです。

だからとにかく尋ねる価値があります.ILMergeに埋め込まれたリソースを保持するDLL全体を避けることができる.NET exeのリソースを変更できる.NETライブラリがありますか?

また、前述の目標をまだ満たしているこれに対するより良いアプローチがありますか?

答えて

2

サウンドは、すでにコンパイルされていればそれを置き換える作業の多くが好きです。 ビルドスクリプト、param、およびさまざまなリソースファイルを使用して実行します。

+0

をこれはクライアントにプロジェクトの完全なソースコードを与える必要はないでしょうか? – Mania

+0

いいえ、置き換えるリソースを取得し、各クライアントのリソースファイルを取得する必要はありません。すべてのリソースを別のフォルダに保存してください。 ClientA ... ClientBをビルドしていて、ClientAのビルド時に、 –

+0

Nonoをコンパイルする前に、そのフォルダからそのリソースファイルをコピーします。これは、クライアントのクライアント用です。同時に削除されました。私たちのクライアントは、異なるロゴ、異なるオプション、異なる言葉遣いという、クライアント固有のプログラムをカスタマイズできる必要があります。これはすべてXML文書で簡単に実行できますが、残念ながら現時点ではそれを行う必要があります。我々は、クライアントがそれを行うことができるようにしたい。やや複雑です。 – Mania

0

私はこの問題に取り組んでいませんが、コンパイルされた実行可能ファイルの埋め込みリソースを変更できるライブラリがあります。Cecil。セシル持つリソースを埋め込み

名前空間に含まれるもの:

using Mono.Cecil; // supports both net and mono 

がリソースに埋め込む:

static void Main(string[] args) 
    { 
     string pathToExecutable = "Target.exe"; 

     byte[] encoding = Encoding.Unicode.GetBytes("<Data><!-- data goes here --></Data>"); 

     var resource = new EmbeddedResource(
       "ConfigurationFile", 
       ManifestResourceAttributes.Private, 
       encoding); 

     var asm = AssemblyDefinition.ReadAssembly(pathToExecutable); 

     asm.Modules.FirstOrDefault().Resources.Add(resource); 

     asm.Write(pathToExecutable); 
    } 
関連する問題