VS2017中.NET Core xUnit测试项目无法找到COM选项卡添加System.Configuration.dll
嘿,我来帮你理清这个问题!首先得明确:.NET Core(包括你用的xUnit测试项目)并不支持通过COM选项卡添加System.Configuration.dll——因为.NET Core采用了全新的依赖管理模型,传统的COM引用方式只适用于.NET Framework项目,这就是你看不到COM选项卡的原因。
下面分两种情况给你解决方案:
一、推荐:使用.NET Core原生的配置系统(适配appsettings.json)
如果你只是想读取appsettings.json里的配置值,完全不需要依赖旧的System.Configuration.dll,.NET Core提供了更轻量、更灵活的配置系统,步骤如下:
安装必要的NuGet包
右键你的xUnit项目 → 选择「管理NuGet程序包」,在浏览标签页搜索并安装以下包:Microsoft.Extensions.Configuration.Json:支持读取JSON配置文件Microsoft.Extensions.Configuration.Binder:方便将配置绑定到实体类(可选,但推荐)
配置appsettings.json的复制属性
右键appsettings.json文件 → 选择「属性」,把「复制到输出目录」设置为「如果较新则复制」或者「始终复制」,确保测试运行时能找到配置文件。在测试类中读取配置
举个简单的示例:using System.IO; using Microsoft.Extensions.Configuration; using Xunit; public class ConfigurationTests { private readonly IConfiguration _config; public ConfigurationTests() { // 初始化配置构建器 var configBuilder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); _config = configBuilder.Build(); } [Fact] public void ReadAppSettingsTest() { // 直接通过键路径读取值 var apiUrl = _config["ApiSettings:BaseUrl"]; var timeout = _config.GetValue<int>("ApiSettings:Timeout"); // 验证读取结果 Assert.NotNull(apiUrl); Assert.True(timeout > 0); } }对应的
appsettings.json内容可以是:{ "ApiSettings": { "BaseUrl": "https://api.example.com", "Timeout": 30 } }
二、如果确实需要旧的System.Configuration.dll(兼容旧代码)
如果你是因为要兼容基于.NET Framework的旧代码,必须使用System.Configuration相关的API,那也不需要找COM引用,直接通过NuGet安装对应的包即可:
- 打开NuGet包管理器,搜索并安装
System.Configuration.ConfigurationManager包。 - 安装完成后,你就可以在代码中引用
System.Configuration命名空间,使用ConfigurationManager等类了。
补充说明
为什么你看不到COM选项卡?因为.NET Core项目采用的是SDK-style项目格式,所有依赖(包括系统类库)都通过NuGet管理,不再支持.NET Framework那种通过COM/程序集引用添加系统dll的方式,这样能保证项目的跨平台兼容性和依赖的可追溯性。
内容的提问来源于stack exchange,提问作者Aravind

