Skip to content

Commit ec4f41e

Browse files
committed
Fix test projects which reference self-contained Exes
Fix #17579
1 parent da9e8f4 commit ec4f41e

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1060,6 +1060,13 @@ Copyright (c) .NET Foundation. All rights reserved.
10601060
<ShouldBeValidatedAsExecutableReference>false</ShouldBeValidatedAsExecutableReference>
10611061
</PropertyGroup>
10621062

1063+
<PropertyGroup Condition="'$(IsTestProject)' == 'true' And '$(ValidateExecutableReferencesMatchSelfContained)' == ''">
1064+
<!-- Don't generate an error if a test project references a self-contained Exe. Test projects
1065+
use an OutputType of Exe but will usually call APIs in a referenced Exe rather than try
1066+
to run it. -->
1067+
<ValidateExecutableReferencesMatchSelfContained>false</ValidateExecutableReferencesMatchSelfContained>
1068+
</PropertyGroup>
1069+
10631070
<UsingTask TaskName="ValidateExecutableReferences" AssemblyFile="$(MicrosoftNETBuildTasksAssembly)" />
10641071

10651072
<Target Name="ValidateExecutableReferences"

src/Tests/Microsoft.NET.Build.Tests/ReferenceExeTests.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,5 +259,41 @@ public void ReferencedExeCanRunWhenPublishedWithTrimming()
259259

260260
RunTest();
261261
}
262+
263+
[Theory]
264+
[InlineData("xunit")]
265+
[InlineData("mstest")]
266+
public void TestProjectCanReferenceExe(string testTemplateName)
267+
{
268+
var testConsoleProject = new TestProject("ConsoleApp")
269+
{
270+
IsExe = true,
271+
TargetFrameworks = "net5.0",
272+
RuntimeIdentifier = EnvironmentInfo.GetCompatibleRid()
273+
};
274+
275+
var testAsset = _testAssetsManager.CreateTestProject(testConsoleProject, identifier: testTemplateName);
276+
277+
var testProjectDirectory = Path.Combine(testAsset.TestRoot, "TestProject");
278+
Directory.CreateDirectory(testProjectDirectory);
279+
280+
new DotnetCommand(Log, "new", testTemplateName)
281+
.WithWorkingDirectory(testProjectDirectory)
282+
.Execute()
283+
.Should()
284+
.Pass();
285+
286+
new DotnetCommand(Log, "add", "reference", $@"..\{testConsoleProject.Name}")
287+
.WithWorkingDirectory(testProjectDirectory)
288+
.Execute()
289+
.Should()
290+
.Pass();
291+
292+
new BuildCommand(Log, testProjectDirectory)
293+
.Execute()
294+
.Should()
295+
.Pass();
296+
297+
}
262298
}
263299
}

0 commit comments

Comments
 (0)