C# 如何更新32&;64位machine.config

C# 如何更新32&;64位machine.config,c#,.net,.net-4.5,32bit-64bit,machine.config,C#,.net,.net 4.5,32bit 64bit,Machine.config,我们的解决方案是一套windows和web服务,它们都可以在一台机器上运行或完全分布式 我们只需要一个配置就可以将所有这些连接在一起(它恰好是RabbitMq端点,但这并不重要) 我们的一些服务需要以32位应用程序的形式运行,一些web服务将在32位应用程序池中运行,因此我们有一个64位和32位的混合进程,通常在同一台机器上运行 根据偏好,我们会将配置的一部分放到.net machine.config中。我当前的任务是编写一个简单的WinForms UI,用我们的配置更新machine.conf

我们的解决方案是一套windows和web服务,它们都可以在一台机器上运行或完全分布式

我们只需要一个配置就可以将所有这些连接在一起(它恰好是RabbitMq端点,但这并不重要)

我们的一些服务需要以32位应用程序的形式运行,一些web服务将在32位应用程序池中运行,因此我们有一个64位和32位的混合进程,通常在同一台机器上运行

根据偏好,我们会将配置的一部分放到.net machine.config中。我当前的任务是编写一个简单的WinForms UI,用我们的配置更新machine.config

但是,默认情况下,打开机器配置时

config = System.Configuration.ConfigurationManager.OpenMachineConfiguration();
打开与正在运行的UI的位关联的machine.config,但是我需要用相同的值更新32位和64位机器配置文件

有没有一种已知且安全的方法可以做到这一点

我的第一反应是有一个控制台应用程序,用户界面可以调用它来进行实际的更新,它有两种不同的风格,一种是32位,另一种是64位


或者有更好的方法吗?

我认为您应该能够使用ConfigurationManager上的
OpenMappedMachineConfiguration
方法打开特定的机器配置文件

var path = "path to desired machine config";
ConfigurationFileMap cfm = new ConfigurationFileMap(path);
Configuration config = ConfigurationManager.OpenMappedMachineConfiguration(cfm);
有关该方法的更多信息,请参见:

我知道,在MVC中,您可以执行
Web.Debug.config
Web.Release.config
并且在编译时,它将选择适当的转换-可能对应用程序执行32位和64位操作有类似之处…我做过类似的操作。好的,但是您可以相信机器配置文件将始终位于
C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config
?您可以使用System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()作为当前运行时。对于替代方案,您可以将“Framework64”替换为“Framework”,反之亦然。但它不起作用。当您尝试从64位进程打开32位配置时,对
OpenMappedMachineConfiguration
的调用将返回一个空值,非常好的尝试,但没有提示:)。请原谅我,因为它确实起作用(我通常是在做其他错事)。谢谢你的帮助,先生!