这是一个姐妹问题以及我的第一个问题允许使用 .NET 2.0 构建的 C# 应用程序在 .NET 4.0/4.5 上运行 https://stackoverflow.com/questions/13461185/allow-c-sharp-application-built-with-net-2-0-to-run-on-net-4-0-4-5。为了便于理解,我稍微简化了我的情况。其实我们的情况有点特殊。
基本上我们编写了一个 C# DLL(让我们调用E.dll
)对于我们的 MSI 安装程序。由于我们的 MSI 安装程序使用旧版本的 Windows 安装程序,它无法直接使用 C# DLL,只能使用 C 类型 DLL,因此我们使用一个名为DLL导出器 http://www.codeproject.com/Articles/37675/Simple-Method-of-DLL-Export-without-C-CLI生成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 上。我通过使用动态加载的测试工具 exe 确认了这一点E.dll
就像我们的 MSI 一样。让我们将测试工具 exe 称为T.exe
。所以通过有E.dll.config
因为上面的内容没有帮助。我们需要T.exe.config
文件。然而,对于我们的 MSI 安装程序,它是 msiexe.exe,位于C:\windows\system32
我们不能放置一个名为msiexe.exe.config
进入 system32 (我刚刚测试了它,它不起作用,我仍然需要找出哪个 exe 我应该拥有 app.config 文件)。不管是哪个exe,都是一团糟。我无法通过在 .NET 4.0 (VS2010) 中构建 DLL 来解决这个问题,因为我需要配置文件将 useLegacyV2RuntimeActivationPolicy 设置为“true”。
知道如何将 app.config 放在 DLL 上而不是放在 exe 上吗?
我的建议是使用 Trampoline .EXE 在进程外生成 .NET DLL。
msiexec.exe.config 不起作用,因为 msiexec.exe 有嵌入式清单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)