Handling an exception that happens when dotnet run is invoked with a file that is not a valid project file. We catch that exception and re-throw it as a GracefulException.
This commit is contained in:
parent
f4d884a03d
commit
37f531be4c
18 changed files with 127 additions and 9 deletions
|
@ -16,3 +16,4 @@ using System.Runtime.CompilerServices;
|
||||||
[assembly: InternalsVisibleTo("dotnet-sln-list.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
[assembly: InternalsVisibleTo("dotnet-sln-list.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
[assembly: InternalsVisibleTo("dotnet-sln-remove.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
[assembly: InternalsVisibleTo("dotnet-sln-remove.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
[assembly: InternalsVisibleTo("dotnet-msbuild.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
[assembly: InternalsVisibleTo("dotnet-msbuild.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
|
[assembly: InternalsVisibleTo("dotnet-run.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||||
|
|
|
@ -196,4 +196,7 @@ The current {1} is '{2}'.</value>
|
||||||
<value>An error was encountered when reading launchSettings.json.
|
<value>An error was encountered when reading launchSettings.json.
|
||||||
{0}</value>
|
{0}</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="RunCommandSpecifiecFileIsNotAValidProject" xml:space="preserve">
|
||||||
|
<value>'{0}' is not a valid project file.</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -6,6 +6,7 @@ using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Microsoft.Build.Evaluation;
|
using Microsoft.Build.Evaluation;
|
||||||
|
using Microsoft.Build.Exceptions;
|
||||||
using Microsoft.DotNet.Cli.Utils;
|
using Microsoft.DotNet.Cli.Utils;
|
||||||
using Microsoft.DotNet.Tools;
|
using Microsoft.DotNet.Tools;
|
||||||
using Microsoft.DotNet.Tools.MSBuild;
|
using Microsoft.DotNet.Tools.MSBuild;
|
||||||
|
@ -39,17 +40,26 @@ namespace Microsoft.DotNet.Tools.Run
|
||||||
EnsureProjectIsBuilt();
|
EnsureProjectIsBuilt();
|
||||||
}
|
}
|
||||||
|
|
||||||
ICommand runCommand = GetRunCommand();
|
try
|
||||||
int launchSettingsApplicationResult = ApplyLaunchProfileSettingsIfNeeded(ref runCommand);
|
|
||||||
|
|
||||||
if (launchSettingsApplicationResult != 0)
|
|
||||||
{
|
{
|
||||||
return launchSettingsApplicationResult;
|
ICommand runCommand = GetRunCommand();
|
||||||
}
|
int launchSettingsApplicationResult = ApplyLaunchProfileSettingsIfNeeded(ref runCommand);
|
||||||
|
|
||||||
return runCommand
|
if (launchSettingsApplicationResult != 0)
|
||||||
.Execute()
|
{
|
||||||
.ExitCode;
|
return launchSettingsApplicationResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
return runCommand
|
||||||
|
.Execute()
|
||||||
|
.ExitCode;
|
||||||
|
}
|
||||||
|
catch (InvalidProjectFileException e)
|
||||||
|
{
|
||||||
|
throw new GracefulException(
|
||||||
|
string.Format(LocalizableStrings.RunCommandSpecifiecFileIsNotAValidProject, Project),
|
||||||
|
e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public RunCommand(string configuration,
|
public RunCommand(string configuration,
|
||||||
|
|
|
@ -136,6 +136,11 @@ Aktuální {1} je {2}.</target>
|
||||||
{0}</target>
|
{0}</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="RunCommandSpecifiecFileIsNotAValidProject">
|
||||||
|
<source>'{0}' is not a valid project file.</source>
|
||||||
|
<target state="new">'{0}' is not a valid project file.</target>
|
||||||
|
<note />
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
|
@ -136,6 +136,11 @@ Ein ausführbares Projekt sollte ein ausführbares TFM (z.B. netcoreapp2.0) verw
|
||||||
{0}</target>
|
{0}</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="RunCommandSpecifiecFileIsNotAValidProject">
|
||||||
|
<source>'{0}' is not a valid project file.</source>
|
||||||
|
<target state="new">'{0}' is not a valid project file.</target>
|
||||||
|
<note />
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
|
@ -136,6 +136,11 @@ El actual {1} es '{2}'.</target>
|
||||||
{0}</target>
|
{0}</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="RunCommandSpecifiecFileIsNotAValidProject">
|
||||||
|
<source>'{0}' is not a valid project file.</source>
|
||||||
|
<target state="new">'{0}' is not a valid project file.</target>
|
||||||
|
<note />
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
|
@ -136,6 +136,11 @@ Le {1} actuel est '{2}'.</target>
|
||||||
{0}</target>
|
{0}</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="RunCommandSpecifiecFileIsNotAValidProject">
|
||||||
|
<source>'{0}' is not a valid project file.</source>
|
||||||
|
<target state="new">'{0}' is not a valid project file.</target>
|
||||||
|
<note />
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
|
@ -136,6 +136,11 @@ Il valore corrente di {1} è '{2}'.</target>
|
||||||
{0}</target>
|
{0}</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="RunCommandSpecifiecFileIsNotAValidProject">
|
||||||
|
<source>'{0}' is not a valid project file.</source>
|
||||||
|
<target state="new">'{0}' is not a valid project file.</target>
|
||||||
|
<note />
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
|
@ -136,6 +136,11 @@ The current {1} is '{2}'.</source>
|
||||||
{0}</target>
|
{0}</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="RunCommandSpecifiecFileIsNotAValidProject">
|
||||||
|
<source>'{0}' is not a valid project file.</source>
|
||||||
|
<target state="new">'{0}' is not a valid project file.</target>
|
||||||
|
<note />
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
|
@ -136,6 +136,11 @@ The current {1} is '{2}'.</source>
|
||||||
{0}</target>
|
{0}</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="RunCommandSpecifiecFileIsNotAValidProject">
|
||||||
|
<source>'{0}' is not a valid project file.</source>
|
||||||
|
<target state="new">'{0}' is not a valid project file.</target>
|
||||||
|
<note />
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
|
@ -136,6 +136,11 @@ Bieżący element {1}: „{2}”.</target>
|
||||||
{0}</target>
|
{0}</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="RunCommandSpecifiecFileIsNotAValidProject">
|
||||||
|
<source>'{0}' is not a valid project file.</source>
|
||||||
|
<target state="new">'{0}' is not a valid project file.</target>
|
||||||
|
<note />
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
|
@ -136,6 +136,11 @@ O {1} atual é '{2}'.</target>
|
||||||
{0}</target>
|
{0}</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="RunCommandSpecifiecFileIsNotAValidProject">
|
||||||
|
<source>'{0}' is not a valid project file.</source>
|
||||||
|
<target state="new">'{0}' is not a valid project file.</target>
|
||||||
|
<note />
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
|
@ -136,6 +136,11 @@ The current {1} is '{2}'.</source>
|
||||||
{0}</target>
|
{0}</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="RunCommandSpecifiecFileIsNotAValidProject">
|
||||||
|
<source>'{0}' is not a valid project file.</source>
|
||||||
|
<target state="new">'{0}' is not a valid project file.</target>
|
||||||
|
<note />
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
|
@ -136,6 +136,11 @@ Geçerli {1}: '{2}'.</target>
|
||||||
{0}</target>
|
{0}</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="RunCommandSpecifiecFileIsNotAValidProject">
|
||||||
|
<source>'{0}' is not a valid project file.</source>
|
||||||
|
<target state="new">'{0}' is not a valid project file.</target>
|
||||||
|
<note />
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
|
@ -136,6 +136,11 @@ The current {1} is '{2}'.</source>
|
||||||
{0}</target>
|
{0}</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="RunCommandSpecifiecFileIsNotAValidProject">
|
||||||
|
<source>'{0}' is not a valid project file.</source>
|
||||||
|
<target state="new">'{0}' is not a valid project file.</target>
|
||||||
|
<note />
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
|
@ -136,6 +136,11 @@ The current {1} is '{2}'.</source>
|
||||||
{0}</target>
|
{0}</target>
|
||||||
<note />
|
<note />
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="RunCommandSpecifiecFileIsNotAValidProject">
|
||||||
|
<source>'{0}' is not a valid project file.</source>
|
||||||
|
<target state="new">'{0}' is not a valid project file.</target>
|
||||||
|
<note />
|
||||||
|
</trans-unit>
|
||||||
</body>
|
</body>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
|
@ -0,0 +1,35 @@
|
||||||
|
// 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.IO;
|
||||||
|
using FluentAssertions;
|
||||||
|
using Microsoft.DotNet.TestFramework;
|
||||||
|
using Microsoft.DotNet.Tools.Test.Utilities;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.Cli.Run.Tests
|
||||||
|
{
|
||||||
|
public class GivenThatWeCanPassNonProjectFilesToDotnetRun : TestBase
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void ItFailsWithAnAppropriateErrorMessage()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.Get("SlnFileWithNoProjectReferences")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root
|
||||||
|
.FullName;
|
||||||
|
|
||||||
|
var slnFullPath = Path.Combine(projectDirectory, "SlnFileWithNoProjectReferences.sln");
|
||||||
|
|
||||||
|
new RunCommand()
|
||||||
|
.ExecuteWithCapturedOutput($"-p {slnFullPath}")
|
||||||
|
.Should().Fail()
|
||||||
|
.And.HaveStdErrContaining(
|
||||||
|
string.Format(
|
||||||
|
Microsoft.DotNet.Tools.Run.LocalizableStrings.RunCommandSpecifiecFileIsNotAValidProject,
|
||||||
|
slnFullPath));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,11 +6,15 @@
|
||||||
<RuntimeFrameworkVersion>$(CLI_SharedFrameworkVersion)</RuntimeFrameworkVersion>
|
<RuntimeFrameworkVersion>$(CLI_SharedFrameworkVersion)</RuntimeFrameworkVersion>
|
||||||
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
|
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
|
||||||
<AssemblyName>dotnet-run.Tests</AssemblyName>
|
<AssemblyName>dotnet-run.Tests</AssemblyName>
|
||||||
|
<AssemblyOriginatorKeyFile>../../tools/Key.snk</AssemblyOriginatorKeyFile>
|
||||||
|
<SignAssembly>true</SignAssembly>
|
||||||
|
<PublicSign Condition=" '$(OS)' != 'Windows_NT' ">true</PublicSign>
|
||||||
<AssetTargetFallback>$(AssetTargetFallback);dotnet5.4;portable-net451+win8</AssetTargetFallback>
|
<AssetTargetFallback>$(AssetTargetFallback);dotnet5.4;portable-net451+win8</AssetTargetFallback>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Microsoft.DotNet.Tools.Tests.Utilities\Microsoft.DotNet.Tools.Tests.Utilities.csproj" />
|
<ProjectReference Include="..\Microsoft.DotNet.Tools.Tests.Utilities\Microsoft.DotNet.Tools.Tests.Utilities.csproj" />
|
||||||
|
<ProjectReference Include="..\..\src\dotnet\dotnet.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
Loading…
Add table
Reference in a new issue