Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在DLL上使用app.config而不是exe_C#_.net_C_.net 4.0 - Fatal编程技术网

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

C# 如何在DLL上使用app.config而不是exe,c#,.net,c,.net-4.0,C#,.net,C,.net 4.0,这是一个姐妹问题和我的第一个问题。我把我的情况简化了一点以便理解。其实我们的案子有点特别 基本上,我们为MSI安装程序编写了一个C#DLL(让我们调用E.DLL)。由于我们的MSI安装程序使用的是旧版本的windows installer,它不能直接使用C#DLL,而且只能与C类型DLL一起使用,因此我们使用一个名为的开源库来生成C导出函数入口端口。E.dll是用.NET2.0(VS2005)构建的 正如我的第一个问题所述,我们在只安装了.NET4.0或更高版本的机器上运行安装程序有困难。经过这

这是一个姐妹问题和我的第一个问题。我把我的情况简化了一点以便理解。其实我们的案子有点特别

基本上,我们为MSI安装程序编写了一个C#DLL(让我们调用
E.DLL
)。由于我们的MSI安装程序使用的是旧版本的windows installer,它不能直接使用C#DLL,而且只能与C类型DLL一起使用,因此我们使用一个名为的开源库来生成C导出函数入口端口。
E.dll
是用.NET2.0(VS2005)构建的

正如我的第一个问题所述,我们在只安装了.NET4.0或更高版本的机器上运行安装程序有困难。经过这个优秀论坛的努力和帮助,我想我开始理解这个问题了,下面是最终的应用程序配置文件:


由于这些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(我刚刚测试了它,但它不工作,我仍然需要找出应该使用app.config文件的exe)。不管是哪个exe,都是一团糟。我无法通过在.NET 4.0(VS2010)中构建DLL来解决此问题,因为我需要配置文件将useLegacyV2RuntimeActivationPolicy设置为“true”


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

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


msiexec.exe.config无法工作,因为msiexec.exe有一个嵌入式清单。

非常感谢。您是否可以提供更多详细信息,或者发送一个链接,说明为什么嵌入式清单会阻止msiexec.exe.config文件工作?如果可能的话,你能给出一些关于实现这个蹦床.exe的细节吗?现在,我们使用一个自定义操作将.dll保存到磁盘,然后从磁盘动态加载库。我可以通过检查我们的MSI开发人员来添加更多的细节。我们正在考虑在纯C++中实现蹦床.exe,DLL也不需要C导出函数入口点。加载器在.exe文件中寻找清单,如果没有找到,则查找.ex.CONFIG文件。trampoline exe可以以任何方式实现。其思想是提取它及其所有依赖项,然后将其作为自定义操作启动。