New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Toolset configuration net5.0 #6220
Changes from 19 commits
d3e8516
d9a316d
046e0a6
9a541e4
d0d0e7e
f3d2d22
82a23fc
7570c02
ab9d9ed
8ec091f
b9d7dba
f2e10bd
4b1343b
1616a36
fd7a68f
da88865
dbc1236
7e4ab72
a5d1939
6989bc1
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
// Copyright (c) Microsoft. All rights reserved. | ||
// Licensed under the MIT license. See LICENSE file in the project root for full license information. | ||
|
||
#if !FEATURE_SYSTEM_CONFIGURATION | ||
/* This test is designed especially to test Configuration parsing in net5.0 | ||
* which means it WON'T work in net472 and thus we don't run it in net472 */ | ||
|
||
using Microsoft.Build.Evaluation; | ||
using Microsoft.Build.Execution; | ||
|
||
using Xunit; | ||
using System.Collections.Generic; | ||
using Shouldly; | ||
|
||
namespace Microsoft.Build.UnitTests.Evaluation | ||
{ | ||
/// <summary> | ||
/// Unit tests for MSBuild Net5.0 Configuration Parsing | ||
/// </summary> | ||
public class ToolsetConfigurationNet5Test | ||
{ | ||
[Fact] | ||
// The default ToolsetDefintionLocations is None, which results in only the local which results in only the several included | ||
// paths such as SDK path and RoslynTargetPath and nothing else. This behavior is expected and the exact same as before. | ||
public void ToolsetDefinitionLocationsIsDefault() | ||
{ | ||
var projectCollection = new ProjectCollection(); | ||
IDictionary<string, string> toolsetProperties | ||
= new Dictionary<string, string>(); | ||
|
||
foreach (Toolset toolset in projectCollection.Toolsets) | ||
{ | ||
foreach (KeyValuePair<string, ProjectPropertyInstance> properties in toolset.Properties) | ||
{ | ||
toolsetProperties[properties.Value.Name] = properties.Value.EvaluatedValue; | ||
} | ||
} | ||
|
||
toolsetProperties.ShouldContainKey("MSBuildSDKsPath"); | ||
toolsetProperties.ShouldContainKey("RoslynTargetsPath"); | ||
toolsetProperties["MSBuildSDKsPath"].ShouldNotBeNullOrEmpty(); | ||
toolsetProperties["RoslynTargetsPath"].ShouldNotBeNullOrEmpty(); | ||
|
||
toolsetProperties.ShouldNotContainKey("VCTargetsPath"); | ||
toolsetProperties.ShouldNotContainKey("MSBuildToolsRoot"); | ||
toolsetProperties.ShouldNotContainKey("MSBuildExtensionsPath"); | ||
} | ||
|
||
[Fact] | ||
// With ToolsetDefintionLocations set to ConfigurationFile (Which would only happen in net5.0 if the user decides to set it). | ||
// Most toolsets are available and the MsBuildTools and SDK paths are all in the net5.0 runtime. | ||
public void ToolsetDefinitionLocationsIsConfiguration() | ||
{ | ||
var projectCollection = new ProjectCollection(ToolsetDefinitionLocations.ConfigurationFile); | ||
IDictionary<string, string> toolsetProperties | ||
= new Dictionary<string, string>(); | ||
|
||
foreach (Toolset toolset in projectCollection.Toolsets) | ||
{ | ||
foreach (KeyValuePair<string, ProjectPropertyInstance> properties in toolset.Properties) | ||
{ | ||
toolsetProperties[properties.Value.Name] = properties.Value.EvaluatedValue; | ||
} | ||
} | ||
|
||
toolsetProperties.ShouldContainKey("MSBuildSDKsPath"); | ||
toolsetProperties.ShouldContainKey("RoslynTargetsPath"); | ||
toolsetProperties["MSBuildSDKsPath"].ShouldNotBeNullOrEmpty(); | ||
toolsetProperties["RoslynTargetsPath"].ShouldNotBeNullOrEmpty(); | ||
|
||
toolsetProperties.ShouldContainKey("VCTargetsPath"); | ||
toolsetProperties.ShouldContainKey("MSBuildToolsRoot"); | ||
toolsetProperties.ShouldContainKey("MSBuildExtensionsPath"); | ||
toolsetProperties["VCTargetsPath"].ShouldNotBeNullOrEmpty(); | ||
toolsetProperties["MSBuildToolsRoot"].ShouldNotBeNullOrEmpty(); | ||
toolsetProperties["MSBuildExtensionsPath"].ShouldNotBeNullOrEmpty(); | ||
} | ||
} | ||
} | ||
#endif |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hyper-Nit: Is this a BOM change from a text editor? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yep seems like it... Though I thought I only opened it in VS so it's odd but it should be fixed now 👍 |
||
|
||
<PropertyGroup> | ||
<TargetFrameworks>$(RuntimeOutputTargetFrameworks)</TargetFrameworks> | ||
|
@@ -16,6 +16,7 @@ | |
</PropertyGroup> | ||
|
||
<ItemGroup> | ||
<PackageReference Include="System.Configuration.ConfigurationManager" /> | ||
<PackageReference Include="Shouldly" /> | ||
<PackageReference Include="Microsoft.CodeAnalysis.Build.Tasks" /> | ||
<PackageReference Include="NuGet.Frameworks" > | ||
|
@@ -44,17 +45,12 @@ | |
<SetTargetFramework Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework' and '$(MonoBuild)' == 'true'">TargetFramework=$(FullFrameworkTFM)</SetTargetFramework> | ||
<SetTargetFramework Condition="'$(TargetFrameworkIdentifier)' != '.NETFramework'">TargetFramework=net5.0</SetTargetFramework> | ||
</ProjectReference> | ||
|
||
<Reference Include="System.Configuration" Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework'" /> | ||
</ItemGroup> | ||
|
||
<ItemGroup> | ||
<Compile Include="..\Shared\FxCopExclusions\Microsoft.Build.Shared.Suppressions.cs"> | ||
<ExcludeFromStyleCop>true</ExcludeFromStyleCop> | ||
</Compile> | ||
|
||
<Compile Remove="Definition\ToolsetConfigurationReaderTestHelper.cs" /> | ||
<Compile Include="Definition\ToolsetConfigurationReaderTestHelper.cs" Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework'" /> | ||
|
||
<Compile Include="..\Shared\UnitTests\BuildEventArgsExtension.cs"> | ||
<!-- Extension methods --> | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we own this? Also thinking we should try running this through RPS.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry this is my first time making a PR in MSBuild so I'm not familiar with the process. Mihai created an exp/* branch for me here and it triggered an VS insertion and that passed. Is that RPS or do we need to run something else for it?
And I do think we own the package as shown here. The package is owned by Microsoft and dotnetframework.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great! That is what I was thinking of with RPS. It failed symbol check, but I'm assuming that was innocuous.
I should have clarified that I was wondering if MSBuild owns S.C.CM. I hit a problem at one point when MSBuild updated a package that Roslyn owned, and we had mismatching versions with them. I think that sort of problem would have been caught by RPS, so I think this is good? But I don't feel very confident about that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Following up to our convo this morning: I talked to @cdmihai and he's not sure about who owns this package exactly either, but believes it should be fine since it is not referenced in VS's config.corext.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I found AssemblyVersions.tt, and it isn't referenced there either.