Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions BannedSymbols.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Ban direct usage of MSBuild API Build methods to ensure telemetry logger is always attached
# Use BuildWithTelemetry extension methods from ProjectInstanceExtensions instead

# Ban ProjectInstance.Build() methods
M:Microsoft.Build.Execution.ProjectInstance.Build();Use BuildWithTelemetry() from ProjectInstanceExtensions instead
M:Microsoft.Build.Execution.ProjectInstance.Build(System.String[],System.Collections.Generic.IEnumerable`1<Microsoft.Build.Framework.ILogger>);Use BuildWithTelemetry() from ProjectInstanceExtensions instead
M:Microsoft.Build.Execution.ProjectInstance.Build(System.String[],System.Collections.Generic.IEnumerable`1<Microsoft.Build.Framework.ILogger>,System.Collections.Generic.IEnumerable`1<Microsoft.Build.Logging.ForwardingLoggerRecord>);Use BuildWithTelemetry() from ProjectInstanceExtensions instead
M:Microsoft.Build.Execution.ProjectInstance.Build(System.String[],System.Collections.Generic.IEnumerable`1<Microsoft.Build.Framework.ILogger>,System.Collections.Generic.IEnumerable`1<Microsoft.Build.Logging.ForwardingLoggerRecord>,Microsoft.Build.Evaluation.Context.EvaluationContext);Use BuildWithTelemetry() from ProjectInstanceExtensions instead

# Ban Project.Build() methods
M:Microsoft.Build.Evaluation.Project.Build();Use BuildWithTelemetry() on the Project's ProjectInstance instead
M:Microsoft.Build.Evaluation.Project.Build(Microsoft.Build.Framework.ILogger);Use BuildWithTelemetry() on the Project's ProjectInstance instead
M:Microsoft.Build.Evaluation.Project.Build(System.String);Use BuildWithTelemetry() on the Project's ProjectInstance instead
M:Microsoft.Build.Evaluation.Project.Build(System.String[]);Use BuildWithTelemetry() on the Project's ProjectInstance instead
M:Microsoft.Build.Evaluation.Project.Build(System.String,System.Collections.Generic.IEnumerable`1<Microsoft.Build.Framework.ILogger>);Use BuildWithTelemetry() on the Project's ProjectInstance instead
M:Microsoft.Build.Evaluation.Project.Build(System.String[],System.Collections.Generic.IEnumerable`1<Microsoft.Build.Framework.ILogger>);Use BuildWithTelemetry() on the Project's ProjectInstance instead
M:Microsoft.Build.Evaluation.Project.Build(System.String[],System.Collections.Generic.IEnumerable`1<Microsoft.Build.Framework.ILogger>,System.Collections.Generic.IEnumerable`1<Microsoft.Build.Logging.ForwardingLoggerRecord>);Use BuildWithTelemetry() on the Project's ProjectInstance instead

# Ban ProjectCollection constructor without telemetry - use CreateLoggersWithTelemetry() helper
M:Microsoft.Build.Evaluation.ProjectCollection.#ctor();Use constructor with loggers from CreateLoggersWithTelemetry()
M:Microsoft.Build.Evaluation.ProjectCollection.#ctor(System.Collections.Generic.IDictionary`2<System.String,System.String>);Use constructor with loggers from CreateLoggersWithTelemetry()
M:Microsoft.Build.Evaluation.ProjectCollection.#ctor(Microsoft.Build.Evaluation.ToolsetDefinitionLocations);Use constructor with loggers from CreateLoggersWithTelemetry()
M:Microsoft.Build.Evaluation.ProjectCollection.#ctor(System.Collections.Generic.IDictionary`2<System.String,System.String>,System.Collections.Generic.IEnumerable`1<Microsoft.Build.Framework.ILogger>,Microsoft.Build.Evaluation.ToolsetDefinitionLocations);Ensure telemetry logger is included via CreateLoggersWithTelemetry()
1 change: 1 addition & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Features" Version="$(MicrosoftCodeAnalysisCSharpPackageVersion)" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="$(MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion)" />
<PackageVersion Include="Microsoft.CodeAnalysis.Features" Version="$(MicrosoftCodeAnalysisPackageVersion)" />
<PackageVersion Include="Microsoft.CodeAnalysis.BannedApiAnalyzers" Version="3.3.4" />
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we use eng/Version.Details.props like for the other packages instead of hard-coding the version here?

<PackageVersion Include="Microsoft.CodeAnalysis.PublicApiAnalyzers" Version="$(MicrosoftCodeAnalysisPublicApiAnalyzersVersion)" />
<PackageVersion Include="Microsoft.CodeAnalysis.Razor.Tooling.Internal" Version="$(MicrosoftCodeAnalysisRazorToolingInternalVersion)" />
<PackageVersion Include="Microsoft.CodeAnalysis.VisualBasic" Version="$(MicrosoftCodeAnalysisPackageVersion)" />
Expand Down
5 changes: 5 additions & 0 deletions eng/Analyzers.props
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
<Project>
<ItemGroup Condition="'$(DotNetBuildSourceOnly)' != 'true'">
<PackageReference Include="StyleCop.Analyzers" PrivateAssets="all" Condition="'$(EnableStyleCopAnalyzer)' == 'true'" />
<PackageReference Include="Microsoft.CodeAnalysis.BannedApiAnalyzers" PrivateAssets="all" Condition="$(MSBuildProjectDirectory.Contains('src\Cli')) OR $(MSBuildProjectDirectory.Contains('src/Cli'))" />
</ItemGroup>

<ItemGroup Condition="'$(DotNetBuildSourceOnly)' != 'true' AND ($(MSBuildProjectDirectory.Contains('src\Cli')) OR $(MSBuildProjectDirectory.Contains('src/Cli')))">
<AdditionalFiles Include="$(MSBuildThisFileDirectory)../BannedSymbols.txt" />
</ItemGroup>
</Project>
5 changes: 3 additions & 2 deletions src/BuiltInTools/dotnet-watch/Build/EvaluationResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

using System.Collections.Immutable;
using Microsoft.Build.Graph;
using Microsoft.DotNet.Cli.Extensions;
using Microsoft.Extensions.Logging;

namespace Microsoft.DotNet.Watch;
Expand Down Expand Up @@ -75,7 +76,7 @@ public void WatchFiles(FileWatcher fileWatcher)
{
using (var loggers = buildReporter.GetLoggers(rootNode.ProjectInstance.FullPath, "Restore"))
{
if (!rootNode.ProjectInstance.Build([TargetNames.Restore], loggers))
if (!rootNode.ProjectInstance.BuildWithTelemetry([TargetNames.Restore], loggers))
{
logger.LogError("Failed to restore project '{Path}'.", rootProjectPath);
loggers.ReportOutput();
Expand Down Expand Up @@ -103,7 +104,7 @@ public void WatchFiles(FileWatcher fileWatcher)

using (var loggers = buildReporter.GetLoggers(projectInstance.FullPath, "DesignTimeBuild"))
{
if (!projectInstance.Build([TargetNames.Compile, .. customCollectWatchItems], loggers))
if (!projectInstance.BuildWithTelemetry([TargetNames.Compile, .. customCollectWatchItems], loggers))
{
logger.LogError("Failed to build project '{Path}'.", projectInstance.FullPath);
loggers.ReportOutput();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System.Diagnostics;
using Microsoft.Build.Graph;
using Microsoft.CodeAnalysis;
using Microsoft.DotNet.Cli.Extensions;
using Microsoft.DotNet.HotReload;
using Microsoft.Extensions.Logging;

Expand Down Expand Up @@ -582,7 +583,7 @@ private void DeployProjectDependencies(ProjectGraph graph, ImmutableArray<string
}

using var loggers = buildReporter.GetLoggers(projectPath, targetName);
if (!node.ProjectInstance.Build([targetName], loggers, out var targetOutputs))
if (!node.ProjectInstance.BuildWithTelemetry([targetName], loggers, null, out var targetOutputs))
{
_context.Logger.LogDebug("{TargetName} target failed", targetName);
loggers.ReportOutput();
Expand Down Expand Up @@ -791,7 +792,7 @@ void Report(ChangeKind kind)
}

string GetMessage(IReadOnlyList<ChangedFile> items, ChangeKind kind)
=> items is [{Item: var item }]
=> items is [{ Item: var item }]
? GetSingularMessage(kind) + ": " + GetRelativeFilePath(item.FilePath)
: GetPluralMessage(kind) + ": " + string.Join(", ", items.Select(f => GetRelativeFilePath(f.Item.FilePath)));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@


using Microsoft.Build.Graph;
using Microsoft.DotNet.Cli.Extensions;
using Microsoft.Extensions.Logging;

namespace Microsoft.DotNet.Watch
Expand Down Expand Up @@ -61,7 +62,7 @@ public async ValueTask HandleFileChangesAsync(IReadOnlyList<ChangedFile> files,
using var loggers = buildReporter.GetLoggers(projectNode.ProjectInstance.FullPath, BuildTargetName);

// Deep copy so that we don't pollute the project graph:
if (!projectNode.ProjectInstance.DeepCopy().Build(BuildTargetName, loggers))
if (!projectNode.ProjectInstance.DeepCopy().BuildWithTelemetry([BuildTargetName], loggers))
{
loggers.ReportOutput();
return null;
Expand Down
4 changes: 3 additions & 1 deletion src/Cli/dotnet/CliCompletion.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

using System.CommandLine.Completions;
using Microsoft.Build.Evaluation;
using Microsoft.DotNet.Cli.Extensions;
using Microsoft.DotNet.Cli.Utils;
using static System.Array;

Expand Down Expand Up @@ -69,8 +70,9 @@ private static MsbuildProject GetMSBuildProject()
{
try
{
var (loggers, _) = ProjectInstanceExtensions.CreateLoggersWithTelemetry();
return MsbuildProject.FromFileOrDirectory(
new ProjectCollection(),
new ProjectCollection(globalProperties: null, loggers: loggers, toolsetDefinitionLocations: ToolsetDefinitionLocations.Default),
Directory.GetCurrentDirectory(), interactive: false);
}
catch (Exception e)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,7 @@ internal void GenerateDepsJsonFile(
string? stdOut;
string? stdErr;

var msbuildArgs = MSBuildArgs.AnalyzeMSBuildArguments([..args], CommonOptions.PropertiesOption, CommonOptions.RestorePropertiesOption, BuildCommandParser.TargetOption, BuildCommandParser.VerbosityOption);
var msbuildArgs = MSBuildArgs.AnalyzeMSBuildArguments([.. args], CommonOptions.PropertiesOption, CommonOptions.RestorePropertiesOption, BuildCommandParser.TargetOption, BuildCommandParser.VerbosityOption);
var forwardingAppWithoutLogging = new MSBuildForwardingAppWithoutLogging(msbuildArgs, msBuildExePath);
if (forwardingAppWithoutLogging.ExecuteMSBuildOutOfProc)
{
Expand Down
2 changes: 1 addition & 1 deletion src/Cli/dotnet/Commands/Build/BuildCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public static class BuildCommand
{
public static CommandBase FromArgs(string[] args, string? msbuildPath = null)
{
var parseResult = Parser.Parse(["dotnet", "build", ..args]);
var parseResult = Parser.Parse(["dotnet", "build", .. args]);
return FromParseResult(parseResult, msbuildPath);
}

Expand Down
4 changes: 2 additions & 2 deletions src/Cli/dotnet/Commands/Clean/CleanCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class CleanCommand(MSBuildArgs msbuildArgs, string? msbuildPath = null) :
{
public static CommandBase FromArgs(string[] args, string? msbuildPath = null)
{
var result = Parser.Parse(["dotnet", "clean", ..args]);
var result = Parser.Parse(["dotnet", "clean", .. args]);
return FromParseResult(result, msbuildPath);
}

Expand All @@ -33,7 +33,7 @@ public static CommandBase FromParseResult(ParseResult result, string? msbuildPat
NoWriteBuildMarkers = true,
},
static (msbuildArgs, msbuildPath) => new CleanCommand(msbuildArgs, msbuildPath),
[ CommonOptions.PropertiesOption, CommonOptions.RestorePropertiesOption, CleanCommandParser.TargetOption, CleanCommandParser.VerbosityOption ],
[CommonOptions.PropertiesOption, CommonOptions.RestorePropertiesOption, CleanCommandParser.TargetOption, CleanCommandParser.VerbosityOption],
result,
msbuildPath
);
Expand Down
2 changes: 1 addition & 1 deletion src/Cli/dotnet/Commands/Format/FormatCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class FormatCommand(IEnumerable<string> argsToForward) : FormatForwarding
{
public static FormatCommand FromArgs(string[] args)
{
var result = Parser.Parse(["dotnet", "format", ..args]);
var result = Parser.Parse(["dotnet", "format", .. args]);
return FromParseResult(result);
}

Expand Down
2 changes: 1 addition & 1 deletion src/Cli/dotnet/Commands/Hidden/Complete/CompleteCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public static int Run(ParseResult parseResult)

public static int RunWithReporter(string[] args, IReporter reporter)
{
var result = Parser.Parse(["dotnet", "complete", ..args]);
var result = Parser.Parse(["dotnet", "complete", .. args]);
return RunWithReporter(result, reporter);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public static int Run(ParseResult parseResult)

public static void ProcessInputAndSendTelemetry(string[] args, ITelemetry telemetry)
{
var result = Parser.Parse(["dotnet", "internal-reportinstallsuccess", ..args]);
var result = Parser.Parse(["dotnet", "internal-reportinstallsuccess", .. args]);
ProcessInputAndSendTelemetry(result, telemetry);
}

Expand Down
4 changes: 2 additions & 2 deletions src/Cli/dotnet/Commands/MSBuild/MSBuildCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ namespace Microsoft.DotNet.Cli.Commands.MSBuild;
public class MSBuildCommand(
IEnumerable<string> msbuildArgs,
string? msbuildPath = null
) : MSBuildForwardingApp(MSBuildArgs.AnalyzeMSBuildArguments([..msbuildArgs], CommonOptions.PropertiesOption, CommonOptions.RestorePropertiesOption, MSBuildCommandParser.TargetOption, CommonOptions.VerbosityOption()), msbuildPath, includeLogo: true)
) : MSBuildForwardingApp(MSBuildArgs.AnalyzeMSBuildArguments([.. msbuildArgs], CommonOptions.PropertiesOption, CommonOptions.RestorePropertiesOption, MSBuildCommandParser.TargetOption, CommonOptions.VerbosityOption()), msbuildPath, includeLogo: true)
{
public static MSBuildCommand FromArgs(string[] args, string? msbuildPath = null)
{
var result = Parser.Parse(["dotnet", "msbuild", ..args]);
var result = Parser.Parse(["dotnet", "msbuild", .. args]);
return FromParseResult(result, msbuildPath);
}

Expand Down
2 changes: 1 addition & 1 deletion src/Cli/dotnet/Commands/MSBuild/MSBuildLogger.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Licensed to the .NET Foundation under one or more agreements.
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.Globalization;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

using System.Diagnostics;
using Microsoft.Build.Evaluation;
using Microsoft.DotNet.Cli.Extensions;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.Extensions.Logging;
using Microsoft.TemplateEngine.Abstractions;
Expand All @@ -13,7 +14,7 @@ namespace Microsoft.DotNet.Cli.Commands.New.MSBuildEvaluation;

internal class MSBuildEvaluator : IIdentifiedComponent
{
private readonly ProjectCollection _projectCollection = new();
private readonly ProjectCollection _projectCollection;
private readonly object _lockObj = new();

private IEngineEnvironmentSettings? _settings;
Expand All @@ -24,12 +25,16 @@ internal class MSBuildEvaluator : IIdentifiedComponent
internal MSBuildEvaluator()
{
_outputDirectory = Directory.GetCurrentDirectory();
var (loggers, _) = ProjectInstanceExtensions.CreateLoggersWithTelemetry();
_projectCollection = new ProjectCollection(globalProperties: null, loggers: loggers, toolsetDefinitionLocations: ToolsetDefinitionLocations.Default);
}

internal MSBuildEvaluator(string? outputDirectory = null, string? projectPath = null)
{
_outputDirectory = outputDirectory ?? Directory.GetCurrentDirectory();
_projectFullPath = projectPath != null ? Path.GetFullPath(projectPath) : null;
var (loggers, _) = ProjectInstanceExtensions.CreateLoggersWithTelemetry();
_projectCollection = new ProjectCollection(globalProperties: null, loggers: loggers, toolsetDefinitionLocations: ToolsetDefinitionLocations.Default);
}

public Guid Id => Guid.Parse("{6C2CB5CA-06C3-460A-8ADB-5F21E113AB24}");
Expand Down
6 changes: 3 additions & 3 deletions src/Cli/dotnet/Commands/Pack/PackCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class PackCommand(
{
public static CommandBase FromArgs(string[] args, string? msbuildPath = null)
{
var parseResult = Parser.Parse(["dotnet", "pack", ..args]);
var parseResult = Parser.Parse(["dotnet", "pack", .. args]);
return FromParseResult(parseResult, msbuildPath);
}

Expand Down Expand Up @@ -92,14 +92,14 @@ public static int RunPackCommand(ParseResult parseResult)

if (args.Count != 1)
{
Console.Error.WriteLine(CliStrings.PackCmd_OneNuspecAllowed);
Console.Error.WriteLine(CliStrings.PackCmd_OneNuspecAllowed);
return 1;
}

var nuspecPath = args[0];

var packArgs = new PackArgs()
{
{
Logger = new NuGetConsoleLogger(),
Exclude = new List<string>(),
OutputDirectory = parseResult.GetValue(PackCommandParser.OutputOption),
Expand Down
5 changes: 4 additions & 1 deletion src/Cli/dotnet/Commands/Package/Add/PackageAddCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,10 @@ private int ExecuteForFileBasedApp(string path)
NoCache = true,
NoBuild = true,
};
var projectCollection = new ProjectCollection();

// Include telemetry logger for project evaluation
var (loggersWithTelemetry, _) = ProjectInstanceExtensions.CreateLoggersWithTelemetry([]);
var projectCollection = new ProjectCollection(globalProperties: null, loggersWithTelemetry, ToolsetDefinitionLocations.Default);
var projectInstance = command.CreateProjectInstance(projectCollection);

// Set initial version to Directory.Packages.props and/or C# file
Expand Down
4 changes: 2 additions & 2 deletions src/Cli/dotnet/Commands/Package/List/PackageListCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
#nullable disable

using System.CommandLine;
using System.Globalization;
using Microsoft.DotNet.Cli.Commands.Hidden.List;
using Microsoft.DotNet.Cli.Commands.MSBuild;
using Microsoft.DotNet.Cli.Commands.NuGet;
using Microsoft.DotNet.Cli.Extensions;
using Microsoft.DotNet.Cli.Utils;
using System.Globalization;
using Microsoft.DotNet.Cli.Commands.MSBuild;

namespace Microsoft.DotNet.Cli.Commands.Package.List;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@

#nullable disable

using System.CommandLine;
using Microsoft.DotNet.Cli.Commands.NuGet;
using Microsoft.DotNet.Cli.Extensions;
using System.CommandLine;

namespace Microsoft.DotNet.Cli.Commands.Package.Search;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using System.Diagnostics.CodeAnalysis;
using Microsoft.Build.Evaluation;
using Microsoft.DotNet.Cli.Commands.Run;
using Microsoft.DotNet.Cli.Extensions;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.FileBasedPrograms;
using Microsoft.TemplateEngine.Cli.Commands;
Expand Down Expand Up @@ -34,7 +35,8 @@ public override int Execute()
var directives = FileLevelDirectiveHelpers.FindDirectives(sourceFile, reportAllErrors: !_force, DiagnosticBag.ThrowOnFirst());

// Create a project instance for evaluation.
var projectCollection = new ProjectCollection();
var (loggers, _) = ProjectInstanceExtensions.CreateLoggersWithTelemetry();
var projectCollection = new ProjectCollection(globalProperties: null, loggers: loggers, toolsetDefinitionLocations: ToolsetDefinitionLocations.Default);
var command = new VirtualProjectBuildingCommand(
entryPointFileFullPath: file,
msbuildArgs: MSBuildArgs.FromOtherArgs([]))
Expand Down
2 changes: 1 addition & 1 deletion src/Cli/dotnet/Commands/Publish/PublishCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ private PublishCommand(

public static CommandBase FromArgs(string[] args, string? msbuildPath = null)
{
var parseResult = Parser.Parse(["dotnet", "publish", ..args]);
var parseResult = Parser.Parse(["dotnet", "publish", .. args]);
return FromParseResult(parseResult);
}

Expand Down
3 changes: 2 additions & 1 deletion src/Cli/dotnet/Commands/Reference/Add/ReferenceAddCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ internal class ReferenceAddCommand(ParseResult parseResult) : CommandBase(parseR

public override int Execute()
{
using var projects = new ProjectCollection();
var (loggers, _) = ProjectInstanceExtensions.CreateLoggersWithTelemetry();
using var projects = new ProjectCollection(globalProperties: null, loggers: loggers, toolsetDefinitionLocations: ToolsetDefinitionLocations.Default);
bool interactive = _parseResult.GetValue(ReferenceAddCommandParser.InteractiveOption);
MsbuildProject msbuildProj = MsbuildProject.FromFileOrDirectory(
projects,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ public ReferenceListCommand(ParseResult parseResult) : base(parseResult)

public override int Execute()
{
var msbuildProj = MsbuildProject.FromFileOrDirectory(new ProjectCollection(), _fileOrDirectory, false);
var (loggers, _) = ProjectInstanceExtensions.CreateLoggersWithTelemetry();
var msbuildProj = MsbuildProject.FromFileOrDirectory(new ProjectCollection(globalProperties: null, loggers: loggers, toolsetDefinitionLocations: ToolsetDefinitionLocations.Default), _fileOrDirectory, false);
var p2ps = msbuildProj.GetProjectToProjectReferences();
if (!p2ps.Any())
{
Expand Down
Loading
Loading