Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch MSBuildWorkspace to running builds out of proc #70469

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
b4cd19e
Split apart WorkspaceMSBuildResources
jasonmalinowski Oct 19, 2023
8afde69
Remove unused InternalsVisibleTo
jasonmalinowski Oct 19, 2023
fe56f97
Switch MSBuildWorkspace to running builds out of proc
jasonmalinowski Oct 19, 2023
a7f983c
Remove NuGet.Framework deployment hacks
jasonmalinowski Oct 19, 2023
c18aa22
Fix sorting in Versions.props
jasonmalinowski Oct 19, 2023
df46063
Remove more unused usings
jasonmalinowski Oct 20, 2023
3a29e68
Simplify the LSIF Generator now that we don't need MSBuild Locator
jasonmalinowski Oct 21, 2023
f5e46b9
Ensure our content folders also end up in the NuGet package
jasonmalinowski Oct 23, 2023
4c3564b
Fix incorrect reference to the BuildHost package
jasonmalinowski Oct 24, 2023
7231bea
Remove assignment to unused variable
jasonmalinowski Oct 27, 2023
03a31aa
Simplify MSBuildWorkspace.ApplyDocumentAdded
jasonmalinowski Oct 27, 2023
c37ecb7
Remove the IProjectInfo interface
jasonmalinowski Oct 27, 2023
f5f6417
Bring back MSBuildWorkspace.TryApplyChanges
jasonmalinowski Oct 28, 2023
ca2a7db
Remove unnecessary uses of Microsoft.Build.Locator
jasonmalinowski Oct 28, 2023
865ee6b
No longer register MSBuild in-process for unit testing
jasonmalinowski Oct 31, 2023
042a227
Call EndBatchBuild in a finally block
jasonmalinowski Oct 31, 2023
cfb90bd
Remove StreamJsonRpc in favor of a custom RPC implementation
jasonmalinowski Oct 31, 2023
c283ca3
Add back in support for global properties
jasonmalinowski Nov 2, 2023
382ecba
Fix TestOpenProject_CommandLineArgsHaveNoErrors to use OOP
jasonmalinowski Nov 2, 2023
ad7d556
Skip test that only runs on .NET Framework hosts
jasonmalinowski Nov 2, 2023
698fc74
Deal with corrupted files or I/O errors when reading project files
jasonmalinowski Nov 2, 2023
7af59a7
Add some PackageReferences that Workspaces.MSBuild needs when packing
jasonmalinowski Nov 4, 2023
64da35a
Include ExternalAccess.RazorCompiler in the MSBuildWorkspace package
jasonmalinowski Nov 7, 2023
5ea4199
Update tests around ensuring we log evaluation errors
jasonmalinowski Nov 8, 2023
50331ec
Fix tests that are testing invalid paths
jasonmalinowski Nov 8, 2023
a9f50fa
Fix indenting of all of the TargetFrameworkVersion properties in tests
jasonmalinowski Nov 8, 2023
65694dd
Fix source build by excluding the net472 build host in that case
jasonmalinowski Nov 8, 2023
3ad9781
Fix source build
jasonmalinowski Nov 10, 2023
c723216
Add additional logging for which tests are being discovered
jasonmalinowski Nov 11, 2023
039fcb1
Don't dispose the BuildHostProcess if the process crashed
jasonmalinowski Nov 11, 2023
81ca930
Better handle unexpected shutdowns
jasonmalinowski Nov 11, 2023
a1f6b59
Fix race where we were mutating the process list while disposing
jasonmalinowski Nov 11, 2023
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
15 changes: 2 additions & 13 deletions eng/Versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@
<MicrosoftBuildRuntimeVersion>$(MicrosoftBuildPackagesVersion)</MicrosoftBuildRuntimeVersion>
jasonmalinowski marked this conversation as resolved.
Show resolved Hide resolved
<MicrosoftBuildTasksCoreVersion>$(MicrosoftBuildPackagesVersion)</MicrosoftBuildTasksCoreVersion>
<MicrosoftBuildUtilitiesCoreVersion>$(MicrosoftBuildPackagesVersion)</MicrosoftBuildUtilitiesCoreVersion>
<NuGetVisualStudioContractsVersion>6.0.0-preview.0.15</NuGetVisualStudioContractsVersion>
<MicrosoftVisualStudioRpcContractsVersion>17.5.14-alpha</MicrosoftVisualStudioRpcContractsVersion>
<MicrosoftAspNetCoreRazorExternalAccessRoslynWorkspaceVersion>7.0.0-preview.23525.7</MicrosoftAspNetCoreRazorExternalAccessRoslynWorkspaceVersion>
<!--
Expand Down Expand Up @@ -114,7 +113,7 @@
<MicrosoftDiaSymReaderNativeVersion>17.0.0-beta1.21524.1</MicrosoftDiaSymReaderNativeVersion>
<MicrosoftDiaSymReaderPortablePdbVersion>1.7.0-beta-21528-01</MicrosoftDiaSymReaderPortablePdbVersion>
<MicrosoftExtensionsLoggingVersion>6.0.0</MicrosoftExtensionsLoggingVersion>
<MicrosoftExtensionsLoggingAbstractionsVersion>6.0.2</MicrosoftExtensionsLoggingAbstractionsVersion>
<MicrosoftExtensionsLoggingAbstractionsVersion>6.0.0</MicrosoftExtensionsLoggingAbstractionsVersion>
<MicrosoftExtensionsLoggingConsoleVersion>6.0.0</MicrosoftExtensionsLoggingConsoleVersion>
<MicrosoftIdentityModelClientsActiveDirectoryVersion>3.13.8</MicrosoftIdentityModelClientsActiveDirectoryVersion>
<MicrosoftInternalPerformanceCodeMarkersDesignTimeVersion>15.8.27812-alpha</MicrosoftInternalPerformanceCodeMarkersDesignTimeVersion>
Expand Down Expand Up @@ -215,24 +214,14 @@
<MoqVersion>4.10.1</MoqVersion>
<NerdbankStreamsVersion>2.10.69</NerdbankStreamsVersion>
<NuGetVisualStudioVersion>6.0.0-preview.0.15</NuGetVisualStudioVersion>
<NuGetVisualStudioContractsVersion>6.0.0-preview.0.15</NuGetVisualStudioContractsVersion>
<NuGetSolutionRestoreManagerInteropVersion>4.8.0</NuGetSolutionRestoreManagerInteropVersion>
<MicrosoftDiaSymReaderPdb2PdbVersion>1.1.0-beta1-62506-02</MicrosoftDiaSymReaderPdb2PdbVersion>
<RestSharpVersion>105.2.3</RestSharpVersion>
<RichCodeNavEnvVarDumpVersion>0.1.1643-alpha</RichCodeNavEnvVarDumpVersion>
<RoslynBuildUtilVersion>0.9.8-beta</RoslynBuildUtilVersion>
jasonmalinowski marked this conversation as resolved.
Show resolved Hide resolved
<RoslynDependenciesOptimizationDataVersion>3.0.0-beta2-19053-01</RoslynDependenciesOptimizationDataVersion>
<RoslynDiagnosticsAnalyzersVersion>$(RoslynDiagnosticsNugetPackageVersion)</RoslynDiagnosticsAnalyzersVersion>
<!--
The package "Microsoft.CodeAnalysis.Analyzer.Testing" brings in an earlier version of these NuGet dependencies than
is expected by the NET SDK used in the Workspace.MSBuild UnitTests. In order to test against the same verion of NuGet
as our configured SDK, we must set the version to be the same.
-->
Comment on lines -225 to -229
Copy link
Member Author

Choose a reason for hiding this comment

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

NuGet dependencies don't matter anymore, so this workaround can be removed for good.

Copy link
Member

Choose a reason for hiding this comment

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

this makes me very happy :)

<NuGetCommonVersion>6.8.0-rc.112</NuGetCommonVersion>
<NuGetConfigurationVersion>$(NuGetCommonVersion)</NuGetConfigurationVersion>
<NuGetFrameworksVersion>$(NuGetCommonVersion)</NuGetFrameworksVersion>
<NuGetPackagingVersion>$(NuGetCommonVersion)</NuGetPackagingVersion>
<NuGetProtocolVersion>$(NuGetCommonVersion)</NuGetProtocolVersion>
<NuGetVersioningVersion>$(NuGetCommonVersion)</NuGetVersioningVersion>
<RoslynToolsVSIXExpInstallerVersion>1.1.0-beta3.22474.1</RoslynToolsVSIXExpInstallerVersion>
<RoslynMicrosoftVisualStudioExtensionManagerVersion>0.0.4</RoslynMicrosoftVisualStudioExtensionManagerVersion>
<SourceBrowserVersion>1.0.21</SourceBrowserVersion>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
using Microsoft.Extensions.Logging;
jasonmalinowski marked this conversation as resolved.
Show resolved Hide resolved
using Microsoft.VisualStudio.Composition;
using Roslyn.Utilities;
using static Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.BuildHostProcessManager;
using static Microsoft.CodeAnalysis.MSBuild.BuildHostProcessManager;
using LSP = Microsoft.VisualStudio.LanguageServer.Protocol;

namespace Microsoft.CodeAnalysis.LanguageServer.HostWorkspace;
Expand Down Expand Up @@ -51,6 +51,7 @@ internal sealed class LanguageServerProjectSystem
private readonly ILoggerFactory _loggerFactory;
private readonly ILogger _logger;
private readonly ProjectLoadTelemetryReporter _projectLoadTelemetryReporter;
private readonly ProjectFileExtensionRegistry _projectFileExtensionRegistry;

/// <summary>
/// The list of loaded projects in the workspace, keyed by project file path. The outer dictionary is a concurrent dictionary since we may be loading
Expand All @@ -76,6 +77,7 @@ public LanguageServerProjectSystem(
_loggerFactory = loggerFactory;
_logger = loggerFactory.CreateLogger(nameof(LanguageServerProjectSystem));
_projectLoadTelemetryReporter = projectLoadTelemetry;
_projectFileExtensionRegistry = new ProjectFileExtensionRegistry(workspaceFactory.Workspace.CurrentSolution.Services, new DiagnosticReporter(workspaceFactory.Workspace));

_projectsToLoadAndReload = new AsyncBatchingWorkQueue<ProjectToLoad>(
TimeSpan.FromMilliseconds(100),
Expand All @@ -94,8 +96,8 @@ public async Task OpenSolutionAsync(string solutionFilePath)

jasonmalinowski marked this conversation as resolved.
Show resolved Hide resolved
// We'll load solutions out-of-proc, since it's possible we might be running on a runtime that doesn't have a matching SDK installed,
// and we don't want any MSBuild registration to set environment variables in our process that might impact child processes.
await using var buildHostProcessManager = new BuildHostProcessManager(_loggerFactory);
var buildHost = await buildHostProcessManager.GetBuildHostAsync(BuildHostProcessManager.BuildHostProcessKind.NetCore, CancellationToken.None);
await using var buildHostProcessManager = new BuildHostProcessManager(loggerFactory: _loggerFactory);
var buildHost = await buildHostProcessManager.GetBuildHostAsync(BuildHostProcessKind.NetCore, CancellationToken.None);

// If we don't have a .NET Core SDK on this machine at all, try .NET Framework
if (!await buildHost.HasUsableMSBuildAsync(solutionFilePath, CancellationToken.None))
Expand Down Expand Up @@ -138,7 +140,7 @@ private async ValueTask LoadOrReloadProjectsAsync(ImmutableSegmentedList<Project

var binaryLogPath = GetMSBuildBinaryLogPath();

await using var buildHostProcessManager = new BuildHostProcessManager(_loggerFactory, binaryLogPath);
await using var buildHostProcessManager = new BuildHostProcessManager(binaryLogPath: binaryLogPath, loggerFactory: _loggerFactory);

var displayedToast = 0;

Expand Down Expand Up @@ -203,9 +205,9 @@ private async ValueTask LoadOrReloadProjectsAsync(ImmutableSegmentedList<Project

(var buildHost, preferredBuildHostKind) = await buildHostProcessManager!.GetBuildHostAsync(projectPath, cancellationToken);

if (await buildHost.IsProjectFileSupportedAsync(projectPath, cancellationToken))
if (_projectFileExtensionRegistry.TryGetLanguageNameFromProjectPath(projectPath, DiagnosticReportingMode.Ignore, out var languageName))
Copy link
Member

Choose a reason for hiding this comment

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

minor nit. but would love to see this 'if' flipped in the future.

{
var loadedFile = await buildHost.LoadProjectFileAsync(projectPath, cancellationToken);
var loadedFile = await buildHost.LoadProjectFileAsync(projectPath, languageName, cancellationToken);
var diagnosticLogItems = await loadedFile.GetDiagnosticLogItemsAsync(cancellationToken);
if (diagnosticLogItems.Any(item => item.Kind is WorkspaceDiagnosticKind.Failure))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@
<PackageReference Include="Microsoft.VisualStudio.Composition" Version="$(MicrosoftVisualStudioCompositionVersion)" />
<PackageReference Include="Microsoft.VisualStudio.LanguageServer.Protocol" Version="$(MicrosoftVisualStudioLanguageServerProtocolVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace" Version="$(MicrosoftAspNetCoreRazorExternalAccessRoslynWorkspaceVersion)" />
<PackageReference Include="NuGet.Frameworks" Version="$(NuGetFrameworksVersion)" />
<PackageReference Include="StreamJsonRpc" Version="$(StreamJsonRpcVersion)" />
<PackageReference Include="System.CommandLine" Version="$(SystemCommandLineVersion)" />
</ItemGroup>
Expand Down Expand Up @@ -120,34 +119,6 @@
</ItemGroup>
</Target>

<!--
Deploy a net472 version of the BuildHost process.
-->
<Target Name="DeployNetFrameworkBuildHost" AfterTargets="ResolveProjectReferences" Condition="'$(DesignTimeBuild)' != 'true'">
Comment on lines -123 to -126
Copy link
Member Author

@jasonmalinowski jasonmalinowski Nov 8, 2023

Choose a reason for hiding this comment

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

This all moves to the MSBuildWorkspace project directly. You'll see this over there (with some changes to make NuGet happier.)

<ItemGroup>
<_NetFrameworkBuildHostProjectReference Include="..\..\..\Workspaces\Core\MSBuild.BuildHost\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.csproj">
<TargetFramework>net472</TargetFramework>
</_NetFrameworkBuildHostProjectReference>
</ItemGroup>

<!-- We include Build as a target we invoke to work around https://github.com/dotnet/msbuild/issues/5433 -->
<MSBuild Projects="@(_NetFrameworkBuildHostProjectReference)"
Targets="Build;BuiltProjectOutputGroup;ReferenceCopyLocalPathsOutputGroup"
Properties="TargetFramework=%(_NetFrameworkBuildHostProjectReference.TargetFramework)"
RemoveProperties="PackRuntimeIdentifier">
<Output TaskParameter="TargetOutputs" ItemName="NetFrameworkBuildHostAssets" />
</MSBuild>

<ItemGroup>
<!-- We set Pack="false" because we only care about the RID-specific folders -->
<Content Include="%(NetFrameworkBuildHostAssets.Identity)"
Condition="'%(NetFrameworkBuildHostAssets.TargetPath)' != '' and '%(NetFrameworkBuildHostAssets.Extension)' != '.xml'"
Pack="false"
TargetPath="BuildHost-net472\%(NetFrameworkBuildHostAssets.TargetPath)"
CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
</Target>

<!-- If we don't have a PackRuntimeIdentifier set, that means pack has been invoked on the project directly, with say dotnet pack. In this case
we'll replace the Pack target with one that instead recursively invokes pack for each runtime identifier. We define those targets
in a separate .targets file, since we can't say to MSBuild "only consider our Pack target as a definition based on this condition" any other way. -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,22 +55,13 @@
</ItemGroup>
jasonmalinowski marked this conversation as resolved.
Show resolved Hide resolved

<ItemGroup>
<PackageReference Include="Microsoft.Build.Locator" Version="$(MicrosoftBuildLocatorVersion)" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="$(MicrosoftExtensionsLoggingVersion)" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftExtensionsLoggingAbstractionsVersion)" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="$(MicrosoftExtensionsLoggingConsoleVersion)" />
Comment on lines +58 to +60
Copy link
Member Author

Choose a reason for hiding this comment

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

These were implicitly coming along with the BuildHost ProjectReference, but now it's just explicit.

<PackageReference Include="Microsoft.VisualStudio.Composition" Version="$(MicrosoftVisualStudioCompositionVersion)" />
<PackageReference Include="MSBuild.StructuredLogger" Version="$(MSBuildStructuredLoggerVersion)" />
<PackageReference Include="Newtonsoft.Json" Version="$(NewtonsoftJsonVersion)" />
<PackageReference Include="System.CommandLine" Version="$(SystemCommandLineVersion)" />

<!-- Since we're using Microsoft.Build.Locator, it's important to ensure that absolutely no MSBuild binaries are deployed alongside our application,
or else those can get picked up first and break things. Since we're referencing MSBuild.StructuredLogger, it'll bring along extra dependencies by default. -->
<PackageReference Include="Microsoft.Build" Version="$(MicrosoftBuildVersion)" ExcludeAssets="runtime" PrivateAssets="all" />
<PackageReference Include="Microsoft.Build.Framework" Version="$(MicrosoftBuildFrameworkVersion)" ExcludeAssets="runtime" PrivateAssets="all" />
<PackageReference Include="Microsoft.Build.Tasks.Core" Version="$(MicrosoftBuildTasksCoreVersion)" ExcludeAssets="runtime" PrivateAssets="all" />
<PackageReference Include="Microsoft.Build.Utilities.Core" Version="$(MicrosoftBuildUtilitiesCoreVersion)" ExcludeAssets="runtime" PrivateAssets="all" />

<!-- Work around https://github.com/dotnet/msbuild/issues/7873; without this we won't have a new enough System.Memory and we'll get
method missing exceptions when we are running with some newer MSBuild versions. -->
<PackageReference Include="System.Memory" Version="$(SystemMemoryVersion)" Condition="'$(TargetFrameworkIdentifier)' != '.NETCoreApp'" />
</ItemGroup>

<!-- Since we may be loading analyzers in-process, we need to have the appropriate binding redirects in place -->
Expand All @@ -83,7 +74,6 @@
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\..\Workspaces\Core\MSBuild.BuildHost\Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.csproj" />
<ProjectReference Include="..\..\LanguageServer\Protocol\Microsoft.CodeAnalysis.LanguageServer.Protocol.csproj" />
<ProjectReference Include="..\..\..\Workspaces\Core\MSBuild\Microsoft.CodeAnalysis.Workspaces.MSBuild.csproj" />
<ProjectReference Include="..\..\..\Workspaces\CSharp\Portable\Microsoft.CodeAnalysis.CSharp.Workspaces.csproj" />
Expand Down
36 changes: 0 additions & 36 deletions src/Features/Lsif/Generator/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,9 @@
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Build.Locator;
using Microsoft.CodeAnalysis.LanguageServerIndexFormat.Generator.Logging;
using Microsoft.CodeAnalysis.LanguageServerIndexFormat.Generator.Writing;
using Microsoft.CodeAnalysis.MSBuild;
Expand Down Expand Up @@ -121,12 +119,10 @@ private static async Task GenerateAsync(

if (solution != null)
{
LocateAndRegisterMSBuild(logger, solution.Directory);
await GenerateFromSolutionAsync(solution, lsifWriter, logger, cancellationToken);
}
else if (project != null)
{
LocateAndRegisterMSBuild(logger, project.Directory);
await GenerateFromProjectAsync(project, lsifWriter, logger, cancellationToken);
}
else if (compilerInvocation != null)
Expand All @@ -136,12 +132,6 @@ private static async Task GenerateAsync(
else
{
Contract.ThrowIfNull(binLog);

// If we're loading a binlog, we don't need to discover an MSBuild that matches the SDK or source that we're processing, since we're not running
// any MSBuild builds or tasks/targets in our process. Since we're reading a binlog, simply none of the SDK will be loaded. We might load analyzers
// or source generators from the SDK or user-built, but those must generally target netstandard2.0 so we don't really expect them to have problems loading
// on one version of the runtime versus another.
LocateAndRegisterMSBuild(logger, sourceDirectory: null);
await GenerateFromBinaryLogAsync(binLog, lsifWriter, logger, cancellationToken);
}
}
Expand All @@ -158,27 +148,6 @@ private static async Task GenerateAsync(
logger.LogInformation($"Generation complete. Total execution time: {totalExecutionTime.Elapsed.ToDisplayString()}");
}

private static void LocateAndRegisterMSBuild(ILogger logger, DirectoryInfo? sourceDirectory)
{
// Make sure we pick the highest version
var options = VisualStudioInstanceQueryOptions.Default;

if (sourceDirectory != null)
options.WorkingDirectory = sourceDirectory.FullName;

var msBuildInstance = MSBuildLocator.QueryVisualStudioInstances(options).OrderByDescending(i => i.Version).FirstOrDefault();
if (msBuildInstance == null)
{
throw new Exception($"No MSBuild instances could be found; discovery types being used: {options.DiscoveryTypes}.");
}
else
{
logger.LogInformation($"Using the MSBuild instance located at {msBuildInstance.MSBuildPath}.");
}

MSBuildLocator.RegisterInstance(msBuildInstance);
}

private static async Task GenerateFromProjectAsync(
FileInfo projectFile, ILsifJsonWriter lsifWriter, ILogger logger, CancellationToken cancellationToken)
{
Expand All @@ -201,9 +170,6 @@ await GenerateWithMSBuildWorkspaceAsync(
cancellationToken);
}

// This method can't be loaded until we've registered MSBuild with MSBuildLocator, as otherwise
// we load ILogger prematurely which breaks MSBuildLocator.
[MethodImpl(MethodImplOptions.NoInlining)]
private static async Task GenerateWithMSBuildWorkspaceAsync(
FileInfo solutionOrProjectFile,
ILsifJsonWriter lsifWriter,
Expand Down Expand Up @@ -267,8 +233,6 @@ private static async Task GenerateFromCompilerInvocationAsync(
logger.LogInformation($"Generation for {project.FilePath} completed in {generationStopwatch.Elapsed.ToDisplayString()}.");
}

// This method can't be loaded until we've registered MSBuild with MSBuildLocator, as otherwise we might load a type prematurely.
[MethodImpl(MethodImplOptions.NoInlining)]
private static async Task GenerateFromBinaryLogAsync(
FileInfo binLog, ILsifJsonWriter lsifWriter, ILogger logger, CancellationToken cancellationToken)
{
Expand Down
2 changes: 0 additions & 2 deletions src/Tools/AnalyzerRunner/AnalyzerRunner.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
<ItemGroup>
jasonmalinowski marked this conversation as resolved.
Show resolved Hide resolved
<PackageReference Include="SQLitePCLRaw.bundle_green" Version="$(SQLitePCLRawbundle_greenVersion)" PrivateAssets="all" />
<PackageReference Include="Microsoft.VisualStudio.Composition" Version="$(MicrosoftVisualStudioCompositionVersion)" />
<PackageReference Include="Microsoft.Build.Framework" Version="$(RefOnlyMicrosoftBuildFrameworkVersion)" ExcludeAssets="Runtime" PrivateAssets="All" />
<PackageReference Include="Microsoft.Build.Locator" Version="$(MicrosoftBuildLocatorVersion)" />
<PackageReference Include="System.Buffers" Version="$(SystemBuffersVersion)" />
<PackageReference Include="System.ComponentModel.Composition" Version="$(SystemComponentModelCompositionVersion)" />
<PackageReference Include="System.Threading.Tasks.Dataflow" Version="$(SystemThreadingTasksDataflowVersion)" />
Expand Down
Loading