dotnet crashes with an unresolved 'platform' dependency.

Fixed by calling TryGetValue instead of a dictionary indexer when looking up platform dependencies in ProjectContextBuilder.

Fix #2693
This commit is contained in:
Eric Erhardt 2016-05-11 17:31:11 -05:00
parent 6482aa0221
commit 17175864cf
5 changed files with 66 additions and 1 deletions

View file

@ -0,0 +1,12 @@
using System;
namespace ConsoleApplication
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}

View file

@ -0,0 +1,17 @@
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"ThisIsNotARealDependencyAndIfSomeoneGoesAndAddsAProjectWithThisNameIWillFindThemAndPunishThem": {
"type": "platform",
"version": "1.0.0"
}
},
"frameworks": {
"netcoreapp1.0": {
"imports": "dnxcore50"
}
}
}

View file

@ -277,7 +277,7 @@ namespace Microsoft.DotNet.ProjectModel
if (platformDependency != null) if (platformDependency != null)
{ {
platformLibrary = libraries[new LibraryKey(platformDependency.Value.Name)]; libraries.TryGetValue(new LibraryKey(platformDependency.Value.Name), out platformLibrary);
} }
} }
} }

View file

@ -0,0 +1,36 @@
// 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.Tools.Test.Utilities;
using Xunit;
namespace Microsoft.DotNet.Tests
{
public class GivenThatDotNetRunsCommands : TestBase
{
[Fact]
public void UnresolvedPlatformReferencesFailAsExpected()
{
var testAssetsManager = GetTestGroupTestAssetsManager("NonRestoredTestProjects");
var testInstance = testAssetsManager.CreateTestInstance("TestProjectWithUnresolvedPlatformDependency");
new RestoreCommand()
.WithWorkingDirectory(testInstance.TestRoot)
.Execute()
.Should()
.Fail();
new DirectoryInfo(testInstance.TestRoot)
.Should()
.HaveFile("project.lock.json");
new DotnetCommand()
.ExecuteWithCapturedOutput("crash")
.Should()
.Fail()
.And
.HaveStdErrContaining("No executable found matching command \"dotnet-crash\"");
}
}
}