Skip to content
This repository was archived by the owner on May 17, 2024. It is now read-only.

Commit 2a955fb

Browse files
authored
Merge pull request #378 from mjrousos/mjrousos/CustomImports
2 parents 93294d4 + 887149e commit 2a955fb

3 files changed

Lines changed: 36 additions & 51 deletions

File tree

src/MSBuild.Abstractions/MSBuildConversionWorkspace.cs

Lines changed: 11 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -281,55 +281,21 @@ private ProjectStyle GetProjectStyle(IProjectRootElement projectRootElement)
281281
return ProjectStyle.Custom;
282282
}
283283

284-
var cleansedImports = imports.Select(import => Path.GetFileName(import.Project));
285-
var allImportsConvertibleToSdk =
286-
cleansedImports.All(import =>
287-
MSBuildFacts.PropsConvertibleToSDK.Contains(import, StringComparer.OrdinalIgnoreCase) ||
288-
MSBuildFacts.TargetsConvertibleToSDK.Contains(import, StringComparer.OrdinalIgnoreCase));
289-
290-
if (allImportsConvertibleToSdk)
284+
if (MSBuildHelpers.IsNETFrameworkMSTestProject(projectRootElement))
291285
{
292-
if (MSBuildHelpers.IsNETFrameworkMSTestProject(projectRootElement))
293-
{
294-
return ProjectStyle.MSTest;
295-
}
296-
else if (MSBuildHelpers.IsWPF(projectRootElement) || MSBuildHelpers.IsWinForms(projectRootElement) || MSBuildHelpers.IsDesktop(projectRootElement))
297-
{
298-
return ProjectStyle.WindowsDesktop;
299-
}
300-
else if (MSBuildHelpers.IsWeb(projectRootElement))
301-
{
302-
return ProjectStyle.Web;
303-
}
304-
else
305-
{
306-
return ProjectStyle.Default;
307-
}
286+
return ProjectStyle.MSTest;
287+
}
288+
else if (MSBuildHelpers.IsWPF(projectRootElement) || MSBuildHelpers.IsWinForms(projectRootElement) || MSBuildHelpers.IsDesktop(projectRootElement))
289+
{
290+
return ProjectStyle.WindowsDesktop;
291+
}
292+
else if (MSBuildHelpers.IsWeb(projectRootElement))
293+
{
294+
return ProjectStyle.Web;
308295
}
309296
else
310297
{
311-
Console.WriteLine("This project has custom imports that are not accepted by try-convert.");
312-
Console.WriteLine("Unexpected custom imports were found:");
313-
314-
var customImports =
315-
cleansedImports.Where(import =>
316-
!(MSBuildFacts.PropsConvertibleToSDK.Contains(import, StringComparer.OrdinalIgnoreCase) ||
317-
MSBuildFacts.TargetsConvertibleToSDK.Contains(import, StringComparer.OrdinalIgnoreCase)));
318-
319-
foreach (var import in customImports)
320-
{
321-
Console.WriteLine($"\t{import}");
322-
}
323-
324-
Console.WriteLine("The following imports are considered valid for conversion:");
325-
326-
foreach (var import in MSBuildFacts.TargetsConvertibleToSDK.Union(MSBuildFacts.PropsConvertibleToSDK))
327-
{
328-
Console.WriteLine($"\t{import}");
329-
}
330-
331-
// It's something else, no idea what though
332-
return ProjectStyle.Custom;
298+
return ProjectStyle.Default;
333299
}
334300
}
335301

src/MSBuild.Conversion.Facts/MSBuildFacts.cs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,19 @@ namespace MSBuild.Conversion.Facts
1010
public static class MSBuildFacts
1111
{
1212
/// <summary>
13-
/// Props files which are known to be imported in standard projects created from templates that can be converted to use the SDK
13+
/// Props files which are known to be imported in standard projects created from templates that can be omitted from SDK projects.
1414
/// </summary>
15-
public static ImmutableArray<string> PropsConvertibleToSDK => ImmutableArray.Create(
15+
public static ImmutableArray<string> PropsToRemove => ImmutableArray.Create(
1616
"Microsoft.Common.props",
17-
"MSTest.TestAdapter.props"
17+
"MSTest.TestAdapter.props",
18+
"Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props",
19+
"Microsoft.Net.Compilers.props" // https://stackoverflow.com/a/60623906
1820
);
1921

2022
/// <summary>
21-
/// Targets files which are known to be imported in standard projects created from templates that can be converted to use the SDK.
23+
/// Targets files which are known to be imported in standard projects created from templates that can be omitted from SDK projects.
2224
/// </summary>
23-
public static ImmutableArray<string> TargetsConvertibleToSDK => ImmutableArray.Create(
25+
public static ImmutableArray<string> TargetsToRemove => ImmutableArray.Create(
2426
"Microsoft.CSharp.targets",
2527
"Microsoft.VisualBasic.targets",
2628
"Microsoft.Portable.CSharp.targets",
@@ -31,6 +33,14 @@ public static class MSBuildFacts
3133
"Microsoft.WebApplication.targets"
3234
);
3335

36+
/// <summary>
37+
/// Props and targets files which are recognized and can be left unchanged during conversion.
38+
/// </summary>
39+
public static ImmutableArray<string> ImportsToKeep => ImmutableArray.Create(
40+
"Microsoft.TypeScript.Default.props",
41+
"Microsoft.TypeScript.targets"
42+
);
43+
3444
/// <summary>
3545
/// Mapping of PCL profiles to netstandard versions.
3646
/// </summary>

src/MSBuild.Conversion.Project/ProjectRootElementExtensionsForConversion.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,16 @@ public static IProjectRootElement ChangeImportsAndAddSdkAttribute(this IProjectR
1616
{
1717
foreach (var import in projectRootElement.Imports)
1818
{
19-
projectRootElement.RemoveChild(import);
19+
var fileName = Path.GetFileName(import.Project);
20+
if (MSBuildFacts.PropsToRemove.Contains(fileName, StringComparer.OrdinalIgnoreCase) ||
21+
MSBuildFacts.TargetsToRemove.Contains(fileName, StringComparer.OrdinalIgnoreCase))
22+
{
23+
projectRootElement.RemoveChild(import);
24+
}
25+
else if (!MSBuildFacts.ImportsToKeep.Contains(fileName, StringComparer.OrdinalIgnoreCase))
26+
{
27+
Console.WriteLine($"This project has an unrecognized custom import which may need reviewed after conversion: {fileName}");
28+
}
2029
}
2130

2231
if (baselineProject.ProjectStyle is ProjectStyle.WindowsDesktop && baselineProject.TargetTFM is MSBuildFacts.NetCoreApp31)

0 commit comments

Comments
 (0)