From ab28591c10fc5b4ad4f0ab53ec75b9642743ff12 Mon Sep 17 00:00:00 2001 From: Livar Cunha Date: Mon, 6 Mar 2017 21:25:42 -0800 Subject: [PATCH 01/31] Replacing hard coded references to shared framework version. --- TestAssets/DesktopTestProjects/AppWithProjTool2Fx/App.csproj | 4 +++- .../AppDependingOnOtherAsTool.csproj | 5 +++-- .../AppWithNonExistingToolDependency.csproj | 3 ++- .../EmptyItemGroup/EmptyItemGroup.csproj | 4 +++- .../DotnetAddP2PProjects/Lib/Lib.csproj | 4 +++- .../DotnetAddP2PProjects/MoreThanOne/a.csproj | 4 +++- .../DotnetAddP2PProjects/MoreThanOne/b.csproj | 4 +++- .../Net452AndNetCoreApp10Lib/Net452AndNetCoreApp10Lib.csproj | 4 +++- .../DotnetAddP2PProjects/ValidRef/ValidRef.csproj | 4 +++- .../WithDoubledRef/WithDoubledRef.csproj | 4 +++- .../WithExistingRefCondOnItem.csproj | 4 +++- .../WithExistingRefCondWhitespaces.csproj | 4 +++- .../WithRefCondNonUniform/WithRefCondNonUniform.csproj | 4 +++- .../WithRefNoCondNonUniform/WithRefNoCondNonUniform.csproj | 4 +++- .../AppWithDepOnTool/AppWithDepOnTool.csproj | 3 ++- .../AppWithDepOnToolWithOutputName.csproj | 4 +++- .../AppWithDirectDepWithOutputName.csproj | 4 +++- .../MSBuildAppWithMultipleFrameworksAndTools.csproj | 4 +++- .../AppWithToolDependency/AppWithToolDependency.csproj | 4 +++- .../DependencyContextFromTool.csproj | 4 +++- .../MSBuildAppWithMultipleFrameworks.csproj | 4 +++- .../MSBuildAppWithMultipleFrameworksAndTools.csproj | 4 +++- TestAssets/TestProjects/MSBuildTestApp/MSBuildTestApp.csproj | 4 +++- TestAssets/TestProjects/TestAppSimple/TestAppSimple.csproj | 4 +++- TestAssets/TestProjects/TestAppWithEmptySln/App/App.csproj | 4 +++- .../TestProjects/TestAppWithMultipleSlnFiles/App/App.csproj | 4 +++- .../TestAppWithProjDepTool/TestAppWithProjDepTool.csproj | 4 +++- .../src/App/App.csproj | 4 +++- .../TestProjects/TestAppWithSlnAndCsprojFiles/App/App.csproj | 4 +++- .../TestProjects/TestAppWithSlnAndCsprojInSubDir/App.csproj | 4 +++- .../TestAppWithSlnAndCsprojInSubDirToRemove/App.csproj | 4 +++- .../TestAppWithSlnAndCsprojProjectGuidFiles/App/App.csproj | 4 +++- .../TestAppWithSlnAndCsprojToRemove/App/App.csproj | 4 +++- .../App/App.csproj | 4 +++- .../TestAppWithSlnAndExistingCsprojReferences/App/App.csproj | 4 +++- .../App/App.csproj | 4 +++- .../TestAppWithSlnAndLastCsprojInSubDirToRemove/App.csproj | 4 +++- .../TestAppWithSlnAndSolutionFolders/src/App/App.csproj | 4 +++- .../VSTestDesktopAndNetCore/VSTestDesktopAndNetCore.csproj | 2 +- .../TestProjects/VSTestDotNetCore/VSTestDotNetCore.csproj | 2 +- .../VSTestXunitDesktopAndNetCore.csproj | 2 +- .../VSTestXunitDotNetCore/VSTestXunitDotNetCore.csproj | 2 +- build/package/dotnet-deb-tool-consumer.csproj | 4 +++- testAsset.props | 3 +++ 44 files changed, 122 insertions(+), 44 deletions(-) create mode 100644 testAsset.props diff --git a/TestAssets/DesktopTestProjects/AppWithProjTool2Fx/App.csproj b/TestAssets/DesktopTestProjects/AppWithProjTool2Fx/App.csproj index cdee4c764..3d0fbce93 100644 --- a/TestAssets/DesktopTestProjects/AppWithProjTool2Fx/App.csproj +++ b/TestAssets/DesktopTestProjects/AppWithProjTool2Fx/App.csproj @@ -1,10 +1,12 @@  + + netcoreapp2.0;net451 Exe $(PackageTargetFallback);portable-net45+win8;dnxcore50 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 - 2.0.0-beta-001509-00 + $(CLI_SharedFrameworkVersion) diff --git a/TestAssets/NonRestoredTestProjects/AppThrowingException/AppDependingOnOtherAsTool/AppDependingOnOtherAsTool.csproj b/TestAssets/NonRestoredTestProjects/AppThrowingException/AppDependingOnOtherAsTool/AppDependingOnOtherAsTool.csproj index bc411a282..b6c5d14f1 100644 --- a/TestAssets/NonRestoredTestProjects/AppThrowingException/AppDependingOnOtherAsTool/AppDependingOnOtherAsTool.csproj +++ b/TestAssets/NonRestoredTestProjects/AppThrowingException/AppDependingOnOtherAsTool/AppDependingOnOtherAsTool.csproj @@ -1,9 +1,10 @@  - + + Exe netcoreapp2.0 - 2.0.0-beta-001509-00 + $(CLI_SharedFrameworkVersion) diff --git a/TestAssets/NonRestoredTestProjects/AppWithNonExistingToolDependency/AppWithNonExistingToolDependency.csproj b/TestAssets/NonRestoredTestProjects/AppWithNonExistingToolDependency/AppWithNonExistingToolDependency.csproj index 1c8d1740c..4029e9cbe 100644 --- a/TestAssets/NonRestoredTestProjects/AppWithNonExistingToolDependency/AppWithNonExistingToolDependency.csproj +++ b/TestAssets/NonRestoredTestProjects/AppWithNonExistingToolDependency/AppWithNonExistingToolDependency.csproj @@ -1,4 +1,5 @@  + Exe @@ -6,7 +7,7 @@ - + diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/EmptyItemGroup/EmptyItemGroup.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/EmptyItemGroup/EmptyItemGroup.csproj index 25ef28b1e..0bdb79506 100644 --- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/EmptyItemGroup/EmptyItemGroup.csproj +++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/EmptyItemGroup/EmptyItemGroup.csproj @@ -1,11 +1,13 @@  + + Library net451;netcoreapp2.0 - + diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/Lib/Lib.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/Lib/Lib.csproj index 2a53aaf1b..1be153a79 100644 --- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/Lib/Lib.csproj +++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/Lib/Lib.csproj @@ -1,10 +1,12 @@  + + Library net451;netcoreapp2.0;netstandard1.4 - + diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/MoreThanOne/a.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/MoreThanOne/a.csproj index 93b7a8cc0..68b8ed617 100644 --- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/MoreThanOne/a.csproj +++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/MoreThanOne/a.csproj @@ -1,10 +1,12 @@  + + Library netcoreapp2.0 - + diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/MoreThanOne/b.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/MoreThanOne/b.csproj index 93b7a8cc0..68b8ed617 100644 --- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/MoreThanOne/b.csproj +++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/MoreThanOne/b.csproj @@ -1,10 +1,12 @@  + + Library netcoreapp2.0 - + diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/Net452AndNetCoreApp10Lib/Net452AndNetCoreApp10Lib.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/Net452AndNetCoreApp10Lib/Net452AndNetCoreApp10Lib.csproj index 4363b3d05..e11e31084 100644 --- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/Net452AndNetCoreApp10Lib/Net452AndNetCoreApp10Lib.csproj +++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/Net452AndNetCoreApp10Lib/Net452AndNetCoreApp10Lib.csproj @@ -1,9 +1,11 @@  + + Library net452;netcoreapp2.0 - + diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/ValidRef/ValidRef.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/ValidRef/ValidRef.csproj index 5b7ad5497..0fc35d3d8 100644 --- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/ValidRef/ValidRef.csproj +++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/ValidRef/ValidRef.csproj @@ -1,9 +1,11 @@  + + Library net451;netcoreapp1.0;netstandard1.4 - + diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithDoubledRef/WithDoubledRef.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithDoubledRef/WithDoubledRef.csproj index e64114491..f33aa7821 100644 --- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithDoubledRef/WithDoubledRef.csproj +++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithDoubledRef/WithDoubledRef.csproj @@ -1,10 +1,12 @@  + + Library net451;netcoreapp1.0 - + diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithExistingRefCondOnItem/WithExistingRefCondOnItem.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithExistingRefCondOnItem/WithExistingRefCondOnItem.csproj index c0dae0f2c..8747ed6b7 100644 --- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithExistingRefCondOnItem/WithExistingRefCondOnItem.csproj +++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithExistingRefCondOnItem/WithExistingRefCondOnItem.csproj @@ -1,10 +1,12 @@  + + Library net451;netcoreapp1.0 - + diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithExistingRefCondWhitespaces/WithExistingRefCondWhitespaces.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithExistingRefCondWhitespaces/WithExistingRefCondWhitespaces.csproj index 8a098269c..0b2792110 100644 --- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithExistingRefCondWhitespaces/WithExistingRefCondWhitespaces.csproj +++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithExistingRefCondWhitespaces/WithExistingRefCondWhitespaces.csproj @@ -1,10 +1,12 @@  + + Library net451;netcoreapp1.0 - + diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithRefCondNonUniform/WithRefCondNonUniform.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithRefCondNonUniform/WithRefCondNonUniform.csproj index 6982aadb6..decd23bec 100644 --- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithRefCondNonUniform/WithRefCondNonUniform.csproj +++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithRefCondNonUniform/WithRefCondNonUniform.csproj @@ -1,10 +1,12 @@  + + Library net451;netcoreapp1.0 - + diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithRefNoCondNonUniform/WithRefNoCondNonUniform.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithRefNoCondNonUniform/WithRefNoCondNonUniform.csproj index ecf964c2d..328fc5fb1 100644 --- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithRefNoCondNonUniform/WithRefNoCondNonUniform.csproj +++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithRefNoCondNonUniform/WithRefNoCondNonUniform.csproj @@ -1,10 +1,12 @@  + + Library net451;netcoreapp1.0 - + diff --git a/TestAssets/NonRestoredTestProjects/ToolWithRandomPackageName/AppWithDepOnTool/AppWithDepOnTool.csproj b/TestAssets/NonRestoredTestProjects/ToolWithRandomPackageName/AppWithDepOnTool/AppWithDepOnTool.csproj index ac1f1e9df..f8265b727 100644 --- a/TestAssets/NonRestoredTestProjects/ToolWithRandomPackageName/AppWithDepOnTool/AppWithDepOnTool.csproj +++ b/TestAssets/NonRestoredTestProjects/ToolWithRandomPackageName/AppWithDepOnTool/AppWithDepOnTool.csproj @@ -1,10 +1,11 @@  + Exe netcoreapp2.0 random-name - 2.0.0-beta-001509-00 + $(CLI_SharedFrameworkVersion) diff --git a/TestAssets/TestProjects/AppWithDepOnToolWithOutputName/AppWithDepOnToolWithOutputName.csproj b/TestAssets/TestProjects/AppWithDepOnToolWithOutputName/AppWithDepOnToolWithOutputName.csproj index 0cd47dfe0..ddaf88766 100755 --- a/TestAssets/TestProjects/AppWithDepOnToolWithOutputName/AppWithDepOnToolWithOutputName.csproj +++ b/TestAssets/TestProjects/AppWithDepOnToolWithOutputName/AppWithDepOnToolWithOutputName.csproj @@ -1,8 +1,10 @@  + + netcoreapp2.0 Exe - 2.0.0-beta-001509-00 + $(CLI_SharedFrameworkVersion) diff --git a/TestAssets/TestProjects/AppWithDirectDepWithOutputName/AppWithDirectDepWithOutputName.csproj b/TestAssets/TestProjects/AppWithDirectDepWithOutputName/AppWithDirectDepWithOutputName.csproj index 1e70974f1..a74d7184d 100755 --- a/TestAssets/TestProjects/AppWithDirectDepWithOutputName/AppWithDirectDepWithOutputName.csproj +++ b/TestAssets/TestProjects/AppWithDirectDepWithOutputName/AppWithDirectDepWithOutputName.csproj @@ -1,8 +1,10 @@  + + netcoreapp2.0 Exe - 2.0.0-beta-001509-00 + $(CLI_SharedFrameworkVersion) diff --git a/TestAssets/TestProjects/AppWithMultipleFxAndTools/MSBuildAppWithMultipleFrameworksAndTools.csproj b/TestAssets/TestProjects/AppWithMultipleFxAndTools/MSBuildAppWithMultipleFrameworksAndTools.csproj index 9c76e077b..33cb2b5a7 100644 --- a/TestAssets/TestProjects/AppWithMultipleFxAndTools/MSBuildAppWithMultipleFrameworksAndTools.csproj +++ b/TestAssets/TestProjects/AppWithMultipleFxAndTools/MSBuildAppWithMultipleFrameworksAndTools.csproj @@ -1,4 +1,6 @@  + + Exe net451;netcoreapp2.0 @@ -8,7 +10,7 @@ - + diff --git a/TestAssets/TestProjects/AppWithToolDependency/AppWithToolDependency.csproj b/TestAssets/TestProjects/AppWithToolDependency/AppWithToolDependency.csproj index 28fd12d4b..a22545fdc 100755 --- a/TestAssets/TestProjects/AppWithToolDependency/AppWithToolDependency.csproj +++ b/TestAssets/TestProjects/AppWithToolDependency/AppWithToolDependency.csproj @@ -1,8 +1,10 @@  + + netcoreapp2.0 Exe - 2.0.0-beta-001509-00 + $(CLI_SharedFrameworkVersion) diff --git a/TestAssets/TestProjects/DependencyContextFromTool/DependencyContextFromTool.csproj b/TestAssets/TestProjects/DependencyContextFromTool/DependencyContextFromTool.csproj index dced66ec8..225f497ad 100755 --- a/TestAssets/TestProjects/DependencyContextFromTool/DependencyContextFromTool.csproj +++ b/TestAssets/TestProjects/DependencyContextFromTool/DependencyContextFromTool.csproj @@ -1,4 +1,6 @@  + + 1.0.0 netcoreapp2.0 @@ -9,7 +11,7 @@ - + diff --git a/TestAssets/TestProjects/MSBuildAppWithMultipleFrameworks/MSBuildAppWithMultipleFrameworks.csproj b/TestAssets/TestProjects/MSBuildAppWithMultipleFrameworks/MSBuildAppWithMultipleFrameworks.csproj index 42207a365..0df7ccb42 100644 --- a/TestAssets/TestProjects/MSBuildAppWithMultipleFrameworks/MSBuildAppWithMultipleFrameworks.csproj +++ b/TestAssets/TestProjects/MSBuildAppWithMultipleFrameworks/MSBuildAppWithMultipleFrameworks.csproj @@ -1,11 +1,13 @@  + + Exe net451;netcoreapp2.0 - + \ No newline at end of file diff --git a/TestAssets/TestProjects/MSBuildAppWithMultipleFrameworksAndTools/MSBuildAppWithMultipleFrameworksAndTools.csproj b/TestAssets/TestProjects/MSBuildAppWithMultipleFrameworksAndTools/MSBuildAppWithMultipleFrameworksAndTools.csproj index 893d29756..766c1ae66 100644 --- a/TestAssets/TestProjects/MSBuildAppWithMultipleFrameworksAndTools/MSBuildAppWithMultipleFrameworksAndTools.csproj +++ b/TestAssets/TestProjects/MSBuildAppWithMultipleFrameworksAndTools/MSBuildAppWithMultipleFrameworksAndTools.csproj @@ -1,4 +1,6 @@  + + Exe net451;netcoreapp2.0 @@ -8,7 +10,7 @@ - + diff --git a/TestAssets/TestProjects/MSBuildTestApp/MSBuildTestApp.csproj b/TestAssets/TestProjects/MSBuildTestApp/MSBuildTestApp.csproj index 14b3277fe..ca4a8237d 100644 --- a/TestAssets/TestProjects/MSBuildTestApp/MSBuildTestApp.csproj +++ b/TestAssets/TestProjects/MSBuildTestApp/MSBuildTestApp.csproj @@ -1,9 +1,11 @@ + + Exe netcoreapp2.0 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 - 2.0.0-beta-001509-00 + $(CLI_SharedFrameworkVersion) diff --git a/TestAssets/TestProjects/TestAppSimple/TestAppSimple.csproj b/TestAssets/TestProjects/TestAppSimple/TestAppSimple.csproj index f07c4cb85..542dd829a 100755 --- a/TestAssets/TestProjects/TestAppSimple/TestAppSimple.csproj +++ b/TestAssets/TestProjects/TestAppSimple/TestAppSimple.csproj @@ -1,7 +1,9 @@  + + netcoreapp2.0 Exe - 2.0.0-beta-001509-00 + $(CLI_SharedFrameworkVersion) \ No newline at end of file diff --git a/TestAssets/TestProjects/TestAppWithEmptySln/App/App.csproj b/TestAssets/TestProjects/TestAppWithEmptySln/App/App.csproj index 7f94050c6..ce5bf06cb 100644 --- a/TestAssets/TestProjects/TestAppWithEmptySln/App/App.csproj +++ b/TestAssets/TestProjects/TestAppWithEmptySln/App/App.csproj @@ -1,4 +1,6 @@ + + Exe netcoreapp2.0 @@ -9,7 +11,7 @@ - + diff --git a/TestAssets/TestProjects/TestAppWithMultipleSlnFiles/App/App.csproj b/TestAssets/TestProjects/TestAppWithMultipleSlnFiles/App/App.csproj index e3bb138de..7a2163613 100644 --- a/TestAssets/TestProjects/TestAppWithMultipleSlnFiles/App/App.csproj +++ b/TestAssets/TestProjects/TestAppWithMultipleSlnFiles/App/App.csproj @@ -1,11 +1,13 @@ + + Exe netcoreapp2.0 - + diff --git a/TestAssets/TestProjects/TestAppWithProjDepTool/TestAppWithProjDepTool.csproj b/TestAssets/TestProjects/TestAppWithProjDepTool/TestAppWithProjDepTool.csproj index 178808fce..ba6ef78be 100644 --- a/TestAssets/TestProjects/TestAppWithProjDepTool/TestAppWithProjDepTool.csproj +++ b/TestAssets/TestProjects/TestAppWithProjDepTool/TestAppWithProjDepTool.csproj @@ -1,8 +1,10 @@ + + Exe netcoreapp2.0 - 2.0.0-beta-001509-00 + $(CLI_SharedFrameworkVersion) diff --git a/TestAssets/TestProjects/TestAppWithSlnAndCaseSensitiveSolutionFolders/src/App/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndCaseSensitiveSolutionFolders/src/App/App.csproj index e97ec13d1..3a31eb5bf 100644 --- a/TestAssets/TestProjects/TestAppWithSlnAndCaseSensitiveSolutionFolders/src/App/App.csproj +++ b/TestAssets/TestProjects/TestAppWithSlnAndCaseSensitiveSolutionFolders/src/App/App.csproj @@ -1,4 +1,6 @@ + + Exe netcoreapp2.0 @@ -9,7 +11,7 @@ - + diff --git a/TestAssets/TestProjects/TestAppWithSlnAndCsprojFiles/App/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndCsprojFiles/App/App.csproj index 7f94050c6..ce5bf06cb 100644 --- a/TestAssets/TestProjects/TestAppWithSlnAndCsprojFiles/App/App.csproj +++ b/TestAssets/TestProjects/TestAppWithSlnAndCsprojFiles/App/App.csproj @@ -1,4 +1,6 @@ + + Exe netcoreapp2.0 @@ -9,7 +11,7 @@ - + diff --git a/TestAssets/TestProjects/TestAppWithSlnAndCsprojInSubDir/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndCsprojInSubDir/App.csproj index 537d9c27b..92f102c88 100644 --- a/TestAssets/TestProjects/TestAppWithSlnAndCsprojInSubDir/App.csproj +++ b/TestAssets/TestProjects/TestAppWithSlnAndCsprojInSubDir/App.csproj @@ -1,4 +1,6 @@ + + Exe netcoreapp2.0 @@ -9,7 +11,7 @@ - + diff --git a/TestAssets/TestProjects/TestAppWithSlnAndCsprojInSubDirToRemove/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndCsprojInSubDirToRemove/App.csproj index f40030266..abea1bc3d 100644 --- a/TestAssets/TestProjects/TestAppWithSlnAndCsprojInSubDirToRemove/App.csproj +++ b/TestAssets/TestProjects/TestAppWithSlnAndCsprojInSubDirToRemove/App.csproj @@ -1,10 +1,12 @@  + + Exe netcoreapp2.0 - + \ No newline at end of file diff --git a/TestAssets/TestProjects/TestAppWithSlnAndCsprojProjectGuidFiles/App/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndCsprojProjectGuidFiles/App/App.csproj index 7f94050c6..ce5bf06cb 100644 --- a/TestAssets/TestProjects/TestAppWithSlnAndCsprojProjectGuidFiles/App/App.csproj +++ b/TestAssets/TestProjects/TestAppWithSlnAndCsprojProjectGuidFiles/App/App.csproj @@ -1,4 +1,6 @@ + + Exe netcoreapp2.0 @@ -9,7 +11,7 @@ - + diff --git a/TestAssets/TestProjects/TestAppWithSlnAndCsprojToRemove/App/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndCsprojToRemove/App/App.csproj index e3bb138de..7a2163613 100644 --- a/TestAssets/TestProjects/TestAppWithSlnAndCsprojToRemove/App/App.csproj +++ b/TestAssets/TestProjects/TestAppWithSlnAndCsprojToRemove/App/App.csproj @@ -1,11 +1,13 @@ + + Exe netcoreapp2.0 - + diff --git a/TestAssets/TestProjects/TestAppWithSlnAndDuplicateProjectReferences/App/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndDuplicateProjectReferences/App/App.csproj index 7f94050c6..ce5bf06cb 100644 --- a/TestAssets/TestProjects/TestAppWithSlnAndDuplicateProjectReferences/App/App.csproj +++ b/TestAssets/TestProjects/TestAppWithSlnAndDuplicateProjectReferences/App/App.csproj @@ -1,4 +1,6 @@ + + Exe netcoreapp2.0 @@ -9,7 +11,7 @@ - + diff --git a/TestAssets/TestProjects/TestAppWithSlnAndExistingCsprojReferences/App/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndExistingCsprojReferences/App/App.csproj index 3ae94455e..21cce6681 100644 --- a/TestAssets/TestProjects/TestAppWithSlnAndExistingCsprojReferences/App/App.csproj +++ b/TestAssets/TestProjects/TestAppWithSlnAndExistingCsprojReferences/App/App.csproj @@ -1,4 +1,6 @@ + + Exe netcoreapp2.0 @@ -13,7 +15,7 @@ - + diff --git a/TestAssets/TestProjects/TestAppWithSlnAndExistingCsprojReferencesWithEscapedDirSep/App/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndExistingCsprojReferencesWithEscapedDirSep/App/App.csproj index 3ae94455e..21cce6681 100644 --- a/TestAssets/TestProjects/TestAppWithSlnAndExistingCsprojReferencesWithEscapedDirSep/App/App.csproj +++ b/TestAssets/TestProjects/TestAppWithSlnAndExistingCsprojReferencesWithEscapedDirSep/App/App.csproj @@ -1,4 +1,6 @@ + + Exe netcoreapp2.0 @@ -13,7 +15,7 @@ - + diff --git a/TestAssets/TestProjects/TestAppWithSlnAndLastCsprojInSubDirToRemove/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndLastCsprojInSubDirToRemove/App.csproj index f40030266..abea1bc3d 100644 --- a/TestAssets/TestProjects/TestAppWithSlnAndLastCsprojInSubDirToRemove/App.csproj +++ b/TestAssets/TestProjects/TestAppWithSlnAndLastCsprojInSubDirToRemove/App.csproj @@ -1,10 +1,12 @@  + + Exe netcoreapp2.0 - + \ No newline at end of file diff --git a/TestAssets/TestProjects/TestAppWithSlnAndSolutionFolders/src/App/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndSolutionFolders/src/App/App.csproj index e97ec13d1..3a31eb5bf 100644 --- a/TestAssets/TestProjects/TestAppWithSlnAndSolutionFolders/src/App/App.csproj +++ b/TestAssets/TestProjects/TestAppWithSlnAndSolutionFolders/src/App/App.csproj @@ -1,4 +1,6 @@ + + Exe netcoreapp2.0 @@ -9,7 +11,7 @@ - + diff --git a/TestAssets/TestProjects/VSTestDesktopAndNetCore/VSTestDesktopAndNetCore.csproj b/TestAssets/TestProjects/VSTestDesktopAndNetCore/VSTestDesktopAndNetCore.csproj index a7978edd8..820cab34a 100644 --- a/TestAssets/TestProjects/VSTestDesktopAndNetCore/VSTestDesktopAndNetCore.csproj +++ b/TestAssets/TestProjects/VSTestDesktopAndNetCore/VSTestDesktopAndNetCore.csproj @@ -10,7 +10,7 @@ - 2.0.0-beta-001509-00 + $(CLI_SharedFrameworkVersion) diff --git a/TestAssets/TestProjects/VSTestDotNetCore/VSTestDotNetCore.csproj b/TestAssets/TestProjects/VSTestDotNetCore/VSTestDotNetCore.csproj index 6debc7d65..198928e32 100644 --- a/TestAssets/TestProjects/VSTestDotNetCore/VSTestDotNetCore.csproj +++ b/TestAssets/TestProjects/VSTestDotNetCore/VSTestDotNetCore.csproj @@ -3,7 +3,7 @@ Exe netcoreapp2.0 - 2.0.0-beta-001509-00 + $(CLI_SharedFrameworkVersion) diff --git a/TestAssets/TestProjects/VSTestXunitDesktopAndNetCore/VSTestXunitDesktopAndNetCore.csproj b/TestAssets/TestProjects/VSTestXunitDesktopAndNetCore/VSTestXunitDesktopAndNetCore.csproj index 1b0f1ca42..ee42e9682 100644 --- a/TestAssets/TestProjects/VSTestXunitDesktopAndNetCore/VSTestXunitDesktopAndNetCore.csproj +++ b/TestAssets/TestProjects/VSTestXunitDesktopAndNetCore/VSTestXunitDesktopAndNetCore.csproj @@ -13,7 +13,7 @@ - + diff --git a/TestAssets/TestProjects/VSTestXunitDotNetCore/VSTestXunitDotNetCore.csproj b/TestAssets/TestProjects/VSTestXunitDotNetCore/VSTestXunitDotNetCore.csproj index 0882089c9..673ecdb08 100644 --- a/TestAssets/TestProjects/VSTestXunitDotNetCore/VSTestXunitDotNetCore.csproj +++ b/TestAssets/TestProjects/VSTestXunitDotNetCore/VSTestXunitDotNetCore.csproj @@ -3,7 +3,7 @@ Exe netcoreapp2.0 - 2.0.0-beta-001509-00 + $(CLI_SharedFrameworkVersion) diff --git a/build/package/dotnet-deb-tool-consumer.csproj b/build/package/dotnet-deb-tool-consumer.csproj index ab41745f0..d4b3f6896 100644 --- a/build/package/dotnet-deb-tool-consumer.csproj +++ b/build/package/dotnet-deb-tool-consumer.csproj @@ -1,7 +1,9 @@ + + netcoreapp2.0 - 2.0.0-beta-001509-00 + $(CLI_SharedFrameworkVersion) diff --git a/testAsset.props b/testAsset.props new file mode 100644 index 000000000..4c05b30f1 --- /dev/null +++ b/testAsset.props @@ -0,0 +1,3 @@ + + + From 03edcf6cfd3e9d72c79fd2386876b73fa88c486a Mon Sep 17 00:00:00 2001 From: Livar Cunha Date: Tue, 7 Mar 2017 08:35:13 -0800 Subject: [PATCH 02/31] Replacing dir.props with testassets.props for other test asset test projects. --- .../VSTestDesktopAndNetCore/VSTestDesktopAndNetCore.csproj | 3 ++- .../TestProjects/VSTestDotNetCore/VSTestDotNetCore.csproj | 3 ++- .../VSTestXunitDesktopAndNetCore.csproj | 2 +- .../VSTestXunitDotNetCore/VSTestXunitDotNetCore.csproj | 3 ++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/TestAssets/TestProjects/VSTestDesktopAndNetCore/VSTestDesktopAndNetCore.csproj b/TestAssets/TestProjects/VSTestDesktopAndNetCore/VSTestDesktopAndNetCore.csproj index 820cab34a..84252d545 100644 --- a/TestAssets/TestProjects/VSTestDesktopAndNetCore/VSTestDesktopAndNetCore.csproj +++ b/TestAssets/TestProjects/VSTestDesktopAndNetCore/VSTestDesktopAndNetCore.csproj @@ -1,5 +1,6 @@ - + + Exe net46;netcoreapp2.0 diff --git a/TestAssets/TestProjects/VSTestDotNetCore/VSTestDotNetCore.csproj b/TestAssets/TestProjects/VSTestDotNetCore/VSTestDotNetCore.csproj index 198928e32..711143c68 100644 --- a/TestAssets/TestProjects/VSTestDotNetCore/VSTestDotNetCore.csproj +++ b/TestAssets/TestProjects/VSTestDotNetCore/VSTestDotNetCore.csproj @@ -1,5 +1,6 @@ - + + Exe netcoreapp2.0 diff --git a/TestAssets/TestProjects/VSTestXunitDesktopAndNetCore/VSTestXunitDesktopAndNetCore.csproj b/TestAssets/TestProjects/VSTestXunitDesktopAndNetCore/VSTestXunitDesktopAndNetCore.csproj index ee42e9682..625d5a0d7 100644 --- a/TestAssets/TestProjects/VSTestXunitDesktopAndNetCore/VSTestXunitDesktopAndNetCore.csproj +++ b/TestAssets/TestProjects/VSTestXunitDesktopAndNetCore/VSTestXunitDesktopAndNetCore.csproj @@ -1,5 +1,5 @@ - + Exe diff --git a/TestAssets/TestProjects/VSTestXunitDotNetCore/VSTestXunitDotNetCore.csproj b/TestAssets/TestProjects/VSTestXunitDotNetCore/VSTestXunitDotNetCore.csproj index 673ecdb08..ae4226e6c 100644 --- a/TestAssets/TestProjects/VSTestXunitDotNetCore/VSTestXunitDotNetCore.csproj +++ b/TestAssets/TestProjects/VSTestXunitDotNetCore/VSTestXunitDotNetCore.csproj @@ -1,5 +1,6 @@ - + + Exe netcoreapp2.0 From 06ab197be553812bb7c2e11a7612f24d5a47b064 Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 7 Mar 2017 10:49:28 -0800 Subject: [PATCH 03/31] Add back 000000 padding to commit count --- build/GitCommitInfo.targets | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build/GitCommitInfo.targets b/build/GitCommitInfo.targets index 3631da0fa..a36e16368 100644 --- a/build/GitCommitInfo.targets +++ b/build/GitCommitInfo.targets @@ -11,6 +11,9 @@ + 000000$(GitInfoCommitCount) + $(GitInfoCommitCount.Substring($(GitInfoCommitCount.get_Length())) - 6) + true From 97e3767bd78239532321bf3d02c7e2c9a2d2212f Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 7 Mar 2017 11:04:18 -0800 Subject: [PATCH 04/31] use PadLeft --- build/GitCommitInfo.targets | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/build/GitCommitInfo.targets b/build/GitCommitInfo.targets index a36e16368..e2d8094cd 100644 --- a/build/GitCommitInfo.targets +++ b/build/GitCommitInfo.targets @@ -11,8 +11,7 @@ - 000000$(GitInfoCommitCount) - $(GitInfoCommitCount.Substring($(GitInfoCommitCount.get_Length())) - 6) + $(GitInfoCommitCount.PadLeft(6,'0')) Date: Tue, 7 Mar 2017 19:48:43 +0000 Subject: [PATCH 05/31] Update CoreSetup to beta-001683 --- build/DependencyVersions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/DependencyVersions.props b/build/DependencyVersions.props index fcf159e33..60465f7bd 100644 --- a/build/DependencyVersions.props +++ b/build/DependencyVersions.props @@ -1,7 +1,7 @@ - 2.0.0-beta-001675-00 + 2.0.0-beta-001683-00 15.2.0-preview-000047-02 2.0.0-rc4-61325-08 1.1.0-alpha-20170303-2 From eaa504985906d1c338a8b5437649598d8ae57a5a Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 7 Mar 2017 12:02:47 -0800 Subject: [PATCH 06/31] Force string comparison --- build/GitCommitInfo.targets | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/build/GitCommitInfo.targets b/build/GitCommitInfo.targets index e2d8094cd..578feeb0d 100644 --- a/build/GitCommitInfo.targets +++ b/build/GitCommitInfo.targets @@ -14,7 +14,7 @@ $(GitInfoCommitCount.PadLeft(6,'0')) true @@ -26,10 +26,11 @@ </Project> - + + From d313cb4012ca4c76d8b84f65a822a842efb20d5d Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 7 Mar 2017 12:05:42 -0800 Subject: [PATCH 07/31] Change suffix to preview1 --- build/Branding.props | 2 +- build/Version.props | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/Branding.props b/build/Branding.props index a11613cd0..935355a02 100644 --- a/build/Branding.props +++ b/build/Branding.props @@ -1,6 +1,6 @@ - Microsoft .NET Core 2.0.0 - SDK Alpha + Microsoft .NET Core 2.0.0 - SDK Preview 1 Microsoft .NET Core 2.0.0 - Runtime Microsoft .NET Core 2.0.0 - Host Microsoft .NET Core 2.0.0 - Host FX Resolver diff --git a/build/Version.props b/build/Version.props index 402ae0858..a121c2f6d 100644 --- a/build/Version.props +++ b/build/Version.props @@ -3,7 +3,7 @@ 2 0 0 - alpha + preview1 $(VersionMajor).$(VersionMinor).$(VersionPatch)-$(ReleaseSuffix) $(VersionMajor).$(VersionMinor).$(VersionPatch).$(CommitCount) From bd97d02937f84d7a7d53f7dd5c7ef6052151089a Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 7 Mar 2017 13:22:13 -0800 Subject: [PATCH 08/31] Fix RHEL issue --- build/GitCommitInfo.targets | 9 +++++++++ test/Directory.Build.props | 7 +++++++ 2 files changed, 16 insertions(+) create mode 100644 test/Directory.Build.props diff --git a/build/GitCommitInfo.targets b/build/GitCommitInfo.targets index 578feeb0d..4a384c016 100644 --- a/build/GitCommitInfo.targets +++ b/build/GitCommitInfo.targets @@ -10,9 +10,18 @@ + + + + + + + %(GitInfoCommitCountLines.Identity) $(GitInfoCommitCount.PadLeft(6,'0')) + %(GitInfoCommitHashLines.Identity) + true diff --git a/test/Directory.Build.props b/test/Directory.Build.props new file mode 100644 index 000000000..8d5c8cc42 --- /dev/null +++ b/test/Directory.Build.props @@ -0,0 +1,7 @@ + + + + + false + + From 66d707b48df63f7f599e2f5f9ae93fc361940084 Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 7 Mar 2017 13:23:48 -0800 Subject: [PATCH 09/31] Bad Rebase --- test/Directory.Build.props | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 test/Directory.Build.props diff --git a/test/Directory.Build.props b/test/Directory.Build.props deleted file mode 100644 index 8d5c8cc42..000000000 --- a/test/Directory.Build.props +++ /dev/null @@ -1,7 +0,0 @@ - - - - - false - - From b0891781cbc6460668a443828ff9d8766dd5df3b Mon Sep 17 00:00:00 2001 From: Daniel Plaisted Date: Tue, 7 Mar 2017 13:38:00 -0800 Subject: [PATCH 10/31] Update .NET SDK --- build/DependencyVersions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/DependencyVersions.props b/build/DependencyVersions.props index fcf159e33..3fe4a44a4 100644 --- a/build/DependencyVersions.props +++ b/build/DependencyVersions.props @@ -4,7 +4,7 @@ 2.0.0-beta-001675-00 15.2.0-preview-000047-02 2.0.0-rc4-61325-08 - 1.1.0-alpha-20170303-2 + 1.1.0-alpha-20170306-2 4.3.0-beta1-2342 1.0.0-alpha-20170130-3-281 15.0.0 From ed1ca04f51feaa5022659dac68500609b932aa73 Mon Sep 17 00:00:00 2001 From: Rama Krishnan Raghupathy Date: Wed, 1 Feb 2017 16:11:12 -0800 Subject: [PATCH 11/31] Enabling multifile support for cache --- src/dotnet/commands/dotnet-cache/Program.cs | 19 +++++++++++++------ src/dotnet/commands/dotnet-publish/Program.cs | 6 +++--- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/dotnet/commands/dotnet-cache/Program.cs b/src/dotnet/commands/dotnet-cache/Program.cs index 2e995ea42..138c584b5 100644 --- a/src/dotnet/commands/dotnet-cache/Program.cs +++ b/src/dotnet/commands/dotnet-cache/Program.cs @@ -9,6 +9,7 @@ using Microsoft.DotNet.Cli; using System.Diagnostics; using System; using System.IO; +using System.Linq; namespace Microsoft.DotNet.Tools.Cache { @@ -31,9 +32,9 @@ namespace Microsoft.DotNet.Tools.Cache app.ArgumentSeparatorHelpText = HelpMessageStrings.MSBuildAdditionalArgsHelpText; app.HelpOption("-h|--help"); - CommandOption projectArgument = app.Option( + CommandOption projectArguments = app.Option( $"-e|--entries <{LocalizableStrings.ProjectEntries}>", LocalizableStrings.ProjectEntryDescription, - CommandOptionType.SingleValue); + CommandOptionType.MultipleValue); CommandOption frameworkOption = app.Option( $"-f|--framework <{LocalizableStrings.FrameworkOption}>", LocalizableStrings.FrameworkOptionDescription, @@ -70,13 +71,19 @@ namespace Microsoft.DotNet.Tools.Cache { msbuildArgs = new List(); - if (string.IsNullOrEmpty(projectArgument.Value())) + if (!projectArguments.HasValue()) { throw new InvalidOperationException(LocalizableStrings.SpecifyEntries); } msbuildArgs.Add("/t:ComposeCache"); - msbuildArgs.Add(projectArgument.Value()); + msbuildArgs.Add(projectArguments.Values[0]); + var _additionalProjectsargs = projectArguments.Values.Skip(1); + + if (_additionalProjectsargs.Count() > 0) + { + msbuildArgs.Add($"/p:AdditionalProjects={string.Join("%3B", _additionalProjectsargs)}"); + } if (!string.IsNullOrEmpty(frameworkOption.Value())) { @@ -106,12 +113,12 @@ namespace Microsoft.DotNet.Tools.Cache if (skipOptimizationOption.HasValue()) { - msbuildArgs.Add($"/p:SkipOptimization={skipOptimizationOption.HasValue()}"); + msbuildArgs.Add($"/p:SkipOptimization=true"); } if (preserveWorkingDir.HasValue()) { - msbuildArgs.Add($"/p:PreserveComposeWorkingDir={preserveWorkingDir.HasValue()}"); + msbuildArgs.Add($"/p:PreserveComposeWorkingDir=true"); } if (!string.IsNullOrEmpty(verbosityOption.Value())) diff --git a/src/dotnet/commands/dotnet-publish/Program.cs b/src/dotnet/commands/dotnet-publish/Program.cs index 96214a26d..f4ba3fd09 100644 --- a/src/dotnet/commands/dotnet-publish/Program.cs +++ b/src/dotnet/commands/dotnet-publish/Program.cs @@ -54,7 +54,7 @@ namespace Microsoft.DotNet.Tools.Publish CommandOption filterProjOption = app.Option( $"--filter <{LocalizableStrings.FilterProjOption}>", LocalizableStrings.FilterProjOptionDescription, - CommandOptionType.SingleValue); + CommandOptionType.MultipleValue); CommandOption verbosityOption = AddVerbosityOption(app); @@ -95,9 +95,9 @@ namespace Microsoft.DotNet.Tools.Publish msbuildArgs.Add($"/p:VersionSuffix={versionSuffixOption.Value()}"); } - if (!string.IsNullOrEmpty(filterProjOption.Value())) + if (filterProjOption.HasValue()) { - msbuildArgs.Add($"/p:FilterProjectFiles={filterProjOption.Value()}"); + msbuildArgs.Add($"/p:FilterProjectFiles={string.Join("%3B", filterProjOption.Values)}"); } if (!string.IsNullOrEmpty(verbosityOption.Value())) From e40435920d49d26e2cfe5c7d166430246d0c459b Mon Sep 17 00:00:00 2001 From: Rama Krishnan Raghupathy Date: Mon, 6 Mar 2017 22:57:40 -0800 Subject: [PATCH 12/31] tests for cache taking multiple input files --- .../FluentProfile/FluentFilterProfile.xml | 3 + .../FluentProfile/FluentProfile.xml | 5 ++ .../MultiDependentProject.csproj | 12 +++ .../MultiDependentProject/Program.cs | 24 ++++++ .../Commands/CacheCommand.cs | 8 +- .../Commands/PublishCommand.cs | 7 +- .../GivenDotnetCachesAndPublishesProjects.cs | 78 ++++++++++++++++--- 7 files changed, 119 insertions(+), 18 deletions(-) create mode 100644 TestAssets/TestProjects/FluentProfile/FluentFilterProfile.xml create mode 100644 TestAssets/TestProjects/FluentProfile/FluentProfile.xml create mode 100644 TestAssets/TestProjects/MultiDependentProject/MultiDependentProject.csproj create mode 100644 TestAssets/TestProjects/MultiDependentProject/Program.cs diff --git a/TestAssets/TestProjects/FluentProfile/FluentFilterProfile.xml b/TestAssets/TestProjects/FluentProfile/FluentFilterProfile.xml new file mode 100644 index 000000000..6c3fb62a8 --- /dev/null +++ b/TestAssets/TestProjects/FluentProfile/FluentFilterProfile.xml @@ -0,0 +1,3 @@ + + + diff --git a/TestAssets/TestProjects/FluentProfile/FluentProfile.xml b/TestAssets/TestProjects/FluentProfile/FluentProfile.xml new file mode 100644 index 000000000..512290d00 --- /dev/null +++ b/TestAssets/TestProjects/FluentProfile/FluentProfile.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/TestAssets/TestProjects/MultiDependentProject/MultiDependentProject.csproj b/TestAssets/TestProjects/MultiDependentProject/MultiDependentProject.csproj new file mode 100644 index 000000000..8437d1b6d --- /dev/null +++ b/TestAssets/TestProjects/MultiDependentProject/MultiDependentProject.csproj @@ -0,0 +1,12 @@ + + + + Exe + netcoreapp2.0 + + + + + + + diff --git a/TestAssets/TestProjects/MultiDependentProject/Program.cs b/TestAssets/TestProjects/MultiDependentProject/Program.cs new file mode 100644 index 000000000..248a4d29f --- /dev/null +++ b/TestAssets/TestProjects/MultiDependentProject/Program.cs @@ -0,0 +1,24 @@ +// 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.Collections; +using Newtonsoft.Json.Linq; +using FluentAssertions; + +class Program +{ + public static void Main(string[] args) + { + ArrayList argList = new ArrayList(args); + JObject jObject = new JObject(); + + foreach (string arg in argList) + { + jObject[arg] = arg; + } + + jObject.Count.Should().Be(0); + Console.WriteLine(jObject.ToString()); + } +} diff --git a/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/CacheCommand.cs b/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/CacheCommand.cs index 7cfbd65c1..08209f911 100644 --- a/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/CacheCommand.cs +++ b/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/CacheCommand.cs @@ -3,12 +3,13 @@ using Microsoft.DotNet.Cli.Utils; using NuGet.Frameworks; +using System.Collections.Generic; namespace Microsoft.DotNet.Tools.Test.Utilities { public sealed class CacheCommand : TestCommand { - private string _profileProject; + private List _profileProject = new List(); private string _framework; private string _output; private string _runtime; @@ -22,7 +23,8 @@ namespace Microsoft.DotNet.Tools.Test.Utilities public CacheCommand WithEntries(string profileProject) { - _profileProject = profileProject; + _profileProject.Add($"--entries {profileProject}"); + return this; } public CacheCommand WithFramework(string framework) @@ -83,7 +85,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities FrameworkVersionOption); } - private string ProfileProjectOption => string.IsNullOrEmpty(_profileProject) ? "" : $"--entries {_profileProject}"; + private string ProfileProjectOption => string.Join(" ", _profileProject) ; private string FrameworkOption => string.IsNullOrEmpty(_framework) ? "" : $"-f {_framework}"; diff --git a/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/PublishCommand.cs b/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/PublishCommand.cs index 3a389d5c4..5bb0d01a6 100644 --- a/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/PublishCommand.cs +++ b/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/PublishCommand.cs @@ -3,6 +3,7 @@ using Microsoft.DotNet.Cli.Utils; using NuGet.Frameworks; +using System.Collections.Generic; namespace Microsoft.DotNet.Tools.Test.Utilities { @@ -11,7 +12,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities private string _framework; private string _output; private string _runtime; - private string _profileproj; + private List _profileFilterProject = new List(); public PublishCommand() : base("dotnet") @@ -43,7 +44,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities public PublishCommand WithProFileProject(string profileproj) { - _profileproj = profileproj; + _profileFilterProject.Add( $" --filter {profileproj}"); return this; } @@ -74,6 +75,6 @@ namespace Microsoft.DotNet.Tools.Test.Utilities private string RuntimeOption => string.IsNullOrEmpty(_runtime) ? "" : $"-r {_runtime}"; - private string ProfileProjOption => string.IsNullOrEmpty(_profileproj) ? "" : $"--filter {_profileproj}"; + private string ProfileProjOption => string.Join(" ", _profileFilterProject); } } diff --git a/test/dotnet-cache.Tests/GivenDotnetCachesAndPublishesProjects.cs b/test/dotnet-cache.Tests/GivenDotnetCachesAndPublishesProjects.cs index b8451bb8f..296b06888 100644 --- a/test/dotnet-cache.Tests/GivenDotnetCachesAndPublishesProjects.cs +++ b/test/dotnet-cache.Tests/GivenDotnetCachesAndPublishesProjects.cs @@ -33,10 +33,7 @@ namespace Microsoft.DotNet.Cli.Publish.Tests var rid = DotnetLegacyRuntimeIdentifiers.InferLegacyRestoreRuntimeIdentifier(); var localAssemblyCache = Path.Combine(testProjectDirectory, "localAssemblyCache"); var intermediateWorkingDirectory = Path.Combine(testProjectDirectory, "workingDirectory"); - var profileProjectPath = TestAssets.Get(profileProjectName) - .CreateInstance() - .WithSourceFiles() - .Root.FullName; + var profileProjectPath = TestAssets.Get(profileProjectName).Root.FullName; var profileProject = Path.Combine(profileProjectPath, $"{profileProjectName}.xml"); new RestoreCommand() @@ -55,12 +52,12 @@ namespace Microsoft.DotNet.Cli.Publish.Tests .Should().Pass(); var configuration = Environment.GetEnvironmentVariable("CONFIGURATION") ?? "Debug"; - var profilefilter = Path.Combine(localAssemblyCache, _arch, _tfm, "artifact.xml"); + var profileFilter = Path.Combine(localAssemblyCache, _arch, _tfm, "artifact.xml"); new PublishCommand() .WithFramework(_tfm) .WithWorkingDirectory(testProjectDirectory) - .WithProFileProject(profilefilter) + .WithProFileProject(profileFilter) .Execute() .Should().Pass(); @@ -85,11 +82,8 @@ namespace Microsoft.DotNet.Cli.Publish.Tests .UseCurrentRuntimeFrameworkVersion(); var testProjectDirectory = testInstance.Root.ToString(); - var profileProjectPath = TestAssets.Get(profileProjectName) - .CreateInstance() - .WithSourceFiles() - .Root.FullName; - var profileProject = Path.Combine(profileProjectPath, "NewtonsoftFilterProfile.xml"); + var profileProjectPath = TestAssets.Get(profileProjectName).Root.FullName; + var profileFilter = Path.Combine(profileProjectPath, "NewtonsoftFilterProfile.xml"); new RestoreCommand() .WithWorkingDirectory(testProjectDirectory) @@ -101,7 +95,7 @@ namespace Microsoft.DotNet.Cli.Publish.Tests new PublishCommand() .WithFramework(_tfm) .WithWorkingDirectory(testProjectDirectory) - .WithProFileProject(profileProject) + .WithProFileProject(profileFilter) .Execute() .Should().Pass(); @@ -112,5 +106,65 @@ namespace Microsoft.DotNet.Cli.Publish.Tests .Should().Fail() .And.HaveStdErrContaining("assembly specified in the dependencies manifest was not found -- package: 'newtonsoft.json',"); } + + [Fact] + public void ItPublishesAnAppWithMultipleProfiles() + { + var testAppName = "MultiDependentProject"; + var profileProjectName = "NewtonsoftProfile"; + var profileProjectName1 = "FluentProfile"; + + var testInstance = TestAssets.Get(testAppName) + .CreateInstance() + .WithSourceFiles() + .UseCurrentRuntimeFrameworkVersion(); + + var testProjectDirectory = testInstance.Root.ToString(); + var rid = DotnetLegacyRuntimeIdentifiers.InferLegacyRestoreRuntimeIdentifier(); + var localAssemblyCache = Path.Combine(testProjectDirectory, "lAC"); + var intermediateWorkingDirectory = Path.Combine(testProjectDirectory, "workingDirectory"); + + var profileProjectPath = TestAssets.Get(profileProjectName).Root.FullName; + var profileProject = Path.Combine(profileProjectPath, $"{profileProjectName}.xml"); + var profileFilter = Path.Combine(profileProjectPath, "NewtonsoftFilterProfile.xml"); + + var profileProjectPath1 = TestAssets.Get(profileProjectName1).Root.FullName; + var profileProject1 = Path.Combine(profileProjectPath1, $"{profileProjectName1}.xml"); + var profileFilter1 = Path.Combine(profileProjectPath1, "FluentFilterProfile.xml"); + + new RestoreCommand() + .WithWorkingDirectory(testProjectDirectory) + .Execute() + .Should().Pass(); + + new CacheCommand() + .WithEntries(profileProject) + .WithEntries(profileProject1) + .WithFramework(_tfm) + .WithRuntime(rid) + .WithOutput(localAssemblyCache) + .WithRuntimeFrameworkVersion(_frameworkVersion) + .WithIntermediateWorkingDirectory(intermediateWorkingDirectory) + .Execute($"--preserve-working-dir") + .Should().Pass(); + + var configuration = Environment.GetEnvironmentVariable("CONFIGURATION") ?? "Debug"; + + new PublishCommand() + .WithFramework(_tfm) + .WithWorkingDirectory(testProjectDirectory) + .WithProFileProject(profileFilter) + .WithProFileProject(profileFilter1) + .Execute() + .Should().Pass(); + + var outputDll = Path.Combine(testProjectDirectory, "bin", configuration, _tfm, "publish", $"{testAppName}.dll"); + + new TestCommand("dotnet") + .WithEnvironmentVariable("DOTNET_SHARED_PACKAGES", localAssemblyCache) + .ExecuteWithCapturedOutput(outputDll) + .Should().Pass() + .And.HaveStdOutContaining("{}"); + } } } From abdbc6f27452697ec7772b75ef29deaccb61b7f9 Mon Sep 17 00:00:00 2001 From: Daniel Plaisted Date: Tue, 7 Mar 2017 16:01:53 -0800 Subject: [PATCH 13/31] Restore package with crossgen --- build_projects/dotnet-cli-build/dotnet-cli-build.csproj | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/build_projects/dotnet-cli-build/dotnet-cli-build.csproj b/build_projects/dotnet-cli-build/dotnet-cli-build.csproj index d28da9a83..5e6cddc3c 100644 --- a/build_projects/dotnet-cli-build/dotnet-cli-build.csproj +++ b/build_projects/dotnet-cli-build/dotnet-cli-build.csproj @@ -7,6 +7,9 @@ true bin\$(Configuration) $(PackageTargetFallback);portable-net45+win8+wp8+wpa81 + + + $(CoreCLRRid) @@ -31,5 +34,9 @@ + + + + \ No newline at end of file From 53d837bfdb06292b06fb88be408befde64122f36 Mon Sep 17 00:00:00 2001 From: Daniel Plaisted Date: Tue, 7 Mar 2017 17:44:12 -0800 Subject: [PATCH 14/31] Use Stage 2 dotnet in ArgumentForwardingTests --- test/ArgumentForwardingTests/ArgumentForwardingTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ArgumentForwardingTests/ArgumentForwardingTests.csproj b/test/ArgumentForwardingTests/ArgumentForwardingTests.csproj index 4b73c9e78..a3ab58d0a 100644 --- a/test/ArgumentForwardingTests/ArgumentForwardingTests.csproj +++ b/test/ArgumentForwardingTests/ArgumentForwardingTests.csproj @@ -24,7 +24,7 @@ - + From dba212b21ba6fd1fe170b23b8fcd86fe55523d32 Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Wed, 8 Mar 2017 15:53:17 +0000 Subject: [PATCH 15/31] Update CoreSetup to beta-001689 --- build/DependencyVersions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/DependencyVersions.props b/build/DependencyVersions.props index 9e0d05d60..aedf99dc6 100644 --- a/build/DependencyVersions.props +++ b/build/DependencyVersions.props @@ -1,7 +1,7 @@ - 2.0.0-beta-001683-00 + 2.0.0-beta-001689-00 15.2.0-preview-000047-02 2.0.0-rc4-61325-08 1.1.0-alpha-20170306-2 From 45a1e9e56cc47e3973a49f164e98d41442cedebd Mon Sep 17 00:00:00 2001 From: Justin Goshi Date: Wed, 8 Mar 2017 09:10:53 -1000 Subject: [PATCH 16/31] Allow host info passed in from the command line to override machine settings (#5904) * Allow host info passed in from the command line to override machine settings * Simplify the logic * Address PR comments to keep a separate HostRid and HostOSName that are static * Rename to BuildInfo.props * Address PR comments * Fix the previous merge * Fix spacing * Address PR comments --- build.proj | 5 ++- build/BuildInfo.targets | 39 +++++++++++++++++++ build/GitCommitInfo.targets | 15 ++++--- build/HostInfo.targets | 8 ++-- build/InitRepo.props | 1 + build/InitRepo.targets | 3 +- build/Prepare.targets | 10 ++++- .../GetCurrentRuntimeInformation.cs | 4 -- .../update-dependencies.ps1 | 2 +- .../update-dependencies.sh | 2 +- dir.props | 5 ++- run-build.ps1 | 2 +- run-build.sh | 2 +- 13 files changed, 73 insertions(+), 25 deletions(-) create mode 100644 build/BuildInfo.targets diff --git a/build.proj b/build.proj index 54372ad1c..9f7894c3f 100644 --- a/build.proj +++ b/build.proj @@ -20,7 +20,7 @@ DependsOnTargets="MSBuildWorkaroundTarget; RestoreDotnetCliBuildFramework"> - @@ -35,7 +35,7 @@ Outputs="@(RestoreDotnetCliBuildFrameworkOutputs)"> - $(ExtraRestoreArgs) /p:GeneratingPropsFile=$(GeneratingPropsFile) + $(ExtraRestoreArgs) /p:GeneratePropsFile=$(GeneratePropsFile) $(ExtraRestoreArgs) --disable-parallel @@ -47,6 +47,7 @@ + diff --git a/build/BuildInfo.targets b/build/BuildInfo.targets new file mode 100644 index 000000000..6df905670 --- /dev/null +++ b/build/BuildInfo.targets @@ -0,0 +1,39 @@ + + + + + + + + + + $(HostRid) + x64 + $(HostOSName) + + +<Project ToolsVersion="15.0"> + <PropertyGroup> + <Rid>$(Rid)</Rid> + <Architecture>$(Architecture)</Architecture> + <OSName>$(OSName)</OSName> + </PropertyGroup> +</Project> + + + + $([System.IO.File]::ReadAllText($(BuildInfoProps))) + + + false + true + + + + + diff --git a/build/GitCommitInfo.targets b/build/GitCommitInfo.targets index 4a384c016..4addb6c8a 100644 --- a/build/GitCommitInfo.targets +++ b/build/GitCommitInfo.targets @@ -22,10 +22,6 @@ %(GitInfoCommitHashLines.Identity) - true - <Project ToolsVersion="15.0"> <PropertyGroup> @@ -34,12 +30,19 @@ </PropertyGroup> </Project> + + + $([System.IO.File]::ReadAllText($(GitCommitInfoProps))) + + + false + true - diff --git a/build/HostInfo.targets b/build/HostInfo.targets index 095ac2c8d..50331f196 100644 --- a/build/HostInfo.targets +++ b/build/HostInfo.targets @@ -2,10 +2,9 @@ - + - @@ -13,9 +12,8 @@ <Project ToolsVersion="15.0"> <PropertyGroup> - <Rid>$(HostRid)</Rid> - <Architecture>$(HostArchitecture)</Architecture> - <OSName>$(HostOSName)</OSName> + <HostRid>$(HostRid)</HostRid> + <HostOSName>$(HostOSName)</HostOSName> </PropertyGroup> </Project> diff --git a/build/InitRepo.props b/build/InitRepo.props index 1ba0ff119..39a2b5b99 100644 --- a/build/InitRepo.props +++ b/build/InitRepo.props @@ -3,5 +3,6 @@ $(RepoRoot)/artifacts/obj $(GeneratedPropsDir)/GitCommitInfo.props $(GeneratedPropsDir)/HostInfo.props + $(GeneratedPropsDir)/BuildInfo.props diff --git a/build/InitRepo.targets b/build/InitRepo.targets index 4912d749b..be227551e 100644 --- a/build/InitRepo.targets +++ b/build/InitRepo.targets @@ -3,7 +3,8 @@ DependsOnTargets="BuildDotnetCliBuildFramework; EnsureGeneratedPropsDirectory; WriteGitCommitInfoProps; - WriteHostInfoProps"/> + WriteHostInfoProps; + WriteBuildInfoProps"/> + + + + + + + diff --git a/build_projects/dotnet-cli-build/GetCurrentRuntimeInformation.cs b/build_projects/dotnet-cli-build/GetCurrentRuntimeInformation.cs index 9f6f5f39b..352a225cf 100644 --- a/build_projects/dotnet-cli-build/GetCurrentRuntimeInformation.cs +++ b/build_projects/dotnet-cli-build/GetCurrentRuntimeInformation.cs @@ -13,16 +13,12 @@ namespace Microsoft.DotNet.Cli.Build [Output] public string Rid { get; set; } - [Output] - public string Architecture { get; set; } - [Output] public string OSName { get; set; } public override bool Execute() { Rid = RuntimeEnvironment.GetRuntimeIdentifier(); - Architecture = RuntimeEnvironment.RuntimeArchitecture; OSName = GetOSShortName(); return true; diff --git a/build_projects/update-dependencies/update-dependencies.ps1 b/build_projects/update-dependencies/update-dependencies.ps1 index 4b1c0ce19..5a9760ecb 100644 --- a/build_projects/update-dependencies/update-dependencies.ps1 +++ b/build_projects/update-dependencies/update-dependencies.ps1 @@ -44,7 +44,7 @@ $env:PATH = "$env:DOTNET_INSTALL_DIR;$env:PATH" # Generate some props files that are imported by update-dependencies Write-Host "Generating property files..." -dotnet msbuild $RepoRoot\build.proj /p:Architecture=$Architecture /p:GeneratingPropsFile=true /t:WriteDynamicPropsToStaticPropsFiles +dotnet msbuild $RepoRoot\build.proj /p:Architecture=$Architecture /p:GeneratePropsFile=true /t:WriteDynamicPropsToStaticPropsFiles if($LASTEXITCODE -ne 0) { throw "Failed to generate intermidates" } # Restore the app diff --git a/build_projects/update-dependencies/update-dependencies.sh b/build_projects/update-dependencies/update-dependencies.sh index 66faccf9a..ccfb06831 100755 --- a/build_projects/update-dependencies/update-dependencies.sh +++ b/build_projects/update-dependencies/update-dependencies.sh @@ -44,7 +44,7 @@ export PATH=$DOTNET_INSTALL_DIR:$PATH # Generate some props files that are imported by update-dependencies echo "Generating property files..." -dotnet msbuild "$REPO_ROOT/build.proj" /p:Architecture=x64 /p:GeneratingPropsFile=true /t:WriteDynamicPropsToStaticPropsFiles +dotnet msbuild "$REPO_ROOT/build.proj" /p:Architecture=x64 /p:GeneratePropsFile=true /t:WriteDynamicPropsToStaticPropsFiles echo "Resotring $PROJECT_PATH..." dotnet restore "$PROJECT_PATH" diff --git a/dir.props b/dir.props index 8d31ff867..3e2360e86 100644 --- a/dir.props +++ b/dir.props @@ -14,8 +14,9 @@ - - + + + diff --git a/run-build.ps1 b/run-build.ps1 index 52add82f3..67ab3cd06 100644 --- a/run-build.ps1 +++ b/run-build.ps1 @@ -114,7 +114,7 @@ if ($NoBuild) } else { - dotnet msbuild build.proj /p:Architecture=$Architecture /p:GeneratingPropsFile=true /t:WriteDynamicPropsToStaticPropsFiles + dotnet msbuild build.proj /p:Architecture=$Architecture /p:GeneratePropsFile=true /t:WriteDynamicPropsToStaticPropsFiles dotnet msbuild build.proj /m /v:diag /fl /flp:v=diag /p:Architecture=$Architecture $ExtraParameters if($LASTEXITCODE -ne 0) { throw "Failed to build" } } diff --git a/run-build.sh b/run-build.sh index 7a2939c7d..300658164 100755 --- a/run-build.sh +++ b/run-build.sh @@ -179,7 +179,7 @@ export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 echo "${args[@]}" if [ $BUILD -eq 1 ]; then - dotnet msbuild build.proj /p:Architecture=$ARCHITECTURE /p:GeneratingPropsFile=true /t:WriteDynamicPropsToStaticPropsFiles + dotnet msbuild build.proj /p:Architecture=$ARCHITECTURE /p:GeneratePropsFile=true /t:WriteDynamicPropsToStaticPropsFiles dotnet msbuild build.proj /m /v:diag /fl /flp:v=diag /p:Architecture=$ARCHITECTURE "${args[@]}" else echo "Not building due to --nobuild" From dcb8881c02a6b39c30423e32a83cd8ca909ef9a4 Mon Sep 17 00:00:00 2001 From: Justin Goshi Date: Wed, 8 Mar 2017 11:33:27 -0800 Subject: [PATCH 17/31] Re-enable solution building tests --- .../GivenThatIWantToMigrateSolutions.cs | 18 ++++++++---------- test/dotnet-sln-add.Tests/GivenDotnetSlnAdd.cs | 9 ++++----- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/test/dotnet-migrate.Tests/GivenThatIWantToMigrateSolutions.cs b/test/dotnet-migrate.Tests/GivenThatIWantToMigrateSolutions.cs index 7cd2205c7..30387fecc 100644 --- a/test/dotnet-migrate.Tests/GivenThatIWantToMigrateSolutions.cs +++ b/test/dotnet-migrate.Tests/GivenThatIWantToMigrateSolutions.cs @@ -229,11 +229,10 @@ namespace Microsoft.DotNet.Migration.Tests .Execute($"restore \"{solutionRelPath}\"") .Should().Pass(); - //ISSUE: https://github.com/dotnet/cli/issues/5205 - //new DotnetCommand() - // .WithWorkingDirectory(projectDirectory) - // .Execute($"build \"{solutionRelPath}\"") - // .Should().Pass(); + new DotnetCommand() + .WithWorkingDirectory(projectDirectory) + .Execute($"build \"{solutionRelPath}\"") + .Should().Pass(); } private void MigrateAndBuild(string groupName, string projectName, [CallerMemberName] string callingMethod = "", string identifier = "") @@ -257,11 +256,10 @@ namespace Microsoft.DotNet.Migration.Tests .Execute($"restore \"{solutionRelPath}\"") .Should().Pass(); - //ISSUE: https://github.com/dotnet/cli/issues/5205 - //new DotnetCommand() - // .WithWorkingDirectory(projectDirectory) - // .Execute($"build \"{solutionRelPath}\"") - // .Should().Pass(); + new DotnetCommand() + .WithWorkingDirectory(projectDirectory) + .Execute($"build \"{solutionRelPath}\"") + .Should().Pass(); SlnFile slnFile = SlnFile.Read(Path.Combine(projectDirectory.FullName, solutionRelPath)); diff --git a/test/dotnet-sln-add.Tests/GivenDotnetSlnAdd.cs b/test/dotnet-sln-add.Tests/GivenDotnetSlnAdd.cs index 78a11d09d..cd7b9c38a 100644 --- a/test/dotnet-sln-add.Tests/GivenDotnetSlnAdd.cs +++ b/test/dotnet-sln-add.Tests/GivenDotnetSlnAdd.cs @@ -465,11 +465,10 @@ EndGlobal cmd.StdErr.Should().BeEmpty(); } - //ISSUE: https://github.com/dotnet/cli/issues/5205 - //[Theory] - //[InlineData("TestAppWithSlnAndCsprojFiles")] - //[InlineData("TestAppWithSlnAndCsprojProjectGuidFiles")] - //[InlineData("TestAppWithEmptySln")] + [Theory] + [InlineData("TestAppWithSlnAndCsprojFiles")] + [InlineData("TestAppWithSlnAndCsprojProjectGuidFiles")] + [InlineData("TestAppWithEmptySln")] public void WhenValidProjectIsPassedTheSlnBuilds(string testAsset) { var projectDirectory = TestAssets From e246be9f6449cb35067709aa2cb8cc42e4566315 Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Wed, 8 Mar 2017 20:31:52 +0000 Subject: [PATCH 18/31] Update CoreSetup to beta-001697 --- build/DependencyVersions.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/DependencyVersions.props b/build/DependencyVersions.props index aedf99dc6..3ba773697 100644 --- a/build/DependencyVersions.props +++ b/build/DependencyVersions.props @@ -1,7 +1,7 @@ - 2.0.0-beta-001689-00 + 2.0.0-beta-001697-00 15.2.0-preview-000047-02 2.0.0-rc4-61325-08 1.1.0-alpha-20170306-2 From 7e0010c57f710e3d1d118182af488c50f0c9e5df Mon Sep 17 00:00:00 2001 From: Rama Krishnan Raghupathy Date: Wed, 8 Mar 2017 15:12:50 -0800 Subject: [PATCH 19/31] display exception as error --- src/dotnet/commands/dotnet-cache/Program.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/dotnet/commands/dotnet-cache/Program.cs b/src/dotnet/commands/dotnet-cache/Program.cs index 138c584b5..4bd7ee8db 100644 --- a/src/dotnet/commands/dotnet-cache/Program.cs +++ b/src/dotnet/commands/dotnet-cache/Program.cs @@ -73,16 +73,16 @@ namespace Microsoft.DotNet.Tools.Cache if (!projectArguments.HasValue()) { - throw new InvalidOperationException(LocalizableStrings.SpecifyEntries); + throw new InvalidOperationException(LocalizableStrings.SpecifyEntries).DisplayAsError(); } msbuildArgs.Add("/t:ComposeCache"); msbuildArgs.Add(projectArguments.Values[0]); - var _additionalProjectsargs = projectArguments.Values.Skip(1); + var additionalProjectsargs = projectArguments.Values.Skip(1); - if (_additionalProjectsargs.Count() > 0) + if (additionalProjectsargs.Count() > 0) { - msbuildArgs.Add($"/p:AdditionalProjects={string.Join("%3B", _additionalProjectsargs)}"); + msbuildArgs.Add($"/p:AdditionalProjects={string.Join("%3B", additionalProjectsargs)}"); } if (!string.IsNullOrEmpty(frameworkOption.Value())) From 113924eebd6e0612156caf85ca025973882b26e5 Mon Sep 17 00:00:00 2001 From: Justin Goshi Date: Wed, 8 Mar 2017 13:37:06 -1000 Subject: [PATCH 20/31] Add support to build linux portable (#5938) * Add support to build with the linux portable * Pass targets to run for the linux portable * Address PR comments * Update the bootstrapper version * Address the PR comments for improving the help text * Fixing permissions --- build/BuildDefaults.props | 7 ++++++- run-build.ps1 | 4 ++-- run-build.sh | 20 ++++++++++++++----- .../CrossGen.Dependencies.csproj | 2 +- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/build/BuildDefaults.props b/build/BuildDefaults.props index e04468c6f..bbf51f97b 100644 --- a/build/BuildDefaults.props +++ b/build/BuildDefaults.props @@ -2,7 +2,12 @@ Prepare;Compile;Test;Package;Publish Debug - true + true + true + false true false diff --git a/run-build.ps1 b/run-build.ps1 index 67ab3cd06..2cbf0db1f 100644 --- a/run-build.ps1 +++ b/run-build.ps1 @@ -95,8 +95,8 @@ if ($LastExitCode -ne 0) # install the post-PJnistic stage0 $dotnetInstallPath = Join-Path $toolsLocalPath "dotnet-install.ps1" -Write-Host "$dotnetInstallPath -Channel ""master"" -InstallDir $env:DOTNET_INSTALL_DIR -Architecture ""$Architecture""" -Invoke-Expression "$dotnetInstallPath -Channel ""master"" -InstallDir $env:DOTNET_INSTALL_DIR -Architecture ""$Architecture""" +Write-Host "$dotnetInstallPath -Channel ""master"" -Version ""2.0.0-alpha-005165"" -InstallDir $env:DOTNET_INSTALL_DIR -Architecture ""$Architecture""" +Invoke-Expression "$dotnetInstallPath -Channel ""master"" -Version ""2.0.0-alpha-005165"" -InstallDir $env:DOTNET_INSTALL_DIR -Architecture ""$Architecture""" if ($LastExitCode -ne 0) { Write-Output "The .NET CLI installation failed with exit code $LastExitCode" diff --git a/run-build.sh b/run-build.sh index 300658164..7da3b5570 100755 --- a/run-build.sh +++ b/run-build.sh @@ -55,6 +55,9 @@ source "$REPOROOT/scripts/common/_prettyprint.sh" BUILD=1 +LINUX_PORTABLE_INSTALL_ARGS= +CUSTOM_BUILD_ARGS= + # Set nuget package cache under the repo export NUGET_PACKAGES="$REPOROOT/.nuget/packages" @@ -93,6 +96,12 @@ while [[ $# > 0 ]]; do args=( "${args[@]/$2}" ) shift ;; + --linux-portable) + LINUX_PORTABLE_INSTALL_ARGS="--linux-portable" + # Until we get test support for 2.0 we need to pass in the targets without test. + CUSTOM_BUILD_ARGS="/p:Rid=\"linux-x64\" /p:OSName=\"linux\" /p:CLITargets=\"Prepare;Compile;Package;Publish\"" + args=( "${args[@]/$1}" ) + ;; --help) echo "Usage: $0 [--configuration ] [--targets ] [--skip-prereqs] [--nopackage] [--docker ] [--help]" echo "" @@ -102,6 +111,7 @@ while [[ $# > 0 ]]; do echo " --nopackage Skip packaging targets" echo " --nobuild Skip building, showing the command that would be used to build" echo " --docker Build in Docker using the Dockerfile located in scripts/docker/IMAGENAME" + echo " --linux-portable Builds the Linux portable .NET Tools instead of a distro-specific version." echo " --help Display this help message" exit 0 ;; @@ -155,8 +165,8 @@ if [ $? != 0 ]; then fi # now execute the script -echo "installing CLI: $dotnetInstallPath --channel \"master\" --install-dir $DOTNET_INSTALL_DIR --architecture \"$ARCHITECTURE\"" -$dotnetInstallPath --channel "master" --install-dir $DOTNET_INSTALL_DIR --architecture "$ARCHITECTURE" +echo "installing CLI: $dotnetInstallPath --channel \"master\" --version \"2.0.0-alpha-005165\" --install-dir $DOTNET_INSTALL_DIR --architecture \"$ARCHITECTURE\" $LINUX_PORTABLE_INSTALL_ARGS" +$dotnetInstallPath --channel "master" --version "2.0.0-alpha-005165" --install-dir $DOTNET_INSTALL_DIR --architecture "$ARCHITECTURE" $LINUX_PORTABLE_INSTALL_ARGS if [ $? != 0 ]; then echo "run-build: Error: Boot-strapping post-PJ stage0 with exit code $?." >&2 exit $? @@ -179,9 +189,9 @@ export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 echo "${args[@]}" if [ $BUILD -eq 1 ]; then - dotnet msbuild build.proj /p:Architecture=$ARCHITECTURE /p:GeneratePropsFile=true /t:WriteDynamicPropsToStaticPropsFiles - dotnet msbuild build.proj /m /v:diag /fl /flp:v=diag /p:Architecture=$ARCHITECTURE "${args[@]}" + dotnet msbuild build.proj /p:Architecture=$ARCHITECTURE $CUSTOM_BUILD_ARGS /p:GeneratePropsFile=true /t:WriteDynamicPropsToStaticPropsFiles + dotnet msbuild build.proj /m /v:diag /fl /flp:v=diag /p:Architecture=$ARCHITECTURE $CUSTOM_BUILD_ARGS "${args[@]}" else echo "Not building due to --nobuild" - echo "Command that would be run is: 'dotnet msbuild build.proj /m /p:Architecture=$ARCHITECTURE ${args[@]}'" + echo "Command that would be run is: 'dotnet msbuild build.proj /m /p:Architecture=$ARCHITECTURE $CUSTOM_BUILD_ARGS ${args[@]}'" fi diff --git a/tools/CrossGen.Dependencies/CrossGen.Dependencies.csproj b/tools/CrossGen.Dependencies/CrossGen.Dependencies.csproj index 8ae84a8ff..fc4d473dd 100644 --- a/tools/CrossGen.Dependencies/CrossGen.Dependencies.csproj +++ b/tools/CrossGen.Dependencies/CrossGen.Dependencies.csproj @@ -3,7 +3,7 @@ netcoreapp2.0 - win7-x64;win7-x86;osx.10.11-x64;ubuntu.14.04-x64;ubuntu.16.04-x64;centos.7-x64;rhel.7.2-x64;debian.8-x64;osx.10.10-x64;rhel.7-x64 + linux-x64;win7-x64;win7-x86;osx.10.11-x64;ubuntu.14.04-x64;ubuntu.16.04-x64;centos.7-x64;rhel.7.2-x64;debian.8-x64;osx.10.10-x64;rhel.7-x64 From 5cc689d07bb20a29e4845f75e2eef2304ec32e86 Mon Sep 17 00:00:00 2001 From: Justin Goshi Date: Wed, 8 Mar 2017 14:14:43 -1000 Subject: [PATCH 21/31] Add CI support for the Linux Portable build (#5872) * WIP attempt to use the Linux RID * Pass the --linux-portable parameter --- netci.groovy | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/netci.groovy b/netci.groovy index b2e30786e..12dda1e25 100644 --- a/netci.groovy +++ b/netci.groovy @@ -9,7 +9,7 @@ def project = GithubProject def branch = GithubBranchName def isPR = true -def platformList = ['Debian8.2:x64:Debug', 'Ubuntu:x64:Release', 'Ubuntu16.04:x64:Debug', 'OSX:x64:Release', 'Windows_NT:x64:Release', 'Windows_NT:x86:Debug', 'RHEL7.2:x64:Release', 'CentOS7.1:x64:Debug'] +def platformList = ['Linux:x64:Release', 'Debian8.2:x64:Debug', 'Ubuntu:x64:Release', 'Ubuntu16.04:x64:Debug', 'OSX:x64:Release', 'Windows_NT:x64:Release', 'Windows_NT:x86:Debug', 'RHEL7.2:x64:Release', 'CentOS7.1:x64:Debug'] def static getBuildJobName(def configuration, def os, def architecture) { return configuration.toLowerCase() + '_' + os.toLowerCase() + '_' + architecture.toLowerCase() @@ -34,6 +34,10 @@ platformList.each { platform -> else if (os == 'Ubuntu') { buildCommand = "./build.sh --skip-prereqs --configuration ${configuration} --docker ubuntu.14.04 --targets Default" } + else if (os == 'Linux') { + os = 'Ubuntu16.04'; + buildCommand = "./build.sh --linux-portable --skip-prereqs --configuration ${configuration} --targets Default + } else { // Jenkins non-Ubuntu CI machines don't have docker buildCommand = "./build.sh --skip-prereqs --configuration ${configuration} --targets Default" From 9cf9d1a2b5658a1b0787637511fadddafd3be776 Mon Sep 17 00:00:00 2001 From: Justin Goshi Date: Wed, 8 Mar 2017 17:30:47 -0800 Subject: [PATCH 22/31] Fix netci.groovy --- netci.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netci.groovy b/netci.groovy index 12dda1e25..2762acf60 100644 --- a/netci.groovy +++ b/netci.groovy @@ -36,7 +36,7 @@ platformList.each { platform -> } else if (os == 'Linux') { os = 'Ubuntu16.04'; - buildCommand = "./build.sh --linux-portable --skip-prereqs --configuration ${configuration} --targets Default + buildCommand = "./build.sh --linux-portable --skip-prereqs --configuration ${configuration} --targets Default" } else { // Jenkins non-Ubuntu CI machines don't have docker From 132b175395a003f1a7deeda8d7c636460fb90519 Mon Sep 17 00:00:00 2001 From: Justin Goshi Date: Thu, 9 Mar 2017 07:08:49 -1000 Subject: [PATCH 23/31] Add new badge for linux_x64 (#5968) --- build_projects/dotnet-cli-build/CheckIfAllBuildsHavePublished.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/build_projects/dotnet-cli-build/CheckIfAllBuildsHavePublished.cs b/build_projects/dotnet-cli-build/CheckIfAllBuildsHavePublished.cs index db3cbd396..8be9f8f4d 100644 --- a/build_projects/dotnet-cli-build/CheckIfAllBuildsHavePublished.cs +++ b/build_projects/dotnet-cli-build/CheckIfAllBuildsHavePublished.cs @@ -57,6 +57,7 @@ namespace Microsoft.DotNet.Cli.Build { "osx_x64", false }, { "debian_x64", false }, { "centos_x64", false }, + { "linux_x64", false }, }; if (!badges.ContainsKey(VersionBadgeMoniker)) From 3eed6921855a5d32a38d3769b8bd1b18c6ac855a Mon Sep 17 00:00:00 2001 From: Justin Goshi Date: Thu, 9 Mar 2017 09:02:14 -1000 Subject: [PATCH 24/31] Change the Build name for the Linux portable (#5980) * Change the Build name for the Linux portable * Update variable names --- netci.groovy | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/netci.groovy b/netci.groovy index 2762acf60..afe06321a 100644 --- a/netci.groovy +++ b/netci.groovy @@ -19,6 +19,7 @@ def static getBuildJobName(def configuration, def os, def architecture) { platformList.each { platform -> // Calculate names def (os, architecture, configuration) = platform.tokenize(':') + def osUsedForMachineAffinity = os; // Calculate job name def jobName = getBuildJobName(configuration, os, architecture) @@ -34,10 +35,10 @@ platformList.each { platform -> else if (os == 'Ubuntu') { buildCommand = "./build.sh --skip-prereqs --configuration ${configuration} --docker ubuntu.14.04 --targets Default" } - else if (os == 'Linux') { - os = 'Ubuntu16.04'; - buildCommand = "./build.sh --linux-portable --skip-prereqs --configuration ${configuration} --targets Default" - } + else if (os == 'Linux') { + osUsedForMachineAffinity = 'Ubuntu16.04'; + buildCommand = "./build.sh --linux-portable --skip-prereqs --configuration ${configuration} --targets Default" + } else { // Jenkins non-Ubuntu CI machines don't have docker buildCommand = "./build.sh --skip-prereqs --configuration ${configuration} --targets Default" @@ -57,7 +58,7 @@ platformList.each { platform -> } } - Utilities.setMachineAffinity(newJob, os, 'latest-or-auto') + Utilities.setMachineAffinity(newJob, osUsedForMachineAffinity, 'latest-or-auto') Utilities.standardJobSetup(newJob, project, isPR, "*/${branch}") Utilities.addMSTestResults(newJob, '**/*.trx') Utilities.addGithubPRTriggerForBranch(newJob, branch, "${os} ${architecture} ${configuration} Build") From 663df18046807069706b9f2f032a6e98220f168f Mon Sep 17 00:00:00 2001 From: Justin Goshi Date: Thu, 9 Mar 2017 09:29:07 -1000 Subject: [PATCH 25/31] Unpin stage0 version now that we build the linux portable (#5981) --- run-build.ps1 | 4 ++-- run-build.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/run-build.ps1 b/run-build.ps1 index 2cbf0db1f..67ab3cd06 100644 --- a/run-build.ps1 +++ b/run-build.ps1 @@ -95,8 +95,8 @@ if ($LastExitCode -ne 0) # install the post-PJnistic stage0 $dotnetInstallPath = Join-Path $toolsLocalPath "dotnet-install.ps1" -Write-Host "$dotnetInstallPath -Channel ""master"" -Version ""2.0.0-alpha-005165"" -InstallDir $env:DOTNET_INSTALL_DIR -Architecture ""$Architecture""" -Invoke-Expression "$dotnetInstallPath -Channel ""master"" -Version ""2.0.0-alpha-005165"" -InstallDir $env:DOTNET_INSTALL_DIR -Architecture ""$Architecture""" +Write-Host "$dotnetInstallPath -Channel ""master"" -InstallDir $env:DOTNET_INSTALL_DIR -Architecture ""$Architecture""" +Invoke-Expression "$dotnetInstallPath -Channel ""master"" -InstallDir $env:DOTNET_INSTALL_DIR -Architecture ""$Architecture""" if ($LastExitCode -ne 0) { Write-Output "The .NET CLI installation failed with exit code $LastExitCode" diff --git a/run-build.sh b/run-build.sh index 7da3b5570..f96f9d0c0 100755 --- a/run-build.sh +++ b/run-build.sh @@ -165,8 +165,8 @@ if [ $? != 0 ]; then fi # now execute the script -echo "installing CLI: $dotnetInstallPath --channel \"master\" --version \"2.0.0-alpha-005165\" --install-dir $DOTNET_INSTALL_DIR --architecture \"$ARCHITECTURE\" $LINUX_PORTABLE_INSTALL_ARGS" -$dotnetInstallPath --channel "master" --version "2.0.0-alpha-005165" --install-dir $DOTNET_INSTALL_DIR --architecture "$ARCHITECTURE" $LINUX_PORTABLE_INSTALL_ARGS +echo "installing CLI: $dotnetInstallPath --channel \"master\" --install-dir $DOTNET_INSTALL_DIR --architecture \"$ARCHITECTURE\" $LINUX_PORTABLE_INSTALL_ARGS" +$dotnetInstallPath --channel "master" --install-dir $DOTNET_INSTALL_DIR --architecture "$ARCHITECTURE" $LINUX_PORTABLE_INSTALL_ARGS if [ $? != 0 ]; then echo "run-build: Error: Boot-strapping post-PJ stage0 with exit code $?." >&2 exit $? From 3a58cac3519d3907bfd548f4e7f590c9cc454d7a Mon Sep 17 00:00:00 2001 From: Justin Goshi Date: Thu, 9 Mar 2017 10:06:22 -1000 Subject: [PATCH 26/31] Linux portable builds currently do not run tests (#5983) --- netci.groovy | 6 +++++- .../hack-get-ci-to-pass-testResults.xml | 17 ----------------- 2 files changed, 5 insertions(+), 18 deletions(-) delete mode 100644 test/HackUntilWeGetXUnitXmlLogger/hack-get-ci-to-pass-testResults.xml diff --git a/netci.groovy b/netci.groovy index afe06321a..b3b59263d 100644 --- a/netci.groovy +++ b/netci.groovy @@ -60,7 +60,11 @@ platformList.each { platform -> Utilities.setMachineAffinity(newJob, osUsedForMachineAffinity, 'latest-or-auto') Utilities.standardJobSetup(newJob, project, isPR, "*/${branch}") - Utilities.addMSTestResults(newJob, '**/*.trx') + // Remove this check once tests work for 2.0. Until that time Linux portable tests will fail so we + // don't run the tests and there won't be any .trx file. + if (os != 'Linux') { + Utilities.addMSTestResults(newJob, '**/*.trx') + } Utilities.addGithubPRTriggerForBranch(newJob, branch, "${os} ${architecture} ${configuration} Build") } diff --git a/test/HackUntilWeGetXUnitXmlLogger/hack-get-ci-to-pass-testResults.xml b/test/HackUntilWeGetXUnitXmlLogger/hack-get-ci-to-pass-testResults.xml deleted file mode 100644 index 87016e450..000000000 --- a/test/HackUntilWeGetXUnitXmlLogger/hack-get-ci-to-pass-testResults.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file From f6f43f6aa26b005c3ba32dec141f05f78fe92dd6 Mon Sep 17 00:00:00 2001 From: Piotr Puszkiewicz Date: Thu, 9 Mar 2017 13:31:04 -0800 Subject: [PATCH 27/31] Find dotnet under tests from the dotnet executing the test --- .../Commands/DotnetCommand.cs | 3 +- .../DotnetUnderTest.cs | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 test/Microsoft.DotNet.Tools.Tests.Utilities/DotnetUnderTest.cs diff --git a/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/DotnetCommand.cs b/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/DotnetCommand.cs index 98d4d0187..48dc47926 100644 --- a/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/DotnetCommand.cs +++ b/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/DotnetCommand.cs @@ -1,7 +1,6 @@ // 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 Microsoft.DotNet.Cli.Utils; namespace Microsoft.DotNet.Tools.Test.Utilities @@ -9,7 +8,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities public sealed class DotnetCommand : TestCommand { public DotnetCommand() - : base("dotnet") + : base(DotnetUnderTest.FullName) { } diff --git a/test/Microsoft.DotNet.Tools.Tests.Utilities/DotnetUnderTest.cs b/test/Microsoft.DotNet.Tools.Tests.Utilities/DotnetUnderTest.cs new file mode 100644 index 000000000..bd00e8f83 --- /dev/null +++ b/test/Microsoft.DotNet.Tools.Tests.Utilities/DotnetUnderTest.cs @@ -0,0 +1,28 @@ +// 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 Microsoft.DotNet.Cli.Utils; + +namespace Microsoft.DotNet.Tools.Test.Utilities +{ + public static class DotnetUnderTest + { + static string _pathToDotnetUnderTest; + + public static string FullName + { + get + { + if (_pathToDotnetUnderTest == null) + { + _pathToDotnetUnderTest = new Muxer().MuxerPath; + } + + Console.WriteLine($"Executing tests against {_pathToDotnetUnderTest}"); + + return _pathToDotnetUnderTest; + } + } + } +} From b7ce0293a1815b63e26c9dac4e0639b946c6becc Mon Sep 17 00:00:00 2001 From: Piotr Puszkiewicz Date: Thu, 9 Mar 2017 13:37:17 -0800 Subject: [PATCH 28/31] Remove duplicate diagnostics --- .../Microsoft.DotNet.Tools.Tests.Utilities/DotnetUnderTest.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/Microsoft.DotNet.Tools.Tests.Utilities/DotnetUnderTest.cs b/test/Microsoft.DotNet.Tools.Tests.Utilities/DotnetUnderTest.cs index bd00e8f83..865612e4f 100644 --- a/test/Microsoft.DotNet.Tools.Tests.Utilities/DotnetUnderTest.cs +++ b/test/Microsoft.DotNet.Tools.Tests.Utilities/DotnetUnderTest.cs @@ -18,9 +18,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities { _pathToDotnetUnderTest = new Muxer().MuxerPath; } - - Console.WriteLine($"Executing tests against {_pathToDotnetUnderTest}"); - + return _pathToDotnetUnderTest; } } From c35dbd9563d0bb9b3c715db67e6d56f48dab85cd Mon Sep 17 00:00:00 2001 From: Justin Goshi Date: Thu, 9 Mar 2017 12:17:18 -1000 Subject: [PATCH 29/31] Migration of xproj with name different from folder leaves ref to old project in solution (#5958) * WIP trying to remove unused xproj files * Use relative path * Add a test * Fix a few test failures * Fix path issue * Address PR Comments --- .../FolderHasDifferentName.sln | 22 +++++++ .../FolderHasDifferentName.xproj | 18 ++++++ .../Program.cs | 16 +++++ .../project.json | 26 ++++++++ .../commands/dotnet-migrate/MigrateCommand.cs | 62 ++++++++++--------- .../GivenThatIWantToMigrateSolutions.cs | 19 ++++++ 6 files changed, 135 insertions(+), 28 deletions(-) create mode 100644 TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/FolderHasDifferentName.sln create mode 100644 TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/FolderHasDifferentName.xproj create mode 100644 TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/Program.cs create mode 100644 TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/project.json diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/FolderHasDifferentName.sln b/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/FolderHasDifferentName.sln new file mode 100644 index 000000000..5fe171b9d --- /dev/null +++ b/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/FolderHasDifferentName.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "FolderHasDifferentName", "FolderHasDifferentName.xproj", "{0138CB8F-4AA9-4029-A21E-C07C30F425BA}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0138CB8F-4AA9-4029-A21E-C07C30F425BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0138CB8F-4AA9-4029-A21E-C07C30F425BA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0138CB8F-4AA9-4029-A21E-C07C30F425BA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0138CB8F-4AA9-4029-A21E-C07C30F425BA}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/FolderHasDifferentName.xproj b/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/FolderHasDifferentName.xproj new file mode 100644 index 000000000..d18702195 --- /dev/null +++ b/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/FolderHasDifferentName.xproj @@ -0,0 +1,18 @@ + + + + 14.0.23107 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + 0138cb8f-4aa9-4029-a21e-c07c30f425ba + TestAppWithContents + ..\..\..\artifacts\obj\$(MSBuildProjectName) + ..\..\..\artifacts\ + + + 2.0 + + + diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/Program.cs b/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/Program.cs new file mode 100644 index 000000000..f6b060a91 --- /dev/null +++ b/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/Program.cs @@ -0,0 +1,16 @@ +// 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 TestApp +{ + public class Program + { + public static int Main(string[] args) + { + Console.WriteLine("Hello World"); + return 0; + } + } +} diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/project.json b/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/project.json new file mode 100644 index 000000000..166d41c2b --- /dev/null +++ b/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/project.json @@ -0,0 +1,26 @@ +{ + "version": "1.0.0-*", + "buildOptions": { + "emitEntryPoint": true, + "preserveCompilationContext": true + }, + "dependencies": { + "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": {} + } +} diff --git a/src/dotnet/commands/dotnet-migrate/MigrateCommand.cs b/src/dotnet/commands/dotnet-migrate/MigrateCommand.cs index 131a9c3c2..e49d7932a 100644 --- a/src/dotnet/commands/dotnet-migrate/MigrateCommand.cs +++ b/src/dotnet/commands/dotnet-migrate/MigrateCommand.cs @@ -131,6 +131,7 @@ namespace Microsoft.DotNet.Tools.Migrate } var csprojFilesToAdd = new HashSet(); + var xprojFilesToRemove = new HashSet(); var slnPathWithTrailingSlash = PathUtility.EnsureTrailingSlash(slnFile.BaseDirectory); foreach (var report in migrationReport.ProjectMigrationReports) @@ -140,35 +141,35 @@ namespace Microsoft.DotNet.Tools.Migrate slnPathWithTrailingSlash, reportPathWithTrailingSlash); - var xprojPath = Path.Combine(relativeReportPath, report.ProjectName + ".xproj"); - var xprojProjectsReferencedBySolution = slnFile.Projects.Where(p => p.FilePath == xprojPath); - var migratedProjectName = report.ProjectName + ".csproj"; - if (xprojProjectsReferencedBySolution.Count() == 1) - { - var slnProject = xprojProjectsReferencedBySolution.Single(); - slnProject.FilePath = Path.Combine( - Path.GetDirectoryName(slnProject.FilePath), - migratedProjectName); - slnProject.TypeGuid = ProjectTypeGuids.CSharpProjectTypeGuid; - } - else - { - var csprojPath = Path.Combine(relativeReportPath, migratedProjectName); - var solutionContainsCsprojPriorToMigration = slnFile.Projects - .Where(p => p.FilePath == csprojPath) - .Any(); + var csprojPath = Path.Combine(relativeReportPath, migratedProjectName); + var solutionContainsCsprojPriorToMigration = slnFile.Projects + .Where(p => p.FilePath == csprojPath) + .Any(); - if (!solutionContainsCsprojPriorToMigration) - { - csprojFilesToAdd.Add(Path.Combine(report.ProjectDirectory, migratedProjectName)); - } + if (!solutionContainsCsprojPriorToMigration) + { + csprojFilesToAdd.Add(Path.Combine(report.ProjectDirectory, migratedProjectName)); } foreach (var preExisting in report.PreExistingCsprojDependencies) { csprojFilesToAdd.Add(Path.Combine(report.ProjectDirectory, preExisting)); } + + var projectDirectory = new DirectoryInfo(report.ProjectDirectory); + foreach (var xprojFileName in projectDirectory.EnumerateFiles("*.xproj")) + { + var xprojPath = Path.Combine(relativeReportPath, xprojFileName.Name); + var solutionContainsXprojFileToRemove = slnFile.Projects + .Where(p => p.FilePath == xprojPath) + .Any(); + + if (solutionContainsXprojFileToRemove) + { + xprojFilesToRemove.Add(Path.Combine(report.ProjectDirectory, xprojFileName.Name)); + } + } } Version version; @@ -185,7 +186,12 @@ namespace Microsoft.DotNet.Tools.Migrate foreach (var csprojFile in csprojFilesToAdd) { - AddProject(slnFile.FullPath, csprojFile); + RunDotnetSlnCommand(slnFile.FullPath, csprojFile, "add"); + } + + foreach (var xprojFile in xprojFilesToRemove) + { + RunDotnetSlnCommand(slnFile.FullPath, xprojFile, "remove"); } } @@ -209,19 +215,19 @@ namespace Microsoft.DotNet.Tools.Migrate slnFile.RemoveEmptySolutionFolders(); } - private void AddProject(string slnPath, string csprojPath) + private void RunDotnetSlnCommand(string slnPath, string projPath, string commandName) { - List args = new List() + var args = new List() { "sln", slnPath, - "add", - csprojPath, + commandName, + projPath, }; var dotnetPath = Path.Combine(AppContext.BaseDirectory, "dotnet.dll"); - var addCommand = new ForwardingApp(dotnetPath, args); - addCommand.Execute(); + var command = new ForwardingApp(dotnetPath, args); + command.Execute(); } private void MoveProjectJsonArtifactsToBackup(MigrationReport migrationReport) diff --git a/test/dotnet-migrate.Tests/GivenThatIWantToMigrateSolutions.cs b/test/dotnet-migrate.Tests/GivenThatIWantToMigrateSolutions.cs index 30387fecc..b3c679a86 100644 --- a/test/dotnet-migrate.Tests/GivenThatIWantToMigrateSolutions.cs +++ b/test/dotnet-migrate.Tests/GivenThatIWantToMigrateSolutions.cs @@ -235,6 +235,25 @@ namespace Microsoft.DotNet.Migration.Tests .Should().Pass(); } + [Fact] + public void WhenXprojNameIsDifferentThanDirNameItGetsRemovedFromSln() + { + var projectDirectory = TestAssets + .Get("NonRestoredTestProjects", "PJAppWithXprojNameDifferentThanDirName") + .CreateInstance() + .WithSourceFiles() + .Root; + + new DotnetCommand() + .WithWorkingDirectory(projectDirectory) + .Execute($"migrate") + .Should().Pass(); + + var slnFile = SlnFile.Read(Path.Combine(projectDirectory.FullName, "FolderHasDifferentName.sln")); + slnFile.Projects.Count.Should().Be(1); + slnFile.Projects[0].FilePath.Should().Be("PJAppWithXprojNameDifferentThanDirName.csproj"); + } + private void MigrateAndBuild(string groupName, string projectName, [CallerMemberName] string callingMethod = "", string identifier = "") { var projectDirectory = TestAssets From 890676ad8711f381cdbf29f5e1a33314400a6585 Mon Sep 17 00:00:00 2001 From: Justin Goshi Date: Thu, 9 Mar 2017 13:48:29 -1000 Subject: [PATCH 30/31] Update the readme to include the linux build (#5987) * Update the readme to include the linux build * Address PR comments --- README.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 907cf9680..953fe6962 100644 --- a/README.md +++ b/README.md @@ -32,9 +32,9 @@ This project has adopted the code of conduct defined by the [Contributor Covenan Build Status ------------ -|Ubuntu 14.04 / Linux Mint 17 |Ubuntu 16.04 |Debian 8.2 |Windows x64 |Windows x86 |Mac OS X |CentOS 7.1 / Oracle Linux 7.1 |RHEL 7.2 | -|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:| -|[![][ubuntu-14.04-build-badge]][ubuntu-14.04-build]|[![][ubuntu-16.04-build-badge]][ubuntu-16.04-build]|[![][debian-8.2-build-badge]][debian-8.2-build]|[![][win-x64-build-badge]][win-x64-build]|[![][win-x86-build-badge]][win-x86-build]|[![][osx-build-badge]][osx-build]|[![][centos-build-badge]][centos-build]|[![][rhel-build-badge]][rhel-build]| +|Ubuntu 14.04 / Linux Mint 17 |Ubuntu 16.04 |Debian 8.2 |Windows x64 |Windows x86 |Mac OS X |CentOS 7.1 / Oracle Linux 7.1 |RHEL 7.2 | Linux x64 | +|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:| +|[![][ubuntu-14.04-build-badge]][ubuntu-14.04-build]|[![][ubuntu-16.04-build-badge]][ubuntu-16.04-build]|[![][debian-8.2-build-badge]][debian-8.2-build]|[![][win-x64-build-badge]][win-x64-build]|[![][win-x86-build-badge]][win-x86-build]|[![][osx-build-badge]][osx-build]|[![][centos-build-badge]][centos-build]|[![][rhel-build-badge]][rhel-build]|[![][linux-build-badge]][linux-build]| [win-x64-build-badge]: https://devdiv.visualstudio.com/_apis/public/build/definitions/0bdbc590-a062-4c3f-b0f6-9383f67865ee/5449/badge [win-x64-build]: https://devdiv.visualstudio.com/DevDiv/_build?_a=completed&definitionId=5449 @@ -60,6 +60,9 @@ Build Status [rhel-build-badge]: https://devdiv.visualstudio.com/_apis/public/build/definitions/0bdbc590-a062-4c3f-b0f6-9383f67865ee/5446/badge [rhel-build]: https://devdiv.visualstudio.com/DevDiv/_build?_a=completed&definitionId=5446 +[linux-build-badge]: https://devdiv.visualstudio.com/_apis/public/build/definitions/0bdbc590-a062-4c3f-b0f6-9383f67865ee/5603/badge +[linux-build]: https://devdiv.visualstudio.com/DevDiv/_build?_a=completed&definitionId=5603 + Installers and Binaries ----------------------- @@ -80,6 +83,7 @@ In order to download just the .NET Core runtime without the SDK, please visit ht | **Mac OS X** | [Installer][osx-installer] - [Checksum][osx-installer-checksum]
[tar.gz][osx-targz] - [Checksum][osx-targz-checksum] | | **CentOS 7.1 / Oracle Linux 7** | [tar.gz][centos-targz] - [Checksum][centos-targz-checksum] | | **RHEL 7.2** | [tar.gz][rhel-targz] - [Checksum][rhel-targz-checksum] | +| **Linux x64** | [tar.gz][linux-targz] - [Checksum][linux-targz-checksum] | *Note: Our Debian packages are put together slightly differently than the other OS specific installers. Instead of combining everything, we have separate component packages that depend on each other. If you're installing these directly from the .deb files (via dpkg or similar), then you'll need to install the [corresponding Host, Host FX Resolver, and Shared Framework packages](https://github.com/dotnet/core-setup#daily-builds) before installing the Sdk package.* @@ -119,6 +123,9 @@ In order to download just the .NET Core runtime without the SDK, please visit ht [rhel-targz]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/dotnet-dev-rhel-x64.latest.tar.gz [rhel-targz-checksum]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/master/dotnet-dev-rhel-x64.latest.tar.gz.sha +[linux-targz]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/dotnet-dev-linux-x64.latest.tar.gz +[linux-targz-checksum]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/master/dotnet-dev-linux-x64.latest.tar.gz.sha + Docker ------ From 09b6be599007ea4d791dc4b7bbfa63541e819419 Mon Sep 17 00:00:00 2001 From: Zlatko Knezevic Date: Thu, 9 Mar 2017 17:09:59 -0800 Subject: [PATCH 31/31] Cleaning up the documentation folder (#5928) * Cleaning up the documentation folder This change cleans up the documentation folder in the CLI repo. The changes are the following: * Delete old content that is invalid moving forward. * Move cli-installation-scenarios to the `specs` sub-folder. * Add a sub-folder for documentation that deals with working with the repo * Add a general sub-folder * Finally, change the README.md to reflect this. Also, this change adds a document that covers CLI UX guidelines for authors of new commands. * Firt round of PR feedback changes --- Documentation/README.md | 25 ++- ...essing-incremental-compilation-warnings.md | 17 -- Documentation/cli-prerequisites.md | 4 - Documentation/dotnet-test-protocol.md | 44 ----- Documentation/general/cli-ux-guidelines.md | 157 ++++++++++++++++++ Documentation/general/intro-to-cli.md | 62 +++++++ .../images/DotnetTestDiscoverTests.png | Bin 14578 -> 0 bytes .../images/DotnetTestExecuteTests.png | Bin 20288 -> 0 bytes Documentation/intro-to-cli.md | 100 ----------- Documentation/known-issues.md | 4 - .../{ => project-docs}/developer-guide.md | 0 .../{ => project-docs}/issue-filing-guide.md | 0 .../{ => specs}/cli-installation-scenarios.md | 31 ++-- Documentation/supported-os-matrix.md | 4 - README.md | 20 +-- 15 files changed, 267 insertions(+), 201 deletions(-) delete mode 100644 Documentation/addressing-incremental-compilation-warnings.md delete mode 100644 Documentation/cli-prerequisites.md delete mode 100644 Documentation/dotnet-test-protocol.md create mode 100644 Documentation/general/cli-ux-guidelines.md create mode 100644 Documentation/general/intro-to-cli.md delete mode 100644 Documentation/images/DotnetTestDiscoverTests.png delete mode 100644 Documentation/images/DotnetTestExecuteTests.png delete mode 100644 Documentation/intro-to-cli.md delete mode 100644 Documentation/known-issues.md rename Documentation/{ => project-docs}/developer-guide.md (100%) rename Documentation/{ => project-docs}/issue-filing-guide.md (100%) rename Documentation/{ => specs}/cli-installation-scenarios.md (90%) delete mode 100644 Documentation/supported-os-matrix.md diff --git a/Documentation/README.md b/Documentation/README.md index 8a8388c43..3a88a00f6 100644 --- a/Documentation/README.md +++ b/Documentation/README.md @@ -1,6 +1,27 @@ Documents Index =============== -- [Developer Guide](developer-guide.md) +## Overview and general information + - [Intro to .NET Core CLI](intro-to-cli.md) -- [Addressing Incremental Compilation Warnings](addressing-incremental-compilation-warnings.md) +- [CLI UX Guidelines](cli-ux-guidelines.md) +- [.NET Core native pre-requisities document](https://github.com/dotnet/core/blob/master/Documentation/prereqs.md) +- [Roadmap and OS support](https://github.com/dotnet/core/blob/master/roadmap.md) +- [Comprehensive CLI documentation](https://docs.microsoft.com/en-us/dotnet/articles/core/preview3/tools/) + +## Working with the CLI repo + +- [Developer Guide](project-docs/developer-guide.md) +- [How to file issues](project-docs/issue-filing.guide.md) + +## Troubleshooting and issues reporting + +- [CLI Known Issues](https://github.com/dotnet/core/blob/master/cli/known-issues.md) +- [Filing migration issues](migration-issues.md) + +## Specifications + +- [CLI installation scenarios](specs/cli-installation-scenarios.md) +- [Corehost specification](specs/corehost.md) +- [Runtime configuration file specification](specs/runtime-configuration-file.md) + diff --git a/Documentation/addressing-incremental-compilation-warnings.md b/Documentation/addressing-incremental-compilation-warnings.md deleted file mode 100644 index e2072fe4e..000000000 --- a/Documentation/addressing-incremental-compilation-warnings.md +++ /dev/null @@ -1,17 +0,0 @@ -Addressing Incremental Compilation Warnings -=========================================== - -Incremental compilation is unsafe when compilation relies on tools with potential side effects (tools that can cause data races or modify the state of other projects that have been deemed safe to skip compilation. Or tools that integrate timestamps or GUIDs into the build output). - -The presence of such cases will turn off incremental compilation. - -The following represent warning codes printed by CLI when the project structure is unsafe for incremental build and advice on how to address them: - -- __[Pre / Post scripts]__: Scripts that run before and after each compiler invocation can introduce side effects that could cause incremental compilation to output corrupt builds (not building when it should have built) or to over-build. Consider modifying the project structure to run these scripts before / after the entire compile process, not between compiler invocations. - -- __[PATH probing]__: Resolving tool names from PATH is problematic. First, we cannot detect when PATH tools change (which would to trigger re-compilation of sources). Second, it adds machine specific dependencies which would cause the build to succeed on some machines and fail on others. Consider using NuGet packages instead of PATH resolved tools. Thus there would be no machine specific dependencies and we would be able track when NuGet packages change and therefore trigger re-compilation. - -- __[Unknown Compiler]__: csc, vbc, and fsc have known side effects (which files and directories they read, write, and what they are not reading/writing). -We don’t know this for other compilers. So we choose to be safe and disable incremental compilation for now. We are planning to enable specification of tool side effects in a future version, so that they can participate in incremental compilation as well. - -- __[Forced Unsafe]__: The build was not incremental because the `--no-incremental` flag was used. Remove this flag to enable incremental compilation. diff --git a/Documentation/cli-prerequisites.md b/Documentation/cli-prerequisites.md deleted file mode 100644 index 930d8aaf2..000000000 --- a/Documentation/cli-prerequisites.md +++ /dev/null @@ -1,4 +0,0 @@ -CLI native prerequisites -========================= - -This document now lives in the [.NET Core native pre-requisities document](https://github.com/dotnet/core/blob/master/Documentation/prereqs.md) in the dotnet/core repository. \ No newline at end of file diff --git a/Documentation/dotnet-test-protocol.md b/Documentation/dotnet-test-protocol.md deleted file mode 100644 index 50af88a51..000000000 --- a/Documentation/dotnet-test-protocol.md +++ /dev/null @@ -1,44 +0,0 @@ -dotnet-test communication protocol -=================================== - -## Introduction -Anytime you pass a port to dotnet test, the command will run in design time. That means that dotnet test will connect to that port -using TCP and will then exchange an established set of messages with whatever else is connected to that port. When this happens, the runner -also receives a new port that dotnet test will use to communicate with it. The reason why the runner also uses TCP to -communicate with dotnet test is because in design mode, it is not sufficient to just output results to the console. The -command needs to send the adapter structure messages containing the results of the test execution. - -### Communication protocol at design time. - -1. Because during design time, dotnet test connects to a port when it starts up, the adapter needs to be listening on -that port otherwise dotnet test will fail. We did it like this so that the adapter could reserve all the ports it needs -by binding and listening to them before dotnet test ran and tried to get ports for the runner. -2. Once dotnet test starts, it sends a TestSession.Connected message to the adapter indicating that it is ready to receive messages. -3. It is possible to send an optional -[version check](https://github.com/dotnet/cli/blob/rel/1.0.0/src/Microsoft.Extensions.Testing.Abstractions/Messages/ProtocolVersionMessage.cs) -message with the adapter version of the protocol in it. Dotnet test will send back the version of the protocol that it supports. - -All messages have the format described here: -[Message.cs](https://github.com/dotnet/cli/blob/rel/1.0.0/src/Microsoft.Extensions.Testing.Abstractions/Messages/Message.cs). -The payload formats for each message is described in links to the classes used to serialize/deseralize the information in the description of the protocol. - -#### Test Execution -![alt tag](./images/DotnetTestExecuteTests.png) - -1. After the optional version check, the adapter sends a TestExecution.GetTestRunnerProcessStartInfo, with the -[tests](https://github.com/dotnet/cli/blob/rel/1.0.0/src/Microsoft.Extensions.Testing.Abstractions/Messages/RunTestsMessage.cs) it wants to execute inside of it. Dotnet test sends back a FileName and Arguments inside a [TestStartInfo](https://github.com/dotnet/cli/blob/rel/1.0.0/src/dotnet/commands/dotnet-test/TestStartInfo.cs) payload that the adapter can use to start the runner. In the past, we would send the list of tests to run as part of that argument, but we were actually going over the command line size limit for some test projects. - 1. As part of the arguments, we send a port that the runner should connect to and for executing tests, a --wait-command flag, that indicates that the runner should connect to the port and wait for commands, instead of going ahead and executing the tests. -2. At this point, the adapter can launch the runner (and attach to it for debugging if it chooses to). -3. Once the runner starts, it sends dotnet test a TestRunner.WaitCommand message that indicates it is ready to receive commands, at which point dotnet test sends a TestRunner.Execute with the list of [tests](https://github.com/dotnet/cli/blob/rel/1.0.0/src/Microsoft.Extensions.Testing.Abstractions/Messages/RunTestsMessage.cs) to run. This bypasses the command line size limit described above. -4. The runner then sends dotnet test (and it passes forward to the adapter) a TestExecution.TestStarted for each tests as they start with the [test](https://github.com/dotnet/cli/blob/rel/1.0.0/src/Microsoft.Extensions.Testing.Abstractions/Test.cs) information inside of it. -5. The runner also sends dotnet test (and it forwards to the adapter) a TestExecution.TestResult for each test with the [individual result](https://github.com/dotnet/cli/blob/rel/1.0.0/src/Microsoft.Extensions.Testing.Abstractions/TestResult.cs) of the test. -6. After all tests finish, the runner sends a TestRunner.Completed message to dotnet test, which dotnet test sends as TestExecution.Completed to the adapter. -7. Once the adapter is done, it sends dotnet test a TestSession.Terminate which will cause dotnet test to shutdown. - -#### Test discovery -![alt tag](./images/DotnetTestDiscoverTests.png) - -1. After the optional version check, the adapter sends a TestDiscovery.Start message. Because in this case, the adapter does not need to attach to the process, dotnet test will start the runner itself. Also, since there is no long list of arguments to be passed to the runner, no --wait-command flag is needed to be passed to the runner. dotnet test only passes a --list argument to the runner, which means the runner should not run the tests, just list them. -2. The runner then sends dotnet test (and it passes forward to the adapter) a TestDiscovery.TestFound for each [test](https://github.com/dotnet/cli/blob/rel/1.0.0/src/Microsoft.Extensions.Testing.Abstractions/Test.cs) found. -3. After all tests are discovered, the runner sends a TestRunner.Completed message to dotnet test, which dotnet test sends as TestDiscovery.Completed to the adapter. -4. Once the adapter is done, it sends dotnet test a TestSession.Terminate which will cause dotnet test to shutdown. diff --git a/Documentation/general/cli-ux-guidelines.md b/Documentation/general/cli-ux-guidelines.md new file mode 100644 index 000000000..69b8c0325 --- /dev/null +++ b/Documentation/general/cli-ux-guidelines.md @@ -0,0 +1,157 @@ +.NET Core Command-Line Tools UX Guidelines +------------------------------------------- + +This document outlines the User Experience (UX) of the .NET Core command lline tools (CLI).These guideliens are intended for anyone that wants to add a new command to the CLI. + +The guidelines presented in this document have been adopted to provide a clear and concise +command line syntax that is easy to learn, remember and work with, and that has an added benefit +of being familiar to people who have used other command-line interfaces as well as existing +Visual Studio users. + +## Naming the commands + +In the .NET Core CLI, commands should be **verbs**. This rule was adopted +because most of the commands do *something*. + +Sub-commands are supported in the CLI, and they are usually nouns. A good +example of this is the “dotnet add reference” command. If there is a need to add +a subcommand, that subcommand should usually specialize what the parent command +does. + +## Create/Read/Update/Delete (CRUD) commands +New CRUD commands should be named according to the following logic: + +- Does the command work on data in the project (either properties or + items)? If yes, then it should be added as a noun to the “dotnet + add/list/remove/update”, e.g. “dotnet add foo”. + +- Does the command work on the solution (SLN) file? If yes, then it should be + added as a verb to the “dotnet sln” command. + +- Does the command work on a completely new artifact (e.g. a new metadata file + that is added in the future)? If yes, it should be created as a top level + noun with all of the underlying operations defined as sub-commands. + +- If the command adds a new artifact to the project, it should become an item + template that is dropped with “dotnet new” command. + + +If none of the above applies, the proposal should clearly outline why none of +the above applies and suggest an alternative naming that will be decided on +during the process described above. + +If the command works on the project or solution, it must also accept an optional +argument that specifies which project or solution to work on. The current +convention is for that argument to follow the verb in the CRUD command. For +example: + +> dotnet add \ reference \ + +All the existing CRUD commands have this argument defined and it will be passed +to the sub-command as part of the overall options. The sub-command is expected +to consider this optional argument. + +## Options +CLI follows the [GNU convention](https://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html) for options’ format, which is based on the POSIX +standard. The summary is: + +- Command can have both short and long options. + +- The short format starts with a single dash (“-“), and has **exactly** one + letter. The letter is usually the start letter of the longer form of the + option, e.g. “-o” for “--output” or any of its words. This provides a good + mnemonic. + + - **Example:** “dotnet build -o path/to/where/to/put/output” + +- The long format starts with double dashes (“--“) and can have one or more + words. Multiple words are separated by a single dash (“-“). + + - **Example:** “dotnet test --test-case-filter” + +- The double dashes (“--“) on their own mark the **argument separator**. + Anything after this option is passed verbatim to whatever the command starts + as a sub-process. + + - **Example:** “dotnet run -- --app-arg-1” + +- Windows-style forward slash options (e.g. “/p”) are supported **only for + MSBuild parameters.** + +- PowerShell-style single dashes with a word (e.g. “-Filter”) are **not + supported**. + +- Help options are predefined as “-h \| --help” and those should be used. + +There are common options in the CLI that are reserved for certain concepts. The +table below outlines those common options. If a command needs to accept the same +options, it should use these and it must not replace their semantics (e.g. use +“--output” to mean something different or redefine what “-f” means for just that +command). + +| Long option | Short option | Description | +|------------------|--------------|--------------------------------------------------------------| +| \--framework | \-f | Specifies which framework (target) to use in the invocation. | +| \--output | \-o | Specifies where the output of the command should be placed. | +| \--runtime | \-r | Specifies the runtime ID (RID) to use in the invocation. | +| \--configuration | \-c | Specifies the configuration to use in the invocation. | +| \--verbosity | \-v | Specifies the verbosity level of the command. | +| \--help | \-h | Shows the help for the command. | + +One special area is interacting with MSBuild. If a command has the need to do +that, there are two additional requirements with regards to options: + +1. The commands need to be able to take “/p” parameters in addition to whatever + other properties they require. + +2. If the command invokes a predefined MSBuild target, it needs to block + “/t:\” and “/target:\” options and throw an error that is + pre-defined in the CLI. + +It is important to note that commands that invoke user-specified targets +should not be submitted to the CLI, since the CLI comes with “dotnet msbuild” +command that does precisely that. + +## Arguments +Arguments can have any name that authors of the commands being added need. We do have predefined +argument names for the SLN file and project file. They are defined in the CLI +source code and should be used if the command has the need to use those two +arguments. + +## Help messages +Help messages are automatically generated based on the arguments, options and +command name. No other work should be required here apart from setting up the +above mentioned and their descriptions. + +## Output +For commands that are invoking MSBuild, the output will be controlled by MSBuild +itself. + +In case of a long running operation, the command needs to provide a feedback +mechanism to the user to help the user reason about whether the command has +crashed or is just waiting for I/O. The feedback mechanism guidelines are below: + +1. Feedback should not require fonts with special glyphs for display. +2. Pure text is acceptable (e.g. `Running background process...`) as a feedback mechanism. +3. Spinners that conform to rule \#1 above are also acceptable. + + +### Verbosity +If the command interacts with MSBuild, it is required that it can accept a +“--verbosity \| -v” argument and pass it to MSBuild verbatim. + +If the command’s verbosity levels cannot fit naturally in [MSBuild’s verbosity levels](https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-command-line-reference) or the command does not interact with MSBuild but still has an option to set the verbosity, it +is the job of the command to map them in the most appropriate way. This way, the +verbosity levels will be uniform across all commands which brings consistency to +the toolset. + +#### Example +As an example, let us consider a “dotnet configure” command. It doesn’t interact +with MSBuild. I wish to have verbosity on it, but it really has only two levels: +quiet (just successes or errors) and verbose (every operation) that I've defined for the command. To satisfy the +above-mentioned requirement, in my command I would define the “--verbosity \| +-v” option and would map the arguments in the following way: + +- “Quiet” gets mapped naturally to “quiet” + +- “Minimal”, “Normal” and “Diagnostic” get mapped into “verbose” diff --git a/Documentation/general/intro-to-cli.md b/Documentation/general/intro-to-cli.md new file mode 100644 index 000000000..0fca2016f --- /dev/null +++ b/Documentation/general/intro-to-cli.md @@ -0,0 +1,62 @@ +Introduction to .NET Core CLI +============================= + +The .NET Core CLI is a simple, extensible and standalone set of tools for building, managing and otherwise operating on .NET projects. It will or already includes commands such as compilation, NuGet package management and launching a debugger session. It is intended to be fully featured, enabling extensive library and app development functionality appropriate at the command-line. It should provide everything you'd need to develop an app in an SSH session! It is also intended to be a fundamental building block for building finished experiences in tools such as Visual Studio. + +Goals: + +- Language agnostic - embrace "common language runtime". +- Target agnostic - multi-targets. +- Simple extensibility and layering - "you had one job!" +- Cross-platform - support and personality. +- Semantic user interface over [MSBuild](https://github.com/Microsoft/msbuild). + +Experience +========== + +The [.NET Core command-line tools](https://github.com/dotnet/cli) present the "dotnet" tool as the entry-point tool. It provides higher-level commands, often using multiple tools together to complete a task. It's a convenience wrapper over the other tools, which can also be used directly. "dotnet" isn't magical at all, but a very simple aggregator of other tools. + +You can get a sense of using the tools from the examples below. + +**dotnet restore** + +`dotnet restore` restores dependent package from a given NuGet feed (e.g. NuGet.org) for the project in scope. + +**dotnet run** + +`dotnet run` compiles and runs your app with one step. + +**dotnet build** + +`dotnet build` compiles your app or library as an IL binary. + +Design +====== + +There are a couple of moving pieces that you make up the general design of the .NET Core CLI: + +* The `dotnet` driver +* Specific commands that are part of the package + +The `dotnet` driver is very simple and its primary role is to run commands and give users basic information about usage. + +The way the `dotnet` driver finds the command it is instructed to run using `dotnet {command}` is via a convention; any executable that is placed in the PATH and is named `dotnet-{command}` will be available to the driver. For example, when you install the CLI toolchain there will be an executable called `dotnet-build` in your PATH; when you run `dotnet build`, the driver will run the `dotnet-build` executable. All of the arguments following the command are passed to the command being invoked. So, in the invocation of `dotnet build --native`, the `--native` switch will be passed to `dotnet-build` executable that will do some action based on it (in this case, produce a single native binary). + +Adding a new command to the .NET Core CLI +========================================= + +If you want to contribute to the actual .NET Core CLI by adding a new command that you think would be useful, please refer to the [developer guide](developer-guide.md) in this directory. It contains all of the guidance on both the process as well as the infrastructure that you need to adhere to when adding a new command to the CLI toolchain. + +After you familiarize yourself with the process of working with the source code in the repo, please consult the [CLI UX guidelines](cli-ux-guidelines.md) to get to know the user experience tenants the CLI has. + +Adding a new command locally +============================ +If you wish to extend the CLI, you can read more about supported extensibility models in the [official extensibility document](https://docs.microsoft.com/en-us/dotnet/articles/core/tools/extensibility)/. + +Guidance on how to write a command +================================== +How you write a given command depends largely on whether you are trying to add it to the CLI project or want to add the command locally, that is on your machine or server. + +For the former case, the [developer guide](developer-guide.md) has all of the details that you will need to get going. + +If you are adding a command on your own machine(s), then there is really no special model to keep in mind. However, since your users will be using the local commands through the `dotnet` driver, we strongly suggest to keep to the principles outlined in the [CLI UX guidelines](cli-ux-guidelines.md) to have an unified user experience for your users. diff --git a/Documentation/images/DotnetTestDiscoverTests.png b/Documentation/images/DotnetTestDiscoverTests.png deleted file mode 100644 index 76b332f933e32d2e9e447e76484ba051005bcaa5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14578 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 z 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 Ee?dvPssI20 diff --git a/Documentation/images/DotnetTestExecuteTests.png b/Documentation/images/DotnetTestExecuteTests.png deleted file mode 100644 index ca786410e55c6bc80051b448f5a35603687b8b1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20288 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

$>4rO!(^q{zuq2Snf_L)NWjF!rJY8^i2}@ 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 KKbLh*2~7Z1dUaL+ diff --git a/Documentation/intro-to-cli.md b/Documentation/intro-to-cli.md deleted file mode 100644 index 5065bb5e8..000000000 --- a/Documentation/intro-to-cli.md +++ /dev/null @@ -1,100 +0,0 @@ -Intro to .NET Core CLI -====================== - -The .NET Core CLI is a simple, extensible and standalone set of tools for building, managing and otherwise operating on .NET projects. It will or already includes commands such as compilation, NuGet package management and launching a debugger session. It is intended to be fully featured, enabling extensive library and app development functionality appropriate at the command-line. It should provide everything you'd need to develop an app in an SSH session! It is also intended to be a fundamental building block for building finished experiences in tools such as Visual Studio. - -Goals: - -- Language agnostic - embrace "common language runtime". -- Target agnostic - multi-targets. -- Runtime agnostic. -- Simple extensibility and layering - "you had one job!" -- Cross-platform - support and personality. -- Outside-in philosophy - higher-level tools drive the CLI. - -Historical Context - DNX -======================== - -We've been using [DNX](http://blogs.msdn.com/b/dotnet/archive/2015/04/29/net-announcements-at-build-2015.aspx#dnx) for all .NET Core scenarios for nearly two years. It provides a lot of great experiences, but doesn't have great "pay for play" characteristics. DNX is a big leap from building the [CoreCLR](https://github.com/dotnet/coreclr) and [CoreFX](https://github.com/dotnet/corefx) repos and wanting to build an app with a simple environment. In fact, one of the open source contributors to CoreCLR said: "I can build CoreCLR, but I don't know how to build 'Hello World'." We cannot have that! - -.NET Core includes three new components: a set of standalone command-line (CLI) tools, a shared framework and a set of runtime services. These components will replace DNX and are essentially DNX split in three parts. - -The DNX services will be offered as a hosting option available to apps. You can opt to use a host that offers one or more of these services, like file change watching or NuGet package servicing. You can also opt to use a shared framework, to ease deployment of dependencies and for performance reasons. Some of this is still being designed and isn't yet implemented. - -ASP.NET 5 will transition to the new tools for RC2. This is already in progress. There will be a smooth transition from DNX to these new .NET Core components. - -Experience -========== - -The [CLI tools](https://github.com/dotnet/cli) present the "dotnet" tool as the entry-point tool. It provides higher-level commands, often using multiple tools together to complete a task. It's a convenience wrapper over the other tools, which can also be used directly. "dotnet" isn't magical at all, but a very simple aggregator of other tools. - -You can get a sense of using the tools from the examples below. - -**dotnet restore** - -`dotnet restore` restores dependent package from a given NuGet feed (e.g. NuGet.org) for the project in scope. - -**dotnet run** - -`dotnet run` compiles and runs your app with one step. Same as `dnx run`. - -**dotnet build** - -`dotnet build --native` native compiles your app into a single executable file. - -`dotnet build` compiles your app or library as an IL binary. In the case of an app, `build` generates runnable assets by copying an executable host to make the IL binary runable. The host relies on a shared framework for dependencies, including a runtime. - -Design -====== - -There are a couple of moving pieces that you make up the general design of the .NET Core CLI: - -* The `dotnet` driver -* Specific commands that are part of the package - -The `dotnet` driver is very simple and its primary role is to run commands and give users basic information about usage. - -The way the `dotnet` driver finds the command it is instructed to run using `dotnet {command}` is via a convention; any executable that is placed in the PATH and is named `dotnet-{command}` will be available to the driver. For example, when you install the CLI toolchain there will be an executable called `dotnet-build` in your PATH; when you run `dotnet build`, the driver will run the `dotnet-build` executable. All of the arguments following the command are passed to the command being invoked. So, in the invocation of `dotnet build --native`, the `--native` switch will be passed to `dotnet-build` executable that will do some action based on it (in this case, produce a single native binary). - -This is also the basics of the current extensibility model of the toolchain. Any executable found in the PATH named in this way, that is as `dotnet-{command}`, will be invoked by the `dotnet` driver. - -There are some principles that we are using when adding new commands: - -* Each command is represented by a verb (`run`, `build`, `publish`, `restore` etc.) -* We support the short and the long form of switches for most commands -* The switches have the same format on all supported platforms (so, no /-style switches on Windows for example) -* Each command has a help that can be viewed by running `dotnet [command] --help` - -Adding a new command to the .NET Core CLI -========================================= - -If you want to contribute to the actual .NET Core CLI by adding a new command that you think would be useful, please refer to the [developer guide](developer-guide.md) in this directory. It contains all of the guidance on both the process as well as the infrastructure that you need to adhere to when adding a new command to the CLI toolchain. - -Adding a new command locally -============================ -Given the extensibility model described above, it is very easy to add a command that can be invoked with the `dotnet` driver. Just add any executable in a PATH and name it as per the instructions above. - -As an example, let's say we want to add a local command that will mimic `dotnet clean`. By convention, `dotnet build` will drop binaries in two directories `./bin` and `./obj`. A clean command thus will need to delete these two directories. A trivial example, but it should work. - -On *nix OS-es, we will write a very simple shell script to help us with this: -```shell -#!/bin/bash - -rm -rf bin/ obj/ -``` - -We then do the following to make it be a command in the CLI toolchain - -* Name it as `dotnet-clean` -* Set the executable bit on: `chmod +X dotnet-clean` -* Copy it over somewhere in the $PATH: `sudo cp dotnet-clean /usr/local/bin` - -After this, the command ready to be invoked via the `dotnet` driver. - -Guidances on how to write a command -=================================== -How you write a given command depends largely on whether you are trying to add it to the CLI project or want to add the command locally, i.e. on your machine or server. - -For the former case, the [developer guide](developer-guide.md) has all of the details that you will need to get going. - -If you are adding a command on your own machine(s), then there is really no special model to keep in mind. However, since your users will be using the local commands through the `dotnet` driver, we strongly suggest to keep to the principles outlined above in the [design section](#design) to have an unified user experience for your users. diff --git a/Documentation/known-issues.md b/Documentation/known-issues.md deleted file mode 100644 index 36f21b7ab..000000000 --- a/Documentation/known-issues.md +++ /dev/null @@ -1,4 +0,0 @@ -Known issues & workarounds -========================== - -This document now lives in the [known issues document](https://github.com/dotnet/core/blob/master/cli/known-issues.md) in the dotnet/core repository. diff --git a/Documentation/developer-guide.md b/Documentation/project-docs/developer-guide.md similarity index 100% rename from Documentation/developer-guide.md rename to Documentation/project-docs/developer-guide.md diff --git a/Documentation/issue-filing-guide.md b/Documentation/project-docs/issue-filing-guide.md similarity index 100% rename from Documentation/issue-filing-guide.md rename to Documentation/project-docs/issue-filing-guide.md diff --git a/Documentation/cli-installation-scenarios.md b/Documentation/specs/cli-installation-scenarios.md similarity index 90% rename from Documentation/cli-installation-scenarios.md rename to Documentation/specs/cli-installation-scenarios.md index 51d764bf2..d9e1a8187 100644 --- a/Documentation/cli-installation-scenarios.md +++ b/Documentation/specs/cli-installation-scenarios.md @@ -126,8 +126,8 @@ Below table shows the mapping between the channels, branches and feeds for the D | Channel | Branch | Debian feed | Debian package name | NuGet version | NuGet feed | |------------ |----------- |------------- |--------------------- |--------------- |--------------------------------------- | | Future | master | Development | dotnet-future | 1.0.0-dev-* | https://dotnet.myget.org/f/dotnet-cli | -| Preview | rel/ | Development | dotnet | 1.0.0-beta-* | https://dotnet.myget.org/f/dotnet-cli | -| Production | production/ | Production | dotnet | 1.0.0 | https://api.nuget.org/v3/index.json | +| Preview | rel/ | Development | dotnet-dev- | 1.0.0-beta-* | https://dotnet.myget.org/f/dotnet-cli | +| Production | rel/ | Production | dotnet-dev- | 1.0.0 | https://api.nuget.org/v3/index.json | ## Funnels and discovery mechanisms for CLI bits @@ -203,20 +203,29 @@ The features the script needs to support/have are: * Support specifying whether the debug package needs to be downloaded * Automatically add the install to $PATH unless --no-path/-NoPath is present +The installation script exists in this repo under `scripts/obtain` path. However, for most users it is reccomended to use the stable version that is hosted on [.NET Core main website](https://dot.net). The direct path to the scripts are: + +* https://dot.net/v1/dotnet-install.sh (bash, UNIX) +* https://dot.net/v1/dotnet-install.ps1 (powershell, Windows) + #### Installation script features The following arguments are needed for the installation script: -| dotnet-install.sh arg (Linux, OSX) | dotnet-install.ps1 arg (Windows) | Defaults | Description | -|-------------------------------------- |------------------------------------ |----------------------- |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| --channel | -Channel | "preview" | Which channel (i.e. "Future", "preview", "production", "release/1.1.0") to install from. | -| --version | -Version | global.json or Latest | Which version of CLI to install; you need to specify the version as 3-part version (i.e. 1.0.0-13232). If omitted, it will default to the first global.json that contains the sdkVersion property; if that is not present it will use Latest. | -| --install-dir | -InstallDir | .dotnet | Path to where to install the CLI bundle. The directory is created if it doesn't exist. On Linux/OSX this directory is created in the user home directory (`$HOME`). On Windows, this directory is created in `%LocalAppData%`. | -| --debug | -Debug | false | Whether to use the "fat" packages that contain debugging symbols or not. | -| --no-path | -NoPath | false | Do not export the installdir to the path for the current session. This makes CLI tools available immediately after install. | -| --shared-runtime | -SharedRuntime | false | Install just the shared runtime bits, not the entire SDK. | +| dotnet-install.sh arg (Linux, OSX) | dotnet-install.ps1 arg (Windows) | Defaults | Description | +|------------------------------------|----------------------------------|-----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| --channel | -Channel | "production" | Which channel (i.e. "Future", "preview", "production", "release/1.1.0") to install from. | +| --version | -Version | Latest | Which version of CLI to install; you need to specify the version as 3-part version (i.e. 1.0.0-13232). If omitted, it will default to Latest for that channel. | +| --install-dir | -InstallDir | .dotnet | Path to where to install the CLI bundle. The directory is created if it doesn't exist. On Linux/OSX this directory is created in the user home directory (`$HOME`). On Windows, this directory is created in `%LocalAppData%`. | +| --debug-symbols | -DebugSymbols | false | Whether to use the "fat" packages that contain debugging symbols or not. | +| --no-path | -NoPath | false | Do not export the installdir to the path for the current session. This makes CLI tools available immediately after install. | +| --shared-runtime | -SharedRuntime | false | Install just the shared runtime bits, not the entire SDK. | +| --architecture | -Architecture | Current OS (``) | Architecture to install. The possible values are ``, `x64` and `x86`. | +| --dry-run | -DryRun | false | If set, it will not perform the installation but will show, on standard output, what the invocation of the script will do with the options selected. | +| --verbose | -Verbose | false | Display diagnostic information. | +| N/A | -ProxyAddress | "" | If set, the installer will use the specified proxy server for all of its invocations. | -Note: Powershell arg naming convention is supported on Windows and non-Windows platforms. Non-Windows platforms do additionally support convention specific to their platform. +> Note: Powershell arg naming convention is supported on Windows and non-Windows platforms. Non-Windows platforms do additionally support convention specific to their platform. ##### Install the 1.1.0 of the shared runtime diff --git a/Documentation/supported-os-matrix.md b/Documentation/supported-os-matrix.md deleted file mode 100644 index 718b98cda..000000000 --- a/Documentation/supported-os-matrix.md +++ /dev/null @@ -1,4 +0,0 @@ -Supported OS Matrix for CLI -=========================== - -The supported matrix now lives in the [roadmap document](https://github.com/dotnet/core/blob/master/roadmap.md) in the dotnet/core repository. diff --git a/README.md b/README.md index 953fe6962..03a888c99 100644 --- a/README.md +++ b/README.md @@ -4,22 +4,12 @@ This repo contains the source code for cross-platform [.NET Core](http://github.com/dotnet/core) command line toolchain. It contains the implementation of each command, the native packages for various supported platforms as well as documentation. -RC 4 release - MSBuild based tools ---------------------------------------- -As was outlined in the ["Changes to project.json" blog post](https://blogs.msdn.microsoft.com/dotnet/2016/05/23/changes-to-project-json/), we have started work to move away from project.json to csproj and MSBuild. All the new `latest` releases from this repo (from `rel/1.0.0` branch) are MSBuild-enabled tools. +Looking for V1 of the .NET Core tooling? +---------------------------------------- +If you are looking for the v1.0.1 release of the .NET Core tools (CLI, MSBuild and the new csproj), head over to https://dot.net/core and download! -The current official release of the csproj-enabled CLI tools is **CLI RC 4**. - -There are a couple of things to keep in mind: - -* RC 4 CLI bits are still **in development** so some rough edges are to be expected. -* RC 4 bits **do not support** project.json so you will have to either keep Preview 2 tools around or migrate your project or add a global.json file to your project to target preview2. You can find more information on this using the [project.json to csproj instructions](https://github.com/dotnet/cli/blob/rel/1.0.0/Documentation/ProjectJsonToCSProj.md). -* RC 4 refers to the **CLI tools only** and does not cover Visual Studio, VS Code or Visual Studio for Mac. -* We welcome any and all issues that relate to MSBuild-based tools, so feel free to try them out and leave comments and file any bugs/problems. - -### Download links -* Instructions and links for download: [RC3 download links](https://github.com/dotnet/core/blob/master/release-notes/rc3-download.md). -* Directory for future Preview release notes: [.NET Core release notes](https://github.com/dotnet/core/tree/master/release-notes). +> **Note:** the master branch of the CLI repo is based on the upcoming v2 of .NET Core and is considered pre-release. For production-level usage, please use the +> v1 of the tools. Found an issue? ---------------