如何在DLL而不是exe上使用app.config

时间:2012-11-19 21:34:13

标签: c# .net c .net-4.0

这是一个姐妹问题以及我的第一个问题Allow C# application built with .NET 2.0 to run on .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上。我通过使用测试工具exe证实了这一点,它可以像我们的MSI一样动态加载E.dll。让我们将测试工具exe调用为T.exe。因此,通过E.dll.config上述内容无济于事。我们需要T.exe.config文件。但是对于我们的MSI安装程序,它是位于C:\windows\system32的msiexe.exe,我们无法将名为msiexe.exe.config的文件放入system32(我刚刚测试过它,它不起作用,我仍然需要找出哪个exe应该有app.config文件)。无论哪个exe,都是一团糟。我将无法通过在.NET 4.0(VS2010)中构建DLL来解决此问题,因为我需要配置文件将useLegacyV2RuntimeActivationPolicy设置为“true”。

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

1 个答案:

答案 0 :(得分:1)

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

msiexec.exe.config无效,因为msiexec.exe有嵌入式清单。