アンマネージドアプリケーションの異なるバージョンにロードできる.net-extensionを書きます。 I以下アプリケーションのバージョンに応じてDllImportのコードを動的に生成
はsome_func_v02
、some_func_v01
を輸入し、some_func_v03
機能:
[DllImport("some_library_v1.0.dll", CallingConvention = CallingConvention.Cdecl,
CharSet = CharSet.Unicode, EntryPoint = "func_name")]
extern static private void some_func_v01(string msg);
[DllImport("some_library_v2.0.dll", CallingConvention = CallingConvention.Cdecl,
CharSet = CharSet.Unicode, EntryPoint = "func_name")]
extern static private void some_func_v02(string msg);
[DllImport("some_library_v3.0.dll", CallingConvention = CallingConvention.Cdecl,
CharSet = CharSet.Unicode, EntryPoint = "func_name")]
extern static private void some_func_v03(string msg);
...
public void some_func(string msg)
{
switch (Application.Version.Major)
{
case 1: some_func_v01(msg); break;
case 2: some_func_v02(msg); break;
case 3: some_func_v03(msg); break;
}
}
some_library
ライブラリは、ターゲット・アプリケーションの一部であり、アプリケーションのように同じバージョンを持っています。
問題は、新しいバージョンのアプリケーションが表示されるときに私の拡張機能のコードを編集することです。私は動的にアプリケーションのバージョンに応じてコードを生成したいと思います。たとえば、アプリケーションのバージョン1のために:私ができる
[DllImport("some_library_v1.0.dll", CallingConvention = CallingConvention.Cdecl,
CharSet = CharSet.Unicode, EntryPoint = "func_name")]
extern static private void some_func(string msg);
PowerShellを使用してホスティングを通してそれを行うには、より多くの簡単な方法が存在するかもしれない...私はPowerShellが唯一のこのタスクを実行するために、ホスティング作成したいとは思わないでしょう。
これは簡単な方法ですか?
あなたはhttp://stackoverflow.com/questions/18362368/loading-dlls-at-runtime-in-c-sharpとhttp://stackoverflow.com/questions/6493715/how-現在の製品バージョンを取得するには? – Fruchtzwerg
私のテーマとあなたの指定したテーマとの関係はありません。 –
本当にシンプルです。展開するときにDLLの名前を変更するだけです。 apiが変更されたときに自動化された何かを行うことができ、関数が余分な引数を取得する可能性はゼロです。 –