File attachments aren't added if they are prefixed with "\\?\"
dro123 opened this issue · 4 comments
When reporting a bug, please provide the following information to speed up triage:
-
NUnit and NUnit3TestAdapter versions
NUnit 3.14.0
NUnit3TestAdapter 4.5.0 -
Visual Studio edition and full version number (see Help About)
Visual Studio Professional 2022 64bit Version 17.8.3 -
A short repro, preferably attached or pointing to a git repo or gist
https://github.com/nunit/nunit3-vs-adapter/blob/master/src/NUnitTestAdapter/TestConverter.cs#L382C24-L382C24
Here the file path of the attachment is check with "new Uri()".
The Uri class throws an exception if the path prefix "\?" is used even though it's a valid path for Windows:
https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN#maximum-path-length-limitation
This causes the attachments to be ignored even though they are actually there and valid.
A workaround would be to remove "\?" from the beginning if it's there before converting it to an Uri. -
What .net platform and version is being targeted
.NET Framework 4.8 -
If TFS/VSTS issue, what version, hosted or on-premises, and what build task you see this in
None
Can you add a small repro for this?
How do you get file paths like that? Is it to circumvent max path length?
Yes it's to handle long paths.
It's not an issue nowadays, but when I originally added the code it was an issue and that's why it's still in that format.
I updated my code and removed the \\?\
from there and it works fine now.
I thought I'm probably not the only one and it's probably an easy fix, that's why I reported it :-)
Project file:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Library</OutputType>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="NUnit" Version="4.0.1" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
</ItemGroup>
</Project>
Test code:
using NUnit.Framework;
[TestFixture]
public class Tests
{
[Test]
public void LongPathTest()
{
TestContext.AddTestAttachment(@"\\?\C:\Temp\test.txt");
Assert.Fail();
}
}
Run tests with:
dotnet test
Output:
Ignoring attachment with path '\\?\C:\Temp\test.txt' due to problem with path: Invalid URI: The hostname could not be parsed.
Thanks! I'll add that to the test we have, and get this fixed.
The next release of the framework, 4.2, should include a change which may help here by avoiding the need to explicitly specify the "\?" prefix: nunit/nunit#4353
Note that that change will still only include the prefix in the output file itself if it is explicitly specified as part of the AddTestAttachment
call so this adapter-side issue may still be needed if that's desired.