public static void Main(string[] args) { try { string projectJsonFileName = Path.GetFullPath("project.json"); string projectDirectory = System.IO.Path.GetDirectoryName(projectJsonFileName); var workspace = new BuildWorkspace(ProjectReaderSettings.ReadFromEnvironment()); var frameworkContexts = workspace.GetProjectContextCollection(projectDirectory) .FrameworkOnlyContexts; var rids = RuntimeEnvironmentRidExtensions.GetAllCandidateRuntimeIdentifiers(); foreach (var frameworkContext in frameworkContexts) { var runtimeContext = workspace.GetRuntimeContext(frameworkContext, rids); OutputPaths paths = runtimeContext.GetOutputPaths("Debug"); Console.WriteLine("TargetFramework: " + frameworkContext.Identity.TargetFramework); Console.WriteLine("Executable: " + paths.RuntimeFiles.Executable); Console.WriteLine(); } } catch (Exception ex) { Console.WriteLine(ex); } }
public string ResolveOutputPath(string framework, string configuration = "Debug") { var workspace = new BuildWorkspace(ProjectReaderSettings.ReadFromEnvironment()); var contextCollection = workspace.GetProjectContextCollection(projectDirectory); if (contextCollection == null) { return(null); } var frameworkContexts = contextCollection.FrameworkOnlyContexts.ToList(); if (framework != null) { frameworkContexts = FilterFrameworks(framework, frameworkContexts).ToList(); } var runtimeIds = RuntimeEnvironmentRidExtensions.GetAllCandidateRuntimeIdentifiers().ToList(); string outputPath = ResolveOutputPath(frameworkContexts, workspace, configuration, runtimeIds); if (outputPath == null && RuntimeEnvironment.OperatingSystemPlatform != Platform.Windows) { // Try alternative architecture. runtimeIds = runtimeIds.Select(runtimeId => ConvertArchitecture(runtimeId)).ToList(); return(ResolveOutputPath(frameworkContexts, workspace, configuration, runtimeIds)); } return(outputPath); }
public int RunTests(DotnetTestParams dotnetTestParams) { var projectPath = GetProjectPath(dotnetTestParams.ProjectOrAssemblyPath); var runtimeIdentifiers = !string.IsNullOrEmpty(dotnetTestParams.Runtime) ? new[] { dotnetTestParams.Runtime } : RuntimeEnvironmentRidExtensions.GetAllCandidateRuntimeIdentifiers(); var exitCode = 0; // Create a workspace var workspace = new BuildWorkspace(ProjectReaderSettings.ReadFromEnvironment()); if (dotnetTestParams.Framework != null) { var projectContext = workspace.GetProjectContext(projectPath, dotnetTestParams.Framework); if (projectContext == null) { Reporter.Error.WriteLine( $"Project '{projectPath}' does not support framework: {dotnetTestParams.UnparsedFramework}"); return(1); } projectContext = workspace.GetRuntimeContext(projectContext, runtimeIdentifiers); exitCode = RunTests(projectContext, dotnetTestParams); } else { var summary = new Summary(); var projectContexts = workspace.GetProjectContextCollection(projectPath) .EnsureValid(projectPath) .FrameworkOnlyContexts .Select(c => workspace.GetRuntimeContext(c, runtimeIdentifiers)) .ToList(); // Execute for all TFMs the project targets. foreach (var projectContext in projectContexts) { var result = RunTests(projectContext, dotnetTestParams); if (result == 0) { summary.Passed++; } else { summary.Failed++; if (exitCode == 0) { // If tests fail in more than one TFM, we'll have it use the result of the first one // as the exit code. exitCode = result; } } } summary.Print(); } return(exitCode); }
public int DoRun(string[] args) { DebugHelper.HandleDebugSwitch(ref args); var dotnetTestParams = new DotnetTestParams(); try { dotnetTestParams.Parse(args); if (dotnetTestParams.Help) { return(0); } // Register for parent process's exit event if (dotnetTestParams.ParentProcessId.HasValue) { RegisterForParentProcessExit(dotnetTestParams.ParentProcessId.Value); } var projectPath = GetProjectPath(dotnetTestParams.ProjectPath); var runtimeIdentifiers = !string.IsNullOrEmpty(dotnetTestParams.Runtime) ? new[] { dotnetTestParams.Runtime } : RuntimeEnvironmentRidExtensions.GetAllCandidateRuntimeIdentifiers(); var exitCode = 0; // Create a workspace var workspace = new BuildWorkspace(ProjectReaderSettings.ReadFromEnvironment()); if (dotnetTestParams.Framework != null) { var projectContext = workspace.GetProjectContext(projectPath, dotnetTestParams.Framework); if (projectContext == null) { Reporter.Error.WriteLine($"Project '{projectPath}' does not support framework: {dotnetTestParams.UnparsedFramework}"); return(1); } projectContext = workspace.GetRuntimeContext(projectContext, runtimeIdentifiers); exitCode = RunTest(projectContext, dotnetTestParams, workspace); } else { var summary = new Summary(); var projectContexts = workspace.GetProjectContextCollection(projectPath) .EnsureValid(projectPath) .FrameworkOnlyContexts .Select(c => workspace.GetRuntimeContext(c, runtimeIdentifiers)) .ToList(); // Execute for all TFMs the project targets. foreach (var projectContext in projectContexts) { var result = RunTest(projectContext, dotnetTestParams, workspace); if (result == 0) { summary.Passed++; } else { summary.Failed++; if (exitCode == 0) { // If tests fail in more than one TFM, we'll have it use the result of the first one // as the exit code. exitCode = result; } } } summary.Print(); } return(exitCode); } catch (InvalidOperationException ex) { TestHostTracing.Source.TraceEvent(TraceEventType.Error, 0, ex.ToString()); return(-1); } catch (Exception ex) when(!(ex is GracefulException)) { TestHostTracing.Source.TraceEvent(TraceEventType.Error, 0, ex.ToString()); return(-2); } }