これは、私の最初の質問と姉妹の質問です。.NET2.0で構築されたC#アプリケーションを.NET 4.0/4.5で実行できるようにします。理解するために、状況を少し簡略化しました。実際、私たちのケースは少し特別です。
E.dll
基本的に、MSIインストーラー用のC#DLL(呼び出しましょう)を作成しました。MSIインストーラーは古いバージョンのWindowsインストーラーを使用しているため、C#DLLを直接使用できず、CタイプのDLLでしか機能しませんでした。そのため、DLLExporterというオープンソースライブラリを使用して、Cエクスポート関数のエントリポートを生成します。はE.dll
.NET2.0(VS2005)で構築されています。
私の最初の質問が述べているように、.NET4.0以降のみがインストールされているマシンでインストーラーを実行するのに問題があります。このすばらしいフォーラムからの努力と支援の後、私はこの問題を理解し始めたと思います。これが最終的なアプリケーション構成ファイルです。
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v2.0.50727"/>
<supportedRuntime version="v4.0"/>
</startup>
これらのCエクスポート関数のエントリポイントにより、最終的なC#dllは混合モードアセンブリと見なされるため、.NET4.0ではuseLegacyV2RuntimeActivationPolicyを「true」として使用する必要があります。
ただし、1つの問題があります。構成は、exe上にある必要がありますが、DLL上にはない必要があります。E.dll
これは、MSIのように動的にロードするテストハーネスexeを使用して確認しました。テストハーネスexeをとして呼び出しましょうT.exe
。したがって、E.dll.config
上記のようにコンテンツを持っていても役に立ちません。T.exe.config
ファイルが必要です。ただし、MSIインストーラーの場合、にあるのはmsiexe.exeであり、 system32にC:\windows\system32
呼び出されるファイルを配置できませんmsiexe.exe.config
(テストしたばかりで機能しません。アプリを使用する必要があるexeを特定する必要があります。 .configファイル)。どのexeファイルでも、混乱します。useLegacyV2RuntimeActivationPolicyを「true」に設定するには構成ファイルが必要になるため、.NET 4.0(VS2010)でDLLをビルドしてもこの問題を解決できません。
exeではなくDLLにapp.configを設定する方法はありますか?