dotnet-watch: simplify the end to end testing to not rely on tool installation via restore (#194)

This commit is contained in:
Nate McMaster 2016-10-12 16:12:52 -07:00 committed by GitHub
parent 0627d859af
commit 5d998a16d8
23 changed files with 77 additions and 190 deletions

View File

@ -16,16 +16,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{F5B382BC-2
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.DotNet.Watcher.Tools.FunctionalTests", "test\Microsoft.DotNet.Watcher.Tools.FunctionalTests\Microsoft.DotNet.Watcher.Tools.FunctionalTests.xproj", "{16BADE2F-1184-4518-8A70-B68A19D0805B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TestApps", "TestApps", "{2876B12E-5841-4792-85A8-2929AEE11885}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "NoDepsApp", "test\TestApps\NoDepsApp\NoDepsApp.xproj", "{4F0D8A80-221F-4BCB-822E-44A0655F537E}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "GlobbingApp", "test\TestApps\GlobbingApp\GlobbingApp.xproj", "{2AB1A28B-2022-49EA-AF77-AC8A875915CC}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "AppWithDeps", "test\TestApps\AppWithDeps\AppWithDeps.xproj", "{F7734E61-F510-41E0-AD15-301A64081CD1}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Dependency", "test\TestApps\Dependency\Dependency.xproj", "{2F48041A-F7D1-478F-9C38-D41F0F05E8CA}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Extensions.SecretManager.Tools", "src\Microsoft.Extensions.SecretManager.Tools\Microsoft.Extensions.SecretManager.Tools.xproj", "{8730E848-CA0F-4E0A-9A2F-BC22AD0B2C4E}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Extensions.SecretManager.Tools.Tests", "test\Microsoft.Extensions.SecretManager.Tools.Tests\Microsoft.Extensions.SecretManager.Tools.Tests.xproj", "{7B331122-83B1-4F08-A119-DC846959844C}"
@ -60,22 +50,6 @@ Global
{16BADE2F-1184-4518-8A70-B68A19D0805B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{16BADE2F-1184-4518-8A70-B68A19D0805B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{16BADE2F-1184-4518-8A70-B68A19D0805B}.Release|Any CPU.Build.0 = Release|Any CPU
{4F0D8A80-221F-4BCB-822E-44A0655F537E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4F0D8A80-221F-4BCB-822E-44A0655F537E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4F0D8A80-221F-4BCB-822E-44A0655F537E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4F0D8A80-221F-4BCB-822E-44A0655F537E}.Release|Any CPU.Build.0 = Release|Any CPU
{2AB1A28B-2022-49EA-AF77-AC8A875915CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2AB1A28B-2022-49EA-AF77-AC8A875915CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2AB1A28B-2022-49EA-AF77-AC8A875915CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2AB1A28B-2022-49EA-AF77-AC8A875915CC}.Release|Any CPU.Build.0 = Release|Any CPU
{F7734E61-F510-41E0-AD15-301A64081CD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F7734E61-F510-41E0-AD15-301A64081CD1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F7734E61-F510-41E0-AD15-301A64081CD1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F7734E61-F510-41E0-AD15-301A64081CD1}.Release|Any CPU.Build.0 = Release|Any CPU
{2F48041A-F7D1-478F-9C38-D41F0F05E8CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2F48041A-F7D1-478F-9C38-D41F0F05E8CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2F48041A-F7D1-478F-9C38-D41F0F05E8CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2F48041A-F7D1-478F-9C38-D41F0F05E8CA}.Release|Any CPU.Build.0 = Release|Any CPU
{8730E848-CA0F-4E0A-9A2F-BC22AD0B2C4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8730E848-CA0F-4E0A-9A2F-BC22AD0B2C4E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8730E848-CA0F-4E0A-9A2F-BC22AD0B2C4E}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -119,11 +93,6 @@ Global
GlobalSection(NestedProjects) = preSolution
{8A8CEABC-AC47-43FF-A5DF-69224F7E1F46} = {66517987-2A5A-4330-B130-207039378FD4}
{16BADE2F-1184-4518-8A70-B68A19D0805B} = {F5B382BC-258F-46E1-AC3D-10E5CCD55134}
{2876B12E-5841-4792-85A8-2929AEE11885} = {F5B382BC-258F-46E1-AC3D-10E5CCD55134}
{4F0D8A80-221F-4BCB-822E-44A0655F537E} = {2876B12E-5841-4792-85A8-2929AEE11885}
{2AB1A28B-2022-49EA-AF77-AC8A875915CC} = {2876B12E-5841-4792-85A8-2929AEE11885}
{F7734E61-F510-41E0-AD15-301A64081CD1} = {2876B12E-5841-4792-85A8-2929AEE11885}
{2F48041A-F7D1-478F-9C38-D41F0F05E8CA} = {2876B12E-5841-4792-85A8-2929AEE11885}
{8730E848-CA0F-4E0A-9A2F-BC22AD0B2C4E} = {66517987-2A5A-4330-B130-207039378FD4}
{7B331122-83B1-4F08-A119-DC846959844C} = {F5B382BC-258F-46E1-AC3D-10E5CCD55134}
{8A2E6961-6B12-4A8E-8215-3E7301D52EAC} = {F5B382BC-258F-46E1-AC3D-10E5CCD55134}

View File

@ -36,18 +36,14 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
private const string AppWithDeps = "AppWithDeps";
private const string Dependency = "Dependency";
private static readonly string _appWithDepsFolder = Path.Combine(_repositoryRoot, "test", "TestApps", AppWithDeps);
private static readonly string _dependencyFolder = Path.Combine(_repositoryRoot, "test", "TestApps", Dependency);
public AppWithDepsScenario()
{
StatusFile = Path.Combine(_scenario.TempFolder, "status");
StartedFile = StatusFile + ".started";
_scenario.AddProject(_appWithDepsFolder);
_scenario.AddProject(_dependencyFolder);
_scenario.AddTestProjectFolder(AppWithDeps);
_scenario.AddTestProjectFolder(Dependency);
_scenario.AddToolToProject(AppWithDeps, DotnetWatch);
_scenario.Restore();
AppWithDepsFolder = Path.Combine(_scenario.WorkFolder, AppWithDeps);
@ -59,7 +55,7 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
// Wait for the process to start
using (var wait = new WaitForFileToChange(StatusFile))
{
RunDotNetWatch($"run {StatusFile}", Path.Combine(_scenario.WorkFolder, AppWithDeps));
RunDotNetWatch(new[] { "run", StatusFile }, Path.Combine(_scenario.WorkFolder, AppWithDeps));
wait.Wait(_defaultTimeout,
expectedToChange: true,

View File

@ -136,7 +136,7 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
// Add a file that's in a included folder but not matching the globbing pattern
private void ChangeNonCompiledFile(bool usePollingWatcher)
{
{
using (var scenario = new GlobbingAppScenario())
{
scenario.UsePollingWatcher = usePollingWatcher;
@ -184,15 +184,13 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
private class GlobbingAppScenario : DotNetWatchScenario
{
private const string TestAppName = "GlobbingApp";
private static readonly string _testAppFolder = Path.Combine(_repositoryRoot, "test", "TestApps", TestAppName);
public GlobbingAppScenario()
{
StatusFile = Path.Combine(_scenario.TempFolder, "status");
StartedFile = StatusFile + ".started";
_scenario.AddProject(_testAppFolder);
_scenario.AddToolToProject(TestAppName, DotnetWatch);
_scenario.AddTestProjectFolder(TestAppName);
_scenario.Restore();
TestAppFolder = Path.Combine(_scenario.WorkFolder, TestAppName);
@ -203,7 +201,7 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
// Wait for the process to start
using (var wait = new WaitForFileToChange(StartedFile))
{
RunDotNetWatch($"run {StatusFile}", Path.Combine(_scenario.WorkFolder, TestAppName));
RunDotNetWatch(new[] { "run", StatusFile }, Path.Combine(_scenario.WorkFolder, TestAppName));
wait.Wait(_defaultTimeout,
expectedToChange: true,

View File

@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Threading;
@ -21,7 +22,7 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
// Wait for the process to start
using (var wait = new WaitForFileToChange(scenario.StartedFile))
{
scenario.RunDotNetWatch($"run {scenario.StatusFile} --no-exit");
scenario.RunDotNetWatch(new[] { "run", scenario.StatusFile, "--no-exit" });
wait.Wait(_defaultTimeout,
expectedToChange: true,
@ -60,7 +61,7 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
// Wait for the process to start
using (var wait = new WaitForFileToChange(scenario.StartedFile))
{
scenario.RunDotNetWatch($"run {scenario.StatusFile}");
scenario.RunDotNetWatch(new[] { "run", scenario.StatusFile });
wait.Wait(_defaultTimeout,
expectedToChange: true,
@ -99,15 +100,13 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
private class NoDepsAppScenario : DotNetWatchScenario
{
private const string TestAppName = "NoDepsApp";
private static readonly string _testAppFolder = Path.Combine(_repositoryRoot, "test", "TestApps", TestAppName);
public NoDepsAppScenario()
{
StatusFile = Path.Combine(_scenario.TempFolder, "status");
StartedFile = StatusFile + ".started";
_scenario.AddProject(_testAppFolder);
_scenario.AddToolToProject(TestAppName, DotnetWatch);
_scenario.AddTestProjectFolder(TestAppName);
_scenario.Restore();
TestAppFolder = Path.Combine(_scenario.WorkFolder, TestAppName);
@ -117,7 +116,7 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
public string StartedFile { get; private set; }
public string TestAppFolder { get; private set; }
public void RunDotNetWatch(string args)
public void RunDotNetWatch(IEnumerable<string> args)
{
RunDotNetWatch(args, Path.Combine(_scenario.WorkFolder, TestAppName));
}

View File

@ -11,25 +11,18 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
{
public class DotNetWatchScenario : IDisposable
{
protected const string DotnetWatch = "Microsoft.DotNet.Watcher.Tools";
protected static readonly string _repositoryRoot = FindRepoRoot();
protected static readonly string _artifactsFolder = Path.Combine(_repositoryRoot, "artifacts", "build");
protected ProjectToolScenario _scenario;
public DotNetWatchScenario()
{
_scenario = new ProjectToolScenario();
Directory.CreateDirectory(_artifactsFolder);
_scenario.AddNugetFeed(DotnetWatch, _artifactsFolder);
}
public Process WatcherProcess { get; private set; }
public bool UsePollingWatcher { get; set; }
protected void RunDotNetWatch(string arguments, string workingFolder)
protected void RunDotNetWatch(IEnumerable<string> arguments, string workingFolder)
{
IDictionary<string, string> envVariables = null;
if (UsePollingWatcher)
@ -40,7 +33,7 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
};
}
WatcherProcess = _scenario.ExecuteDotnet("watch " + arguments, workingFolder, envVariables);
WatcherProcess = _scenario.ExecuteDotnetWatch(arguments, workingFolder, envVariables);
}
public virtual void Dispose()
@ -55,24 +48,5 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
}
_scenario.Dispose();
}
private static string FindRepoRoot()
{
var di = new DirectoryInfo(Directory.GetCurrentDirectory());
while (di.Parent != null)
{
var globalJsonFile = Path.Combine(di.FullName, "global.json");
if (File.Exists(globalJsonFile))
{
return di.FullName;
}
di = di.Parent;
}
return null;
}
}
}

View File

@ -8,12 +8,18 @@ using System.IO;
using System.Threading;
using System.Xml.Linq;
using Newtonsoft.Json.Linq;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.Extensions.DependencyModel;
using Microsoft.DotNet.ProjectModel;
using System.Reflection;
using System.Linq;
namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
{
public class ProjectToolScenario : IDisposable
{
private const string NugetConfigFileName = "NuGet.config";
private static readonly string TestProjectSourceRoot = Path.Combine(AppContext.BaseDirectory, "TestProjects");
private static readonly object _restoreLock = new object();
@ -26,57 +32,29 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
CreateTestDirectory();
}
public string TempFolder { get; } = Path.Combine(Path.GetDirectoryName(FindNugetConfig()), "testWorkDir", Guid.NewGuid().ToString());
public string TempFolder { get; } = Path.Combine(Path.GetDirectoryName(FindNugetConfig()), "testWorkDir", Guid.NewGuid().ToString("N"));
public string WorkFolder { get; }
public void AddProject(string projectFolder)
public void AddTestProjectFolder(string projectName)
{
var destinationFolder = Path.Combine(WorkFolder, Path.GetFileName(projectFolder));
Console.WriteLine($"Copying project {projectFolder} to {destinationFolder}");
var srcFolder = Path.Combine(TestProjectSourceRoot, projectName);
var destinationFolder = Path.Combine(WorkFolder, Path.GetFileName(projectName));
Console.WriteLine($"Copying project {srcFolder} to {destinationFolder}");
Directory.CreateDirectory(destinationFolder);
foreach (var directory in Directory.GetDirectories(projectFolder, "*", SearchOption.AllDirectories))
foreach (var directory in Directory.GetDirectories(srcFolder, "*", SearchOption.AllDirectories))
{
Directory.CreateDirectory(directory.Replace(projectFolder, destinationFolder));
Directory.CreateDirectory(directory.Replace(srcFolder, destinationFolder));
}
foreach (var file in Directory.GetFiles(projectFolder, "*.*", SearchOption.AllDirectories))
foreach (var file in Directory.GetFiles(srcFolder, "*", SearchOption.AllDirectories))
{
File.Copy(file, file.Replace(projectFolder, destinationFolder), true);
File.Copy(file, file.Replace(srcFolder, destinationFolder), true);
}
}
public void AddNugetFeed(string feedName, string feed)
{
var tempNugetConfigFile = Path.Combine(WorkFolder, NugetConfigFileName);
var nugetConfig = XDocument.Load(tempNugetConfigFile);
var packageSource = nugetConfig.Element("configuration").Element("packageSources");
packageSource.Add(new XElement("add", new XAttribute("key", feedName), new XAttribute("value", feed)));
using (var stream = File.OpenWrite(tempNugetConfigFile))
{
nugetConfig.Save(stream);
}
}
public void AddToolToProject(string projectName, string toolName)
{
var projectFile = Path.Combine(WorkFolder, projectName, "project.json");
Console.WriteLine($"Adding {toolName} to {projectFile}");
var projectJson = JObject.Parse(File.ReadAllText(projectFile));
projectJson.Add("tools",
new JObject(
new JProperty(toolName,
new JObject(
new JProperty("version", "1.0.0-*"),
new JProperty("target", "package")))));
File.WriteAllText(projectFile, projectJson.ToString());
}
public void Restore(string project = null)
{
if (project == null)
@ -93,8 +71,9 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
// multiple threads - which results in either sharing violation or corrupted json.
lock (_restoreLock)
{
var restore = ExecuteDotnet($"restore -v Minimal", project);
restore.WaitForExit();
var restore = Command
.CreateDotNet("restore", new[] { project })
.Execute();
if (restore.ExitCode != 0)
{
@ -114,11 +93,27 @@ namespace Microsoft.DotNet.Watcher.Tools.FunctionalTests
File.Copy(nugetConfigFilePath, tempNugetConfigFile);
}
public Process ExecuteDotnet(string arguments, string workDir, IDictionary<string, string> environmentVariables = null)
public Process ExecuteDotnetWatch(IEnumerable<string> arguments, string workDir, IDictionary<string, string> environmentVariables = null)
{
Console.WriteLine($"Running dotnet {arguments} in {workDir}");
// this launches a new .NET Core process using the runtime of the current test app
// and the version of dotnet-watch that this test app is compiled against
var thisAssembly = Path.GetFileNameWithoutExtension(GetType().GetTypeInfo().Assembly.Location);
var args = new List<string>();
args.Add("exec");
var psi = new ProcessStartInfo("dotnet", arguments)
args.Add("--depsfile");
args.Add(Path.Combine(AppContext.BaseDirectory, thisAssembly + FileNameSuffixes.DepsJson));
args.Add("--runtimeconfig");
args.Add(Path.Combine(AppContext.BaseDirectory, thisAssembly + FileNameSuffixes.RuntimeConfigJson));
args.Add(Path.Combine(AppContext.BaseDirectory, "dotnet-watch.dll"));
var argsStr = ArgumentEscaper.EscapeAndConcatenateArgArrayForProcessStart(args.Concat(arguments));
Console.WriteLine($"Running dotnet {argsStr} in {workDir}");
var psi = new ProcessStartInfo(new Muxer().MuxerPath, argsStr)
{
UseShellExecute = false,
WorkingDirectory = workDir,

View File

@ -0,0 +1,6 @@
@ECHO OFF
:again
if not "%1" == "" (
echo "Deleting %1\TestProjects"
rmdir /s /q %1\TestProjects
)

View File

@ -0,0 +1,8 @@
#!/usr/bin/env bash
if [ -z $1 ]; then
echo "Deleting $1/TestProjects"
rm -rf $1/TestProjects
fi
exit 0

View File

@ -1,18 +1,22 @@
{
"buildOptions": {
"warningsAsErrors": true,
"keyFile": "../../tools/Key.snk"
"keyFile": "../../tools/Key.snk",
"copyToOutput": {
"include": "TestProjects/"
},
"compile": {
"exclude": "TestProjects/"
}
},
"dependencies": {
"dotnet-test-xunit": "2.2.0-*",
"Microsoft.AspNetCore.Testing": "1.1.0-*",
"Microsoft.DotNet.Watcher.Tools": "1.0.0-*",
"Microsoft.Extensions.DependencyInjection": "1.1.0-*",
"Microsoft.Extensions.Process.Sources": {
"type": "build",
"version": "1.1.0-*"
},
"Newtonsoft.Json": "9.0.1",
"xunit": "2.2.0-*"
},
"frameworks": {
@ -25,5 +29,11 @@
}
}
},
"scripts": {
"precompile": "clean-assets %compile:OutputDir%"
},
"publishOptions": {
"include": "TestProjects/"
},
"testRunner": "xunit"
}

View File

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.Props" Condition="'$(VSToolsPath)' != ''" />
<PropertyGroup Label="Globals">
<ProjectGuid>f7734e61-f510-41e0-ad15-301a64081cd1</ProjectGuid>
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
<OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
</PropertyGroup>
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>

View File

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.Props" Condition="'$(VSToolsPath)' != ''" />
<PropertyGroup Label="Globals">
<ProjectGuid>2f48041a-f7d1-478f-9c38-d41f0f05e8ca</ProjectGuid>
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
<OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
</PropertyGroup>
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>

View File

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.Props" Condition="'$(VSToolsPath)' != ''" />
<PropertyGroup Label="Globals">
<ProjectGuid>2ab1a28b-2022-49ea-af77-ac8a875915cc</ProjectGuid>
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
<OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
</PropertyGroup>
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>

View File

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.Props" Condition="'$(VSToolsPath)' != ''" />
<PropertyGroup Label="Globals">
<ProjectGuid>4f0d8a80-221f-4bcb-822e-44a0655f537e</ProjectGuid>
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
<OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
</PropertyGroup>
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>