add compat checks to dotnet add

This commit is contained in:
Krzysztof Wicher 2016-12-08 12:59:14 -08:00
parent 79e6126b2a
commit 84e4da57cc
4 changed files with 138 additions and 10 deletions

View file

@ -3,7 +3,9 @@
using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Utils;
using NuGet.Frameworks;
using System.Collections.Generic;
using System.Linq;
namespace Microsoft.DotNet.Tools.Add.ProjectToProjectReference
{
@ -51,10 +53,43 @@ namespace Microsoft.DotNet.Tools.Add.ProjectToProjectReference
throw new GracefulException(LocalizableStrings.SpecifyAtLeastOneReferenceToAdd);
}
string frameworkString = frameworkOption.Value();
List<string> references = app.RemainingArguments;
if (!forceOption.HasValue())
{
MsbuildProject.EnsureAllReferencesExist(references);
IEnumerable<MsbuildProject> refs = references.Select((r) => MsbuildProject.FromFile(r));
if (frameworkString == null)
{
foreach (var tfm in msbuildProj.GetTargetFrameworks())
{
foreach (var r in refs)
{
if (!r.CanWorkOnFramework(tfm))
{
throw new GracefulException(string.Format(CommonLocalizableStrings.ProjectNotCompatibleWithFramework, r.ProjectRoot.FullPath, GetFrameworkDisplayString(tfm)));
}
}
}
}
else
{
var framework = NuGetFramework.Parse(frameworkString);
if (!msbuildProj.TargetsFramework(framework))
{
throw new GracefulException(string.Format(CommonLocalizableStrings.ProjectDoesNotTargetFramework, msbuildProj.ProjectRoot.FullPath, GetFrameworkDisplayString(framework)));
}
foreach (var r in refs)
{
if (!r.CanWorkOnFramework(framework))
{
throw new GracefulException(string.Format(CommonLocalizableStrings.ProjectNotCompatibleWithFramework, r.ProjectRoot.FullPath, GetFrameworkDisplayString(framework)));
}
}
}
msbuildProj.ConvertPathsToRelative(ref references);
}
@ -64,7 +99,7 @@ namespace Microsoft.DotNet.Tools.Add.ProjectToProjectReference
if (numberOfAddedReferences != 0)
{
msbuildProj.Project.Save();
msbuildProj.ProjectRoot.Save();
}
return 0;
@ -81,5 +116,10 @@ namespace Microsoft.DotNet.Tools.Add.ProjectToProjectReference
return 1;
}
}
private static string GetFrameworkDisplayString(NuGetFramework framework)
{
return framework.GetShortFolderName();
}
}
}