Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,12 @@ Copyright (c) .NET Foundation. All rights reserved.
<PropertyGroup>
<WarningsAsErrors Condition="'$(_BinaryFormatterObsoleteAsError)' == 'true'">$(WarningsAsErrors);SYSLIB0011</WarningsAsErrors>
</PropertyGroup>

<!--
Suppress CS8002 (referenced assembly doesn't have a strong name) for modern .NET (netx.y) TFMs.
Strong name validation is not enforced on modern .NET runtimes, so this warning is irrelevant.
-->
<PropertyGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp'">
<NoWarn>$(NoWarn);CS8002</NoWarn>
</PropertyGroup>
</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

namespace Microsoft.NET.Build.Tests
{
public class GivenThatWeWantToSuppressCS8002Warning : SdkTest
{
public GivenThatWeWantToSuppressCS8002Warning(ITestOutputHelper log) : base(log)
{
}

[Theory]
[InlineData("net6.0")]
[InlineData("net7.0")]
[InlineData("net8.0")]
public void CS8002_is_suppressed_for_modern_net_tfms(string targetFramework)
{
var testProject = new TestProject
{
Name = "TestProject",
TargetFrameworks = targetFramework,
IsExe = false,
SourceFiles =
{
["Class1.cs"] = @"
public class TestClass
{
public void TestMethod() { }
}
",
}
};

var testAsset = _testAssetsManager
.CreateTestProject(testProject, identifier: targetFramework);

var buildCommand = new GetValuesCommand(
Log,
Path.Combine(testAsset.TestRoot, testProject.Name),
targetFramework, "NoWarn")
{
DependsOnTargets = "Build"
};

var buildResult = buildCommand.Execute();
buildResult.Should().Pass();

var noWarnValues = buildCommand.GetValues();
noWarnValues.Should().Contain("CS8002", $"CS8002 should be suppressed for {targetFramework}");
}

[Theory]
[InlineData("net472")]
[InlineData("net48")]
[InlineData("netstandard2.0")]
[InlineData("netstandard2.1")]
public void CS8002_is_not_suppressed_for_non_modern_net_tfms(string targetFramework)
{
var testProject = new TestProject
{
Name = "TestProject",
TargetFrameworks = targetFramework,
IsExe = false,
SourceFiles =
{
["Class1.cs"] = @"
public class TestClass
{
public void TestMethod() { }
}
",
}
};

var testAsset = _testAssetsManager
.CreateTestProject(testProject, identifier: targetFramework);

var buildCommand = new GetValuesCommand(
Log,
Path.Combine(testAsset.TestRoot, testProject.Name),
targetFramework, "NoWarn")
{
DependsOnTargets = "Build"
};

var buildResult = buildCommand.Execute();
buildResult.Should().Pass();

var noWarnValues = buildCommand.GetValues();
noWarnValues.Should().NotContain("CS8002", $"CS8002 should NOT be suppressed for {targetFramework}");
}

[Fact]
public void CS8002_suppression_works_with_existing_nowarn()
{
var testProject = new TestProject
{
Name = "TestProject",
TargetFrameworks = "net8.0",
IsExe = false,
SourceFiles =
{
["Class1.cs"] = @"
public class TestClass
{
public void TestMethod() { }
}
",
}
};

testProject.AdditionalProperties["NoWarn"] = "CS1591";

var testAsset = _testAssetsManager
.CreateTestProject(testProject);

var buildCommand = new GetValuesCommand(
Log,
Path.Combine(testAsset.TestRoot, testProject.Name),
"net8.0", "NoWarn")
{
DependsOnTargets = "Build"
};

var buildResult = buildCommand.Execute();
buildResult.Should().Pass();

var noWarnValues = buildCommand.GetValues();
noWarnValues.Should().Contain("CS1591", "Existing NoWarn should be preserved");
noWarnValues.Should().Contain("CS8002", "CS8002 should be added to NoWarn");
}
}
}
Loading