C# 项目调用另一个项目失败 App.config
C# Project calling another Project failing with 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>
这个错误的原因是什么?它与第二个项目如何调用第一个项目有关吗?
编辑:
首先,我尝试覆盖默认环境。此处描述的配置路径:Using ConfigurationManager to load config from an arbitrary location。我将该代码添加到两个项目中。不幸的是,这并没有解决错误,所以我将 app.config 的副本移动到两个项目中。第一个项目继续 运行,没有任何问题。我测试了它,第二个项目成功地从它自己的应用程序配置加载,但是当它在第一个项目的过程中调用 .Start() 时,它仍然失败并出现相同的 ArgumentNullException 错误。
如果从项目 2 作为进程调用,似乎项目 1 没有从配置文件加载。项目 2 可以看到它自己的配置文件,它与项目 1 中的相同。这仍然是配置文件吗问题还是别的什么?
加载的App.config
是您运行的项目。另一个项目被有效地引用为 class 库,它的 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>
这个错误的原因是什么?它与第二个项目如何调用第一个项目有关吗?
编辑: 首先,我尝试覆盖默认环境。此处描述的配置路径:Using ConfigurationManager to load config from an arbitrary location。我将该代码添加到两个项目中。不幸的是,这并没有解决错误,所以我将 app.config 的副本移动到两个项目中。第一个项目继续 运行,没有任何问题。我测试了它,第二个项目成功地从它自己的应用程序配置加载,但是当它在第一个项目的过程中调用 .Start() 时,它仍然失败并出现相同的 ArgumentNullException 错误。
如果从项目 2 作为进程调用,似乎项目 1 没有从配置文件加载。项目 2 可以看到它自己的配置文件,它与项目 1 中的相同。这仍然是配置文件吗问题还是别的什么?
加载的App.config
是您运行的项目。另一个项目被有效地引用为 class 库,它的 App.config
文件将不会被加载。您还需要将设置放入第一个项目的配置文件中。