gpt4 book ai didi

c# - 无法使用 ConfigurationManager 在 C# .NET Core 单元测试项目中读取 app.config

转载 作者:可可西里 更新时间:2023-11-01 07:44:14 26 4
gpt4 key购买 nike

我创建了一个简单的单元测试项目来读取 app.config 文件。目标框架是 Core 2.0。我还创建了一个 Core 2.0 控制台应用程序,以健全地检查自己以确保我没有做任何奇怪的事情(相同的测试按预期在 .NET 4.6.1 单元测试项目中通过)。

控制台应用程序读取 app.config 正常,但单元测试方法失败,我无法弄清楚原因。两者都使用相同 app.config 的副本(未添加为链接)并且都安装了 System.Configuration.ConfigurationManager v4.4.1 NuGet 包。

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Test1" value ="This is test 1."/>
<add key="Test2" value ="42"/>
<add key="Test3" value ="-42"/>
<add key="Test4" value="true"/>
<add key="Test5" value="false"/>
<add key="Test6" value ="101.101"/>
<add key="Test7" value ="-1.2345"/>
</appSettings>
</configuration>

单元测试

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Configuration;

namespace ConfigTest
{
[TestClass]
public class UnitTest1
{
[TestMethod()]
public void ConfigTest()
{
foreach (string s in ConfigurationManager.AppSettings.AllKeys)
{
System.Console.WriteLine(s);
System.Diagnostics.Debug.WriteLine(s);
}

//AllKeys.Length is 0? Should be 7...
Assert.IsTrue(ConfigurationManager.AppSettings.AllKeys.Length == 7);
}
}
}

控制台应用

using System;
using System.Configuration;

namespace ConfigTestApp
{
class Program
{
static void Main(string[] args)
{
foreach (string s in ConfigurationManager.AppSettings.AllKeys)
{
Console.WriteLine(s);
System.Diagnostics.Debug.WriteLine(s);
}

//Outputs 7 as expected
Console.WriteLine(ConfigurationManager.AppSettings.AllKeys.Length);
}
}
}

鉴于我对整个 .NET Core 世界还是很陌生,我在这里做的事情是不是完全不正确?我现在有点疯狂……

Both projects with an app.config

最佳答案

浏览github问题的评论,我找到了一个可以进入 msbuild 文件的解决方法......

<Target Name="CopyCustomContent" AfterTargets="AfterBuild">
<Copy SourceFiles="app.config" DestinationFiles="$(OutDir)\testhost.dll.config" />
</Target>

这使得在将配置数据移植到 json 配置文件之前更容易验证 .NET Core 下的现有测试。

编辑

如果在 Resharper 下运行,前面的答案不起作用,因为 Resharper 代理程序集,所以你需要

<Target Name="CopyCustomContent" AfterTargets="AfterBuild">
<Copy SourceFiles="app.config" DestinationFiles="$(OutDir)\ReSharperTestRunner64.dll.config" />
</Target>

关于c# - 无法使用 ConfigurationManager 在 C# .NET Core 单元测试项目中读取 app.config,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48666780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com