.NET 8 xUnit测试项目如何获取自身Assembly(程序集)?
如何获取.NET 8 xUnit测试项目的Assembly?
针对你的场景,推荐以下两种可靠的解决方案:
方案一:通过测试类类型获取
直接使用测试项目中任意一个测试类的Type来定位目标程序集,这是最直接且不易出错的方式:
// 将MyTestClass替换为你测试项目中实际存在的测试类 var testAssembly = typeof(MyTestClass).Assembly;
原理:测试类本身就属于目标测试项目程序集,通过类型的Assembly属性可以直接关联到该程序集。
方案二:通过程序集名称加载
如果不想依赖具体测试类,可以直接通过程序集名称加载:
// 使用程序集短名称加载 var testAssembly = Assembly.Load("MyCompany.MyProject.Test"); // 若需指定版本、公钥等信息,可使用AssemblyName对象 var assemblyName = new AssemblyName("MyCompany.MyProject.Test"); var testAssembly = Assembly.Load(assemblyName);
你之前方法失效的原因说明
Assembly.GetEntryAssembly():xUnit测试由testhost进程托管运行,该方法返回的是testhost的程序集,而非你的测试项目程序集,属于正常运行逻辑。Assembly.GetExecutingAssembly():如果你的获取代码写在非测试项目的程序集(比如通用辅助类库)中,返回的就是代码所在类库的程序集,而非测试项目程序集。- 遍历引用程序集:xUnit测试项目的程序集可能未被提前加载,或是遍历逻辑未覆盖到目标程序集,因此无法获取到。
内容的提问来源于stack exchange,提问作者Simone
相关产品推荐
相关产品推荐

