Make dotnet cli portable

This commit is contained in:
Pavel Krymets 2016-03-24 09:36:05 -07:00
parent 8df6f5405d
commit 18436e325e
38 changed files with 194 additions and 71 deletions

View file

@ -237,6 +237,7 @@ namespace Microsoft.DotNet.Cli.Build
// We publish to a sub folder of the PublishRoot so tools like heat and zip can generate folder structures easier.
string SharedFrameworkNameAndVersionRoot = Path.Combine(outputDir, "shared", SharedFrameworkName, SharedFrameworkNugetVersion);
c.BuildContext["SharedFrameworkPath"] = SharedFrameworkNameAndVersionRoot;
if (Directory.Exists(SharedFrameworkNameAndVersionRoot))
{
@ -261,9 +262,7 @@ namespace Microsoft.DotNet.Cli.Build
SharedFrameworkSourceRoot).Execute().EnsureSuccessful();
// Clean up artifacts that dotnet-publish generates which we don't need
File.Delete(Path.Combine(SharedFrameworkNameAndVersionRoot, $"framework{Constants.ExeSuffix}"));
File.Delete(Path.Combine(SharedFrameworkNameAndVersionRoot, "framework.dll"));
File.Delete(Path.Combine(SharedFrameworkNameAndVersionRoot, "framework.pdb"));
DeleteMainPublishOutput(SharedFrameworkNameAndVersionRoot, "framework");
File.Delete(Path.Combine(SharedFrameworkNameAndVersionRoot, "framework.runtimeconfig.json"));
// Rename the .deps file
@ -309,6 +308,9 @@ namespace Microsoft.DotNet.Cli.Build
File.Copy(
Path.Combine(Dirs.Corehost, CoreHostBaseName),
Path.Combine(SharedFrameworkNameAndVersionRoot, $"dotnet{Constants.ExeSuffix}"), true);
File.Copy(
Path.Combine(Dirs.Corehost, CoreHostBaseName),
Path.Combine(SharedFrameworkNameAndVersionRoot, CoreHostBaseName), true);
File.Copy(
Path.Combine(Dirs.Corehost, HostPolicyBaseName),
Path.Combine(SharedFrameworkNameAndVersionRoot, HostPolicyBaseName), true);
@ -355,20 +357,34 @@ namespace Microsoft.DotNet.Cli.Build
FixModeFlags(outputDir);
string compilersProject = Path.Combine(Dirs.RepoRoot, "src", "compilers");
dotnet.Publish(compilersProject,
"--output",
outputDir,
"--framework",
"netstandard1.5")
.Execute()
.EnsureSuccessful();
var compilersDeps = Path.Combine(outputDir, "compilers.deps.json");
var compilersRuntimeConfig = Path.Combine(outputDir, "compilers.runtimeconfig.json");
// Copy corehost
File.Copy(Path.Combine(Dirs.Corehost, $"corehost{Constants.ExeSuffix}"), Path.Combine(outputDir, $"corehost{Constants.ExeSuffix}"), overwrite: true);
File.Copy(Path.Combine(Dirs.Corehost, $"{Constants.DynamicLibPrefix}hostpolicy{Constants.DynamicLibSuffix}"), Path.Combine(outputDir, $"{Constants.DynamicLibPrefix}hostpolicy{Constants.DynamicLibSuffix}"), overwrite: true);
File.Copy(Path.Combine(Dirs.Corehost, $"{Constants.DynamicLibPrefix}hostfxr{Constants.DynamicLibSuffix}"), Path.Combine(outputDir, $"{Constants.DynamicLibPrefix}hostfxr{Constants.DynamicLibSuffix}"), overwrite: true);
var binaryToCorehostifyOutDir = Path.Combine(outputDir, "runtimes", "any", "native");
// Corehostify binaries
foreach (var binaryToCorehostify in BinariesForCoreHost)
{
try
{
// Yes, it is .exe even on Linux. This is the managed exe we're working with
File.Copy(Path.Combine(outputDir, $"{binaryToCorehostify}.exe"), Path.Combine(outputDir, $"{binaryToCorehostify}.dll"));
File.Delete(Path.Combine(outputDir, $"{binaryToCorehostify}.exe"));
File.Copy(Path.Combine(outputDir, $"corehost{Constants.ExeSuffix}"), Path.Combine(outputDir, binaryToCorehostify + Constants.ExeSuffix));
File.Copy(Path.Combine(binaryToCorehostifyOutDir, $"{binaryToCorehostify}.exe"), Path.Combine(outputDir, $"{binaryToCorehostify}.dll"));
File.Delete(Path.Combine(binaryToCorehostifyOutDir, $"{binaryToCorehostify}.exe"));
File.Copy(compilersDeps, Path.Combine(outputDir, binaryToCorehostify + ".deps.json"));
File.Copy(compilersRuntimeConfig, Path.Combine(outputDir, binaryToCorehostify + ".runtimeconfig.json"));
}
catch (Exception ex)
{
@ -376,9 +392,10 @@ namespace Microsoft.DotNet.Cli.Build
}
}
// dotnet.exe is from stage0. But we must be using the newly built corehost in stage1
File.Delete(Path.Combine(outputDir, $"dotnet{Constants.ExeSuffix}"));
File.Copy(Path.Combine(outputDir, $"corehost{Constants.ExeSuffix}"), Path.Combine(outputDir, $"dotnet{Constants.ExeSuffix}"));
// cleanup compilers project output we don't need
DeleteMainPublishOutput(outputDir, "compilers");
File.Delete(compilersDeps);
File.Delete(compilersRuntimeConfig);
// Crossgen Roslyn
var result = CrossgenCliSdk(c, outputDir);
@ -480,7 +497,13 @@ namespace Microsoft.DotNet.Cli.Build
foreach (var assemblyToCrossgen in AssembliesToCrossGen)
{
c.Info($"Crossgenning {assemblyToCrossgen}");
ExecInSilent(outputDir, crossgen, "-readytorun", "-nologo", "-platform_assemblies_paths", outputDir, assemblyToCrossgen);
ExecInSilent(outputDir,
crossgen,
"-readytorun",
"-nologo",
"-platform_assemblies_paths",
$"{outputDir}{Path.PathSeparator}{c.BuildContext["SharedFrameworkPath"]}",
assemblyToCrossgen);
}
c.Info("Crossgen complete");
@ -534,6 +557,13 @@ namespace Microsoft.DotNet.Cli.Build
return c.Success();
}
private static void DeleteMainPublishOutput(string path, string name)
{
File.Delete(Path.Combine(path, $"{name}{Constants.ExeSuffix}"));
File.Delete(Path.Combine(path, $"{name}.dll"));
File.Delete(Path.Combine(path, $"{name}.pdb"));
}
private static bool HasMetadata(string pathToFile)
{
try

View file

@ -96,7 +96,7 @@ namespace Microsoft.DotNet.Cli.Build
File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);
}
System.Threading.Thread.Sleep(1);
Directory.Delete(path, true);
}
}

View file

@ -4,7 +4,7 @@
#
# Put the stage2 output on the front of the path
$stage2 = "$PSScriptRoot\..\artifacts\win10-x64\stage2\bin"
$stage2 = "$PSScriptRoot\..\artifacts\win10-x64\stage2"
if (Test-Path $stage2) {
$splat = $env:PATH.Split(";")
$stage2 = Convert-Path $stage2

View file

@ -0,0 +1,34 @@
using System.IO;
using System.Linq;
using Microsoft.DotNet.ProjectModel;
using Microsoft.Extensions.PlatformAbstractions;
namespace Microsoft.DotNet.Cli.Utils
{
public class AppBaseDllCommandResolver : ICommandResolver
{
public CommandSpec Resolve(CommandResolverArguments commandResolverArguments)
{
if (commandResolverArguments.CommandName == null)
{
return null;
}
if (commandResolverArguments.CommandName.EndsWith(FileNameSuffixes.DotNet.DynamicLib))
{
var localPath = Path.Combine(PlatformServices.Default.Application.ApplicationBasePath,
commandResolverArguments.CommandName);
if (File.Exists(localPath))
{
var escapedArgs = ArgumentEscaper.EscapeAndConcatenateArgArrayForProcessStart(
new[] { localPath }
.Concat(commandResolverArguments.CommandArguments.OrEmptyIfNull()));
return new CommandSpec(
new Muxer().MuxerPath,
escapedArgs,
CommandResolutionStrategy.RootedPath);
}
}
return null;
}
}
}

View file

@ -38,11 +38,13 @@ namespace Microsoft.DotNet.Cli.Utils
{
var compositeCommandResolver = new CompositeCommandResolver();
compositeCommandResolver.AddCommandResolver(new MuxerCommandResolver());
compositeCommandResolver.AddCommandResolver(new RootedCommandResolver());
compositeCommandResolver.AddCommandResolver(new ProjectToolsCommandResolver(packagedCommandSpecFactory));
compositeCommandResolver.AddCommandResolver(new AppBaseDllCommandResolver());
compositeCommandResolver.AddCommandResolver(new AppBaseCommandResolver(environment, platformCommandSpecFactory));
compositeCommandResolver.AddCommandResolver(new PathCommandResolver(environment, platformCommandSpecFactory));
return compositeCommandResolver;
}
}

View file

@ -0,0 +1,17 @@
namespace Microsoft.DotNet.Cli.Utils
{
public class MuxerCommandResolver : ICommandResolver
{
public CommandSpec Resolve(CommandResolverArguments commandResolverArguments)
{
if (commandResolverArguments.CommandName == Muxer.MuxerName)
{
var muxer = new Muxer();
var escapedArgs = ArgumentEscaper.EscapeAndConcatenateArgArrayForProcessStart(
commandResolverArguments.CommandArguments.OrEmptyIfNull());
return new CommandSpec(muxer.MuxerPath, escapedArgs, CommandResolutionStrategy.RootedPath);
}
return null;
}
}
}

View file

@ -119,7 +119,7 @@ namespace Microsoft.DotNet.Cli.Utils
}
else
{
host = CoreHost.LocalHostExePath;
host = CoreHost.HostExePath;
}
arguments.Add(commandPath);

View file

@ -37,10 +37,11 @@ namespace Microsoft.DotNet.Cli.Utils
var compositeCommandResolver = new CompositeCommandResolver();
compositeCommandResolver.AddCommandResolver(new RootedCommandResolver());
compositeCommandResolver.AddCommandResolver(new MuxerCommandResolver());
compositeCommandResolver.AddCommandResolver(new ProjectPathCommandResolver(environment, platformCommandSpecFactory));
compositeCommandResolver.AddCommandResolver(new AppBaseCommandResolver(environment, platformCommandSpecFactory));
compositeCommandResolver.AddCommandResolver(new PathCommandResolver(environment, platformCommandSpecFactory));
return compositeCommandResolver;
}
}

View file

@ -1,5 +1,6 @@
using System;
using System.IO;
using System.Reflection;
using Microsoft.Extensions.PlatformAbstractions;
namespace Microsoft.DotNet.Cli.Utils
@ -9,11 +10,6 @@ namespace Microsoft.DotNet.Cli.Utils
internal static string _hostDir;
internal static string _hostExePath;
/// <summary>
/// Gets the path to the version of corehost that was shipped with this command
/// </summary>
public static string LocalHostExePath => Path.Combine(PlatformServices.Default.Application.ApplicationBasePath, Constants.HostExecutableName);
public static string HostExePath
{
get
@ -32,8 +28,7 @@ namespace Microsoft.DotNet.Cli.Utils
{
if (_hostDir == null)
{
_hostDir = Path.GetDirectoryName(Env.GetCommandPath(
Constants.HostExecutableName, new[] { string.Empty }));
_hostDir = Path.GetDirectoryName(typeof(object).GetTypeInfo().Assembly.Location);
}
return _hostDir;

View file

@ -1,13 +1,15 @@
using System;
using System.IO;
using Microsoft.Extensions.PlatformAbstractions;
using System.Diagnostics;
using System.Reflection;
namespace Microsoft.DotNet.Cli.Utils
{
public class Muxer
{
private static readonly string s_muxerName = "dotnet";
private static readonly string s_muxerFileName = s_muxerName + Constants.ExeSuffix;
public static readonly string MuxerName = "dotnet";
private static readonly string s_muxerFileName = MuxerName + Constants.ExeSuffix;
private string _muxerPath;
@ -15,6 +17,10 @@ namespace Microsoft.DotNet.Cli.Utils
{
get
{
if (_muxerPath == null)
{
throw new InvalidOperationException("Unable to locate dotnet multiplexer");
}
return _muxerPath;
}
}
@ -29,8 +35,8 @@ namespace Microsoft.DotNet.Cli.Utils
private bool TryResolveMuxerFromParentDirectories()
{
var appBase = new DirectoryInfo(PlatformServices.Default.Application.ApplicationBasePath);
var muxerDir = appBase.Parent?.Parent;
var appBase = new FileInfo(typeof(object).GetTypeInfo().Assembly.Location);
var muxerDir = appBase.Directory?.Parent?.Parent?.Parent;
if (muxerDir == null)
{
@ -50,7 +56,7 @@ namespace Microsoft.DotNet.Cli.Utils
private bool TryResolverMuxerFromPath()
{
var muxerPath = Env.GetCommandPath(s_muxerName, Constants.ExeSuffix);
var muxerPath = Env.GetCommandPath(MuxerName, Constants.ExeSuffix);
if (muxerPath == null || !File.Exists(muxerPath))
{

View file

@ -24,6 +24,17 @@ namespace Microsoft.DotNet.ProjectModel
IsPortable = Framework != null;
}
public static bool IsApplicationPortable(string entryAssemblyPath)
{
var runtimeConfigFile = Path.ChangeExtension(entryAssemblyPath, FileNameSuffixes.RuntimeConfigJson);
if (File.Exists(runtimeConfigFile))
{
var runtimeConfig = new RuntimeConfig(runtimeConfigFile);
return runtimeConfig.IsPortable;
}
return false;
}
private JObject OpenRuntimeConfig(string runtimeConfigPath)
{
return JObject.Parse(File.ReadAllText(runtimeConfigPath));

11
src/compilers/Program.cs Normal file
View file

@ -0,0 +1,11 @@
using System;
namespace ConsoleApplication
{
public class Program
{
public static void Main(string[] args)
{
}
}
}

View file

@ -0,0 +1,26 @@
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"Microsoft.NETCore.App": {
"type":"platform",
"version":"1.0.0-rc2-23928"
},
"Microsoft.CodeAnalysis.CSharp": "1.3.0-beta1-20160321-04",
"Microsoft.Net.Compilers.netcore": "1.3.0-beta1-20160321-04",
"Microsoft.Net.CSharp.Interactive.netcore": "1.3.0-beta1-20160321-04",
"Microsoft.FSharp.Compiler.netcore": "1.0.0-alpha-160318",
"Microsoft.DiaSymReader.Native": "1.3.3",
},
"frameworks": {
"netstandard1.5": {
"imports": [
"dnxcore50",
"portable-net45+win8"
]
}
}
}

View file

@ -243,7 +243,7 @@ namespace Microsoft.DotNet.Tools.Compiler.Csc
private static Command RunCsc(string[] cscArgs)
{
// Locate CoreRun
return Command.Create("csc", cscArgs);
return Command.Create("csc.dll", cscArgs);
}
}
}

View file

@ -22,13 +22,8 @@
},
"NuGet.CommandLine.XPlat": "3.5.0-beta-1083",
"Newtonsoft.Json": "7.0.1",
"Microsoft.CodeAnalysis.CSharp": "1.3.0-beta1-20160321-04",
"Microsoft.Net.Compilers.netcore": "1.3.0-beta1-20160321-04",
"Microsoft.Net.CSharp.Interactive.netcore": "1.3.0-beta1-20160321-04",
"Microsoft.FSharp.Compiler.netcore": "1.0.0-alpha-160318",
"System.Text.Encoding.CodePages": "4.0.1-rc2-23928",
"System.Diagnostics.FileVersionInfo": "4.0.0-rc2-23928",
"Microsoft.DiaSymReader.Native": "1.3.3",
"System.CommandLine": "0.1.0-e160323-1",
"Microsoft.DotNet.ProjectModel": "1.0.0-*",
"Microsoft.DotNet.Compiler.Common": "1.0.0-*",
@ -52,7 +47,10 @@
"Microsoft.Extensions.Testing.Abstractions": "1.0.0-*",
"Microsoft.NETCore.ConsoleHost": "1.0.0-rc2-23928",
"Microsoft.NETCore.TestHost": "1.0.0-rc2-23928",
"Microsoft.NETCore.App": "1.0.0-rc2-23928",
"Microsoft.NETCore.App": {
"type":"platform",
"version":"1.0.0-rc2-23928"
},
"System.Diagnostics.TraceSource": "4.0.0-rc2-23928",
"System.Diagnostics.TextWriterTraceListener": "4.0.0-rc2-23928",
"System.Resources.ReaderWriter": "4.0.0-rc2-23928",
@ -64,9 +62,10 @@
}
},
"frameworks": {
"netstandardapp1.5": {
"netstandard1.5": {
"imports": [
"dnxcore50",
"netstandardapp1.5",
"portable-net45+win8"
]
}

View file

@ -1,12 +0,0 @@
{
"runtimes": {
"win10-x64": [ "win10", "win81-x64", "win81", "win8-x64", "win8", "win7-x64", "win7", "win-x64", "win", "any", "base" ],
"win10-x86": [ "win10", "win81-x86", "win81", "win8-x86", "win8", "win7-x86", "win7", "win-x86", "win", "any", "base" ],
"win81-x64": [ "win81", "win8-x64", "win8", "win7-x64", "win7", "win-x64", "win", "any", "base" ],
"win81-x86": [ "win81", "win8-x86", "win8", "win7-x86", "win7", "win-x86", "win", "any", "base" ],
"win8-x64": [ "win8", "win7-x64", "win7", "win-x64", "win", "any", "base" ],
"win8-x86": [ "win8", "win7-x86", "win7", "win-x86", "win", "any", "base" ],
"win7-x64": [ "win7", "win-x64", "win", "any", "base" ],
"win7-x86": [ "win7", "win-x86", "win", "any", "base" ]
}
}

View file

@ -4,7 +4,7 @@
"emitEntryPoint": true
},
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-23928",
"Microsoft.NETCore.App": "1.0.0-rc2-23928",
"System.Runtime.Serialization.Primitives": "4.1.1-rc2-23928",
"Microsoft.DotNet.ProjectModel": {
"target": "project"
@ -28,6 +28,6 @@
},
"testRunner": "xunit",
"scripts": {
"precompile": "dotnet build ../ArgumentsReflector/project.json --framework netstandardapp1.5 --runtime %compile:RuntimeIdentifier% --output %compile:RuntimeOutputDir%"
"precompile": "dotnet publish ../ArgumentsReflector/project.json --framework netstandardapp1.5 --runtime %compile:RuntimeIdentifier% --output %compile:RuntimeOutputDir%"
}
}

View file

@ -4,7 +4,7 @@
"emitEntryPoint": true
},
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-23928"
"Microsoft.NETCore.App": "1.0.0-rc2-23928"
},
"frameworks": {
"netstandardapp1.5": {

View file

@ -4,7 +4,7 @@
"emitEntryPoint": true
},
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-23928",
"Microsoft.NETCore.App": "1.0.0-rc2-23928",
"System.Runtime.Serialization.Primitives": "4.1.1-rc2-23928",
"Microsoft.DotNet.ProjectModel": {
"target": "project"

View file

@ -28,14 +28,16 @@ namespace Microsoft.DotNet.Cli.Utils.Tests
var resolvers = defaultCommandResolver.OrderedCommandResolvers;
resolvers.Should().HaveCount(4);
resolvers.Should().HaveCount(6);
resolvers.Select(r => r.GetType())
.Should()
.ContainInOrder(
new []{
typeof(MuxerCommandResolver),
typeof(RootedCommandResolver),
typeof(ProjectToolsCommandResolver),
typeof(AppBaseDllCommandResolver),
typeof(AppBaseCommandResolver),
typeof(PathCommandResolver)
});

View file

@ -28,13 +28,14 @@ namespace Microsoft.DotNet.Cli.Utils.Tests
var resolvers = scriptCommandResolver.OrderedCommandResolvers;
resolvers.Should().HaveCount(4);
resolvers.Should().HaveCount(5);
resolvers.Select(r => r.GetType())
.Should()
.ContainInOrder(
new []{
typeof(RootedCommandResolver),
typeof(MuxerCommandResolver),
typeof(ProjectPathCommandResolver),
typeof(AppBaseCommandResolver),
typeof(PathCommandResolver)

View file

@ -4,7 +4,7 @@
"emitEntryPoint": true
},
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-23928",
"Microsoft.NETCore.App": "1.0.0-rc2-23928",
"System.Runtime.Serialization.Primitives": "4.1.1-rc2-23928",
"NuGet.Versioning": "3.5.0-beta-1083",
"NuGet.Packaging": "3.5.0-beta-1083",

View file

@ -1,7 +1,7 @@
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-23928",
"Microsoft.NETCore.App": "1.0.0-rc2-23928",
"System.Runtime.Serialization.Primitives": "4.1.1-rc2-23928",
"Microsoft.DotNet.Tools.Tests.Utilities": {
"target": "project"

View file

@ -1,7 +1,7 @@
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-23928",
"Microsoft.NETCore.App": "1.0.0-rc2-23928",
"System.Runtime.Serialization.Primitives": "4.1.1-rc2-23928",
"Microsoft.DotNet.ProjectModel": {
"target": "project"

View file

@ -5,7 +5,7 @@
"keyFile": "../../tools/Key.snk"
},
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-23928",
"Microsoft.NETCore.App": "1.0.0-rc2-23928",
"System.Runtime.Serialization.Primitives": "4.1.1-rc2-23928",
"System.Collections.Immutable": "1.2.0-rc2-23928",
"FluentAssertions": "4.0.0",

View file

@ -5,7 +5,7 @@
"keyFile": "../../tools/Key.snk"
},
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-23928",
"Microsoft.NETCore.App": "1.0.0-rc2-23928",
"Microsoft.DotNet.Tools.Tests.Utilities": {
"target": "project"
},

View file

@ -1,7 +1,7 @@
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-23928",
"Microsoft.NETCore.App": "1.0.0-rc2-23928",
"Microsoft.DotNet.ProjectModel": {
"target": "project"
},

View file

@ -1,7 +1,7 @@
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-23928",
"Microsoft.NETCore.App": "1.0.0-rc2-23928",
"System.Runtime.Serialization.Primitives": "4.1.1-rc2-23928",
"Microsoft.DotNet.Tools.Tests.Utilities": {
"target": "project"

View file

@ -1,7 +1,7 @@
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-23928",
"Microsoft.NETCore.App": "1.0.0-rc2-23928",
"System.Runtime.Serialization.Primitives": "4.1.1-rc2-23928",
"Microsoft.DotNet.Tools.Tests.Utilities": {
"target": "project"

View file

@ -1,7 +1,6 @@
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-23928",
"Microsoft.DotNet.Cli.Utils": {
"target": "project"
},

View file

@ -1,7 +1,7 @@
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-23928",
"Microsoft.NETCore.App": "1.0.0-rc2-23928",
"System.Runtime.Serialization.Primitives": "4.1.1-rc2-23928",
"System.IO.Compression.ZipFile": "4.0.1-rc2-23928",
"Microsoft.DotNet.Tools.Tests.Utilities": {

View file

@ -1,5 +1,6 @@
{
"dependencies": {
"Microsoft.NETCore.App": "1.0.0-rc2-23925",
"dotnet": {
"target": "project"
},
@ -7,10 +8,10 @@
"version": "4.0.0-rc2-23928",
"exclude": "Compile"
},
"Microsoft.DotNet.ProjectModel": {
"Microsoft.DotNet.Tools.Tests.Utilities": {
"target": "project"
},
"Microsoft.DotNet.Tools.Tests.Utilities": {
"Microsoft.DotNet.ProjectModel": {
"target": "project"
},
"xunit": "2.1.0",

View file

@ -1,7 +1,7 @@
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-23928",
"Microsoft.NETCore.App": "1.0.0-rc2-23928",
"System.Runtime.Serialization.Primitives": "4.1.1-rc2-23928",
"Microsoft.DotNet.TestFramework": "1.0.0-*",
"Microsoft.DotNet.Tools.Tests.Utilities": {

View file

@ -1,7 +1,7 @@
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-23928",
"Microsoft.NETCore.App": "1.0.0-rc2-23928",
"System.Runtime.Serialization.Primitives": "4.1.1-rc2-23928",
"Microsoft.DotNet.Tools.Tests.Utilities": {
"target": "project"

View file

@ -1,7 +1,7 @@
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-23928",
"Microsoft.NETCore.App": "1.0.0-rc2-23928",
"System.Runtime.Serialization.Primitives": "4.1.1-rc2-23928",
"Microsoft.DotNet.Tools.Tests.Utilities": {
"target": "project"

View file

@ -1,8 +1,8 @@
{
"version": "1.0.0-*",
"dependencies": {
"Microsoft.NETCore.App": "1.0.0-rc2-23928",
"Newtonsoft.Json": "7.0.1",
"NETStandard.Library": "1.5.0-rc2-23928",
"Microsoft.DotNet.Tools.Tests.Utilities": {
"target": "project"
},

View file

@ -1,8 +1,8 @@
{
"version": "1.0.0-*",
"dependencies": {
"Microsoft.NETCore.App": "1.0.0-rc2-23928",
"Newtonsoft.Json": "7.0.1",
"NETStandard.Library": "1.5.0-rc2-23928",
"dotnet": {
"target": "project"
},

View file

@ -1,7 +1,7 @@
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.5.0-rc2-23928",
"Microsoft.NETCore.App": "1.0.0-rc2-23928",
"System.Runtime.Serialization.Primitives": "4.1.1-rc2-23928",
"Microsoft.DotNet.Tools.Tests.Utilities": {
"target": "project"