Visual Studio 2022中C#项目XUnit测试无法引用主命名空间求助
问题描述
在Visual Studio 2022中为C#代码编写XUnit测试时,已搭建好测试框架,但创建XUnit测试项目后,无法引用主代码中的AutoReleaseConfigSheet命名空间。已将Configuration类移至与Program同级,问题仍未解决。
目录结构
C:. │ .gitlab-ci.yml │ App.config │ AutoReleaseConfigShee.csproj.user │ AutoReleaseConfigSheet_v1.c.sln │ cdav.cs │ cdav.csproj │ cdav.csproj.user │ Configure.ini │ debug.log │ Oracle.DataAccess.Common.Configuration.Section.xsd │ Oracle.ManagedDataAccess.Client.Configuration.Section.xsd │ packages.config │ readthis.txt │ ├───bin ├───GPUCache ├───obj ├───packages └───Properties
主代码片段
using IniParser; using IniParser.Model; using Oracle.ManagedDataAccess.Client; using System; using System.Data; using System.IO; using System.Net.Mail; using System.Data.SQLite; using ClosedXML.Excel; using Serilog; using Serilog.Events; namespace AutoReleaseConfigSheet { class Program { static void Main() { ConfigureLogger(); try { Log.Information("Application started"); string configIniPath = Path.Combine(Directory.GetCurrentDirectory(), "Configure.ini"); Configuration config = LoadConfiguration(configIniPath); InitializeFiles(config); ProcessInputFile(config); TriggerEmailNotification(config); SendReport(config.MailRecipients, config.MailServer, config.MailTitle); Log.Information("CDAV Executed successfully"); } catch (Exception ex) { Log.Error(ex, "An error occurred"); } finally { Log.CloseAndFlush(); } } static void ConfigureLogger() { string logDirectory = "log"; string logFile = Path.Combine(logDirectory, ".log"); Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() .WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Information) .WriteTo.File(logFile, rollingInterval: RollingInterval.Day, restrictedToMinimumLevel: LogEventLevel.Information) .CreateLogger(); } static Configuration LoadConfiguration(string configIniPath) { var parser = new FileIniDataParser(); IniData data = parser.ReadFile(configIniPath); Configuration config = new Configuration { MiasConnStr = GetConfigData(data, "DBConnector", "MiasConnStr"), OrderFromOFSFileDirectory = GetConfigData(data, "MasterFiles", "OrderFromOFSFileDirectory"), MailTitle = GetConfigData(data, "EmailDistro", "Mail Title"), MailServer = GetConfigData(data, "EmailDistro", "Mail Server"), MailRecipients = GetConfigData(data, "EmailDistro", "Mail Recipients"), ReportRecipients = GetConfigData(data, "EmailDistro", "Report Recipients"), ReportTitle = GetConfigData(data, "EmailDistro", "Report Title") }; return config; } public class Configuration { public string MiasConnStr { get; set; } public string OrderFromOFSFileDirectory { get; set; } public string AutoMailODMPath { get; set; } public string EmailBodyPath { get; set; } public string RlsOdrTxtPath { get; set; } public string HlOdrTxtPath { get; set; } public string MailTitle { get; set; } public string MailServer { get; set; } public string MailRecipients { get; set; } public string ReportRecipients { get; set; } public string ReportTitle { get; set; } } } }
XUnit测试代码片段
using Xunit; using AutoReleaseConfigSheet; namespace AutoReleaseConfigSheet.Tests { public class ProgramTests { [Fact] public void LoadConfiguration_ValidData_ReturnsConfiguration() { // Arrange string configIniPath = "path_to_test_config.ini"; // Update this with the actual test config file path Configuration expectedConfig = new Configuration { MiasConnStr = "TestConnStr", OrderFromOFSFileDirectory = "TestOrderDirectory", // ... initialize other properties with expected values }; // Act Configuration actualConfig = Program.LoadConfiguration(configIniPath); // Assert Assert.Equal(expectedConfig.MiasConnStr, actualConfig.MiasConnStr); Assert.Equal(expectedConfig.OrderFromOFSFileDirectory, actualConfig.OrderFromOFSFileDirectory); // ... assert other properties } // Add more test methods for other parts of your code } }
解决建议
1. 给测试项目添加主项目引用
右键XUnit测试项目 → 添加 → 项目引用,在弹出窗口中勾选主项目(cdav.csproj),点击确定。
2. 修正访问修饰符
Program类默认是internal,测试项目无法访问,需改为public:namespace AutoReleaseConfigSheet { public class Program { // 原有代码 } }LoadConfiguration方法默认是internal,需改为public static才能被测试项目调用:public static Configuration LoadConfiguration(string configIniPath) { // 原有代码 }
3. 调整Configuration类位置(可选)
当前Configuration是Program的内部类,建议移到命名空间下成为顶级类,避免嵌套访问问题:
namespace AutoReleaseConfigSheet { public class Program { // Program类代码 } public class Configuration { // 原有属性 } }
4. 清理重建解决方案
点击Visual Studio顶部菜单 → 生成 → 清理解决方案,随后点击 生成 → 重建解决方案,确保所有项目编译正常。
5. 检查目标框架一致性
分别右键主项目和测试项目 → 属性,确认两者的目标框架版本一致(比如都是.NET 6.0),避免框架不兼容导致引用失败。
内容的提问来源于stack exchange,提问作者Michael Ng
相关产品推荐
相关产品推荐

