2012-01-12 13 views
2

私は.NET実行可能ファイルを持っています。.NETアプリケーションとその設定のマージ

この実行可能ファイルでは、1つのファイルだけを取得するために、この設定と一緒にマージする必要があります。

この設定は、app.configファイルだけでなく、静的であり、マージ後に決して変更されません。しかし、合併する前はダイナミックになるでしょう。だから私は、それぞれ異なる構成ビルドインを持つ多くの実行可能ファイルで終わることができます。

マージプロセスはプログラマチックに実行され、設定はパラメータであり、合理的に高速である必要があります。

誰かが同様の問題を抱えていましたか? ILMergeをリソースとマージすることを考えていましたが、それができるかどうかはわかりません。あるいは、私はdevenvで完全なものを構築することができます。これは、PCにVisualStudioをインストールする必要があります。これは、マージされています。そして、私はそれが十分に速くなるとは思わない。

編集: もう一度見て、何かを試した後、Mono.Cecilが作業を行う可能性があります。私の実行可能ファイルでは、自分の設定でプロパティを持つ静的なConfigurationクラスを作成します。またILリライトを使用して、これらのプロパティが返すものを変更します。これに関する意見はありますか?

答えて

0

Visual Studioに含まれている[埋め込みリソース]オプションを使用できます。ソリューションエクスプローラからEXEにマージするファイルを選択し、右クリックし、[プロパティの選択]をクリックします。プロパティウィンドウで、 "ビルドアクション"を "組み込みリソース"に設定します。そのファイルを通常どおりプロジェクトリソースに追加します。

+0

これは私が言及した "use devenv"オプションです。 VSをインストールし、実行可能なファイル全体をコンパイルする必要があります。 – Euphoric

+0

別の "Injector Application"を使用して、この余分なファイルを既にコンパイルされたEXEに追加したいと思っていますか? –

+0

独立したインジェクタアプリケーションが優先されます。ファイルを出力するのではなく、単純にストリームを出力することができれば、さらに優先されます。 – Euphoric

1

ファイルのビルドプロパティを埋め込みリソースに変更し、出力にコピーをfalseに変更できます。

string ReadEmbeddedResource(string fileName) { 
    Assembly app = Assembly.GetExecutingAssembly(); 

    // This will be the fully-qualified name 
    Stream resource = app.GetManifestResourceStream(app.GetName().Name + "." + fileName); 

    StreamReader reader = new StreamReader(resource); 
    return reader.ReadToEnd();   
} 

今、app.configファイルがもはやビルドディレクトリにコピーしてはならないとあなたはまだあなたのexeファイル内から参照することができます。次に、設定情報を取得するために、このようなコードを使用します。

+0

構成はソリューションの一部ではありません。したがって、埋め込みリソースとして設定できるファイルはありません。 – Euphoric

+0

あなたはそれを含めることができますか?ファイル自体ではなく、ファイルへのリンクを設定することもできます。 – EndangeredMassa

+0

可能です。しかし、私は自動的に構成と一緒にアプリケーション全体を構築する必要があります。私は設定を既存の実行可能ファイルに挿入/マージするだけです。 – Euphoric

0

管理されたコンパイラによって出力されたEXEの形式は、技術的にはPE形式であるため、PEの最後に新しいセクションを作成し、READ ONLYとマークしてそこにデータを配置します。しかし、私はあなたが探しているものの外に少しだと思う

0

あなたは組み込みデータベースのようなものをお探しですか?

ビルドでは、DB-prepをプロセスのステップにして、プロジェクト/ソリューションをコンパイルする前にソリューションに適切なDBをコピーすることができます。

これは、ビルド前のビルドファイルを変更するために行っていますが、自動ビルドツール(MSBuild、NAnt)はこれをいくつかの創造性で行うことができます。

関連する問題