You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Microsoft.NET.Test.Sdk与<EnableComHosting>true是否互斥?COM插件如何运行单元测试

关于EnableComHosting与Microsoft.NET.Test.Sdk的互斥问题

两者存在默认生成逻辑冲突。原因是Microsoft.NET.Test.Sdk会默认覆盖项目的输出类型和宿主生成逻辑,将项目识别为测试项目优先生成测试相关宿主,跳过COM宿主的生成流程,才会出现添加Test.Sdk后.comhost.dll消失的情况。

可行的解决方案

方案1:拆分项目结构(最推荐,无冲突)

  • 将COM插件的核心业务逻辑、测试用例单独拆到一个类库项目中,该类库不启用EnableComHosting,按需引用Microsoft.NET.Test.Sdk和测试框架
  • 单独创建一个COM插件启动项目,仅保留插件注册、入口逻辑,引用上述核心类库,仅在该启动项目中配置<EnableComHosting>true</EnableComHosting>,不引用任何测试相关SDK
  • 运行集成测试时,在插件入口中直接加载核心类库的测试程序集执行测试即可,两个项目的输出可以配置到同一个目录规避文件缺失问题

方案2:修改项目配置强制同时生成COM宿主和测试依赖

在你的插件项目的.csproj文件中添加如下配置,强制保留COM宿主生成逻辑:

<PropertyGroup>
  <EnableComHosting>true</EnableComHosting>
  <!-- 强制生成comhost,不被Test.Sdk的逻辑覆盖 -->
  <GenerateComHost>true</GenerateComHost>
  <GenerateTestHost>true</GenerateTestHost>
</PropertyGroup>

添加完成后重新安装Microsoft.NET.Test.Sdk包,重新生成后.comhost.dll和testhost.dll会同时出现在输出目录。

方案3:使用独立测试运行引擎规避testhost.dll依赖

你当前使用的AssemblyRunner依赖Visual Studio测试平台的testhost组件,可以替换为xUnit或者NUnit的自托管运行API,不需要依赖Microsoft.NET.Test.Sdk就能直接在进程内发现和执行测试:
以xUnit为例,直接引用xunit.core和xunit.execution.desktop包,不需要引用Test.Sdk,用如下代码执行测试即可:

using Xunit;
using Xunit.Abstractions;

var diagnosticMessageSink = new MessageSinkWithTypes();
var discoveryOptions = TestFrameworkOptions.ForDiscovery();
using var framework = new XunitFramework(
    AppDomain.CurrentDomain,
    _assemblyPath,
    configFile: null,
    shadowCopy: false,
    shadowCopyFolder: null,
    diagnosticMessageSink: diagnosticMessageSink);

var discoverySink = new TestDiscoverySink();
framework.Discover(
    discoveryOptions,
    includeSourceInformation: true,
    discoverySink);
discoverySink.Finished.WaitOne();

// 后续执行测试用ExecutionSink即可

这个方案完全不依赖testhost.dll,不会和COM宿主生成逻辑产生任何冲突。

手动复制testhost.dll无效的原因

你手动复制的testhost.dll和当前项目的运行时版本、目标框架不匹配,同时缺少配套的.deps.json和.runtimeconfig.json配置文件,测试平台无法正确初始化运行环境,所以依然发现不了测试。

内容的提问来源于stack exchange,提问作者Curdie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:06:04