From b58c8d1f922063d3f0742f6dcf5a0a4bd1677cf5 Mon Sep 17 00:00:00 2001 From: Srivatsn Narayanan Date: Mon, 12 Sep 2016 19:01:01 -0700 Subject: [PATCH 1/5] Add assemblyname, rootnamespace. Remove GlobalExclude. Add AutoUnify. --- .../Microsoft.NETCore.Sdk.VisualBasic.targets | 2 +- .../build/netstandard1.0/Microsoft.NETCore.Sdk.props | 9 +++++---- .../build/netstandard1.0/Microsoft.NETCore.Sdk.targets | 5 +++++ .../.NETCore/CSharpClassLibrary/ProjectTemplate.csproj | 4 ++-- .../CSharpConsoleApplication/ProjectTemplate.csproj | 4 ++-- .../CSharp/Web/EmptyWeb/ProjectTemplate.csproj | 4 ++-- .../VisualBasicClassLibrary/ProjectTemplate.vbproj | 4 ++-- .../VisualBasicConsoleApplication/ProjectTemplate.vbproj | 4 ++-- 8 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/Tasks/Microsoft.NETCore.Build.Tasks/build/netstandard1.0/Microsoft.NETCore.Sdk.VisualBasic.targets b/src/Tasks/Microsoft.NETCore.Build.Tasks/build/netstandard1.0/Microsoft.NETCore.Sdk.VisualBasic.targets index a15a3834fd25..6731a71553e0 100644 --- a/src/Tasks/Microsoft.NETCore.Build.Tasks/build/netstandard1.0/Microsoft.NETCore.Sdk.VisualBasic.targets +++ b/src/Tasks/Microsoft.NETCore.Build.Tasks/build/netstandard1.0/Microsoft.NETCore.Sdk.VisualBasic.targets @@ -17,7 +17,7 @@ Copyright (c) .NET Foundation. All rights reserved. https://github.com/dotnet/roslyn/issues/13681 tracks the compiler bug. --> - ChangeExtensionOfOutputAssembly;$(TargetsTriggeredByCompilation) + ChangeExtensionOfOutputAssembly;$(TargetsTriggeredByCompilation) diff --git a/src/Tasks/Microsoft.NETCore.Build.Tasks/build/netstandard1.0/Microsoft.NETCore.Sdk.props b/src/Tasks/Microsoft.NETCore.Build.Tasks/build/netstandard1.0/Microsoft.NETCore.Sdk.props index ed059e5e8dd5..1e136b2c607b 100644 --- a/src/Tasks/Microsoft.NETCore.Build.Tasks/build/netstandard1.0/Microsoft.NETCore.Sdk.props +++ b/src/Tasks/Microsoft.NETCore.Build.Tasks/build/netstandard1.0/Microsoft.NETCore.Sdk.props @@ -20,12 +20,11 @@ Copyright (c) .NET Foundation. All rights reserved. Library Debug AnyCPU - 512 - bin\**;obj\**; - AnyCPU prompt + $(MSBuildProjectName) + $(MSBuildProjectName) @@ -42,7 +41,9 @@ Copyright (c) .NET Foundation. All rights reserved. portable - + true + true + true diff --git a/src/Tasks/Microsoft.NETCore.Build.Tasks/build/netstandard1.0/Microsoft.NETCore.Sdk.targets b/src/Tasks/Microsoft.NETCore.Build.Tasks/build/netstandard1.0/Microsoft.NETCore.Sdk.targets index 78309f1ff8d1..7bce5993f491 100644 --- a/src/Tasks/Microsoft.NETCore.Build.Tasks/build/netstandard1.0/Microsoft.NETCore.Sdk.targets +++ b/src/Tasks/Microsoft.NETCore.Build.Tasks/build/netstandard1.0/Microsoft.NETCore.Sdk.targets @@ -22,6 +22,11 @@ Copyright (c) .NET Foundation. All rights reserved. + + + + + diff --git a/src/Templates/ProjectTemplates/CSharp/.NETCore/CSharpClassLibrary/ProjectTemplate.csproj b/src/Templates/ProjectTemplates/CSharp/.NETCore/CSharpClassLibrary/ProjectTemplate.csproj index f549242870ce..c6a06557468d 100644 --- a/src/Templates/ProjectTemplates/CSharp/.NETCore/CSharpClassLibrary/ProjectTemplate.csproj +++ b/src/Templates/ProjectTemplates/CSharp/.NETCore/CSharpClassLibrary/ProjectTemplate.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/src/Templates/ProjectTemplates/CSharp/.NETCore/CSharpConsoleApplication/ProjectTemplate.csproj b/src/Templates/ProjectTemplates/CSharp/.NETCore/CSharpConsoleApplication/ProjectTemplate.csproj index c22397d6466f..586f44ccfba2 100644 --- a/src/Templates/ProjectTemplates/CSharp/.NETCore/CSharpConsoleApplication/ProjectTemplate.csproj +++ b/src/Templates/ProjectTemplates/CSharp/.NETCore/CSharpConsoleApplication/ProjectTemplate.csproj @@ -8,8 +8,8 @@ - - + + diff --git a/src/Templates/ProjectTemplates/CSharp/Web/EmptyWeb/ProjectTemplate.csproj b/src/Templates/ProjectTemplates/CSharp/Web/EmptyWeb/ProjectTemplate.csproj index f923d30cacd9..2a6f87356f0d 100644 --- a/src/Templates/ProjectTemplates/CSharp/Web/EmptyWeb/ProjectTemplate.csproj +++ b/src/Templates/ProjectTemplates/CSharp/Web/EmptyWeb/ProjectTemplate.csproj @@ -8,8 +8,8 @@ - - + + diff --git a/src/Templates/ProjectTemplates/VisualBasic/.NETCore/VisualBasicClassLibrary/ProjectTemplate.vbproj b/src/Templates/ProjectTemplates/VisualBasic/.NETCore/VisualBasicClassLibrary/ProjectTemplate.vbproj index e2427f33543a..4b43cb6dace3 100644 --- a/src/Templates/ProjectTemplates/VisualBasic/.NETCore/VisualBasicClassLibrary/ProjectTemplate.vbproj +++ b/src/Templates/ProjectTemplates/VisualBasic/.NETCore/VisualBasicClassLibrary/ProjectTemplate.vbproj @@ -7,8 +7,8 @@ - - + + diff --git a/src/Templates/ProjectTemplates/VisualBasic/.NETCore/VisualBasicConsoleApplication/ProjectTemplate.vbproj b/src/Templates/ProjectTemplates/VisualBasic/.NETCore/VisualBasicConsoleApplication/ProjectTemplate.vbproj index 07d3d0ba8393..f4bf5fe5ce66 100644 --- a/src/Templates/ProjectTemplates/VisualBasic/.NETCore/VisualBasicConsoleApplication/ProjectTemplate.vbproj +++ b/src/Templates/ProjectTemplates/VisualBasic/.NETCore/VisualBasicConsoleApplication/ProjectTemplate.vbproj @@ -8,8 +8,8 @@ - - + + From 99f8930f989fd3ff0f9dedf1c768f6ada763f984 Mon Sep 17 00:00:00 2001 From: Srivatsn Narayanan Date: Fri, 16 Sep 2016 01:19:19 -0700 Subject: [PATCH 2/5] Add a defaultexcludes property. --- .../build/netstandard1.0/Microsoft.NETCore.Sdk.targets | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Tasks/Microsoft.NETCore.Build.Tasks/build/netstandard1.0/Microsoft.NETCore.Sdk.targets b/src/Tasks/Microsoft.NETCore.Build.Tasks/build/netstandard1.0/Microsoft.NETCore.Sdk.targets index 7bce5993f491..ab72310e0b71 100644 --- a/src/Tasks/Microsoft.NETCore.Build.Tasks/build/netstandard1.0/Microsoft.NETCore.Sdk.targets +++ b/src/Tasks/Microsoft.NETCore.Build.Tasks/build/netstandard1.0/Microsoft.NETCore.Sdk.targets @@ -22,9 +22,12 @@ Copyright (c) .NET Foundation. All rights reserved. + + bin\**;obj\** + - - + + From d35618af34689f69ed524c983f87fae69489d9f9 Mon Sep 17 00:00:00 2001 From: Nat Ayewah Date: Sat, 17 Sep 2016 20:44:50 -0700 Subject: [PATCH 3/5] Use resolved versions for package dependencies by examining all the other libraries in the current target --- .../GivenAResolvePackageDependenciesTask.cs | 41 ++++++++----------- .../ResolvePackageDependencies.cs | 19 +++++++-- 2 files changed, 34 insertions(+), 26 deletions(-) diff --git a/src/Tasks/Microsoft.NETCore.Build.Tasks.UnitTests/GivenAResolvePackageDependenciesTask.cs b/src/Tasks/Microsoft.NETCore.Build.Tasks.UnitTests/GivenAResolvePackageDependenciesTask.cs index 07a69fd72d71..f4b4c5c588ec 100644 --- a/src/Tasks/Microsoft.NETCore.Build.Tasks.UnitTests/GivenAResolvePackageDependenciesTask.cs +++ b/src/Tasks/Microsoft.NETCore.Build.Tasks.UnitTests/GivenAResolvePackageDependenciesTask.cs @@ -611,51 +611,46 @@ public void ItFiltersAnalyzersByProjectLanguage() } [Fact] - public void ItUsesMinVersionFromPackageDependencyRanges() + public void ItUsesResolvedPackageVersionFromSameTarget() { string targetLibC = CreateTargetLibrary("LibC/1.2.3", "package", dependencies: new string[] { - "\"Dep.Lib.Alpha\": \"4.0.0\"", - "\"Dep.Lib.Beta\": \"[4.0.0]\"", "\"Dep.Lib.Chi\": \"[4.0.0, 5.0.0)\"", - "\"Dep.Lib.Delta\": \"[4.0.0)\"", }); + string targetLibChi1 = CreateTargetLibrary("Dep.Lib.Chi/4.0.0", "package"); + string targetLibChi2 = CreateTargetLibrary("Dep.Lib.Chi/4.1.0", "package"); + string lockFileContent = CreateLockFileSnippet( targets: new string[] { - CreateTarget(".NETCoreApp,Version=v1.0", TargetLibA, TargetLibB, targetLibC), + CreateTarget(".NETCoreApp,Version=v1.0", TargetLibA, TargetLibB, targetLibC, targetLibChi1), + CreateTarget(".NETCoreApp,Version=v1.0/osx.10.11-x64", TargetLibA, TargetLibB, targetLibC, targetLibChi2), }, libraries: new string[] { LibADefn, LibBDefn, LibCDefn, - CreateLibrary("Dep.Lib.Alpha/4.0.0", "package", "lib/file/Alpha.dll"), - CreateLibrary("Dep.Lib.Beta/4.0.0", "package", "lib/file/Beta.dll"), CreateLibrary("Dep.Lib.Chi/4.0.0", "package", "lib/file/Chi.dll"), - CreateLibrary("Dep.Lib.Delta/4.0.0", "package", "lib/file/Delta.dll"), + CreateLibrary("Dep.Lib.Chi/4.1.0", "package", "lib/file/Chi.dll"), }, projectFileDependencyGroups: new string[] { ProjectGroup, NETCoreGroup, NETCoreOsxGroup } ); var task = GetExecutedTaskFromContents(lockFileContent); - task.PackageDependencies - .Where(t => t.ItemSpec.StartsWith("Dep.Lib.")) - .Count().Should().Be(4); + var chiDeps = task.PackageDependencies + .Where(t => t.ItemSpec.StartsWith("Dep.Lib.Chi")); - task.PackageDependencies - .Any(t => t.ItemSpec == "Dep.Lib.Alpha/4.0.0") - .Should().BeTrue(); + chiDeps.Count().Should().Be(2); - task.PackageDependencies - .Any(t => t.ItemSpec == "Dep.Lib.Beta/4.0.0") - .Should().BeTrue(); + // Dep.Lib.Chi has version range [4.0.0, 5.0.0), but the version assigned + // is that of the library in the same target - task.PackageDependencies - .Any(t => t.ItemSpec == "Dep.Lib.Chi/4.0.0") - .Should().BeTrue(); + chiDeps.Where(t => t.GetMetadata(MetadataKeys.ParentTarget) == ".NETCoreApp,Version=v1.0") + .Select(t => t.ItemSpec) + .First().Should().Be("Dep.Lib.Chi/4.0.0"); - task.PackageDependencies - .Any(t => t.ItemSpec == "Dep.Lib.Delta/4.0.0") - .Should().BeTrue(); + chiDeps.Where(t => t.GetMetadata(MetadataKeys.ParentTarget) == ".NETCoreApp,Version=v1.0/osx.10.11-x64") + .Select(t => t.ItemSpec) + .First().Should().Be("Dep.Lib.Chi/4.1.0"); } private ResolvePackageDependencies GetExecutedTaskFromPrefix(string lockFilePrefix) diff --git a/src/Tasks/Microsoft.NETCore.Build.Tasks/ResolvePackageDependencies.cs b/src/Tasks/Microsoft.NETCore.Build.Tasks/ResolvePackageDependencies.cs index 32cda915ea4a..9a532295f94b 100644 --- a/src/Tasks/Microsoft.NETCore.Build.Tasks/ResolvePackageDependencies.cs +++ b/src/Tasks/Microsoft.NETCore.Build.Tasks/ResolvePackageDependencies.cs @@ -316,6 +316,9 @@ private void RaiseLockFileTargets() private void GetPackageAndFileDependencies(LockFileTarget target) { + var resolvedPackageVersions = target.Libraries + .ToDictionary(pkg => pkg.Name, pkg => pkg.Version.ToString()); + TaskItem item; foreach (var package in target.Libraries) { @@ -331,20 +334,30 @@ private void GetPackageAndFileDependencies(LockFileTarget target) } // get sub package dependencies - GetPackageDependencies(package, target.Name); + GetPackageDependencies(package, target.Name, resolvedPackageVersions); // get file dependencies on this package GetFileDependencies(package, target.Name); } } - private void GetPackageDependencies(LockFileTargetLibrary package, string targetName) + private void GetPackageDependencies( + LockFileTargetLibrary package, + string targetName, + Dictionary resolvedPackageVersions) { string packageId = $"{package.Name}/{package.Version.ToString()}"; TaskItem item; foreach (var deps in package.Dependencies) { - string depsName = $"{deps.Id}/{deps.VersionRange.MinVersion.ToString()}"; + string version; + if (!resolvedPackageVersions.TryGetValue(deps.Id, out version)) + { + Log.LogError($"Unexpected Dependency {deps.Id} with no version number"); + continue; + } + + string depsName = $"{deps.Id}/{version}"; item = new TaskItem(depsName); item.SetMetadata(MetadataKeys.ParentTarget, targetName); // Foreign Key From dd972f41e19e21e629c1bd1f00ff9d876adb2e3c Mon Sep 17 00:00:00 2001 From: Nat Ayewah Date: Mon, 19 Sep 2016 09:14:15 -0700 Subject: [PATCH 4/5] Use ordinal ignore case in collections that store NuGet Ids; use normalized version string; remove unused field --- .../GivenAResolvePackageDependenciesTask.cs | 2 +- .../ResolvePackageDependencies.cs | 17 ++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/Tasks/Microsoft.NETCore.Build.Tasks.UnitTests/GivenAResolvePackageDependenciesTask.cs b/src/Tasks/Microsoft.NETCore.Build.Tasks.UnitTests/GivenAResolvePackageDependenciesTask.cs index f4b4c5c588ec..19a866af3ea9 100644 --- a/src/Tasks/Microsoft.NETCore.Build.Tasks.UnitTests/GivenAResolvePackageDependenciesTask.cs +++ b/src/Tasks/Microsoft.NETCore.Build.Tasks.UnitTests/GivenAResolvePackageDependenciesTask.cs @@ -73,7 +73,7 @@ public void ItAssignsValidParentTargetsAndPackages(string projectName) // set of valid targets and packages HashSet validTargets = new HashSet(lockFile.Targets.Select(x => x.Name)); - HashSet validPackages = new HashSet(lockFile.Libraries.Select(x => $"{x.Name}/{x.Version.ToString()}")); + HashSet validPackages = new HashSet(lockFile.Libraries.Select(x => $"{x.Name}/{x.Version.ToNormalizedString()}")); Func allValidParentTarget = (items) => items.All(x => validTargets.Contains(x.GetMetadata(MetadataKeys.ParentTarget))); diff --git a/src/Tasks/Microsoft.NETCore.Build.Tasks/ResolvePackageDependencies.cs b/src/Tasks/Microsoft.NETCore.Build.Tasks/ResolvePackageDependencies.cs index 9a532295f94b..e4aba691508f 100644 --- a/src/Tasks/Microsoft.NETCore.Build.Tasks/ResolvePackageDependencies.cs +++ b/src/Tasks/Microsoft.NETCore.Build.Tasks/ResolvePackageDependencies.cs @@ -18,9 +18,8 @@ namespace Microsoft.NETCore.Build.Tasks /// public sealed class ResolvePackageDependencies : Task { - private readonly List _packageFolders = new List(); - private readonly Dictionary _fileTypes = new Dictionary(); - private readonly HashSet _projectFileDependencies = new HashSet(); + private readonly Dictionary _fileTypes = new Dictionary(StringComparer.OrdinalIgnoreCase); + private readonly HashSet _projectFileDependencies = new HashSet(StringComparer.OrdinalIgnoreCase); private IPackageResolver _packageResolver; private LockFile _lockFile; @@ -200,11 +199,11 @@ private void GetPackageAndFileDefinitions() TaskItem item; foreach (var package in LockFile.Libraries) { - string packageId = $"{package.Name}/{package.Version.ToString()}"; + string packageId = $"{package.Name}/{package.Version.ToNormalizedString()}"; item = new TaskItem(packageId); item.SetMetadata(MetadataKeys.Name, package.Name); item.SetMetadata(MetadataKeys.Type, package.Type); - item.SetMetadata(MetadataKeys.Version, package.Version.ToString()); + item.SetMetadata(MetadataKeys.Version, package.Version.ToNormalizedString()); item.SetMetadata(MetadataKeys.Path, package.Path ?? string.Empty); @@ -317,12 +316,12 @@ private void RaiseLockFileTargets() private void GetPackageAndFileDependencies(LockFileTarget target) { var resolvedPackageVersions = target.Libraries - .ToDictionary(pkg => pkg.Name, pkg => pkg.Version.ToString()); + .ToDictionary(pkg => pkg.Name, pkg => pkg.Version.ToNormalizedString(), StringComparer.OrdinalIgnoreCase); TaskItem item; foreach (var package in target.Libraries) { - string packageId = $"{package.Name}/{package.Version.ToString()}"; + string packageId = $"{package.Name}/{package.Version.ToNormalizedString()}"; if (_projectFileDependencies.Contains(package.Name)) { @@ -346,7 +345,7 @@ private void GetPackageDependencies( string targetName, Dictionary resolvedPackageVersions) { - string packageId = $"{package.Name}/{package.Version.ToString()}"; + string packageId = $"{package.Name}/{package.Version.ToNormalizedString()}"; TaskItem item; foreach (var deps in package.Dependencies) { @@ -369,7 +368,7 @@ private void GetPackageDependencies( private void GetFileDependencies(LockFileTargetLibrary package, string targetName) { - string packageId = $"{package.Name}/{package.Version.ToString()}"; + string packageId = $"{package.Name}/{package.Version.ToNormalizedString()}"; TaskItem item; // for each type of file group From efa581682930c0a3f2a7a8c1494c2aa24eedb300 Mon Sep 17 00:00:00 2001 From: Anton Piskunov Date: Mon, 19 Sep 2016 10:57:31 -0700 Subject: [PATCH 5/5] Disable package management capability to hide old dependency node --- .../webbuild/netstandard1.0/Microsoft.NETCore.Web.targets | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Tasks/Microsoft.NETCore.Build.Tasks/webbuild/netstandard1.0/Microsoft.NETCore.Web.targets b/src/Tasks/Microsoft.NETCore.Build.Tasks/webbuild/netstandard1.0/Microsoft.NETCore.Web.targets index 0f48a5b602cd..918d9e26cba1 100644 --- a/src/Tasks/Microsoft.NETCore.Build.Tasks/webbuild/netstandard1.0/Microsoft.NETCore.Web.targets +++ b/src/Tasks/Microsoft.NETCore.Build.Tasks/webbuild/netstandard1.0/Microsoft.NETCore.Web.targets @@ -18,7 +18,6 @@ Copyright (c) .NET Foundation. All rights reserved. -