C# 运行 另一个程序并指定 App.Config 文件

C# Run Another Program and Specify App.Config File

我有一个测试程序,我在其中使用 System.Diagnostics 调用另一个程序(我们称之为主程序)。我在指定测试程序使用的 App.Config 时遇到问题。它似乎总是默认使用主程序的 app.config。有没有一种方法可以在不更改主程序以使用程序参数的情况下指定要使用的文件?请参阅下面的代码。

  Process process = new Process();
  process.StartInfo.UseShellExecute = false;
  process.StartInfo.FileName = @"...\MainProgram.exe";
  process.StartInfo.CreateNoWindow = false;
  process.StartInfo.WorkingDirectory = @"...\TestProgram\bin\Debug";
  process.Start();

我假设您可以复制要使用的文件以确保它是您需要的文件。

使用 File.Copy 来完成。

  File.Copy(@"C:\yourCorrectFilePath\App.Config", @"...\TestProgram\bin\Debug\App.Config", true);
  Process process = new Process();
  process.StartInfo.UseShellExecute = false;
  process.StartInfo.FileName = @"...\MainProgram.exe";
  process.StartInfo.CreateNoWindow = false;
  process.StartInfo.WorkingDirectory = @"...\TestProgram\bin\Debug";
  process.Start();

无法在 运行 时指定 App.config 文件。 @NicoRiff 的答案会起作用,但您也可以将具有不同配置的可执行文件存储在不同的路径中,这些路径可以通过编程方式设置为变量。

您可以在单独的应用程序域中启动该程序,并在那里设置 app.config 形式的路径:

      AppDomainSetup setup = new AppDomainSetup
                    {
                        ShadowCopyFiles = "true",
                        LoaderOptimization = LoaderOptimization.MultiDomainHost,
                        ApplicationBase = "C:\ExamplePath",
                        PrivateBinPath = "C:\ExamplePath",
                        PrivateBinPathProbe = "C:\ExamplePath"
                    };

                    var domain = AppDomain.CreateDomain("ExampleName", null, setup);
                    domain.SetData("APP_CONFIG_FILE", "C:\ExamplePath" + "\app.config");

setup.ExecuteAssembly(@"c:\ExamplePath\MainProgram.exe");