Skip to content

Commit

Permalink
Provide project's TargetFramework (#52)
Browse files Browse the repository at this point in the history
  • Loading branch information
dfederm authored Aug 8, 2024
1 parent d946118 commit e56875e
Show file tree
Hide file tree
Showing 7 changed files with 58 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
<PackageReference Include="Microsoft.CodeCoverage" Version="17.6.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
<PackageReference Include="MSTest.TestAdapter" Version="3.1.1" />
<PackageReference Include="MSTest.TestFramework" Version="3.1.1" ExcludeAssets="Build" />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\..\..\..\packages\MSTest.TestAdapter.3.1.1\build\net462\MSTest.TestAdapter.props" Condition="Exists('..\..\..\..\packages\MSTest.TestAdapter.3.1.1\build\net462\MSTest.TestAdapter.props')" />
<Import Project="..\..\..\..\packages\Microsoft.NET.Test.Sdk.17.6.0\build\net462\Microsoft.NET.Test.Sdk.props" Condition="Exists('..\..\..\..\packages\Microsoft.NET.Test.Sdk.17.6.0\build\net462\Microsoft.NET.Test.Sdk.props')" />
<Import Project="..\packages\MSTest.TestAdapter.3.1.1\build\net462\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.3.1.1\build\net462\MSTest.TestAdapter.props')" />
<Import Project="..\packages\Microsoft.NET.Test.Sdk.17.6.0\build\net462\Microsoft.NET.Test.Sdk.props" Condition="Exists('..\packages\Microsoft.NET.Test.Sdk.17.6.0\build\net462\Microsoft.NET.Test.Sdk.props')" />
<Import Project="..\packages\Microsoft.CodeCoverage.17.6.0\build\netstandard2.0\Microsoft.CodeCoverage.props" Condition="Exists('..\packages\Microsoft.CodeCoverage.17.6.0\build\netstandard2.0\Microsoft.CodeCoverage.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
Expand Down Expand Up @@ -31,6 +32,9 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.VisualStudio.CodeCoverage.Shim, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeCoverage.17.6.0\lib\net462\Microsoft.VisualStudio.CodeCoverage.Shim.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\MSTest.TestFramework.3.1.1\lib\net462\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
</Reference>
Expand Down Expand Up @@ -63,11 +67,14 @@
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.NET.Test.Sdk.17.6.0\build\net462\Microsoft.NET.Test.Sdk.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.NET.Test.Sdk.17.6.0\build\net462\Microsoft.NET.Test.Sdk.props'))" />
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.NET.Test.Sdk.17.6.0\build\net462\Microsoft.NET.Test.Sdk.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.NET.Test.Sdk.17.6.0\build\net462\Microsoft.NET.Test.Sdk.targets'))" />
<Error Condition="!Exists('..\..\..\..\packages\MSTest.TestAdapter.3.1.1\build\net462\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\MSTest.TestAdapter.3.1.1\build\net462\MSTest.TestAdapter.props'))" />
<Error Condition="!Exists('..\..\..\..\packages\MSTest.TestAdapter.3.1.1\build\net462\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\MSTest.TestAdapter.3.1.1\build\net462\MSTest.TestAdapter.targets'))" />
<Error Condition="!Exists('..\packages\Microsoft.CodeCoverage.17.6.0\build\netstandard2.0\Microsoft.CodeCoverage.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeCoverage.17.6.0\build\netstandard2.0\Microsoft.CodeCoverage.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.CodeCoverage.17.6.0\build\netstandard2.0\Microsoft.CodeCoverage.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeCoverage.17.6.0\build\netstandard2.0\Microsoft.CodeCoverage.targets'))" />
<Error Condition="!Exists('..\packages\Microsoft.NET.Test.Sdk.17.6.0\build\net462\Microsoft.NET.Test.Sdk.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.NET.Test.Sdk.17.6.0\build\net462\Microsoft.NET.Test.Sdk.props'))" />
<Error Condition="!Exists('..\packages\Microsoft.NET.Test.Sdk.17.6.0\build\net462\Microsoft.NET.Test.Sdk.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.NET.Test.Sdk.17.6.0\build\net462\Microsoft.NET.Test.Sdk.targets'))" />
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.3.1.1\build\net462\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.3.1.1\build\net462\MSTest.TestAdapter.props'))" />
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.3.1.1\build\net462\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.3.1.1\build\net462\MSTest.TestAdapter.targets'))" />
</Target>
<Import Project="..\..\..\..\packages\Microsoft.NET.Test.Sdk.17.6.0\build\net462\Microsoft.NET.Test.Sdk.targets" Condition="Exists('..\..\..\..\packages\Microsoft.NET.Test.Sdk.17.6.0\build\net462\Microsoft.NET.Test.Sdk.targets')" />
<Import Project="..\..\..\..\packages\MSTest.TestAdapter.3.1.1\build\net462\MSTest.TestAdapter.targets" Condition="Exists('..\..\..\..\packages\MSTest.TestAdapter.3.1.1\build\net462\MSTest.TestAdapter.targets')" />
<Import Project="..\packages\Microsoft.CodeCoverage.17.6.0\build\netstandard2.0\Microsoft.CodeCoverage.targets" Condition="Exists('..\packages\Microsoft.CodeCoverage.17.6.0\build\netstandard2.0\Microsoft.CodeCoverage.targets')" />
<Import Project="..\packages\Microsoft.NET.Test.Sdk.17.6.0\build\net462\Microsoft.NET.Test.Sdk.targets" Condition="Exists('..\packages\Microsoft.NET.Test.Sdk.17.6.0\build\net462\Microsoft.NET.Test.Sdk.targets')" />
<Import Project="..\packages\MSTest.TestAdapter.3.1.1\build\net462\MSTest.TestAdapter.targets" Condition="Exists('..\packages\MSTest.TestAdapter.3.1.1\build\net462\MSTest.TestAdapter.targets')" />
</Project>
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.CodeCoverage" version="17.6.0" targetFramework="net462" />
<package id="Microsoft.NET.Test.Sdk" version="17.6.0" targetFramework="net462" />
<package id="MSTest.TestAdapter" version="3.1.1" targetFramework="net462" />
<package id="MSTest.TestFramework" version="3.1.1" targetFramework="net462" />
Expand Down
6 changes: 6 additions & 0 deletions src/PackagesConfigConverter/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using System.Threading;
using CommandLine;
using Microsoft.Extensions.Logging;
using NuGet.Frameworks;
using Serilog;
using Serilog.Events;
using ILogger = Microsoft.Extensions.Logging.ILogger;
Expand Down Expand Up @@ -70,6 +71,11 @@ public static void Run(ProgramArguments arguments)
TrimPackages = arguments.Trim,
};

if (arguments.DefaultTargetFramework != null)
{
settings.DefaultTargetFramework = NuGetFramework.Parse(arguments.DefaultTargetFramework);
}

logger.LogInformation($" RepositoryRoot: '{settings.RepositoryRoot}'");
logger.LogInformation($" Include regex: '{settings.Include}'");
logger.LogInformation($" Exclude regex: '{settings.Exclude}'");
Expand Down
3 changes: 3 additions & 0 deletions src/PackagesConfigConverter/ProgramArguments.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,8 @@ public class ProgramArguments

[Option('y', HelpText = "Suppresses prompting to confirm you want to convert the repository")]
public bool Yes { get; set; }

[Option('f', HelpText = "The default target framework to assume if not defined in the project")]
public string DefaultTargetFramework { get; set; }
}
}
42 changes: 29 additions & 13 deletions src/PackagesConfigConverter/ProjectConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -221,17 +221,13 @@ private bool ConvertProject(string projectPath, string packagesConfigPath)
})
.ToList();

List<NuGetFramework> targetFrameworks = new List<NuGetFramework>
{
FrameworkConstants.CommonFrameworks.Net45,
};
ProjectRootElement project = ProjectRootElement.Open(projectPath, _projectCollection, preserveFormatting: true);

RestoreTargetGraph restoreTargetGraph = GetRestoreTargetGraph(packages, projectPath, targetFrameworks);
NuGetFramework targetFramework = GetNuGetFramework(project);
RestoreTargetGraph restoreTargetGraph = GetRestoreTargetGraph(packages, projectPath, targetFramework);

DetectMissingTransitiveDependencies(packages, projectPath, restoreTargetGraph);

ProjectRootElement project = ProjectRootElement.Open(projectPath, _projectCollection, preserveFormatting: true);

ProjectItemGroupElement packageReferenceItemGroupElement = null;

foreach (ProjectElement element in project.AllChildren)
Expand Down Expand Up @@ -367,13 +363,33 @@ private Match GetElementMatch(ElementPath elementPath, PackageUsage package)
return match;
}

private RestoreTargetGraph GetRestoreTargetGraph(List<PackageUsage> packages, string projectPath, List<NuGetFramework> targetFrameworks)
private NuGetFramework GetNuGetFramework(ProjectRootElement project)
{
// The package spec details what packages to restore
PackageSpec packageSpec = new PackageSpec(targetFrameworks.Select(i => new TargetFrameworkInformation
string targetFramework = project.PropertyGroups.SelectMany(p => p.Properties).LastOrDefault(p => p.Name.Equals("TargetFramework", StringComparison.OrdinalIgnoreCase))?.Value;
if (targetFramework != null)
{
FrameworkName = i,
}).ToList())
return NuGetFramework.Parse(targetFramework);
}

string targetFrameworkVersion = project.PropertyGroups.SelectMany(p => p.Properties).LastOrDefault(p => p.Name.Equals("TargetFrameworkVersion", StringComparison.OrdinalIgnoreCase))?.Value;
if (targetFrameworkVersion != null)
{
return NuGetFramework.Parse($".NETFramework,Version={targetFrameworkVersion}");
}

Log.LogDebug($" Could not find target framework. Using default {_converterSettings.DefaultTargetFramework}");
return _converterSettings.DefaultTargetFramework;
}

private RestoreTargetGraph GetRestoreTargetGraph(List<PackageUsage> packages, string projectPath, NuGetFramework framework)
{
List<TargetFrameworkInformation> targetFrameworks = new List<TargetFrameworkInformation>
{
new TargetFrameworkInformation { FrameworkName = framework },
};

// The package spec details what packages to restore
PackageSpec packageSpec = new PackageSpec(targetFrameworks)
{
Dependencies = packages.Select(i => new LibraryDependency
{
Expand All @@ -386,7 +402,7 @@ private RestoreTargetGraph GetRestoreTargetGraph(List<PackageUsage> packages, st
ProjectStyle = ProjectStyle.PackageReference,
ProjectUniqueName = projectPath,
OutputPath = Path.GetTempPath(),
OriginalTargetFrameworks = targetFrameworks.Select(i => i.ToString()).ToList(),
OriginalTargetFrameworks = new List<string>() { framework.ToString() },
ConfigFilePaths = _nugetSettings.GetConfigFilePaths(),
PackagesPath = SettingsUtility.GetGlobalPackagesFolder(_nugetSettings),
Sources = SettingsUtility.GetEnabledSources(_nugetSettings).ToList(),
Expand Down
3 changes: 3 additions & 0 deletions src/PackagesConfigConverter/ProjectConverterSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

using System.Text.RegularExpressions;
using Microsoft.Extensions.Logging;
using NuGet.Frameworks;

namespace PackagesConfigConverter
{
Expand All @@ -20,5 +21,7 @@ public sealed class ProjectConverterSettings
public string RepositoryRoot { get; set; }

public bool TrimPackages { get; set; }

public NuGetFramework DefaultTargetFramework { get; set; } = FrameworkConstants.CommonFrameworks.Net45;
}
}

0 comments on commit e56875e

Please sign in to comment.