2

これは、私の最初の質問と姉妹の質問です。.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を設定する方法はありますか?

4

1 に答える 1

1

トランポリン.EXEを使用して、.NETDLLをアウトプロセスで生成することをお勧めします。

msiexec.exeにはマニフェストが埋め込まれているため、msiexec.exe.configは機能しませんでした。

于 2012-11-19T22:08:04.203 に答える