2

这是我的第一个问题允许使用 .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.configsystem32 的文件放入(我刚刚测试过它,它不起作用,我仍然需要弄清楚我应该拥有哪个 exe 应用程序.config 文件)。不管是哪个exe,都是一团糟。我无法通过在 .NET 4.0 (VS2010) 中构建 DLL 来解决这个问题,因为我需要配置文件将 useLegacyV2RuntimeActivationPolicy 设置为“true”。

知道如何将 app.config 放在 DLL 上而不是 exe 上吗?

4

1 回答 1

1

我的建议是使用蹦床 .EXE 在进程外生成 .NET DLL。

msiexec.exe.config 不起作用,因为 msiexec.exe 具有嵌入式清单。

于 2012-11-19T22:08:04.203 回答