使用App.config调用另一个项目失败的C#Project

时间:2015-12-09 21:05:36

标签: c# app-config

我有一个包含2个项目的解决方案。一个项目是一个控制台应用程序,您可以将信息插入其中,它将提供数据。第二个项目创建多个进程,通过传递参数来调用第一个项目。到目前为止,一切正常。

我想要能够改变第一个项目生成的格式,所以我改变了它的静态格式字符串,以便从App.Config加载。当我自己运行第一个项目时没有问题,一切仍然有效。在第二个项目创建第一个项目的进程后,当它发生更改时,它会因ArgumentNullException而失败,并且似乎没有加载格式字符串。

这是我调用控制台应用程序的第二个项目的代码。

    public static void Main(string[] args)
    {
        for (int i = 1; i < 10; i++)
        {
            Process EulerProblemN = CreateNewProcess(ExecutionPath, i.ToString());
            EulerProblemN.Start();
            string output = EulerProblemN.StandardOutput.ReadToEnd().Replace(Environment.NewLine, "");
            Console.WriteLine(output);
            EulerProblemN.WaitForExit();
        }
        Console.Read();
    }

    public static Process CreateNewProcess (string path, string argument)
    {
        Process eulersOutput = new Process();
        eulersOutput.StartInfo.FileName = path;
        eulersOutput.StartInfo.Arguments = argument;
        eulersOutput.StartInfo.RedirectStandardOutput = true;
        eulersOutput.StartInfo.UseShellExecute = false;
        return eulersOutput;
    }

如果它是相关的,这就是我在第一个项目中访问配置的方式:

private string AnswerFormat = ConfigurationManager.AppSettings["AnswerFormat"];

App.Config的内容:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="AnswerFormat" value="The answer to Problem {0} is {1}, the program took: {2} milliseconds to complete."/>
  </appSettings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

导致此错误的原因是什么?是否与第二个项目如何调用第一个项目有关?

编辑: 首先,我试图覆盖默认的env。配置路径如下所述:Using ConfigurationManager to load config from an arbitrary location。我将该代码添加到两个项目中。不幸的是,这并没有解决错误,所以我将app.config的副本移动到两个项目中。第一个项目继续运行,没有任何问题。我测试了它,第二个项目从它自己的应用程序配置成功加载,但是当它在第一个项目的进程上调用.Start()时,它仍然失败并出现相同的ArgumentNullException错误。

如果项目2从项目2调用为Process,似乎没有从配置文件加载项目2.项目2可以看到它自己的配置文件,它与Project 1中的相同。这仍然是配置文件问题或它可能是别的吗?

1 个答案:

答案 0 :(得分:3)

加载的App.config是您运行的项目的App.config。另一个项目被有效地引用为类库,并且不会加载其var r = await oneMoreAsyncCall() if (r.IsCompleted == true) { return Request.CreateResponse(HttpStatusCode.OK, someData); // Hit second! } 文件。您还需要将设置放在第一个项目的配置文件中。