Merge branch 'rel/1.0.0' into enablevstest

This commit is contained in:
Faizan Ahmad 2016-11-02 23:50:44 +05:30
commit 5c5f593449
57 changed files with 500 additions and 132 deletions

View file

@ -5,6 +5,7 @@
<TargetFrameworks>netcoreapp1.0;net451</TargetFrameworks>
<OutputType>Exe</OutputType>
<PackageTargetFallback Condition=" '$(TargetFramework)' == 'netcoreapp1.0' ">$(PackageTargetFallback);portable-net45+win8;dnxcore50</PackageTargetFallback>
<RuntimeIdentifiers>win7-x64;win7-x86;osx.10.10-x64;osx.10.11-x64;ubuntu.14.04-x64;ubuntu.16.04-x64;centos.7-x64;rhel.7.2-x64;debian.8-x64;fedora.23-x64;opensuse.13.2-x64</RuntimeIdentifiers>
</PropertyGroup>
<ItemGroup>
<Compile Include="**\*.cs" Exclude="bin\**;obj\**;**\*.xproj;packages\**" />
@ -13,7 +14,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161019-1</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="dotnet-desktop-and-portable">

View file

@ -7,5 +7,18 @@
"dependencies": {},
"frameworks": {
"net451": {}
},
"runtimes": {
"win7-x64": {},
"win7-x86": {},
"osx.10.10-x64": {},
"osx.10.11-x64": {},
"ubuntu.14.04-x64": {},
"ubuntu.16.04-x64": {},
"centos.7-x64": {},
"rhel.7.2-x64": {},
"debian.8-x64": {},
"fedora.23-x64": {},
"opensuse.13.2-x64": {}
}
}

View file

@ -13,7 +13,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161019-1</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="dotnet-desktop-and-portable">

View file

@ -13,7 +13,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161019-1</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="ThisIsNotARealDependencyAndIfSomeoneGoesAndAddsAProjectWithThisNameIWillFindThemAndPunishThem">

View file

@ -12,7 +12,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161019-1</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NETCore.App">

View file

@ -12,7 +12,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161019-1</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NETCore.App">

View file

@ -21,7 +21,7 @@
<EmbeddedResource Include="**\*.resx" Exclude="bin\**;obj\**;**\*.xproj;packages\**" />
<EmbeddedResource Include="compiler\resources\**\*" Exclude="bin\**;obj\**;**\*.xproj;packages\**" />
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161012-3</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
</ItemGroup>

View file

@ -12,7 +12,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161019-1</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="ToolWithOutputName">

View file

@ -9,7 +9,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161019-1</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="dotnet-desktop-and-portable">

View file

@ -12,7 +12,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161019-1</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NETCore.App">

View file

@ -14,7 +14,7 @@
<EmbeddedResource Include="**\*.resx" Exclude="bin\**;obj\**;**\*.xproj;packages\**" />
<EmbeddedResource Include="compiler\resources\**\*" Exclude="bin\**;obj\**;**\*.xproj;packages\**" />
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161012-3</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
</ItemGroup>

View file

@ -0,0 +1 @@
noautobuild

View file

@ -0,0 +1,5 @@
using System;
class Program
{
}

View file

@ -0,0 +1,10 @@
{
"frameworks": {
"netstandard1.3": {
"dependencies": {
"System.AppContext": "4.1.0",
"NETStandard.Library": "1.5.0"
}
}
}
}

View file

@ -11,7 +11,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161019-1</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="NETStandard.Library">

View file

@ -0,0 +1 @@
noautobuild

View file

@ -0,0 +1,5 @@
using System;
class Program
{
}

View file

@ -0,0 +1,9 @@
{
"frameworks": {
"netstandard1.3": {
"dependencies": {
"System.AppContext": "4.1.0"
}
}
}
}

View file

@ -9,7 +9,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161026-2</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
</ItemGroup>

View file

@ -9,7 +9,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161026-2</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="dotnet-desktop-and-portable">

View file

@ -16,7 +16,7 @@
<Version>1.0.1</Version>
</PackageReference>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161026-2</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
</ItemGroup>

View file

@ -14,7 +14,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161026-2</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="NETStandard.Library">

View file

@ -3,7 +3,7 @@
"frameworks": {
"netstandard1.5": {
"dependencies": {
"Microsoft.NET.Sdk": "1.0.0-alpha-20161026-2",
"Microsoft.NET.Sdk": "1.0.0-alpha-20161029-1",
"NETStandard.Library": "1.6.0"
}
}

View file

@ -14,7 +14,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161026-2</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="NETStandard.Library">

View file

@ -3,7 +3,7 @@
"frameworks": {
"netstandard1.5": {
"dependencies": {
"Microsoft.NET.Sdk": "1.0.0-alpha-20161026-2",
"Microsoft.NET.Sdk": "1.0.0-alpha-20161029-1",
"NETStandard.Library": "1.6.0"
}
}

View file

@ -14,7 +14,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161026-2</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="NETStandard.Library">

View file

@ -3,7 +3,7 @@
"frameworks": {
"netstandard1.5": {
"dependencies": {
"Microsoft.NET.Sdk": "1.0.0-alpha-20161026-2",
"Microsoft.NET.Sdk": "1.0.0-alpha-20161029-1",
"NETStandard.Library": "1.6.0"
}
}

View file

@ -12,7 +12,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161019-1</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NETCore.App">

View file

@ -15,7 +15,7 @@
<Version>1.0.1</Version>
</PackageReference>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161026-2</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="dotnet-portable">

View file

@ -0,0 +1,19 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.Diagnostics;
using TestLibrary;
namespace TestApp
{
public class Program
{
public static int Main(string[] args)
{
Console.WriteLine("This string came from ProjectA");
Console.WriteLine($"{ProjectB.GetMessage()}");
return 0;
}
}
}

View file

@ -0,0 +1,27 @@
{
"version": "1.0.0-*",
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"dependencies": {
"ProjectB": "1.0.0-*",
"Microsoft.NETCore.App": "1.0.1"
},
"frameworks": {
"netcoreapp1.0": {}
},
"runtimes": {
"win7-x64": {},
"win7-x86": {},
"osx.10.10-x64": {},
"osx.10.11-x64": {},
"ubuntu.14.04-x64": {},
"ubuntu.16.04-x64": {},
"centos.7-x64": {},
"rhel.7.2-x64": {},
"debian.8-x64": {},
"fedora.23-x64": {},
"opensuse.13.2-x64": {}
}
}

View file

@ -0,0 +1,15 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
namespace TestLibrary
{
public static class ProjectB
{
public static string GetMessage()
{
return "This string came from ProjectB";
}
}
}

View file

@ -0,0 +1,18 @@
{
"version": "1.0.0-*",
"buildOptions": {
"nowarn": [
"CS1591"
],
"xmlDoc": true,
"additionalArguments": [
"-highentropyva+"
]
},
"dependencies": {
"NETStandard.Library": "1.6.0"
},
"frameworks": {
"netstandard1.5": {}
}
}

View file

@ -14,7 +14,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161019-1</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="NETStandard.Library">

View file

@ -15,7 +15,7 @@
<Version>1.0.1</Version>
</PackageReference>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161026-2</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="MSTest.TestFramework">

View file

@ -43,7 +43,7 @@
<Version>1.0.1-beta-000933</Version>
</PackageReference>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161026-2</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
</ItemGroup>
@ -51,8 +51,5 @@
<Compile Include="**\*.cs" />
<Compile Include="..\Microsoft.DotNet.Cli.Build.Framework\**\*.cs;..\shared-build-targets-utils\**\*.cs;" />
</ItemGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'netcoreapp1.0' ">
<DefineConstants>$(DefineConstants);NETCOREAPP1_0</DefineConstants>
</PropertyGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View file

@ -6,5 +6,8 @@ namespace Microsoft.DotNet.ProjectJsonMigration
internal class ConstantPackageVersions
{
public const string AspNetToolsVersion = "1.0.0-rc1-final";
public const string TestSdkPackageVersion = "15.0.0-preview-20161024-02";
public const string XUnitPackageVersion = "2.2.0-beta3-build3402";
public const string XUnitRunnerPackageVersion = "2.2.0-beta4-build1188";
}
}

View file

@ -5,32 +5,67 @@ using System.Collections.Generic;
namespace Microsoft.DotNet.ProjectJsonMigration
{
internal class PackageDependencyInfo
{
public string Name { get; set; }
public string Version { get; set; }
public string PrivateAssets { get; set; }
}
internal class PackageConstants
{
public const string SdkPackageName = "Microsoft.NET.Sdk";
public const string WebSdkPackageName = "Microsoft.NET.Sdk.Web";
public const string TestSdkPackageName = "Microsoft.NET.Test.Sdk";
public const string TestSdkPackageVersion = "15.0.0-preview-20161024-02";
public const string XUnitPackageName = "xunit";
public const string XUnitPackageVersion = "2.2.0-beta3-build3402";
public const string XUnitRunnerPackageName = "xunit.runner.visualstudio";
public const string XUnitRunnerPackageVersion = "2.2.0-beta4-build1188";
public const string NetStandardPackageName = "NETStandard.Library";
public const string NetStandardPackageVersion = "1.6.0";
public static readonly IDictionary<string, string> AspProjectDependencyToolsPackages = new Dictionary<string, string> {
{"Microsoft.EntityFrameworkCore.Tools", "Microsoft.EntityFrameworkCore.Tools"},
{"Microsoft.AspNetCore.Razor.Tools", "Microsoft.AspNetCore.Razor.Design"},
{"Microsoft.AspNetCore.Razor.Design", "Microsoft.AspNetCore.Razor.Design"},
{"Microsoft.VisualStudio.Web.CodeGenerators.Mvc", "Microsoft.VisualStudio.Web.CodGeneration.Design"},
{"Microsoft.VisualStudio.Web.CodeGeneration.Tools", ""},
public static readonly IDictionary<string, PackageDependencyInfo> ProjectDependencyPackages =
new Dictionary<string, PackageDependencyInfo> {
{"Microsoft.EntityFrameworkCore.Tools", new PackageDependencyInfo {
Name = "Microsoft.EntityFrameworkCore.Tools",
Version = ConstantPackageVersions.AspNetToolsVersion } },
{ "Microsoft.AspNetCore.Razor.Tools", new PackageDependencyInfo {
Name = "Microsoft.AspNetCore.Razor.Design",
Version = ConstantPackageVersions.AspNetToolsVersion } },
{ "Microsoft.AspNetCore.Razor.Design", new PackageDependencyInfo {
Name = "Microsoft.AspNetCore.Razor.Design",
Version = ConstantPackageVersions.AspNetToolsVersion } },
{ "Microsoft.VisualStudio.Web.CodeGenerators.Mvc", new PackageDependencyInfo {
Name = "Microsoft.VisualStudio.Web.CodeGeneration.Design",
Version = ConstantPackageVersions.AspNetToolsVersion } },
{ "Microsoft.VisualStudio.Web.CodeGeneration.Tools", null},
{ TestSdkPackageName, new PackageDependencyInfo {
Name = TestSdkPackageName,
Version = ConstantPackageVersions.TestSdkPackageVersion } },
{ XUnitPackageName, new PackageDependencyInfo {
Name = XUnitPackageName,
Version = ConstantPackageVersions.XUnitPackageVersion } },
{ XUnitRunnerPackageName, new PackageDependencyInfo {
Name = XUnitRunnerPackageName,
Version = ConstantPackageVersions.XUnitRunnerPackageVersion } },
};
public static readonly IDictionary<string, string> AspProjectToolsPackages = new Dictionary<string, string> {
{"Microsoft.EntityFrameworkCore.Tools", "Microsoft.EntityFrameworkCore.Tools.DotNet"},
{"Microsoft.AspNetCore.Razor.Tools", "Microsoft.AspNetCore.Razor.Tools"},
{"Microsoft.VisualStudio.Web.CodeGeneration.Tools", "Microsoft.VisualStudio.Web.CodeGeneration.Tools"},
{"Microsoft.DotNet.Watcher.Tools", "Microsoft.DotNet.Watcher.Tools"},
{"Microsoft.Extensions.SecretManager.Tools", "Microsoft.Extensions.SecretManager.Tools"},
{"Microsoft.AspNetCore.Server.IISIntegration.Tools", ""}
public static readonly IDictionary<string, PackageDependencyInfo> ProjectToolPackages =
new Dictionary<string, PackageDependencyInfo> {
{"Microsoft.EntityFrameworkCore.Tools", new PackageDependencyInfo {
Name = "Microsoft.EntityFrameworkCore.Tools.DotNet",
Version = ConstantPackageVersions.AspNetToolsVersion } },
{ "Microsoft.AspNetCore.Razor.Tools", new PackageDependencyInfo {
Name = "Microsoft.AspNetCore.Razor.Tools",
Version = ConstantPackageVersions.AspNetToolsVersion } },
{ "Microsoft.VisualStudio.Web.CodeGeneration.Tools", new PackageDependencyInfo {
Name = "Microsoft.VisualStudio.Web.CodeGeneration.Tools",
Version = ConstantPackageVersions.AspNetToolsVersion } },
{ "Microsoft.DotNet.Watcher.Tools", new PackageDependencyInfo {
Name = "Microsoft.DotNet.Watcher.Tools",
Version = ConstantPackageVersions.AspNetToolsVersion } },
{ "Microsoft.Extensions.SecretManager.Tools", new PackageDependencyInfo {
Name = "Microsoft.Extensions.SecretManager.Tools",
Version = ConstantPackageVersions.AspNetToolsVersion } },
{ "Microsoft.AspNetCore.Server.IISIntegration.Tools", null}
};
}
}

View file

@ -98,7 +98,8 @@ namespace Microsoft.DotNet.ProjectJsonMigration
foreach (var projectFileDependency in
projectFileDependenciesForFramework.Where(p =>
p.LibraryRange.TypeConstraint == LibraryDependencyTarget.Project))
p.LibraryRange.TypeConstraint == LibraryDependencyTarget.Project ||
p.LibraryRange.TypeConstraint == LibraryDependencyTarget.All))
{
var dependencyName = projectFileDependency.Name;

View file

@ -13,59 +13,59 @@ namespace Microsoft.DotNet.ProjectJsonMigration
{
public static ProjectType GetProjectType(this Project project)
{
var projectType = ProjectType.Console;
if (project.IsWebProject())
{
projectType = ProjectType.Web;
}
else if (project.IsTestProject)
ProjectType projectType = ProjectType.Library;
if (project.IsTestProject)
{
projectType = ProjectType.Test;
}
else if (project.HasEntryPoint())
{
if (project.HasDependency(ContainingName(".AspNetCore.")))
{
projectType = ProjectType.Web;
}
else
{
projectType = ProjectType.Console;
}
}
return projectType;
}
private static bool IsWebProject(this Project project)
private static bool HasEntryPoint(this Project project)
{
if(project.IsTestProject)
{
return false;
}
return project.GetCompilerOptions(null, "Debug").EmitEntryPoint.GetValueOrDefault();
}
var isExecutable = project.GetCompilerOptions(null, "Debug").EmitEntryPoint.GetValueOrDefault();
if (isExecutable
&& project.HasAnyPackageContainingName(".AspNetCore."))
private static Func<ProjectLibraryDependency, bool> ContainingName(string nameSegment)
{
return x => x.Name.IndexOf(nameSegment, StringComparison.OrdinalIgnoreCase) > -1;
}
public static bool HasDependency(this Project project, Func<ProjectLibraryDependency, bool> pred)
{
if (HasAnyDependency(project.Dependencies, pred))
{
return true;
}
foreach (var tf in project.GetTargetFrameworks())
{
if(HasAnyDependency(tf.Dependencies, pred))
{
return true;
}
}
return false;
}
private static bool HasAnyPackageContainingName(this Project project, string nameSegment)
private static bool HasAnyDependency(
IEnumerable<ProjectLibraryDependency> dependencies,
Func<ProjectLibraryDependency, bool> pred)
{
var containsPackageName = HasAnyPackageContainingName(
new ReadOnlyCollection<ProjectLibraryDependency>(project.Dependencies),
nameSegment);
foreach (var tf in project.GetTargetFrameworks())
{
if(containsPackageName)
{
break;
}
containsPackageName = HasAnyPackageContainingName(tf.Dependencies, nameSegment);
}
return containsPackageName;
}
private static bool HasAnyPackageContainingName(
IReadOnlyList<ProjectLibraryDependency> dependencies,
string nameSegment)
{
return dependencies.Any(x => x.Name.IndexOf(nameSegment, StringComparison.OrdinalIgnoreCase) > -1);
return dependencies.Any(pred);
}
}
}

View file

@ -3,7 +3,8 @@ namespace Microsoft.DotNet.ProjectJsonMigration
internal enum ProjectType
{
Console,
Web,
Test
Library,
Test,
Web
}
}

View file

@ -108,7 +108,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
new PackageDependencyInfo
{
Name = PackageConstants.TestSdkPackageName,
Version = PackageConstants.TestSdkPackageVersion
Version = ConstantPackageVersions.TestSdkPackageVersion
}),
noFrameworkPackageReferenceItemGroup,
mergeExisting: false);
@ -120,7 +120,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
new PackageDependencyInfo
{
Name = PackageConstants.XUnitPackageName,
Version = PackageConstants.XUnitPackageVersion
Version = ConstantPackageVersions.XUnitPackageVersion
}),
noFrameworkPackageReferenceItemGroup,
mergeExisting: false);
@ -130,12 +130,27 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
new PackageDependencyInfo
{
Name = PackageConstants.XUnitRunnerPackageName,
Version = PackageConstants.XUnitRunnerPackageVersion
Version = ConstantPackageVersions.XUnitRunnerPackageVersion
}),
noFrameworkPackageReferenceItemGroup,
mergeExisting: false);
}
break;
case ProjectType.Library:
if (!project.HasDependency(
(dep) => dep.Name.Trim().ToLower() == PackageConstants.NetStandardPackageName.ToLower()))
{
_transformApplicator.Execute(
PackageDependencyInfoTransform().Transform(
new PackageDependencyInfo
{
Name = PackageConstants.NetStandardPackageName,
Version = PackageConstants.NetStandardPackageVersion
}),
noFrameworkPackageReferenceItemGroup,
mergeExisting: true);
}
break;
default:
break;
}
@ -186,7 +201,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
_transformApplicator.Execute(
ToolTransform().Transform(ToPackageDependencyInfo(
tool,
PackageConstants.AspProjectToolsPackages)),
PackageConstants.ProjectToolPackages)),
itemGroup,
mergeExisting: true);
}
@ -243,7 +258,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
_transformApplicator.Execute(
transform.Transform(ToPackageDependencyInfo(
packageDependency,
PackageConstants.AspProjectDependencyToolsPackages)),
PackageConstants.ProjectDependencyPackages)),
itemGroup,
mergeExisting: true);
}
@ -251,22 +266,23 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
private PackageDependencyInfo ToPackageDependencyInfo(
ProjectLibraryDependency dependency,
IDictionary<string, string> toolsDictionary)
IDictionary<string, PackageDependencyInfo> dependencyToVersionMap)
{
var name = dependency.Name;
var version = dependency.LibraryRange?.VersionRange?.OriginalString;
if (toolsDictionary.ContainsKey(name))
if (dependencyToVersionMap.ContainsKey(name))
{
name = toolsDictionary[name];
version = ConstantPackageVersions.AspNetToolsVersion;
if(string.IsNullOrEmpty(name))
var dependencyInfo = dependencyToVersionMap[name];
if (dependencyInfo == null)
{
return null;
}
}
name = dependencyInfo.Name;
version = dependencyInfo.Version;
}
return new PackageDependencyInfo
{
Name = name,
@ -391,12 +407,5 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
"PackageTargetFallback",
t => $"$(PackageTargetFallback);{string.Join(";", t.Imports)}",
t => t.Imports.OrEmptyIfNull().Any());
private class PackageDependencyInfo
{
public string Name {get; set;}
public string Version {get; set;}
public string PrivateAssets {get; set;}
}
}
}

View file

@ -5,7 +5,9 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.Tools.Common;
@ -67,6 +69,29 @@ namespace Microsoft.DotNet.TestFramework
return this;
}
public TestAssetInstance WithNuGetConfig(string nugetCache)
{
var thisAssembly = typeof(TestAssetInstance).GetTypeInfo().Assembly;
var newNuGetConfig = Root.GetFile("Nuget.config");
var content = @"<?xml version=""1.0"" encoding=""utf-8""?>
<configuration>
<packageSources>
<add key=""test-packages"" value=""$fullpath$"" />
</packageSources>
</configuration>";
content = content.Replace("$fullpath$", nugetCache);
using (var newNuGetConfigStream =
new FileStream(newNuGetConfig.FullName, FileMode.Create, FileAccess.Write))
{
var contentBytes = new UTF8Encoding(true).GetBytes(content);
newNuGetConfigStream.Write(contentBytes, 0, contentBytes.Length);
}
return this;
}
private void CopyFiles(IEnumerable<FileInfo> filesToCopy)
{
foreach (var file in filesToCopy)

View file

@ -28,6 +28,9 @@ namespace Microsoft.DotNet.Tools.Build
CommandOption outputOption = app.Option("-o|--output <OUTPUT_DIR>", "Directory in which to place outputs", CommandOptionType.SingleValue);
CommandOption frameworkOption = app.Option("-f|--framework <FRAMEWORK>", "Compile a specific framework", CommandOptionType.SingleValue);
CommandOption runtimeOption = app.Option(
"-r|--runtime <RUNTIME_IDENTIFIER>", "Target runtime to build for. The default is to build a portable application.",
CommandOptionType.SingleValue);
CommandOption configurationOption = app.Option("-c|--configuration <CONFIGURATION>", "Configuration under which to build", CommandOptionType.SingleValue);
CommandOption versionSuffixOption = app.Option("--version-suffix <VERSION_SUFFIX>", "Defines the value for the $(VersionSuffix) property in the project", CommandOptionType.SingleValue);
@ -62,6 +65,11 @@ namespace Microsoft.DotNet.Tools.Build
msbuildArgs.Add($"/p:TargetFramework={frameworkOption.Value()}");
}
if (runtimeOption.HasValue())
{
msbuildArgs.Add($"/p:RuntimeIdentifier={runtimeOption.Value()}");
}
if (configurationOption.HasValue())
{
msbuildArgs.Add($"/p:Configuration={configurationOption.Value()}");

View file

@ -16,7 +16,7 @@
<Version>1.0.1</Version>
</PackageReference>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161026-2</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
</ItemGroup>

View file

@ -15,7 +15,7 @@
<Version>1.6</Version>
</PackageReference>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161026-2</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
</ItemGroup>

View file

@ -17,7 +17,7 @@
<Version>1.0.1</Version>
</PackageReference>
<PackageReference Include="Microsoft.NET.Sdk.Web">
<Version>1.0.0-alpha-20161019-1</Version>
<Version>1.0.0-alpha-20161029-1</Version>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Diagnostics">
<Version>1.0.0</Version>

View file

@ -16,7 +16,7 @@
<Version>1.0.1</Version>
</PackageReference>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161026-2</Version>
<Version>1.0.0-alpha-20161029-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk">

View file

@ -29,16 +29,24 @@ namespace Microsoft.DotNet.Cli.Utils.Tests
[WindowsOnlyFact]
public void It_resolves_desktop_apps_defaulting_to_Debug_Configuration()
{
var runtime = DotnetLegacyRuntimeIdentifiers.InferLegacyRestoreRuntimeIdentifier();
var configuration = "Debug";
var testInstance = TestAssets.Get(TestAssetKinds.DesktopTestProjects, "AppWithProjTool2Fx")
.CreateInstance()
.WithSourceFiles()
.WithRestoreFiles();
.WithNuGetConfig(_repoDirectoriesProvider.TestPackages);
var restoreCommand = new RestoreCommand()
.WithWorkingDirectory(testInstance.Root)
.WithRuntime(runtime)
.ExecuteWithCapturedOutput()
.Should().Pass();
var buildCommand = new BuildCommand()
.WithWorkingDirectory(testInstance.Root)
.WithConfiguration(configuration)
.WithRuntime(runtime)
.WithCapturedOutput()
.Execute()
.Should().Pass();
@ -60,16 +68,24 @@ namespace Microsoft.DotNet.Cli.Utils.Tests
[WindowsOnlyFact]
public void It_resolves_desktop_apps_when_configuration_is_Debug()
{
var runtime = DotnetLegacyRuntimeIdentifiers.InferLegacyRestoreRuntimeIdentifier();
var configuration = "Debug";
var testInstance = TestAssets.Get(TestAssetKinds.DesktopTestProjects, "AppWithProjTool2Fx")
.CreateInstance()
.WithSourceFiles()
.WithRestoreFiles();
.WithNuGetConfig(_repoDirectoriesProvider.TestPackages);
var restoreCommand = new RestoreCommand()
.WithWorkingDirectory(testInstance.Root)
.WithRuntime(runtime)
.ExecuteWithCapturedOutput()
.Should().Pass();
var buildCommand = new BuildCommand()
.WithWorkingDirectory(testInstance.Root)
.WithConfiguration(configuration)
.WithRuntime(runtime)
.Execute()
.Should().Pass();
@ -89,16 +105,24 @@ namespace Microsoft.DotNet.Cli.Utils.Tests
[WindowsOnlyFact]
public void It_resolves_desktop_apps_when_configuration_is_Release()
{
var configuration = "Release";
var runtime = DotnetLegacyRuntimeIdentifiers.InferLegacyRestoreRuntimeIdentifier();
var configuration = "Debug";
var testInstance = TestAssets.Get(TestAssetKinds.DesktopTestProjects, "AppWithProjTool2Fx")
.CreateInstance()
.WithSourceFiles()
.WithRestoreFiles();
.WithNuGetConfig(_repoDirectoriesProvider.TestPackages);
var restoreCommand = new RestoreCommand()
.WithWorkingDirectory(testInstance.Root)
.WithRuntime(runtime)
.ExecuteWithCapturedOutput()
.Should().Pass();
var buildCommand = new BuildCommand()
.WithWorkingDirectory(testInstance.Root)
.WithConfiguration(configuration)
.WithRuntime(runtime)
.WithCapturedOutput()
.Execute()
.Should().Pass();
@ -120,16 +144,24 @@ namespace Microsoft.DotNet.Cli.Utils.Tests
[WindowsOnlyFact]
public void It_resolves_desktop_apps_using_configuration_passed_to_create()
{
var configuration = "Release";
var runtime = DotnetLegacyRuntimeIdentifiers.InferLegacyRestoreRuntimeIdentifier();
var configuration = "Debug";
var testInstance = TestAssets.Get(TestAssetKinds.DesktopTestProjects, "AppWithProjTool2Fx")
.CreateInstance()
.WithSourceFiles()
.WithRestoreFiles();
.WithNuGetConfig(_repoDirectoriesProvider.TestPackages);
var restoreCommand = new RestoreCommand()
.WithWorkingDirectory(testInstance.Root)
.WithRuntime(runtime)
.ExecuteWithCapturedOutput()
.Should().Pass();
var buildCommand = new BuildCommand()
.WithWorkingDirectory(testInstance.Root)
.WithConfiguration(configuration)
.WithRuntime(runtime)
.WithCapturedOutput()
.Execute()
.Should().Pass();

View file

@ -15,7 +15,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
[InlineData("Microsoft.EntityFrameworkCore.Tools", "Microsoft.EntityFrameworkCore.Tools", ConstantPackageVersions.AspNetToolsVersion)]
[InlineData("Microsoft.AspNetCore.Razor.Tools", "Microsoft.AspNetCore.Razor.Design", ConstantPackageVersions.AspNetToolsVersion)]
[InlineData("Microsoft.AspNetCore.Razor.Design", "Microsoft.AspNetCore.Razor.Design", ConstantPackageVersions.AspNetToolsVersion)]
[InlineData("Microsoft.VisualStudio.Web.CodeGenerators.Mvc", "Microsoft.VisualStudio.Web.CodGeneration.Design", ConstantPackageVersions.AspNetToolsVersion)]
[InlineData("Microsoft.VisualStudio.Web.CodeGenerators.Mvc", "Microsoft.VisualStudio.Web.CodeGeneration.Design", ConstantPackageVersions.AspNetToolsVersion)]
public void It_migrates_project_dependencies_to_a_new_name_and_version(
string sourceToolName,
string targetToolName,
@ -44,7 +44,10 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
}
}");
var packageRef = mockProj.Items.Where(i => i.Include != "Microsoft.NET.Sdk" && i.ItemType == "PackageReference").Should().BeEmpty();
var packageRef = mockProj.Items.Where(i =>
i.Include != "Microsoft.NET.Sdk" &&
i.Include != "NETStandard.Library" &&
i.ItemType == "PackageReference").Should().BeEmpty();
}
[Theory]

View file

@ -273,7 +273,9 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
}");
mockProj.Items.Should().ContainSingle(
i => (i.Include == "Microsoft.NET.Test.Sdk" && i.ItemType == "PackageReference"));
i => (i.Include == "Microsoft.NET.Test.Sdk" &&
i.ItemType == "PackageReference" &&
i.GetMetadataWithName("Version").Value == "15.0.0-preview-20161024-02"));
mockProj.Items.Should().NotContain(
i => (i.Include == "xunit" && i.ItemType == "PackageReference"));
@ -297,13 +299,82 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
}");
mockProj.Items.Should().ContainSingle(
i => (i.Include == "Microsoft.NET.Test.Sdk" && i.ItemType == "PackageReference"));
i => (i.Include == "Microsoft.NET.Test.Sdk" &&
i.ItemType == "PackageReference" &&
i.GetMetadataWithName("Version").Value == "15.0.0-preview-20161024-02"));
mockProj.Items.Should().ContainSingle(
i => (i.Include == "xunit" && i.ItemType == "PackageReference"));
i => (i.Include == "xunit" &&
i.ItemType == "PackageReference" &&
i.GetMetadataWithName("Version").Value == "2.2.0-beta3-build3402"));
mockProj.Items.Should().ContainSingle(
i => (i.Include == "xunit.runner.visualstudio" && i.ItemType == "PackageReference"));
i => (i.Include == "xunit.runner.visualstudio" &&
i.ItemType == "PackageReference" &&
i.GetMetadataWithName("Version").Value == "2.2.0-beta4-build1188"));
}
[Fact]
public void It_migrates_test_projects_to_have_test_sdk_and_xunit_packagedependencies_overwrite_existing_packagedependencies()
{
var mockProj = RunPackageDependenciesRuleOnPj(@"
{
""buildOptions"": {
""emitEntryPoint"": true
},
""dependencies"": {
""xunit"": ""2.2.0-beta3-build3330""
},
""frameworks"": {
""netcoreapp1.0"": {}
},
""testRunner"": ""xunit""
}");
mockProj.Items.Should().ContainSingle(
i => (i.Include == "Microsoft.NET.Test.Sdk" &&
i.ItemType == "PackageReference" &&
i.GetMetadataWithName("Version").Value == "15.0.0-preview-20161024-02"));
mockProj.Items.Should().ContainSingle(
i => (i.Include == "xunit" &&
i.ItemType == "PackageReference" &&
i.GetMetadataWithName("Version").Value == "2.2.0-beta3-build3402"));
mockProj.Items.Should().ContainSingle(
i => (i.Include == "xunit.runner.visualstudio" &&
i.ItemType == "PackageReference" &&
i.GetMetadataWithName("Version").Value == "2.2.0-beta4-build1188"));
}
[Theory]
[InlineData(@"
{
""frameworks"": {
""netstandard1.3"": {
""dependencies"": {
""System.AppContext"": ""4.1.0"",
""NETStandard.Library"": ""1.5.0""
}
}
}
}")]
[InlineData(@"
{
""frameworks"": {
""netstandard1.3"": {
""dependencies"": {
""System.AppContext"": ""4.1.0""
}
}
}
}")]
public void It_migrates_library_and_does_not_double_netstandard_ref(string pjContent)
{
var mockProj = RunPackageDependenciesRuleOnPj(pjContent);
mockProj.Items.Should().ContainSingle(
i => (i.Include == "NETStandard.Library" && i.ItemType == "PackageReference"));
}
private void EmitsPackageReferences(ProjectRootElement mockProj, params Tuple<string, string, string>[] packageSpecs)

View file

@ -242,10 +242,29 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
[Fact]
public void It_promotes_P2P_references_up_in_the_dependency_chain()
{
var solutionDirectory =
TestAssetsManager.CreateTestInstance("TestAppDependencyGraph", callingMethod: "p").Path;
var mockProj = MigrateProject("TestAppDependencyGraph", "ProjectA");
var appDirectory = Path.Combine(solutionDirectory, "ProjectA");
var projectReferences = mockProj.Items.Where(
item => item.ItemType.Equals("ProjectReference", StringComparison.Ordinal));
projectReferences.Count().Should().Be(7);
}
[Fact]
public void It_migrates_unqualified_dependencies_as_ProjectReference_when_a_matching_project_is_found()
{
var mockProj = MigrateProject("TestAppWithUnqualifiedDependencies", "ProjectA");
var projectReferenceInclude = Path.Combine("..", "ProjectB", "ProjectB.csproj");
var projectReferences = mockProj.Items.Should().ContainSingle(
item => item.ItemType == "ProjectReference" && item.Include == projectReferenceInclude);
}
private ProjectRootElement MigrateProject(string solution, string project)
{
var solutionDirectory =
TestAssetsManager.CreateTestInstance(solution, callingMethod: "p").Path;
var appDirectory = Path.Combine(solutionDirectory, project);
var projectContext = ProjectContext.Create(appDirectory, FrameworkConstants.CommonFrameworks.NetCoreApp10);
var mockProj = ProjectRootElement.Create();
@ -254,9 +273,10 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
mockProj.AddPropertyGroup());
new MigrateProjectDependenciesRule().Apply(testSettings, testInputs);
var projectReferences = mockProj.Items.Where(
item => item.ItemType.Equals("ProjectReference", StringComparison.Ordinal));
projectReferences.Count().Should().Be(7);
var s = mockProj.Items.Select(p => $"ItemType = {p.ItemType}, Include = {p.Include}");
Console.WriteLine(string.Join(Environment.NewLine, s));
return mockProj;
}
}
}

View file

@ -7,21 +7,40 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
{
public sealed class RestoreCommand : TestCommand
{
private string _runtime;
public RestoreCommand()
: base("dotnet")
{
}
public RestoreCommand WithRuntime(string runtime)
{
_runtime = runtime;
return this;
}
public override CommandResult Execute(string args = "")
{
args = $"restore {args} --disable-parallel";
args = $"restore {GetRuntime()} {args} --disable-parallel";
return base.Execute(args);
}
public override CommandResult ExecuteWithCapturedOutput(string args = "")
{
args = $"restore {args} --disable-parallel";
args = $"restore {GetRuntime()} {args} --disable-parallel";
return base.ExecuteWithCapturedOutput(args);
}
private string GetRuntime()
{
if (_runtime == null)
{
return null;
}
return $"/p:RuntimeIdentifier={_runtime}";
}
}
}

View file

@ -68,7 +68,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
_nugetPackages = nugetPackages ?? Path.Combine(RepoRoot, ".nuget", "packages");
_pjDotnet = pjDotnet ?? GetPjDotnetPath();
_stage2Sdk = Directory.EnumerateDirectories(Path.Combine(_artifacts, "stage2", "sdk")).First();
_testPackages = Path.Combine(_artifacts, "tests", "packages");
_testPackages = Path.Combine(RepoRoot, "artifacts", "testpackages", "packages");
}
private string GetPjDotnetPath()

View file

@ -371,13 +371,14 @@ namespace Microsoft.DotNet.Migration.Tests
[InlineData("TestProjects", "PJTestAppSimple", false)]
public void It_auto_add_desktop_references_during_migrate(string testGroup, string projectName, bool isDesktopApp)
{
var runtime = DotnetLegacyRuntimeIdentifiers.InferLegacyRestoreRuntimeIdentifier();
var testAssetManager = GetTestGroupTestAssetsManager(testGroup);
var projectDirectory = testAssetManager.CreateTestInstance(projectName).WithLockFiles().Path;
CleanBinObj(projectDirectory);
MigrateProject(new string[] { projectDirectory });
Restore(projectDirectory);
BuildMSBuild(projectDirectory, projectName);
Restore(projectDirectory, runtime: runtime);
BuildMSBuild(projectDirectory, projectName, runtime:runtime);
VerifyAutoInjectedDesktopReferences(projectDirectory, projectName, isDesktopApp);
VerifyAllMSBuildOutputsRunnable(projectDirectory);
}
@ -422,6 +423,19 @@ namespace Microsoft.DotNet.Migration.Tests
.Count().Should().Be(1);
}
[Theory]
[InlineData("LibraryWithoutNetStandardLibRef")]
[InlineData("LibraryWithNetStandardLibRef")]
public void It_migrates_and_builds_library(string projectName)
{
var projectDirectory = TestAssetsManager.CreateTestInstance(projectName,
callingMethod: $"{nameof(It_migrates_and_builds_library)}-projectName").Path;
MigrateProject(projectDirectory);
Restore(projectDirectory, projectName);
BuildMSBuild(projectDirectory, projectName);
}
private void VerifyAutoInjectedDesktopReferences(string projectDirectory, string projectName, bool shouldBePresent)
{
if (projectName != null)
@ -584,10 +598,11 @@ namespace Microsoft.DotNet.Migration.Tests
.Should().Pass();
}
private void Restore(string projectDirectory, string projectName=null)
private void Restore(string projectDirectory, string projectName=null, string runtime=null)
{
var command = new RestoreCommand()
.WithWorkingDirectory(projectDirectory);
.WithWorkingDirectory(projectDirectory)
.WithRuntime(runtime);
if (projectName != null)
{
@ -601,7 +616,11 @@ namespace Microsoft.DotNet.Migration.Tests
}
}
private string BuildMSBuild(string projectDirectory, string projectName, string configuration="Debug")
private string BuildMSBuild(
string projectDirectory,
string projectName,
string configuration="Debug",
string runtime=null)
{
if (projectName != null)
{
@ -612,6 +631,7 @@ namespace Microsoft.DotNet.Migration.Tests
var result = new BuildCommand()
.WithWorkingDirectory(projectDirectory)
.WithRuntime(runtime)
.ExecuteWithCapturedOutput($"{projectName} /p:Configuration={configuration}");
result