Skip to content
Draft
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
1 change: 1 addition & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
<PackageVersion Include="Microsoft.CodeAnalysis.VisualBasic.Workspaces" Version="$(MicrosoftCodeAnalysisPackageVersion)" />
<PackageVersion Include="Microsoft.CodeAnalysis.Workspaces.Common" Version="$(MicrosoftCodeAnalysisPackageVersion)" />
<PackageVersion Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" Version="$(MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion)" />
<PackageVersion Include="Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost" Version="$(MicrosoftCodeAnalysisWorkspacesMSBuildBuildHostPackageVersion)" />
<PackageVersion Include="Microsoft.CodeAnalysis.ExternalAccess.HotReload" Version="$(MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion)" />

<!-- roslyn-sdk dependencies-->
Expand Down
1 change: 1 addition & 0 deletions NuGet.config
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
<add key="richnav" value="https://pkgs.dev.azure.com/azure-public/vside/_packaging/vs-buildservices/nuget/v3/index.json" />
<!-- mstest dependencies -->
<add key="test-tools" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/test-tools/nuget/v3/index.json" />
<add key="r1" value="E:\R1\artifacts\packages\Debug\Shipping"/>
</packageSources>
<disabledPackageSources>
<clear />
Expand Down
49 changes: 25 additions & 24 deletions eng/Version.Details.props
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,18 @@ This file should be imported by eng/Versions.props
<MicrosoftBuildPackageVersion>18.1.0-preview-25568-105</MicrosoftBuildPackageVersion>
<MicrosoftBuildLocalizationPackageVersion>18.1.0-preview-25568-105</MicrosoftBuildLocalizationPackageVersion>
<MicrosoftBuildNuGetSdkResolverPackageVersion>7.1.0-preview.1.6905</MicrosoftBuildNuGetSdkResolverPackageVersion>
<MicrosoftCodeAnalysisPackageVersion>5.3.0-1.25568.105</MicrosoftCodeAnalysisPackageVersion>
<MicrosoftCodeAnalysisBuildClientPackageVersion>5.3.0-1.25568.105</MicrosoftCodeAnalysisBuildClientPackageVersion>
<MicrosoftCodeAnalysisCSharpPackageVersion>5.3.0-1.25568.105</MicrosoftCodeAnalysisCSharpPackageVersion>
<MicrosoftCodeAnalysisCSharpCodeStylePackageVersion>5.3.0-1.25568.105</MicrosoftCodeAnalysisCSharpCodeStylePackageVersion>
<MicrosoftCodeAnalysisCSharpFeaturesPackageVersion>5.3.0-1.25568.105</MicrosoftCodeAnalysisCSharpFeaturesPackageVersion>
<MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>5.3.0-1.25568.105</MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>
<MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion>5.3.0-1.25568.105</MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion>
<MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion>5.3.0-1.25568.105</MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion>
<MicrosoftCodeAnalysisPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisPackageVersion>
<MicrosoftCodeAnalysisBuildClientPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisBuildClientPackageVersion>
<MicrosoftCodeAnalysisCSharpPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisCSharpPackageVersion>
<MicrosoftCodeAnalysisCSharpCodeStylePackageVersion>5.3.0-dev</MicrosoftCodeAnalysisCSharpCodeStylePackageVersion>
<MicrosoftCodeAnalysisCSharpFeaturesPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisCSharpFeaturesPackageVersion>
<MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>
<MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion>
<MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion>
<MicrosoftCodeAnalysisRazorToolingInternalPackageVersion>10.0.0-preview.25568.105</MicrosoftCodeAnalysisRazorToolingInternalPackageVersion>
<MicrosoftCodeAnalysisWorkspacesCommonPackageVersion>5.3.0-1.25568.105</MicrosoftCodeAnalysisWorkspacesCommonPackageVersion>
<MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion>5.3.0-1.25568.105</MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion>
<MicrosoftCodeAnalysisWorkspacesCommonPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisWorkspacesCommonPackageVersion>
<MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion>
<MicrosoftCodeAnalysisWorkspacesMSBuildBuildHostPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisWorkspacesMSBuildBuildHostPackageVersion>
<MicrosoftDotNetArcadeSdkPackageVersion>10.0.0-beta.25568.105</MicrosoftDotNetArcadeSdkPackageVersion>
<MicrosoftDotNetBuildTasksInstallersPackageVersion>10.0.0-beta.25568.105</MicrosoftDotNetBuildTasksInstallersPackageVersion>
<MicrosoftDotNetBuildTasksTemplatingPackageVersion>10.0.0-beta.25568.105</MicrosoftDotNetBuildTasksTemplatingPackageVersion>
Expand All @@ -41,8 +42,8 @@ This file should be imported by eng/Versions.props
<MicrosoftDotNetXliffTasksPackageVersion>10.0.0-beta.25568.105</MicrosoftDotNetXliffTasksPackageVersion>
<MicrosoftDotNetXUnitExtensionsPackageVersion>10.0.0-beta.25568.105</MicrosoftDotNetXUnitExtensionsPackageVersion>
<MicrosoftFSharpCompilerPackageVersion>15.0.200-servicing.25568.105</MicrosoftFSharpCompilerPackageVersion>
<MicrosoftNetCompilersToolsetPackageVersion>5.3.0-1.25568.105</MicrosoftNetCompilersToolsetPackageVersion>
<MicrosoftNetCompilersToolsetFrameworkPackageVersion>5.3.0-1.25568.105</MicrosoftNetCompilersToolsetFrameworkPackageVersion>
<MicrosoftNetCompilersToolsetPackageVersion>5.3.0-dev</MicrosoftNetCompilersToolsetPackageVersion>
<MicrosoftNetCompilersToolsetFrameworkPackageVersion>5.3.0-dev</MicrosoftNetCompilersToolsetFrameworkPackageVersion>
<MicrosoftNETRuntimeEmscriptenSdkInternalPackageVersion>10.0.0-preview.7.25377.103</MicrosoftNETRuntimeEmscriptenSdkInternalPackageVersion>
<MicrosoftNETSdkRazorSourceGeneratorsTransportPackageVersion>10.0.0-preview.25568.105</MicrosoftNETSdkRazorSourceGeneratorsTransportPackageVersion>
<MicrosoftNETTestSdkPackageVersion>18.1.0-preview-25568-105</MicrosoftNETTestSdkPackageVersion>
Expand Down Expand Up @@ -159,18 +160,18 @@ This file should be imported by eng/Versions.props
<MicrosoftBuildPackageVersion>18.1.0-preview-25523-02</MicrosoftBuildPackageVersion>
<MicrosoftBuildLocalizationPackageVersion>18.1.0-preview-25523-02</MicrosoftBuildLocalizationPackageVersion>
<!-- dotnet/roslyn dependencies -->
<MicrosoftCodeAnalysisPackageVersion>5.3.0-2.25560.14</MicrosoftCodeAnalysisPackageVersion>
<MicrosoftCodeAnalysisBuildClientPackageVersion>5.3.0-2.25560.14</MicrosoftCodeAnalysisBuildClientPackageVersion>
<MicrosoftCodeAnalysisCSharpPackageVersion>5.3.0-2.25560.14</MicrosoftCodeAnalysisCSharpPackageVersion>
<MicrosoftCodeAnalysisCSharpCodeStylePackageVersion>5.3.0-2.25560.14</MicrosoftCodeAnalysisCSharpCodeStylePackageVersion>
<MicrosoftCodeAnalysisCSharpFeaturesPackageVersion>5.3.0-2.25560.14</MicrosoftCodeAnalysisCSharpFeaturesPackageVersion>
<MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>5.3.0-2.25560.14</MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>
<MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion>5.3.0-2.25560.14</MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion>
<MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion>5.3.0-2.25560.14</MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion>
<MicrosoftCodeAnalysisWorkspacesCommonPackageVersion>5.3.0-2.25560.14</MicrosoftCodeAnalysisWorkspacesCommonPackageVersion>
<MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion>5.3.0-2.25560.14</MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion>
<MicrosoftNetCompilersToolsetPackageVersion>5.3.0-2.25560.14</MicrosoftNetCompilersToolsetPackageVersion>
<MicrosoftNetCompilersToolsetFrameworkPackageVersion>5.3.0-2.25560.14</MicrosoftNetCompilersToolsetFrameworkPackageVersion>
<MicrosoftCodeAnalysisPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisPackageVersion>
<MicrosoftCodeAnalysisBuildClientPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisBuildClientPackageVersion>
<MicrosoftCodeAnalysisCSharpPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisCSharpPackageVersion>
<MicrosoftCodeAnalysisCSharpCodeStylePackageVersion>5.3.0-dev</MicrosoftCodeAnalysisCSharpCodeStylePackageVersion>
<MicrosoftCodeAnalysisCSharpFeaturesPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisCSharpFeaturesPackageVersion>
<MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>
<MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisExternalAccessHotReloadPackageVersion>
<MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion>
<MicrosoftCodeAnalysisWorkspacesCommonPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisWorkspacesCommonPackageVersion>
<MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion>5.3.0-dev</MicrosoftCodeAnalysisWorkspacesMSBuildPackageVersion>
<MicrosoftNetCompilersToolsetPackageVersion>5.3.0-dev</MicrosoftNetCompilersToolsetPackageVersion>
<MicrosoftNetCompilersToolsetFrameworkPackageVersion>5.3.0-dev</MicrosoftNetCompilersToolsetFrameworkPackageVersion>
<!-- nuget/nuget.client dependencies -->
<MicrosoftBuildNuGetSdkResolverPackageVersion>7.1.0-preview.1.42</MicrosoftBuildNuGetSdkResolverPackageVersion>
<NuGetBuildTasksPackageVersion>7.1.0-preview.1.42</NuGetBuildTasksPackageVersion>
Expand Down
21 changes: 14 additions & 7 deletions src/BuiltInTools/Watch/Build/EvaluationResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@
// The .NET Foundation licenses this file to you under the MIT license.

using System.Collections.Immutable;
using Microsoft.Build.Execution;
using Microsoft.Build.Graph;
using Microsoft.Extensions.Logging;

namespace Microsoft.DotNet.Watch;

internal sealed class EvaluationResult(IReadOnlyDictionary<string, FileItem> files, ProjectGraph projectGraph)
internal sealed class EvaluationResult(IReadOnlyDictionary<string, FileItem> files, ProjectGraph projectGraph, ImmutableArray<ProjectInstance> restoredProjectInstances)
{
public readonly IReadOnlyDictionary<string, FileItem> Files = files;
public readonly ProjectGraph ProjectGraph = projectGraph;
Expand All @@ -26,6 +27,9 @@ private static IReadOnlySet<string> CreateBuildFileSet(ProjectGraph projectGraph
public IReadOnlySet<string> BuildFiles
=> _lazyBuildFiles.Value;

public ImmutableArray<ProjectInstance> RestoredProjectInstances
=> restoredProjectInstances;

public void WatchFiles(FileWatcher fileWatcher)
{
fileWatcher.WatchContainingDirectories(Files.Keys, includeSubdirectories: true);
Expand Down Expand Up @@ -86,14 +90,18 @@ public static ImmutableDictionary<string, string> GetGlobalBuildOptions(IEnumera
}
}

// Capture the snapshot of original project instances after Restore target has been run.
// These instances can be used to evaluate additional targets (e.g. deployment) if needed.
var restoredProjectInstances = projectGraph.ProjectNodesTopologicallySorted.Select(node => node.ProjectInstance.DeepCopy()).ToImmutableArray();

var fileItems = new Dictionary<string, FileItem>();

// Update the project instances of the graph with design-time build results.
// The properties and items set by DTB will be used by the Workspace to create Roslyn representation of projects.

foreach (var project in projectGraph.ProjectNodesTopologicallySorted)
{
// Deep copy so that we can reuse the graph for building additional targets later on.
// If we didn't copy the instance the targets might duplicate items that were already
// populated by design-time build.
var projectInstance = project.ProjectInstance.DeepCopy();
var projectInstance = project.ProjectInstance;

// skip outer build project nodes:
if (projectInstance.GetPropertyValue(PropertyNames.TargetFramework) == "")
Expand All @@ -116,7 +124,6 @@ public static ImmutableDictionary<string, string> GetGlobalBuildOptions(IEnumera
var projectPath = projectInstance.FullPath;
var projectDirectory = Path.GetDirectoryName(projectPath)!;

// TODO: Compile and AdditionalItems should be provided by Roslyn
var items = projectInstance.GetItems(ItemNames.Compile)
.Concat(projectInstance.GetItems(ItemNames.AdditionalFiles))
.Concat(projectInstance.GetItems(ItemNames.Watch));
Expand Down Expand Up @@ -166,6 +173,6 @@ void AddFile(string include, string? staticWebAssetPath)

buildReporter.ReportWatchedFiles(fileItems);

return new EvaluationResult(fileItems, projectGraph);
return new EvaluationResult(fileItems, projectGraph, restoredProjectInstances);
}
}
2 changes: 1 addition & 1 deletion src/BuiltInTools/Watch/Build/FilePathExclusions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public static FilePathExclusions Create(ProjectGraph projectGraph)
{
// If default items are not enabled exclude just the output directories.

TryAddOutputDir(projectNode.GetOutputDirectory());
TryAddOutputDir(projectNode.ProjectInstance.GetOutputDirectory());
TryAddOutputDir(projectNode.GetIntermediateOutputDirectory());

void TryAddOutputDir(string? dir)
Expand Down
4 changes: 2 additions & 2 deletions src/BuiltInTools/Watch/Build/ProjectGraphUtilities.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ public static bool IsNetCoreApp(this ProjectGraphNode projectNode, Version minVe
public static bool IsWebApp(this ProjectGraphNode projectNode)
=> projectNode.GetCapabilities().Any(static value => value is ProjectCapability.AspNetCore or ProjectCapability.WebAssembly);

public static string? GetOutputDirectory(this ProjectGraphNode projectNode)
=> projectNode.ProjectInstance.GetPropertyValue(PropertyNames.TargetPath) is { Length: >0 } path ? Path.GetDirectoryName(Path.Combine(projectNode.ProjectInstance.Directory, path)) : null;
public static string? GetOutputDirectory(this ProjectInstance project)
=> project.GetPropertyValue(PropertyNames.TargetPath) is { Length: >0 } path ? Path.GetDirectoryName(Path.Combine(project.Directory, path)) : null;

public static string GetAssemblyName(this ProjectGraphNode projectNode)
=> projectNode.ProjectInstance.GetPropertyValue(PropertyNames.TargetName);
Expand Down
14 changes: 14 additions & 0 deletions src/BuiltInTools/Watch/FileWatcher/ChangeKind.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using Microsoft.CodeAnalysis.ExternalAccess.HotReload.Api;

namespace Microsoft.DotNet.Watch;

internal enum ChangeKind
Expand All @@ -10,6 +12,18 @@ internal enum ChangeKind
Delete
}

internal static class ChangeKindExtensions
{
public static HotReloadFileChangeKind Convert(this ChangeKind changeKind) =>
changeKind switch
{
ChangeKind.Update => HotReloadFileChangeKind.Update,
ChangeKind.Add => HotReloadFileChangeKind.Add,
ChangeKind.Delete => HotReloadFileChangeKind.Delete,
_ => throw new InvalidOperationException()
};
}

internal readonly record struct ChangedFile(FileItem Item, ChangeKind Kind);

internal readonly record struct ChangedPath(string Path, ChangeKind Kind);
Loading
Loading