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

xUnit.Net未加载app.manifest致长路径支持失效问题求助

解决xUnit测试中Windows长路径支持失效的问题

方案1:给测试项目添加自定义app.manifest并配置

xUnit测试由测试宿主进程执行,你可以通过给测试项目添加app.manifest强制启用长路径支持:

  • 右键测试项目 → 添加 → 新建项 → 选择「应用程序清单文件」(app.manifest)
  • 在manifest的<application>节点中,补充命名空间并添加长路径配置:
<application xmlns="urn:schemas-microsoft-com:asm.v1"
             xmlns:v3="urn:schemas-microsoft-com:asm.v3">
  <v3:windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
    <ws2:longPathAware>true</ws2:longPathAware>
  </v3:windowsSettings>
</application>
  • 进入项目属性,确认「Manifest」选项已选中你添加的app.manifest
  • 若使用.NET Core/.NET 5+,还需在项目文件(.csproj)中嵌入manifest:
<PropertyGroup>
  <ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>

方案2:修改Visual Studio测试宿主的全局配置

如果用Visual Studio自带的测试运行器,可以修改宿主配置来全局启用长路径:

  • 找到Visual Studio安装目录下的vstest.console.exe.config(示例路径:C:\Program Files (x86)\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\TestPlatform)
  • 在<configuration>节点内添加:
<runtime>
  <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false" />
</runtime>
  • 注意:这是全局设置,会影响所有通过vstest运行的测试项目。

方案3:通过.NET AppContext开关配置(无业务代码修改)

无需改动测试或业务代码,仅通过项目配置启用长路径:

  • 在测试项目的.csproj文件中添加:
<PropertyGroup>
  <RuntimeHostConfigurationOption Include="System.IO.UseLegacyPathHandling" Value="false" />
  <RuntimeHostConfigurationOption Include="System.IO.BlockLongPaths" Value="false" />
</PropertyGroup>
  • 或者在测试项目的Properties/launchSettings.json中配置环境变量:
"environmentVariables": {
  "DOTNET_SYSTEM_IO_USELEGACYPATHHANDLING": "false",
  "DOTNET_SYSTEM_IO_BLOCKLONGPATHS": "false"
}

验证配置是否生效

可以添加测试用例确认长路径支持已启用:

[Fact]
public void CheckLongPathSupportStatus()
{
    var legacyEnabled = AppContext.TryGetSwitch("Switch.System.IO.UseLegacyPathHandling", out var legacyVal) && legacyVal;
    var blockEnabled = AppContext.TryGetSwitch("Switch.System.IO.BlockLongPaths", out var blockVal) && blockVal;
    Assert.False(legacyEnabled, "遗留路径处理应已禁用");
    Assert.False(blockEnabled, "长路径拦截应已禁用");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:05:27