【问题标题】:How to update both 32 & 64 bit machine.config如何更新 32 和 64 位 machine.config
【发布时间】:2013-11-07 14:52:29
【问题描述】:

我们的解决方案是一套可以在一台机器上运行或完全分布式的 Windows 和 Web 服务。

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

我们的一些服务需要作为 32 位应用程序运行,一些 Web 服务将在 32 位应用程序池中运行,因此我们混合了运行 64 位和 32 位的进程,通常在同一台机器上。

根据偏好,我们会将我们的一个配置放入 .net machine.config。我当前的任务是编写一个简单的 win-forms UI 来使用我们的配置更新 machine.config。

但是,默认情况下,使用

打开机器配置
config = System.Configuration.ConfigurationManager.OpenMachineConfiguration();

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

是否有已知且安全的方法来执行此操作?

我的第一直觉是有一个控制台应用程序,用户界面可以调用它来进行实际更新,并且有 2 种不同的风格,一种 32 位和一种 64 位。

或者有更好的方法吗?

【问题讨论】:

  • 我知道在 MVC 中你可以做 Web.Debug.configWeb.Release.config 并且在编译时它会选择适当的转换 - 也许对于应用程序做 32 位和 64 位有类似的东西......
  • 我做过类似的事情。 stackoverflow.com/questions/32400437/…

标签: c# .net .net-4.5 32bit-64bit machine.config


【解决方案1】:

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

var path = "path to desired machine config";
ConfigurationFileMap cfm = new ConfigurationFileMap(path);
Configuration config = ConfigurationManager.OpenMappedMachineConfiguration(cfm);

可以在此处找到有关该方法的更多信息: http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.openmappedmachineconfiguration(v=vs.110).aspx

【讨论】:

  • 好的,但是您能相信机器配置文件将始终位于C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config吗?
  • 您可以将 System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() 用于当前运行时。作为替代方案,您可以将“Framework64”替换为“Framework”,反之亦然。
  • 。 . .它不起作用。当您尝试从 64 位进程打开 32 位配置时,对 OpenMappedMachineConfiguration 的调用返回空值,所以很好的尝试但没有雪茄 :)
  • 。 . .并原谅我,因为 它确实有效(我 - 通常 - 做错了其他事情)。感谢您的所有帮助!
猜你喜欢
  • 2013-11-23
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
相关资源
最近更新 更多