这是我的第一个问题允许使用 .NET 2.0 构建的 C# 应用程序在 .NET 4.0/4.5 上运行的姐妹问题。为了便于理解,我稍微简化了我的情况。其实我们的案例有点特殊。
基本上,我们为我们的 MSI 安装程序编写了一个 C# DLL(让我们调用E.dll
)。由于我们的 MSI 安装程序使用的是旧版本的 windows 安装程序,它不能直接使用 C# DLL,只能使用 C 类型的 DLL,因此我们使用一个名为DLLExporter的开源库来生成 C 导出函数入口端口。它E.dll
是用 .NET 2.0 (VS2005) 构建的。
正如我的第一个问题所述,我们无法在仅安装 .NET 4.0 或更高版本的机器上运行安装程序。经过这个优秀论坛的一些努力和帮助,我想我开始理解这个问题了,这里是最终的应用程序配置文件:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v2.0.50727"/>
<supportedRuntime version="v4.0"/>
</startup>
由于那些 C 导出函数入口点,最终的 C# dll 被认为是混合模式程序集,因此我需要在 .NET 4.0 上将 useLegacyV2RuntimeActivationPolicy 设置为“true”。
但是有一个问题,配置必须在 exe 上,而不是在 DLL 上。我通过使用动态加载E.dll
我们的 MSI 之类的测试工具 exe 确认了这一点。让我们将测试工具 exe 称为T.exe
. 因此,通过E.dll.config
上述内容将无济于事。我们需要T.exe.config
文件。但是对于我们的 MSI 安装程序,它是 msiexe.exe,它位于,C:\windows\system32
我们无法将一个名为msiexe.exe.config
system32 的文件放入(我刚刚测试过它,它不起作用,我仍然需要弄清楚我应该拥有哪个 exe 应用程序.config 文件)。不管是哪个exe,都是一团糟。我无法通过在 .NET 4.0 (VS2010) 中构建 DLL 来解决这个问题,因为我需要配置文件将 useLegacyV2RuntimeActivationPolicy 设置为“true”。
知道如何将 app.config 放在 DLL 上而不是 exe 上吗?