【问题标题】:C# Project calling another Project failing with App.configC# 项目调用另一个项目因 App.config 失败
【发布时间】:2016-03-15 07:49:20
【问题描述】:

我有一个包含 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 中的相同。这仍然是配置文件问题还是会是别的吗?

【问题讨论】:

标签: c# app-config


【解决方案1】:

加载的App.config 是你运行的项目的。另一个项目被有效地引用为类库,其App.config 文件将不会被加载。您还需要将设置放在第一个项目的配置文件中。

【讨论】:

  • App.Config 由两个项目共享,它已经可以访问它
  • @wentimo 不会改变答案。第二个应用程序不能像那样在运行时访问它。如果您想将这些项目中的任何一个加载为启动项目,那么这个 SO 问题就更多了。要做到那个,看看这个问题:stackoverflow.com/questions/4738/…
  • 我将 app.config 的副本移动到第二个项目中,但仍然出现相同的错误
  • 哦,你要新建另一个进程?它不会对现有流程有任何了解,包括App.config。为什么不通过项目引用来引用代码而不是创建另一个流程?然后 AppSettings 将可用。
猜你喜欢
  • 2014-05-12
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
  • 2011-05-22
  • 1970-01-01
相关资源
最近更新 更多