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-remove.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.
|
||||
{0}</value>
|
||||
</data>
|
||||
<data name="RunCommandSpecifiecFileIsNotAValidProject" xml:space="preserve">
|
||||
<value>'{0}' is not a valid project file.</value>
|
||||
</data>
|
||||
</root>
|
|
@ -6,6 +6,7 @@ using System.Collections.Generic;
|
|||
using System.IO;
|
||||
using System.Linq;
|
||||
using Microsoft.Build.Evaluation;
|
||||
using Microsoft.Build.Exceptions;
|
||||
using Microsoft.DotNet.Cli.Utils;
|
||||
using Microsoft.DotNet.Tools;
|
||||
using Microsoft.DotNet.Tools.MSBuild;
|
||||
|
@ -39,17 +40,26 @@ namespace Microsoft.DotNet.Tools.Run
|
|||
EnsureProjectIsBuilt();
|
||||
}
|
||||
|
||||
ICommand runCommand = GetRunCommand();
|
||||
int launchSettingsApplicationResult = ApplyLaunchProfileSettingsIfNeeded(ref runCommand);
|
||||
|
||||
if (launchSettingsApplicationResult != 0)
|
||||
try
|
||||
{
|
||||
return launchSettingsApplicationResult;
|
||||
}
|
||||
ICommand runCommand = GetRunCommand();
|
||||
int launchSettingsApplicationResult = ApplyLaunchProfileSettingsIfNeeded(ref runCommand);
|
||||
|
||||
return runCommand
|
||||
.Execute()
|
||||
.ExitCode;
|
||||
if (launchSettingsApplicationResult != 0)
|
||||
{
|
||||
return launchSettingsApplicationResult;
|
||||
}
|
||||
|
||||
return runCommand
|
||||
.Execute()
|
||||
.ExitCode;
|
||||
}
|
||||
catch (InvalidProjectFileException e)
|
||||
{
|
||||
throw new GracefulException(
|
||||
string.Format(LocalizableStrings.RunCommandSpecifiecFileIsNotAValidProject, Project),
|
||||
e);
|
||||
}
|
||||
}
|
||||
|
||||
public RunCommand(string configuration,
|
||||
|
|
|
@ -136,6 +136,11 @@ Aktuální {1} je {2}.</target>
|
|||
{0}</target>
|
||||
<note />
|
||||
</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>
|
||||
</file>
|
||||
</xliff>
|
|
@ -136,6 +136,11 @@ Ein ausführbares Projekt sollte ein ausführbares TFM (z.B. netcoreapp2.0) verw
|
|||
{0}</target>
|
||||
<note />
|
||||
</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>
|
||||
</file>
|
||||
</xliff>
|
|
@ -136,6 +136,11 @@ El actual {1} es '{2}'.</target>
|
|||
{0}</target>
|
||||
<note />
|
||||
</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>
|
||||
</file>
|
||||
</xliff>
|
|
@ -136,6 +136,11 @@ Le {1} actuel est '{2}'.</target>
|
|||
{0}</target>
|
||||
<note />
|
||||
</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>
|
||||
</file>
|
||||
</xliff>
|
|
@ -136,6 +136,11 @@ Il valore corrente di {1} è '{2}'.</target>
|
|||
{0}</target>
|
||||
<note />
|
||||
</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>
|
||||
</file>
|
||||
</xliff>
|
|
@ -136,6 +136,11 @@ The current {1} is '{2}'.</source>
|
|||
{0}</target>
|
||||
<note />
|
||||
</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>
|
||||
</file>
|
||||
</xliff>
|
|
@ -136,6 +136,11 @@ The current {1} is '{2}'.</source>
|
|||
{0}</target>
|
||||
<note />
|
||||
</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>
|
||||
</file>
|
||||
</xliff>
|
|
@ -136,6 +136,11 @@ Bieżący element {1}: „{2}”.</target>
|
|||
{0}</target>
|
||||
<note />
|
||||
</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>
|
||||
</file>
|
||||
</xliff>
|
|
@ -136,6 +136,11 @@ O {1} atual é '{2}'.</target>
|
|||
{0}</target>
|
||||
<note />
|
||||
</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>
|
||||
</file>
|
||||
</xliff>
|
|
@ -136,6 +136,11 @@ The current {1} is '{2}'.</source>
|
|||
{0}</target>
|
||||
<note />
|
||||
</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>
|
||||
</file>
|
||||
</xliff>
|
|
@ -136,6 +136,11 @@ Geçerli {1}: '{2}'.</target>
|
|||
{0}</target>
|
||||
<note />
|
||||
</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>
|
||||
</file>
|
||||
</xliff>
|
|
@ -136,6 +136,11 @@ The current {1} is '{2}'.</source>
|
|||
{0}</target>
|
||||
<note />
|
||||
</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>
|
||||
</file>
|
||||
</xliff>
|
|
@ -136,6 +136,11 @@ The current {1} is '{2}'.</source>
|
|||
{0}</target>
|
||||
<note />
|
||||
</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>
|
||||
</file>
|
||||
</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>
|
||||
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
|
||||
<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>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Microsoft.DotNet.Tools.Tests.Utilities\Microsoft.DotNet.Tools.Tests.Utilities.csproj" />
|
||||
<ProjectReference Include="..\..\src\dotnet\dotnet.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
Loading…
Add table
Reference in a new issue