aspnetcore/test/Microsoft.AspNetCore.Razor..../IntegrationTests/MSBuildIntegrationTestBase.cs

57 lines
1.7 KiB
C#

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Diagnostics;
#if NET461
using System.Runtime.Remoting;
using System.Runtime.Remoting.Messaging;
#else
using System.Threading;
#endif
using System.Threading.Tasks;
namespace Microsoft.AspNetCore.Razor.Design.IntegrationTests
{
public abstract class MSBuildIntegrationTestBase
{
#if NET461
#elif NETCOREAPP2_0 || NETCOREAPP2_1
private static readonly AsyncLocal<ProjectDirectory> _project = new AsyncLocal<ProjectDirectory>();
#else
#error TFM not supported
#endif
protected MSBuildIntegrationTestBase()
{
}
// Used by the test framework to set the project that we're working with
internal static ProjectDirectory Project
{
#if NET461
get
{
var handle = (ObjectHandle)CallContext.LogicalGetData("MSBuildIntegrationTestBase_Project");
return (ProjectDirectory)handle.Unwrap();
}
set
{
CallContext.LogicalSetData("MSBuildIntegrationTestBase_Project", new ObjectHandle(value));
}
#elif NETCOREAPP2_0 || NETCOREAPP2_1
get { return _project.Value; }
set { _project.Value = value; }
#else
#error TFM not supported
#endif
}
internal Task<MSBuildResult> DotnetMSBuild(string target, string args = null, bool debug = false)
{
var timeout = debug ? (TimeSpan?)Timeout.InfiniteTimeSpan : null;
return MSBuildProcessManager.RunProcessAsync(Project, $"/t:{target} {args}", timeout);
}
}
}