You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Visual Studio C#项目的projectname.exe.config重命名为自定义名称并正常读取?

重命名C#应用配置文件(不修改EXE名称)的解决方案

方法1:手动加载自定义配置并替换当前应用配置

适合控制台、WinForms等简单应用,直接在程序启动时指定配置文件路径,覆盖默认配置逻辑。

代码实现:

using System;
using System.Configuration;
using System.IO;

namespace YourApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            // 定义自定义配置文件的路径(默认和EXE同目录)
            string configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "application.config");
            
            // 创建配置映射指向自定义文件
            var configMap = new ExeConfigurationFileMap { ExeConfigFilename = configPath };
            // 加载自定义配置
            Configuration customConfig = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
            
            // 将自定义配置设置为当前应用的默认配置
            ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath = customConfig.FilePath;

            // 后续所有ConfigurationManager的读取都会使用application.config
            // 示例:读取配置项
            string exampleSetting = ConfigurationManager.AppSettings["ExampleKey"];
            Console.WriteLine(exampleSetting);
            
            // 执行你的业务逻辑
            // ...
        }
    }
}

方法2:创建自定义AppDomain加载配置

如果应用中有依赖默认AppDomain配置的第三方组件,这种方法更可靠——让整个应用域都使用指定的配置文件,避免组件读取默认配置的问题。

代码实现:

using System;
using System.IO;

namespace YourApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            // 配置新AppDomain的参数
            AppDomainSetup domainSetup = new AppDomainSetup
            {
                // 指定自定义配置文件路径
                ConfigurationFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "application.config"),
                // 保持应用程序基目录和原EXE一致
                ApplicationBase = AppDomain.CurrentDomain.BaseDirectory
            };

            // 创建新的应用域
            AppDomain customDomain = AppDomain.CreateDomain("CustomConfigDomain", null, domainSetup);
            
            // 在新域中执行程序核心逻辑
            customDomain.DoCallBack(() =>
            {
                // 这里写原本Main方法中的业务逻辑
                // 示例读取配置
                string setting = System.Configuration.ConfigurationManager.AppSettings["ExampleKey"];
                Console.WriteLine($"从自定义配置读取到:{setting}");
            });

            // 程序结束后卸载应用域
            AppDomain.Unload(customDomain);
        }
    }
}

额外:配合DLL独立文件夹的配置

针对你提到的「将DLL放在独立文件夹」的需求,只需在application.config中添加probing节点,指定DLL的搜索路径即可:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <!-- privatePath是相对EXE目录的文件夹,多个路径用分号分隔 -->
      <probing privatePath="Dlls;ThirdPartyLibs" />
    </assemblyBinding>
  </runtime>
  
  <!-- 保留原配置文件的所有配置节 -->
  <appSettings>
    <add key="ExampleKey" value="ExampleValue" />
  </appSettings>
</configuration>

注意事项

  • 确保application.config的格式和原projectname.exe.config完全一致,包括所有配置节和命名空间,否则会出现配置读取异常。
  • 对于WPF应用,建议在App.xaml.cs的OnStartup方法中执行配置加载逻辑,避免WPF初始化阶段读取默认配置。
  • 部署时要保证application.config和EXE在同一目录(或你指定的路径),且应用具备读取该文件的权限。

内容的提问来源于stack exchange,提问作者chs2311

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 17:56:17