diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedNamedResourceOption/project.json b/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedNamedResourceOption/project.json
deleted file mode 100644
index 0bf0dfa00..000000000
--- a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedNamedResourceOption/project.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "version": "1.0.0-*",
- "namedResource": [ "My.Alias", "Strings.resx" ],
- "buildOptions": {
- "debugType": "portable",
- "emitEntryPoint": true
- },
- "dependencies": {},
- "frameworks": {
- "netcoreapp1.0": {
- "dependencies": {
- "Microsoft.NETCore.App": {
- "type": "platform",
- "version": "1.0.0"
- }
- },
- "imports": "dnxcore50"
- }
- }
-}
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompilationOptions/Program.cs b/TestAssets/NonRestoredTestProjects/PJDeprecatedCompilation/Program.cs
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompilationOptions/Program.cs
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedCompilation/Program.cs
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompilationOptions/project.json b/TestAssets/NonRestoredTestProjects/PJDeprecatedCompilation/project.json
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompilationOptions/project.json
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedCompilation/project.json
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileOptions/Helper1.cs b/TestAssets/NonRestoredTestProjects/PJDeprecatedCompile/Helper1.cs
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileOptions/Helper1.cs
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedCompile/Helper1.cs
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileOptions/Helper2.cs b/TestAssets/NonRestoredTestProjects/PJDeprecatedCompile/Helper2.cs
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileOptions/Helper2.cs
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedCompile/Helper2.cs
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileBuiltInOptions/project/IncludeThis.cs b/TestAssets/NonRestoredTestProjects/PJDeprecatedCompile/project/IncludeThis.cs
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileBuiltInOptions/project/IncludeThis.cs
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedCompile/project/IncludeThis.cs
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileOptions/project/Program.cs b/TestAssets/NonRestoredTestProjects/PJDeprecatedCompile/project/Program.cs
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileOptions/project/Program.cs
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedCompile/project/Program.cs
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileOptions/project/project.json b/TestAssets/NonRestoredTestProjects/PJDeprecatedCompile/project/project.json
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileOptions/project/project.json
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedCompile/project/project.json
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileBuiltInOptions/HelperBuiltIn1.cs b/TestAssets/NonRestoredTestProjects/PJDeprecatedCompileBuiltIn/HelperBuiltIn1.cs
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileBuiltInOptions/HelperBuiltIn1.cs
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedCompileBuiltIn/HelperBuiltIn1.cs
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileBuiltInOptions/HelperBuiltIn2.cs b/TestAssets/NonRestoredTestProjects/PJDeprecatedCompileBuiltIn/HelperBuiltIn2.cs
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileBuiltInOptions/HelperBuiltIn2.cs
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedCompileBuiltIn/HelperBuiltIn2.cs
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileOptions/project/IncludeThis.cs b/TestAssets/NonRestoredTestProjects/PJDeprecatedCompileBuiltIn/project/IncludeThis.cs
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileOptions/project/IncludeThis.cs
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedCompileBuiltIn/project/IncludeThis.cs
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileBuiltInOptions/project/Program.cs b/TestAssets/NonRestoredTestProjects/PJDeprecatedCompileBuiltIn/project/Program.cs
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileBuiltInOptions/project/Program.cs
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedCompileBuiltIn/project/Program.cs
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileBuiltInOptions/project/project.json b/TestAssets/NonRestoredTestProjects/PJDeprecatedCompileBuiltIn/project/project.json
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileBuiltInOptions/project/project.json
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedCompileBuiltIn/project/project.json
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileExcludeOptions/ExcludeThis1.cs b/TestAssets/NonRestoredTestProjects/PJDeprecatedCompileExclude/ExcludeThis1.cs
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileExcludeOptions/ExcludeThis1.cs
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedCompileExclude/ExcludeThis1.cs
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileExcludeOptions/ExcludeThis2.cs b/TestAssets/NonRestoredTestProjects/PJDeprecatedCompileExclude/ExcludeThis2.cs
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileExcludeOptions/ExcludeThis2.cs
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedCompileExclude/ExcludeThis2.cs
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileExcludeOptions/Program.cs b/TestAssets/NonRestoredTestProjects/PJDeprecatedCompileExclude/Program.cs
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileExcludeOptions/Program.cs
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedCompileExclude/Program.cs
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileExcludeOptions/project.json b/TestAssets/NonRestoredTestProjects/PJDeprecatedCompileExclude/project.json
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedCompileExcludeOptions/project.json
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedCompileExclude/project.json
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedContentOptions/ContentFile1.txt b/TestAssets/NonRestoredTestProjects/PJDeprecatedContent/ContentFile1.txt
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedContentOptions/ContentFile1.txt
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedContent/ContentFile1.txt
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedContentOptions/ContentFile2.txt b/TestAssets/NonRestoredTestProjects/PJDeprecatedContent/ContentFile2.txt
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedContentOptions/ContentFile2.txt
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedContent/ContentFile2.txt
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedContentOptions/ContentFileBuiltIn1.txt b/TestAssets/NonRestoredTestProjects/PJDeprecatedContent/ContentFileBuiltIn1.txt
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedContentOptions/ContentFileBuiltIn1.txt
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedContent/ContentFileBuiltIn1.txt
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedContentOptions/ContentFileBuiltIn2.txt b/TestAssets/NonRestoredTestProjects/PJDeprecatedContent/ContentFileBuiltIn2.txt
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedContentOptions/ContentFileBuiltIn2.txt
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedContent/ContentFileBuiltIn2.txt
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedContentOptions/project/ExcludeThis1.txt b/TestAssets/NonRestoredTestProjects/PJDeprecatedContent/project/ExcludeThis1.txt
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedContentOptions/project/ExcludeThis1.txt
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedContent/project/ExcludeThis1.txt
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedContentOptions/project/ExcludeThis2.txt b/TestAssets/NonRestoredTestProjects/PJDeprecatedContent/project/ExcludeThis2.txt
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedContentOptions/project/ExcludeThis2.txt
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedContent/project/ExcludeThis2.txt
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedContentOptions/project/IncludeThis.txt b/TestAssets/NonRestoredTestProjects/PJDeprecatedContent/project/IncludeThis.txt
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedContentOptions/project/IncludeThis.txt
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedContent/project/IncludeThis.txt
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedContentOptions/project/Program.cs b/TestAssets/NonRestoredTestProjects/PJDeprecatedContent/project/Program.cs
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedContentOptions/project/Program.cs
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedContent/project/Program.cs
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedContentOptions/project/project.json b/TestAssets/NonRestoredTestProjects/PJDeprecatedContent/project/project.json
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedContentOptions/project/project.json
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedContent/project/project.json
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceOptions/project/Program.cs b/TestAssets/NonRestoredTestProjects/PJDeprecatedNamedResource/Program.cs
similarity index 96%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceOptions/project/Program.cs
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedNamedResource/Program.cs
index d0134277c..8fdd24dff 100644
--- a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceOptions/project/Program.cs
+++ b/TestAssets/NonRestoredTestProjects/PJDeprecatedNamedResource/Program.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Linq;
using System.Reflection;
diff --git a/TestAssets/NonRestoredTestProjects/PJDeprecatedNamedResource/project.json b/TestAssets/NonRestoredTestProjects/PJDeprecatedNamedResource/project.json
new file mode 100644
index 000000000..e0c6115f7
--- /dev/null
+++ b/TestAssets/NonRestoredTestProjects/PJDeprecatedNamedResource/project.json
@@ -0,0 +1,20 @@
+{
+ "version": "1.0.0-*",
+ "namedResource": [ "My.Alias", "Strings.resx" ],
+ "buildOptions": {
+ "debugType": "portable",
+ "emitEntryPoint": true
+ },
+ "dependencies": {},
+ "frameworks": {
+ "netcoreapp1.0": {
+ "dependencies": {
+ "Microsoft.NETCore.App": {
+ "type": "platform",
+ "version": "1.0.0"
+ }
+ },
+ "imports": "dnxcore50"
+ }
+ }
+}
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedPackOptions/Content1.txt b/TestAssets/NonRestoredTestProjects/PJDeprecatedPack/Content1.txt
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedPackOptions/Content1.txt
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedPack/Content1.txt
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedPackOptions/Content2.txt b/TestAssets/NonRestoredTestProjects/PJDeprecatedPack/Content2.txt
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedPackOptions/Content2.txt
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedPack/Content2.txt
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedPackOptions/Program.cs b/TestAssets/NonRestoredTestProjects/PJDeprecatedPack/Program.cs
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedPackOptions/Program.cs
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedPack/Program.cs
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedPackOptions/project.json b/TestAssets/NonRestoredTestProjects/PJDeprecatedPack/project.json
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedPackOptions/project.json
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedPack/project.json
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceBuiltInOptions/Strings1.resx b/TestAssets/NonRestoredTestProjects/PJDeprecatedResource/Strings1.resx
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceBuiltInOptions/Strings1.resx
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedResource/Strings1.resx
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceBuiltInOptions/Strings2.resx b/TestAssets/NonRestoredTestProjects/PJDeprecatedResource/Strings2.resx
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceBuiltInOptions/Strings2.resx
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedResource/Strings2.resx
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedNamedResourceOption/Program.cs b/TestAssets/NonRestoredTestProjects/PJDeprecatedResource/project/Program.cs
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedNamedResourceOption/Program.cs
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedResource/project/Program.cs
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceBuiltInOptions/project/Resources/Strings.resx b/TestAssets/NonRestoredTestProjects/PJDeprecatedResource/project/Resources/Strings.resx
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceBuiltInOptions/project/Resources/Strings.resx
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedResource/project/Resources/Strings.resx
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceOptions/project/project.json b/TestAssets/NonRestoredTestProjects/PJDeprecatedResource/project/project.json
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceOptions/project/project.json
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedResource/project/project.json
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceOptions/Strings1.resx b/TestAssets/NonRestoredTestProjects/PJDeprecatedResourceBuiltIn/Strings1.resx
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceOptions/Strings1.resx
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedResourceBuiltIn/Strings1.resx
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceOptions/Strings2.resx b/TestAssets/NonRestoredTestProjects/PJDeprecatedResourceBuiltIn/Strings2.resx
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceOptions/Strings2.resx
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedResourceBuiltIn/Strings2.resx
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceBuiltInOptions/project/Program.cs b/TestAssets/NonRestoredTestProjects/PJDeprecatedResourceBuiltIn/project/Program.cs
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceBuiltInOptions/project/Program.cs
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedResourceBuiltIn/project/Program.cs
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceOptions/project/Resources/Strings.resx b/TestAssets/NonRestoredTestProjects/PJDeprecatedResourceBuiltIn/project/Resources/Strings.resx
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceOptions/project/Resources/Strings.resx
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedResourceBuiltIn/project/Resources/Strings.resx
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceBuiltInOptions/project/project.json b/TestAssets/NonRestoredTestProjects/PJDeprecatedResourceBuiltIn/project/project.json
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceBuiltInOptions/project/project.json
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedResourceBuiltIn/project/project.json
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceExcludeOptions/Exclude1.resx b/TestAssets/NonRestoredTestProjects/PJDeprecatedResourceExclude/Exclude1.resx
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceExcludeOptions/Exclude1.resx
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedResourceExclude/Exclude1.resx
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceExcludeOptions/Exclude2.resx b/TestAssets/NonRestoredTestProjects/PJDeprecatedResourceExclude/Exclude2.resx
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceExcludeOptions/Exclude2.resx
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedResourceExclude/Exclude2.resx
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceExcludeOptions/Program.cs b/TestAssets/NonRestoredTestProjects/PJDeprecatedResourceExclude/Program.cs
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceExcludeOptions/Program.cs
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedResourceExclude/Program.cs
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceExcludeOptions/project.json b/TestAssets/NonRestoredTestProjects/PJDeprecatedResourceExclude/project.json
similarity index 100%
rename from TestAssets/NonRestoredTestProjects/PJAppWithDeprecatedResourceExcludeOptions/project.json
rename to TestAssets/NonRestoredTestProjects/PJDeprecatedResourceExclude/project.json
diff --git a/build/Microsoft.DotNet.Cli.DependencyVersions.props b/build/Microsoft.DotNet.Cli.DependencyVersions.props
index cadfcb6df..9391f07a4 100644
--- a/build/Microsoft.DotNet.Cli.DependencyVersions.props
+++ b/build/Microsoft.DotNet.Cli.DependencyVersions.props
@@ -6,7 +6,7 @@
1.0.0-alpha-20170125-1
4.0.0-rtm-2241
1.0.0-alpha-20170120-3-249
- 15.0.0-preview-20170123-02
+ 15.0.0-preview-20170125-04
1.0.0-beta1-20170108-83
diff --git a/src/Microsoft.DotNet.Cli.Utils/CommandUnknownException.cs b/src/Microsoft.DotNet.Cli.Utils/CommandUnknownException.cs
index 6a27faae2..93034ba7d 100644
--- a/src/Microsoft.DotNet.Cli.Utils/CommandUnknownException.cs
+++ b/src/Microsoft.DotNet.Cli.Utils/CommandUnknownException.cs
@@ -4,10 +4,6 @@ namespace Microsoft.DotNet.Cli.Utils
{
public class CommandUnknownException : GracefulException
{
- public CommandUnknownException()
- {
- }
-
public CommandUnknownException(string commandName) : base(string.Format(
LocalizableStrings.NoExecutableFoundMatchingCommand,
commandName))
diff --git a/src/Microsoft.DotNet.Cli.Utils/ExceptionExtensions.cs b/src/Microsoft.DotNet.Cli.Utils/ExceptionExtensions.cs
index 68743b1d8..7756f77e7 100644
--- a/src/Microsoft.DotNet.Cli.Utils/ExceptionExtensions.cs
+++ b/src/Microsoft.DotNet.Cli.Utils/ExceptionExtensions.cs
@@ -3,7 +3,7 @@
using System;
-namespace Microsoft.DotNet.Cli.Utils.ExceptionExtensions
+namespace Microsoft.DotNet.Cli.Utils
{
internal static class ExceptionExtensions
{
@@ -11,5 +11,10 @@ namespace Microsoft.DotNet.Cli.Utils.ExceptionExtensions
{
Reporter.Verbose.WriteLine($"Warning: Ignoring exception: {e.ToString().Yellow()}");
}
+
+ public static bool ShouldBeDisplayedAsError(this Exception e) =>
+ e.Data.Contains(CLI_User_Displayed_Exception);
+
+ internal const string CLI_User_Displayed_Exception = "CLI_User_Displayed_Exception";
}
}
diff --git a/src/Microsoft.DotNet.Cli.Utils/GracefulException.cs b/src/Microsoft.DotNet.Cli.Utils/GracefulException.cs
index 817f8d03d..448049ee4 100644
--- a/src/Microsoft.DotNet.Cli.Utils/GracefulException.cs
+++ b/src/Microsoft.DotNet.Cli.Utils/GracefulException.cs
@@ -4,12 +4,9 @@ namespace Microsoft.DotNet.Cli.Utils
{
public class GracefulException : Exception
{
- public GracefulException()
- {
- }
-
public GracefulException(string message) : base(message)
{
+ Data.Add(ExceptionExtensions.CLI_User_Displayed_Exception, true);
}
public GracefulException(string format, params string[] args) : this(string.Format(format, args))
@@ -18,6 +15,7 @@ namespace Microsoft.DotNet.Cli.Utils
public GracefulException(string message, Exception innerException) : base(message, innerException)
{
+ Data.Add(ExceptionExtensions.CLI_User_Displayed_Exception, true);
}
}
}
\ No newline at end of file
diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/ProjectMigrator.cs b/src/Microsoft.DotNet.ProjectJsonMigration/ProjectMigrator.cs
index 2554ee9c8..9aa45ea11 100644
--- a/src/Microsoft.DotNet.ProjectJsonMigration/ProjectMigrator.cs
+++ b/src/Microsoft.DotNet.ProjectJsonMigration/ProjectMigrator.cs
@@ -10,7 +10,6 @@ using Microsoft.DotNet.Internal.ProjectModel;
using Microsoft.DotNet.Internal.ProjectModel.Graph;
using Microsoft.DotNet.Cli;
using Microsoft.DotNet.Cli.Utils;
-using Microsoft.DotNet.Cli.Utils.ExceptionExtensions;
using Microsoft.DotNet.Cli.Sln.Internal;
using Microsoft.DotNet.ProjectJsonMigration.Rules;
using Microsoft.DotNet.Tools.Common;
diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/CleanOutputProjectRule.cs b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/CleanOutputProjectRule.cs
index f31be9ba2..e419c615b 100644
--- a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/CleanOutputProjectRule.cs
+++ b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/CleanOutputProjectRule.cs
@@ -43,7 +43,9 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
foreach (var item in msbuildProject.Items)
{
- if (string.IsNullOrEmpty(item.Include) && string.IsNullOrEmpty(item.Update))
+ if (string.IsNullOrEmpty(item.Include) &&
+ string.IsNullOrEmpty(item.Remove) &&
+ string.IsNullOrEmpty(item.Update))
{
item.Parent.RemoveChild(item);
}
diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigrateBuildOptionsRule.cs b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigrateBuildOptionsRule.cs
index a97fe441e..ef2183979 100644
--- a/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigrateBuildOptionsRule.cs
+++ b/src/Microsoft.DotNet.ProjectJsonMigration/Rules/MigrateBuildOptionsRule.cs
@@ -55,7 +55,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
compilerOptions => compilerOptions.PreserveCompilationContext != null && compilerOptions.PreserveCompilationContext.Value);
private AddPropertyTransform WarningsAsErrorsTransform =>
- new AddPropertyTransform("WarningsAsErrors",
+ new AddPropertyTransform("TreatWarningsAsErrors",
compilerOptions => compilerOptions.WarningsAsErrors.ToString().ToLower(),
compilerOptions => compilerOptions.WarningsAsErrors != null && compilerOptions.WarningsAsErrors.Value);
@@ -133,9 +133,17 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
condition: ic => ic != null,
emitBuiltInIncludes: false);
+ private RemoveContextTransform RemoveCompileFilesTransform =>
+ new RemoveContextTransform(
+ "Compile",
+ condition: ic => ic != null);
+
private IncludeContextTransform EmbedFilesTransform =>
new IncludeContextTransform("EmbeddedResource", transformMappings: false, condition: ic => ic != null);
+ private RemoveContextTransform RemoveEmbedFilesTransform =>
+ new RemoveContextTransform("EmbeddedResource", condition: ic => ic != null);
+
private IncludeContextTransform CopyToOutputFilesTransform =>
new IncludeContextTransform("Content", transformMappings: true)
.WithMetadata("CopyToOutputDirectory", "PreserveNewest");
@@ -157,14 +165,22 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
projectContext => string.Empty,
projectContext => File.Exists(Path.Combine(projectContext.ProjectDirectory, "App.config")));
- private Func>CompileFilesTransformExecute =>
+ private Func> CompileFilesTransformExecute =>
(compilerOptions, projectDirectory, projectType) =>
CompileFilesTransform.Transform(compilerOptions.CompileInclude);
+ private Func> RemoveCompileFilesTransformExecute =>
+ (compilerOptions, projectDirectory, projectType) =>
+ RemoveCompileFilesTransform.Transform(compilerOptions.CompileInclude);
+
private Func> EmbedFilesTransformExecute =>
(compilerOptions, projectDirectory, projectType) =>
EmbedFilesTransform.Transform(GetEmbedIncludeContext(compilerOptions));
+ private Func> RemoveEmbedFilesTransformExecute =>
+ (compilerOptions, projectDirectory, projectType) =>
+ RemoveEmbedFilesTransform.Transform(GetEmbedIncludeContext(compilerOptions));
+
private Func> CopyToOutputFilesTransformExecute =>
(compilerOptions, projectDirectory, projectType) =>
{
@@ -183,6 +199,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
private readonly CommonCompilerOptions _configurationBuildOptions;
private List> _propertyTransforms;
+ private List>> _removeContextTransformExecutes;
private List>> _includeContextTransformExecutes;
private readonly ITransformApplicator _transformApplicator;
@@ -229,6 +246,13 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
_propertyTransforms.AddRange(EmitEntryPointTransforms);
_propertyTransforms.AddRange(KeyFileTransforms);
+ _removeContextTransformExecutes =
+ new List>>()
+ {
+ RemoveCompileFilesTransformExecute,
+ RemoveEmbedFilesTransformExecute
+ };
+
_includeContextTransformExecutes =
new List>>()
{
@@ -311,6 +335,19 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
}
}
+ foreach (var removeContextTransformExecutes in _removeContextTransformExecutes)
+ {
+ var nonConfigurationOutput =
+ removeContextTransformExecutes(compilerOptions, projectDirectory, projectType);
+ var configurationOutput =
+ removeContextTransformExecutes(configurationCompilerOptions, projectDirectory, projectType);
+
+ if (configurationOutput != null)
+ {
+ transformApplicator.Execute(configurationOutput, itemGroup, mergeExisting: true);
+ }
+ }
+
foreach (var includeContextTransformExecute in _includeContextTransformExecutes)
{
var nonConfigurationOutput =
@@ -318,7 +355,6 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
var configurationOutput =
includeContextTransformExecute(configurationCompilerOptions, projectDirectory, projectType);
-
if (configurationOutput != null)
{
transformApplicator.Execute(configurationOutput, itemGroup, mergeExisting: true);
@@ -326,25 +362,6 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
}
}
- private void RemoveCommonIncludes(IEnumerable itemsToRemoveFrom,
- IEnumerable otherItems)
- {
- foreach (var item1 in itemsToRemoveFrom)
- {
- if (item1 == null)
- {
- continue;
- }
- foreach (
- var item2 in
- otherItems.Where(
- i => i != null && string.Equals(i.ItemType, item1.ItemType, StringComparison.Ordinal)))
- {
- item1.Include = string.Join(";", item1.Includes().Except(item2.Includes()));
- }
- }
- }
-
private bool PropertiesAreEqual(ProjectPropertyElement nonConfigurationOutput, ProjectPropertyElement configurationOutput)
{
if (configurationOutput != null && nonConfigurationOutput != null)
@@ -369,6 +386,19 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Rules
transformApplicator.Execute(transform.Transform(compilerOptions), propertyGroup, mergeExisting: true);
}
+ foreach (var removeContextTransformExecutes in _removeContextTransformExecutes)
+ {
+ var transform = removeContextTransformExecutes(compilerOptions, projectDirectory, projectType);
+
+ if (transform != null)
+ {
+ transformApplicator.Execute(
+ transform,
+ itemGroup,
+ mergeExisting: true);
+ }
+ }
+
foreach (var includeContextTransformExecute in _includeContextTransformExecutes)
{
var transform = includeContextTransformExecute(compilerOptions, projectDirectory, projectType);
diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/transforms/ConditionalTransform.cs b/src/Microsoft.DotNet.ProjectJsonMigration/transforms/ConditionalTransform.cs
index 099f553c2..7f5d1a984 100644
--- a/src/Microsoft.DotNet.ProjectJsonMigration/transforms/ConditionalTransform.cs
+++ b/src/Microsoft.DotNet.ProjectJsonMigration/transforms/ConditionalTransform.cs
@@ -1,7 +1,11 @@
// 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 Microsoft.DotNet.Tools.Common;
using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
namespace Microsoft.DotNet.ProjectJsonMigration.Transforms
{
@@ -25,5 +29,74 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Transforms
}
public abstract U ConditionallyTransform(T source);
+
+ protected string FormatGlobPatternsForMsbuild(IEnumerable patterns, string projectDirectory)
+ {
+ if (patterns == null)
+ {
+ return string.Empty;
+ }
+
+ List mutatedPatterns = new List(patterns.Count());
+
+ foreach (var pattern in patterns)
+ {
+ // Do not use forward slashes
+ // https://github.com/Microsoft/msbuild/issues/724
+ var mutatedPattern = pattern.Replace('/', '\\');
+
+ // MSBuild cannot copy directories
+ mutatedPattern = ReplaceDirectoriesWithGlobs(mutatedPattern, projectDirectory);
+
+ mutatedPatterns.Add(mutatedPattern);
+ }
+
+ return string.Join(";", mutatedPatterns);
+ }
+
+ private string ReplaceDirectoriesWithGlobs(string pattern, string projectDirectory)
+ {
+ if (PatternIsDirectory(pattern, projectDirectory))
+ {
+ return $"{pattern.TrimEnd(new char[] { '\\' })}\\**\\*";
+ }
+ else
+ {
+ return pattern;
+ }
+ }
+
+ private bool PatternIsDirectory(string pattern, string projectDirectory)
+ {
+ // TODO: what about /some/path/**/somedir?
+ // Should this even be migrated?
+ var path = pattern;
+
+ if (!Path.IsPathRooted(path))
+ {
+ path = Path.Combine(projectDirectory, path);
+ }
+
+ return Directory.Exists(path);
+ }
+
+ protected string ConvertTargetPathToMsbuildMetadata(string targetPath)
+ {
+ var targetIsFile = MappingsTargetPathIsFile(targetPath);
+
+ if (targetIsFile)
+ {
+ return targetPath;
+ }
+
+ return $"{targetPath}%(FileName)%(Extension)";
+ }
+
+ private bool MappingsTargetPathIsFile(string targetPath)
+ {
+ var normalizedTargetPath = PathUtility.GetPathWithDirectorySeparator(targetPath);
+
+ return normalizedTargetPath[normalizedTargetPath.Length - 1] != Path.DirectorySeparatorChar;
+ }
}
}
diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/transforms/IncludeContextTransform.cs b/src/Microsoft.DotNet.ProjectJsonMigration/transforms/IncludeContextTransform.cs
index 6fd504107..e71bcf923 100644
--- a/src/Microsoft.DotNet.ProjectJsonMigration/transforms/IncludeContextTransform.cs
+++ b/src/Microsoft.DotNet.ProjectJsonMigration/transforms/IncludeContextTransform.cs
@@ -172,80 +172,11 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Transforms
return transformSet.Select(t => t.Item1.Transform(t.Item2));
}
- protected string FormatGlobPatternsForMsbuild(IEnumerable patterns, string projectDirectory)
- {
- if (patterns == null)
- {
- return string.Empty;
- }
-
- List mutatedPatterns = new List(patterns.Count());
-
- foreach (var pattern in patterns)
- {
- // Do not use forward slashes
- // https://github.com/Microsoft/msbuild/issues/724
- var mutatedPattern = pattern.Replace('/', '\\');
-
- // MSBuild cannot copy directories
- mutatedPattern = ReplaceDirectoriesWithGlobs(mutatedPattern, projectDirectory);
-
- mutatedPatterns.Add(mutatedPattern);
- }
-
- return string.Join(";", mutatedPatterns);
- }
-
- private string ReplaceDirectoriesWithGlobs(string pattern, string projectDirectory)
- {
- if (PatternIsDirectory(pattern, projectDirectory))
- {
- return $"{pattern.TrimEnd(new char[] { '\\' })}\\**\\*";
- }
- else
- {
- return pattern;
- }
- }
-
private AddItemTransform AddMappingToTransform(
AddItemTransform addItemTransform,
string targetPath)
{
return _mappingsToTransfrom(addItemTransform, targetPath);
}
-
- private bool PatternIsDirectory(string pattern, string projectDirectory)
- {
- // TODO: what about /some/path/**/somedir?
- // Should this even be migrated?
- var path = pattern;
-
- if (!Path.IsPathRooted(path))
- {
- path = Path.Combine(projectDirectory, path);
- }
-
- return Directory.Exists(path);
- }
-
- private string ConvertTargetPathToMsbuildMetadata(string targetPath)
- {
- var targetIsFile = MappingsTargetPathIsFile(targetPath);
-
- if (targetIsFile)
- {
- return targetPath;
- }
-
- return $"{targetPath}%(FileName)%(Extension)";
- }
-
- private bool MappingsTargetPathIsFile(string targetPath)
- {
- var normalizedTargetPath = PathUtility.GetPathWithDirectorySeparator(targetPath);
-
- return normalizedTargetPath[normalizedTargetPath.Length - 1] != Path.DirectorySeparatorChar;
- }
}
}
diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/transforms/RemoveContextTransform.cs b/src/Microsoft.DotNet.ProjectJsonMigration/transforms/RemoveContextTransform.cs
new file mode 100644
index 000000000..1dae3a581
--- /dev/null
+++ b/src/Microsoft.DotNet.ProjectJsonMigration/transforms/RemoveContextTransform.cs
@@ -0,0 +1,110 @@
+// 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 Microsoft.DotNet.Internal.ProjectModel.Files;
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Linq;
+using Microsoft.Build.Construction;
+using Microsoft.DotNet.Cli.Utils;
+using Microsoft.DotNet.ProjectJsonMigration.Models;
+using Microsoft.DotNet.Tools.Common;
+
+namespace Microsoft.DotNet.ProjectJsonMigration.Transforms
+{
+ internal class RemoveContextTransform : ConditionalTransform>
+ {
+ protected virtual Func> RemoveTransformGetter =>
+ (itemName) => new RemoveItemTransform(
+ itemName,
+ includeContext =>
+ {
+ var fullRemoveSet = includeContext.ExcludePatterns.OrEmptyIfNull()
+ .Union(includeContext.ExcludeFiles.OrEmptyIfNull());
+
+ return FormatGlobPatternsForMsbuild(fullRemoveSet, includeContext.SourceBasePath);
+ },
+ includeContext =>
+ {
+ return includeContext != null &&
+ (
+ (includeContext.ExcludePatterns != null && includeContext.ExcludePatterns.Count > 0)
+ ||
+ (includeContext.ExcludeFiles != null && includeContext.ExcludeFiles.Count > 0)
+ );
+ });
+
+ private Func> MappingsRemoveTransformGetter =>
+ (itemName, targetPath) => AddMappingToTransform(RemoveTransformGetter(itemName), targetPath);
+
+ private Func, string, RemoveItemTransform> _mappingsToTransfrom;
+
+ private readonly string _itemName;
+ private readonly List> _metadata = new List>();
+
+ public RemoveContextTransform(
+ string itemName,
+ Func condition = null
+ ) : base(condition)
+ {
+ _itemName = itemName;
+
+ _mappingsToTransfrom = (removeItemTransform, targetPath) =>
+ {
+ var msbuildLinkMetadataValue = ConvertTargetPathToMsbuildMetadata(targetPath);
+
+ return removeItemTransform.WithMetadata("Link", msbuildLinkMetadataValue);
+ };
+ }
+
+ public override IEnumerable ConditionallyTransform(IncludeContext source)
+ {
+ var transformSet = CreateTransformSet(source);
+ return transformSet.Select(t => t.Item1.Transform(t.Item2));
+ }
+
+ private IEnumerable, IncludeContext>> CreateTransformSet(IncludeContext source)
+ {
+ var transformSet = new List, IncludeContext>>
+ {
+ Tuple.Create(RemoveTransformGetter(_itemName), source)
+ };
+
+ if (source == null)
+ {
+ return transformSet;
+ }
+
+ // Mappings must be executed before the transform set to prevent a the
+ // non-mapped items that will merge with mapped items from being encompassed
+ foreach (var mappingEntry in source.Mappings.OrEmptyIfNull())
+ {
+ var targetPath = mappingEntry.Key;
+ var includeContext = mappingEntry.Value;
+
+ transformSet.Insert(0,
+ Tuple.Create(
+ MappingsRemoveTransformGetter(_itemName, targetPath),
+ includeContext));
+ }
+
+ foreach (var metadataElement in _metadata)
+ {
+ foreach (var transform in transformSet)
+ {
+ transform.Item1.WithMetadata(metadataElement);
+ }
+ }
+
+ return transformSet;
+ }
+
+ private RemoveItemTransform AddMappingToTransform(
+ RemoveItemTransform removeItemTransform,
+ string targetPath)
+ {
+ return _mappingsToTransfrom(removeItemTransform, targetPath);
+ }
+ }
+}
diff --git a/src/Microsoft.DotNet.ProjectJsonMigration/transforms/RemoveItemTransform.cs b/src/Microsoft.DotNet.ProjectJsonMigration/transforms/RemoveItemTransform.cs
new file mode 100644
index 000000000..7833e4b8b
--- /dev/null
+++ b/src/Microsoft.DotNet.ProjectJsonMigration/transforms/RemoveItemTransform.cs
@@ -0,0 +1,69 @@
+// 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.Generic;
+using Microsoft.Build.Construction;
+using Microsoft.DotNet.ProjectJsonMigration.Models;
+
+namespace Microsoft.DotNet.ProjectJsonMigration.Transforms
+{
+ internal class RemoveItemTransform : ConditionalTransform
+ {
+ private readonly ProjectRootElement _itemObjectGenerator = ProjectRootElement.Create();
+
+ private readonly string _itemName;
+ private readonly Func _removeValueFunc;
+
+ private readonly List> _metadata = new List>();
+
+ public RemoveItemTransform(
+ string itemName,
+ Func removeValueFunc,
+ Func condition)
+ : base(condition)
+ {
+ _itemName = itemName;
+ _removeValueFunc = removeValueFunc;
+ }
+
+ public RemoveItemTransform WithMetadata(ItemMetadataValue metadata)
+ {
+ _metadata.Add(metadata);
+ return this;
+ }
+
+ public RemoveItemTransform WithMetadata(
+ string metadataName,
+ string metadataValue,
+ bool expressedAsAttribute = false)
+ {
+ _metadata.Add(new ItemMetadataValue(
+ metadataName,
+ metadataValue,
+ expressedAsAttribute: expressedAsAttribute));
+ return this;
+ }
+
+ public override ProjectItemElement ConditionallyTransform(T source)
+ {
+ string removeValue = _removeValueFunc(source);
+
+ var item = _itemObjectGenerator.AddItem(_itemName, "PlaceHolderSinceNullOrEmptyCannotBePassedToConstructor");
+ item.Include = null;
+ item.Remove = removeValue;
+
+ foreach (var metadata in _metadata)
+ {
+ if (metadata.ShouldWriteMetadata(source))
+ {
+ var metametadata = item.AddMetadata(metadata.MetadataName, metadata.GetMetadataValue(source));
+ metametadata.Condition = metadata.Condition;
+ metametadata.ExpressedAsAttribute = metadata.ExpressedAsAttribute;
+ }
+ }
+
+ return item;
+ }
+ }
+}
diff --git a/src/dotnet/CommandLine/CommandParsingException.cs b/src/dotnet/CommandLine/CommandParsingException.cs
index 375c17394..8eef0ea6f 100644
--- a/src/dotnet/CommandLine/CommandParsingException.cs
+++ b/src/dotnet/CommandLine/CommandParsingException.cs
@@ -2,6 +2,7 @@
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
+using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.Tools;
namespace Microsoft.DotNet.Cli.CommandLine
@@ -18,6 +19,8 @@ namespace Microsoft.DotNet.Cli.CommandLine
{
Command = command;
_isRequireSubCommandMissing = isRequireSubCommandMissing;
+
+ Data.Add("CLI_User_Displayed_Exception", true);
}
public CommandLineApplication Command { get; }
diff --git a/src/dotnet/MulticoreJitActivator.cs b/src/dotnet/MulticoreJitActivator.cs
index a22bb39ab..c222bab4c 100644
--- a/src/dotnet/MulticoreJitActivator.cs
+++ b/src/dotnet/MulticoreJitActivator.cs
@@ -4,7 +4,6 @@
using System;
using System.Runtime.Loader;
using Microsoft.DotNet.Cli.Utils;
-using Microsoft.DotNet.Cli.Utils.ExceptionExtensions;
using Microsoft.DotNet.Tools.Common;
namespace Microsoft.DotNet.Cli
diff --git a/src/dotnet/Program.cs b/src/dotnet/Program.cs
index e95d56aa4..47f8cc897 100644
--- a/src/dotnet/Program.cs
+++ b/src/dotnet/Program.cs
@@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.DotNet.Cli.Utils;
+using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Configurer;
using Microsoft.DotNet.PlatformAbstractions;
using Microsoft.DotNet.Tools.Add;
@@ -76,9 +77,11 @@ namespace Microsoft.DotNet.Cli
return ProcessArgs(args);
}
}
- catch (GracefulException e)
+ catch (Exception e) when (e.ShouldBeDisplayedAsError())
{
- Reporter.Error.WriteLine(CommandContext.IsVerbose() ? e.ToString().Red().Bold() : e.Message.Red().Bold());
+ Reporter.Error.WriteLine(CommandContext.IsVerbose() ?
+ e.ToString().Red().Bold() :
+ e.Message.Red().Bold());
return 1;
}
diff --git a/src/dotnet/commands/dotnet-build/Program.cs b/src/dotnet/commands/dotnet-build/Program.cs
index 64fb721e8..785d3b944 100644
--- a/src/dotnet/commands/dotnet-build/Program.cs
+++ b/src/dotnet/commands/dotnet-build/Program.cs
@@ -29,7 +29,7 @@ namespace Microsoft.DotNet.Tools.Build
CommandOption runtimeOption = app.Option(
$"-r|--runtime <{LocalizableStrings.RuntimeOptionName}>", LocalizableStrings.RuntimeOptionDescription,
CommandOptionType.SingleValue);
- CommandOption configurationOption = app.Option($"-c|--configuration <{LocalizableStrings.ConfigurationOptionName}>", LocalizableStrings.FrameworkOptionDescription, CommandOptionType.SingleValue);
+ CommandOption configurationOption = app.Option($"-c|--configuration <{LocalizableStrings.ConfigurationOptionName}>", LocalizableStrings.ConfigurationOptionDescription, CommandOptionType.SingleValue);
CommandOption versionSuffixOption = app.Option($"--version-suffix <{LocalizableStrings.VersionSuffixOptionName}>", LocalizableStrings.VersionSuffixOptionDescription, CommandOptionType.SingleValue);
CommandOption noIncrementalOption = app.Option("--no-incremental", LocalizableStrings.NoIncrementialOptionDescription, CommandOptionType.NoValue);
diff --git a/src/dotnet/commands/dotnet-new/CSharp_Mstest/$projectName$.csproj b/src/dotnet/commands/dotnet-new/CSharp_Mstest/$projectName$.csproj
index 229580c09..5c1b545d3 100644
--- a/src/dotnet/commands/dotnet-new/CSharp_Mstest/$projectName$.csproj
+++ b/src/dotnet/commands/dotnet-new/CSharp_Mstest/$projectName$.csproj
@@ -5,7 +5,7 @@
-
+
diff --git a/src/dotnet/commands/dotnet-new/CSharp_Xunittest/$projectName$.csproj b/src/dotnet/commands/dotnet-new/CSharp_Xunittest/$projectName$.csproj
index 22bf0da91..d9861e85f 100644
--- a/src/dotnet/commands/dotnet-new/CSharp_Xunittest/$projectName$.csproj
+++ b/src/dotnet/commands/dotnet-new/CSharp_Xunittest/$projectName$.csproj
@@ -5,7 +5,7 @@
-
+
diff --git a/src/dotnet/commands/dotnet-new/FSharp_Mstest/$projectName$.fsproj b/src/dotnet/commands/dotnet-new/FSharp_Mstest/$projectName$.fsproj
index fbccc158c..29391a64b 100644
--- a/src/dotnet/commands/dotnet-new/FSharp_Mstest/$projectName$.fsproj
+++ b/src/dotnet/commands/dotnet-new/FSharp_Mstest/$projectName$.fsproj
@@ -13,7 +13,7 @@
-
+
diff --git a/src/dotnet/commands/dotnet-new/FSharp_Xunittest/$projectName$.fsproj b/src/dotnet/commands/dotnet-new/FSharp_Xunittest/$projectName$.fsproj
index cbd1570f0..abe460164 100644
--- a/src/dotnet/commands/dotnet-new/FSharp_Xunittest/$projectName$.fsproj
+++ b/src/dotnet/commands/dotnet-new/FSharp_Xunittest/$projectName$.fsproj
@@ -13,7 +13,7 @@
-
+
diff --git a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/GivenAProjectMigrator.cs b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/GivenAProjectMigrator.cs
index e6ca62262..386c44d9b 100644
--- a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/GivenAProjectMigrator.cs
+++ b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/GivenAProjectMigrator.cs
@@ -43,7 +43,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
public void ItHasWarningWhenMigratingADeprecatedProjectJson()
{
var testProjectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompileOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedCompile")
.CreateInstance()
.WithSourceFiles()
.Root
@@ -69,7 +69,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
public void ItHasErrorWhenMigratingADeprecatedNamedResourceOptionProjectJson()
{
var testProjectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedNamedResourceOption")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedNamedResource")
.CreateInstance()
.WithSourceFiles()
.Root
diff --git a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigrateBuildOptions.cs b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigrateBuildOptions.cs
index e2dd297fc..521618155 100644
--- a/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigrateBuildOptions.cs
+++ b/test/Microsoft.DotNet.ProjectJsonMigration.Tests/Rules/GivenThatIWantToMigrateBuildOptions.cs
@@ -193,8 +193,8 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
}
}");
- mockProj.Properties.Count(p => p.Name == "WarningsAsErrors").Should().Be(1);
- mockProj.Properties.First(p => p.Name == "WarningsAsErrors").Value.Should().Be("true");
+ mockProj.Properties.Count(p => p.Name == "TreatWarningsAsErrors").Should().Be(1);
+ mockProj.Properties.First(p => p.Name == "TreatWarningsAsErrors").Value.Should().Be("true");
mockProj = RunBuildOptionsRuleOnPj(@"
{
@@ -203,7 +203,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
}
}");
- mockProj.Properties.Count(p => p.Name == "WarningsAsErrors").Should().Be(0);
+ mockProj.Properties.Count(p => p.Name == "TreatWarningsAsErrors").Should().Be(0);
}
[Fact]
@@ -420,12 +420,13 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
}
[Theory]
- [InlineData("compile", "Compile", "")]
- [InlineData("embed", "EmbeddedResource", ";rootfile.cs")]
- [InlineData("copyToOutput", "Content", ";rootfile.cs")]
+ [InlineData("compile", "Compile", 3, "")]
+ [InlineData("embed", "EmbeddedResource", 3, ";rootfile.cs")]
+ [InlineData("copyToOutput", "Content", 2, ";rootfile.cs")]
private void MigratingGroupIncludeExcludePopulatesAppropriateProjectItemElement(
string group,
string itemName,
+ int expectedNumberOfCompileItems,
string expectedRootFiles)
{
var testDirectory = Temp.CreateDirectory().Path;
@@ -446,7 +447,8 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
var mockProj = RunBuildOptionsRuleOnPj(pj,
testDirectory: testDirectory);
- mockProj.Items.Count(i => i.ItemType.Equals(itemName, StringComparison.Ordinal)).Should().Be(2);
+ mockProj.Items.Count(i => i.ItemType.Equals(itemName, StringComparison.Ordinal))
+ .Should().Be(expectedNumberOfCompileItems);
var defaultIncludePatterns = GetDefaultIncludePatterns(group);
var defaultExcludePatterns = GetDefaultExcludePatterns(group);
@@ -455,7 +457,12 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
{
VerifyContentMetadata(item);
- if (item.Include.Contains(@"src\file1.cs"))
+ if (string.IsNullOrEmpty(item.Include))
+ {
+ item.Remove.Should()
+ .Be(@"src\**\*;rootfile.cs;src\file2.cs");
+ }
+ else if (item.Include.Contains(@"src\file1.cs"))
{
item.Include.Should().Be(@"src\file1.cs;src\file2.cs");
item.Exclude.Should().Be(@"src\file2.cs");
diff --git a/test/dotnet-migrate.Tests/GivenThatIWantToMigrateDeprecatedProjects.cs b/test/dotnet-migrate.Tests/GivenThatIWantToMigrateDeprecatedProjects.cs
index c80911fc7..5c6813bc8 100644
--- a/test/dotnet-migrate.Tests/GivenThatIWantToMigrateDeprecatedProjects.cs
+++ b/test/dotnet-migrate.Tests/GivenThatIWantToMigrateDeprecatedProjects.cs
@@ -15,10 +15,10 @@ namespace Microsoft.DotNet.Migration.Tests
public class GivenThatIWantToMigrateDeprecatedProjects : TestBase
{
[Fact]
- public void WhenMigratingAProjectWithDeprecatedPackOptionsWarningsArePrinted()
+ public void WhenMigratingDeprecatedPackOptionsWarningsArePrinted()
{
var projectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedPackOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedPack")
.CreateInstance()
.WithSourceFiles()
.Root;
@@ -52,10 +52,10 @@ namespace Microsoft.DotNet.Migration.Tests
}
[Fact]
- public void WhenMigratingAProjectWithDeprecatedPackOptionsItSucceeds()
+ public void MigrateDeprecatedPack()
{
var projectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedPackOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedPack")
.CreateInstance()
.WithSourceFiles()
.Root;
@@ -82,17 +82,17 @@ namespace Microsoft.DotNet.Migration.Tests
var outputDir = projectDirectory.GetDirectory("bin", "Debug");
outputDir.Should().Exist()
- .And.HaveFile("PJAppWithDeprecatedPackOptions.1.0.0.nupkg");
+ .And.HaveFile("PJDeprecatedPack.1.0.0.nupkg");
- var outputPackage = outputDir.GetFile("PJAppWithDeprecatedPackOptions.1.0.0.nupkg");
+ var outputPackage = outputDir.GetFile("PJDeprecatedPack.1.0.0.nupkg");
var zip = ZipFile.Open(outputPackage.FullName, ZipArchiveMode.Read);
- zip.Entries.Should().Contain(e => e.FullName == "PJAppWithDeprecatedPackOptions.nuspec")
+ zip.Entries.Should().Contain(e => e.FullName == "PJDeprecatedPack.nuspec")
.And.Contain(e => e.FullName == "content/Content1.txt")
.And.Contain(e => e.FullName == "content/Content2.txt");
var manifestReader = new StreamReader(
- zip.Entries.First(e => e.FullName == "PJAppWithDeprecatedPackOptions.nuspec").Open());
+ zip.Entries.First(e => e.FullName == "PJDeprecatedPack.nuspec").Open());
// NOTE: Commented out those that are not migrated.
// https://microsoft.sharepoint.com/teams/netfx/corefx/_layouts/15/WopiFrame.aspx?sourcedoc=%7B0cfbc196-0645-4781-84c6-5dffabd76bee%7D&action=edit&wd=target%28Planning%2FMSBuild%20CLI%20integration%2Eone%7C41D470DD-CF44-4595-8E05-0CE238864B55%2FProject%2Ejson%20Migration%7CA553D979-EBC6-484B-A12E-036E0730864A%2F%29
@@ -120,10 +120,10 @@ namespace Microsoft.DotNet.Migration.Tests
}
[Fact]
- public void WhenMigratingAProjectWithDeprecatedCompilationOptionsWarningsArePrinted()
+ public void WhenMigratingDeprecatedCompilationOptionsWarningsArePrinted()
{
var projectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompilationOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedCompilation")
.CreateInstance()
.WithSourceFiles()
.Root;
@@ -141,10 +141,10 @@ namespace Microsoft.DotNet.Migration.Tests
}
[Fact]
- public void WhenMigratingAProjectWithDeprecatedCompilationOptionsItSucceeds()
+ public void MigratingDeprecatedCompilation()
{
var projectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompilationOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedCompilation")
.CreateInstance()
.WithSourceFiles()
.Root;
@@ -166,10 +166,10 @@ namespace Microsoft.DotNet.Migration.Tests
}
[Fact]
- public void WhenMigratingAProjectWithDeprecatedContentOptionsWarningsArePrinted()
+ public void WhenMigratingDeprecatedContentOptionsWarningsArePrinted()
{
var projectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedContentOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedContent")
.CreateInstance()
.WithSourceFiles()
.Root;
@@ -191,10 +191,10 @@ namespace Microsoft.DotNet.Migration.Tests
}
[Fact]
- public void WhenMigratingAProjectWithDeprecatedContentOptionsItSucceeds()
+ public void MigratingDeprecatedContent()
{
var projectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedContentOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedContent")
.CreateInstance()
.WithSourceFiles()
.Root
@@ -248,10 +248,10 @@ namespace Microsoft.DotNet.Migration.Tests
}
[Fact]
- public void WhenMigratingAProjectWithDeprecatedCompileOptionsWarningsArePrinted()
+ public void WhenMigratingDeprecatedCompileOptionsWarningsArePrinted()
{
var projectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompileOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedCompile")
.CreateInstance()
.WithSourceFiles()
.Root;
@@ -269,10 +269,10 @@ namespace Microsoft.DotNet.Migration.Tests
}
[Fact]
- public void WhenMigratingAProjectWithDeprecatedCompileOptionsItSucceeds()
+ public void MigratingDeprecatedCompile()
{
var projectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompileOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedCompile")
.CreateInstance()
.WithSourceFiles()
.Root
@@ -295,10 +295,10 @@ namespace Microsoft.DotNet.Migration.Tests
}
[Fact]
- public void WhenMigratingAProjectWithDeprecatedCompileBuiltInOptionsWarningsArePrinted()
+ public void WhenMigratingDeprecatedCompileBuiltInOptionsWarningsArePrinted()
{
var projectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompileBuiltInOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedCompileBuiltIn")
.CreateInstance()
.WithSourceFiles()
.Root;
@@ -314,10 +314,10 @@ namespace Microsoft.DotNet.Migration.Tests
}
[Fact]
- public void WhenMigratingAProjectWithDeprecatedCompileBuiltInOptionsItSucceeds()
+ public void MigratingDeprecatedCompileBuiltIn()
{
var projectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompileBuiltInOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedCompileBuiltIn")
.CreateInstance()
.WithSourceFiles()
.Root
@@ -341,10 +341,10 @@ namespace Microsoft.DotNet.Migration.Tests
}
[Fact]
- public void WhenMigratingAProjectWithDeprecatedCompileExcludeOptionsWarningsArePrinted()
+ public void WhenMigratingDeprecatedCompileExcludeOptionsWarningsArePrinted()
{
var projectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompileExcludeOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedCompileExclude")
.CreateInstance()
.WithSourceFiles()
.Root;
@@ -360,10 +360,10 @@ namespace Microsoft.DotNet.Migration.Tests
}
[Fact]
- public void WhenMigratingAProjectWithDeprecatedCompileExcludeOptionsItSucceeds()
+ public void MigratingDeprecatedCompileExclude()
{
var projectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompileExcludeOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedCompileExclude")
.CreateInstance()
.WithSourceFiles()
.Root;
@@ -378,18 +378,17 @@ namespace Microsoft.DotNet.Migration.Tests
.Execute("restore")
.Should().Pass();
- // Issue: https://github.com/dotnet/cli/issues/5461
- //new DotnetCommand()
- // .WithWorkingDirectory(projectDirectory)
- // .Execute("build -c Debug")
- // .Should().Pass();
+ new DotnetCommand()
+ .WithWorkingDirectory(projectDirectory)
+ .Execute("build -c Debug")
+ .Should().Pass();
}
[Fact]
- public void WhenMigratingAProjectWithDeprecatedResourceOptionsWarningsArePrinted()
+ public void WhenMigratingDeprecatedResourceOptionsWarningsArePrinted()
{
var projectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedResourceOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedResource")
.CreateInstance()
.WithSourceFiles()
.Root
@@ -408,10 +407,10 @@ namespace Microsoft.DotNet.Migration.Tests
}
[Fact]
- public void WhenMigratingAProjectWithDeprecatedResourceOptionsItSucceeds()
+ public void MigratingDeprecatedResource()
{
var projectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedResourceOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedResource")
.CreateInstance()
.WithSourceFiles()
.Root
@@ -440,10 +439,10 @@ namespace Microsoft.DotNet.Migration.Tests
}
[Fact]
- public void WhenMigratingAProjectWithDeprecatedResourceBuiltInOptionsWarningsArePrinted()
+ public void WhenMigratingDeprecatedResourceBuiltInOptionsWarningsArePrinted()
{
var projectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedResourceBuiltInOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedResourceBuiltIn")
.CreateInstance()
.WithSourceFiles()
.Root
@@ -460,10 +459,10 @@ namespace Microsoft.DotNet.Migration.Tests
}
[Fact]
- public void WhenMigratingDeprecatedBuiltInResItSucceeds()
+ public void MigratingDeprecatedResourceBuiltIn()
{
var projectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedResourceBuiltInOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedResourceBuiltIn")
.CreateInstance()
.WithSourceFiles()
.Root
@@ -493,10 +492,10 @@ namespace Microsoft.DotNet.Migration.Tests
}
[Fact]
- public void WhenMigratingAProjectWithDeprecatedResourceExcludeOptionsWarningsArePrinted()
+ public void WhenMigratingDeprecatedResourceExcludeOptionsWarningsArePrinted()
{
var projectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedResourceExcludeOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedResourceExclude")
.CreateInstance()
.WithSourceFiles()
.Root;
@@ -512,10 +511,10 @@ namespace Microsoft.DotNet.Migration.Tests
}
[Fact]
- public void WhenMigratingAProjectWithDeprecatedResourceExcludeOptionsItSucceeds()
+ public void MigratingDeprecatedResourceExclude()
{
var projectDirectory = TestAssets
- .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedResourceExcludeOptions")
+ .GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJDeprecatedResourceExclude")
.CreateInstance()
.WithSourceFiles()
.Root;
@@ -530,17 +529,16 @@ namespace Microsoft.DotNet.Migration.Tests
.Execute("restore")
.Should().Pass();
- // Issue: https://github.com/dotnet/cli/issues/5461
- //new DotnetCommand()
- // .WithWorkingDirectory(projectDirectory)
- // .Execute("build -c Debug")
- // .Should().Pass();
+ new DotnetCommand()
+ .WithWorkingDirectory(projectDirectory)
+ .Execute("build -c Debug")
+ .Should().Pass();
- //var cmd = new DotnetCommand()
- // .WithWorkingDirectory(projectDirectory)
- // .ExecuteWithCapturedOutput("run -c Debug");
- //cmd.Should().Pass();
- //cmd.StdOut.Should().Contain("0 Resources Found:");
+ var cmd = new DotnetCommand()
+ .WithWorkingDirectory(projectDirectory)
+ .ExecuteWithCapturedOutput("run -c Debug");
+ cmd.Should().Pass();
+ cmd.StdOut.Should().Contain("0 Resources Found:");
}
}
}
diff --git a/test/dotnet-new.Tests/NewCommandTests.cs b/test/dotnet-new.Tests/NewCommandTests.cs
new file mode 100644
index 000000000..2ab41b0a6
--- /dev/null
+++ b/test/dotnet-new.Tests/NewCommandTests.cs
@@ -0,0 +1,26 @@
+// 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 FluentAssertions;
+using Microsoft.DotNet.Tools.Test.Utilities;
+using System;
+using System.Linq;
+using Xunit;
+using Xunit.Abstractions;
+
+namespace Microsoft.DotNet.New.Tests
+{
+ public class NewCommandTests
+ {
+ [Fact]
+ public void WhenSwitchIsSkippedThenItPrintsError()
+ {
+ var cmd = new DotnetCommand().Execute("new Web1.1");
+
+ cmd.ExitCode.Should().NotBe(0);
+
+ cmd.StdErr.Should().Be("Unrecognized command or argument 'Web1.1'");
+ cmd.StdOut.Should().Be("Specify --help for a list of available options and commands.");
+ }
+ }
+}