C# 如何使用不同的配置文件运行可执行程序?

C# 如何使用不同的配置文件运行可执行程序?,c#,.net,C#,.net,我想用不同的配置文件运行一个程序,这个程序用C#2.0写,我做了一些不同的文件名{program#U name}.exe.config,我的意思是用不同的配置文件运行一个exe,例如我有3个配置文件,然后我用不同的配置文件运行3个exe,但是exe文件是相同的。 我是否可以不修改程序以读取不同的配置文件(我不想将配置文件路径放入exe命令参数中)来执行此操作(如使用批处理文件或其他方法) 谢谢。三个配置和一个可执行文件的主要问题是,您需要为可执行文件指定要使用的配置 一个选项是制作可执行文件的3

我想用不同的配置文件运行一个程序,这个程序用C#2.0写,我做了一些不同的文件名{program#U name}.exe.config,我的意思是用不同的配置文件运行一个exe,例如我有3个配置文件,然后我用不同的配置文件运行3个exe,但是exe文件是相同的。 我是否可以不修改程序以读取不同的配置文件(我不想将配置文件路径放入exe命令参数中)来执行此操作(如使用批处理文件或其他方法)


谢谢。

三个配置和一个可执行文件的主要问题是,您需要为可执行文件指定要使用的配置

一个选项是制作可执行文件的3个副本,
exe1.exe
exe2.exe
exe3.exe
,每个副本都有一个类似名称的配置-
exe1.exe.config
exe2.exe.config
exe3.exe.config

当运行每个可执行文件时,它将使用正确的配置


另一个选项是拥有多个批处理文件,这些批处理文件将根据要使用的配置文件重命名不同的配置文件。然后您有一个exe和三个配置。

您创建了第二个可执行文件,并始终首先运行该可执行文件。在它中,您所要做的就是将一个configfile重命名为正确的名称并启动主应用程序

string currentConfig = "application.exe.config";
string someOtherName = "firstconfig.config";
string configFileYouWant = "secondconfig.config";
string application = "application.exe";

File.Move(currentConfig, someOtherName);
File.Move(configFileYouWant, currentConfig);
Process.Start(application);

您可以更改加载exe的应用程序域的配置文件。这是使用AppDomain类的SetData方法完成的。确保这行代码作为应用程序的第一行执行

string currentConfig = "application.exe.config";
string someOtherName = "firstconfig.config";
string configFileYouWant = "secondconfig.config";
string application = "application.exe";

File.Move(currentConfig, someOtherName);
File.Move(configFileYouWant, currentConfig);
Process.Start(application);
我使用以下代码在3个不同的可执行文件之间共享1个exe.config文件

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE","yourSharedConfig.exe.config");
您可以查看以下博客条目


如果您想用3种不同的配置运行同一个exe,我相信同样的方法也可以进行一些定制。您可以在将exe作为命令行参数调用时传递配置文件的名称,并使用SetData方法动态设置配置。

我使用LINQ进行设置,并将参数作为config=path2file传递

public partial class App : Application {

    private void startup(object sender, StartupEventArgs e) {
        if (null != e) {
            if (null != e.Args && 0 < e.Args.Length) {
                string config = e.Args.Where(a => a.StartsWith("config=")).FirstOrDefault();
                if (null != config) {
                    config = config.Substring("config=".Length);
                    if (File.Exists(config)) {
                        AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", config);
                    }
                }
            }
        }
    }
公共部分类应用程序:应用程序{
私有无效启动(对象发送方、StartupEventArgs e){
如果(null!=e){
if(null!=e.Args&&0a.StartsWith(“config=”).FirstOrDefault();
if(null!=config){
config=config.Substring(“config=“.Length”);
如果(File.Exists(config)){
AppDomain.CurrentDomain.SetData(“APP\u CONFIG\u FILE”,CONFIG);
}
}
}
}
}

你的意思是你有一个可执行文件和三个配置文件,你想选择使用哪一个?我有一个类似的情况,我是通过将可执行文件复制到不同的文件夹中来实现的。所以我有folder1、folder2、folder3包含相同的可执行文件。然后使用windows批处理文件,我可以通过使用ST一次启动所有三个文件ART folder1\myexe.exe START folder2\myexe.exe START folder3\myexe.exe使用
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile=“yourSharedConfig.exe.config”
不是更好吗?