Skip to content

Commit 7002321

Browse files
authored
[dotnet-watch] Microsoft.DotNet.HotReload.Agent.PipeRpc source package (#45603)
1 parent a84f7d8 commit 7002321

19 files changed

+623
-520
lines changed

Directory.Packages.props

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@
9191
<PackageVersion Include="runtime.linux-x64.Microsoft.NETCore.DotNetHostResolver" Version="$(MicrosoftNETCoreDotNetHostResolverPackageVersion)" />
9292
<PackageVersion Include="runtime.osx-x64.Microsoft.NETCore.DotNetHostResolver" Version="$(MicrosoftNETCoreDotNetHostResolverPackageVersion)" />
9393
<PackageVersion Include="StyleCop.Analyzers" Version="$(StyleCopAnalyzersPackageVersion)" />
94+
<PackageVersion Include="System.Buffers" Version="$(SystemBuffersVersion)" />
95+
<PackageVersion Include="System.Memory" Version="$(SystemMemoryVersion)" />
96+
<PackageVersion Include="System.Threading.Tasks.Extensions" Version="$(SystemThreadingTasksExtensionsVersion)" />
9497
<PackageVersion Include="System.CodeDom" Version="$(SystemCodeDomPackageVersion)" />
9598
<PackageVersion Include="System.CommandLine" Version="$(SystemCommandLineVersion)" />
9699
<PackageVersion Include="System.CommandLine.Rendering" Version="$(SystemCommandLineRenderingVersion)" />

eng/Versions.props

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,20 @@
282282
<MicrosoftSourceLinkGitLabVersion>9.0.0-beta.24617.1</MicrosoftSourceLinkGitLabVersion>
283283
<MicrosoftSourceLinkBitbucketGitVersion>9.0.0-beta.24617.1</MicrosoftSourceLinkBitbucketGitVersion>
284284
</PropertyGroup>
285+
<!--
286+
Dependencies to support netstandard2.0 targets.
287+
Versions need to be conditionally selected: due to https://github.com/dotnet/sdk/issues/45155
288+
-->
289+
<PropertyGroup Condition="'$(DotNetBuildSourceOnly)' == 'true'">
290+
<SystemBuffersVersion>4.6.0</SystemBuffersVersion>
291+
<SystemMemoryVersion>4.6.0</SystemMemoryVersion>
292+
<SystemThreadingTasksExtensionsVersion>4.6.0</SystemThreadingTasksExtensionsVersion>
293+
</PropertyGroup>
294+
<PropertyGroup Condition="'$(DotNetBuildSourceOnly)' != 'true'">
295+
<SystemBuffersVersion>4.5.1</SystemBuffersVersion>
296+
<SystemMemoryVersion>4.5.5</SystemMemoryVersion>
297+
<SystemThreadingTasksExtensionsVersion>4.5.4</SystemThreadingTasksExtensionsVersion>
298+
</PropertyGroup>
285299
<!-- Get .NET Framework reference assemblies from NuGet packages -->
286300
<PropertyGroup>
287301
<UsingToolNetFrameworkReferenceAssemblies>true</UsingToolNetFrameworkReferenceAssemblies>

sdk.sln

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,10 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Microsoft.DotNet.HotReload.
516516
EndProject
517517
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.DotNet.HotReload.Agent.Package", "src\BuiltInTools\HotReloadAgent\Microsoft.DotNet.HotReload.Agent.Package.csproj", "{2FF79F82-60C1-349A-4726-7783D5A6D5DF}"
518518
EndProject
519+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.DotNet.HotReload.Agent.PipeRpc.Package", "src\BuiltInTools\HotReloadAgent.PipeRpc\Microsoft.DotNet.HotReload.Agent.PipeRpc.Package.csproj", "{692B71D8-9C31-D1EE-6C1B-570A12B18E39}"
520+
EndProject
521+
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Microsoft.DotNet.HotReload.Agent.PipeRpc", "src\BuiltInTools\HotReloadAgent.PipeRpc\Microsoft.DotNet.HotReload.Agent.PipeRpc.shproj", "{FA3C7F91-42A2-45AD-897C-F646B081016C}"
522+
EndProject
519523
Global
520524
GlobalSection(SolutionConfigurationPlatforms) = preSolution
521525
Debug|Any CPU = Debug|Any CPU
@@ -982,6 +986,10 @@ Global
982986
{2FF79F82-60C1-349A-4726-7783D5A6D5DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
983987
{2FF79F82-60C1-349A-4726-7783D5A6D5DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
984988
{2FF79F82-60C1-349A-4726-7783D5A6D5DF}.Release|Any CPU.Build.0 = Release|Any CPU
989+
{692B71D8-9C31-D1EE-6C1B-570A12B18E39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
990+
{692B71D8-9C31-D1EE-6C1B-570A12B18E39}.Debug|Any CPU.Build.0 = Debug|Any CPU
991+
{692B71D8-9C31-D1EE-6C1B-570A12B18E39}.Release|Any CPU.ActiveCfg = Release|Any CPU
992+
{692B71D8-9C31-D1EE-6C1B-570A12B18E39}.Release|Any CPU.Build.0 = Release|Any CPU
985993
EndGlobalSection
986994
GlobalSection(SolutionProperties) = preSolution
987995
HideSolutionNode = FALSE
@@ -1163,19 +1171,24 @@ Global
11631171
{1F0B4B3C-DC88-4740-B04F-1707102E9930} = {580D1AE7-AA8F-4912-8B76-105594E00B3B}
11641172
{418B10BD-CA42-49F3-8F4A-D8CC90C8A17D} = {71A9F549-0EB6-41F9-BC16-4A6C5007FC91}
11651173
{2FF79F82-60C1-349A-4726-7783D5A6D5DF} = {71A9F549-0EB6-41F9-BC16-4A6C5007FC91}
1174+
{692B71D8-9C31-D1EE-6C1B-570A12B18E39} = {71A9F549-0EB6-41F9-BC16-4A6C5007FC91}
1175+
{FA3C7F91-42A2-45AD-897C-F646B081016C} = {71A9F549-0EB6-41F9-BC16-4A6C5007FC91}
11661176
EndGlobalSection
11671177
GlobalSection(ExtensibilityGlobals) = postSolution
11681178
SolutionGuid = {FB8F26CE-4DE6-433F-B32A-79183020BBD6}
11691179
EndGlobalSection
11701180
GlobalSection(SharedMSBuildProjectFiles) = preSolution
11711181
src\Compatibility\ApiCompat\Microsoft.DotNet.ApiCompat.Shared\Microsoft.DotNet.ApiCompat.Shared.projitems*{03c5a84a-982b-4f38-ac73-ab832c645c4a}*SharedItemsImports = 5
11721182
src\Compatibility\ApiCompat\Microsoft.DotNet.ApiCompat.Shared\Microsoft.DotNet.ApiCompat.Shared.projitems*{0a3c9afd-f6e6-4a5d-83fb-93bf66732696}*SharedItemsImports = 5
1183+
src\BuiltInTools\HotReloadAgent.PipeRpc\Microsoft.DotNet.HotReload.Agent.PipeRpc.projitems*{1bbfa19c-03f0-4d27-9d0d-0f8172642107}*SharedItemsImports = 5
11731184
src\BuiltInTools\HotReloadAgent\Microsoft.DotNet.HotReload.Agent.projitems*{1bbfa19c-03f0-4d27-9d0d-0f8172642107}*SharedItemsImports = 5
11741185
src\BuiltInTools\AspireService\Microsoft.WebTools.AspireService.projitems*{1f0b4b3c-dc88-4740-b04f-1707102e9930}*SharedItemsImports = 5
11751186
src\BuiltInTools\HotReloadAgent\Microsoft.DotNet.HotReload.Agent.projitems*{418b10bd-ca42-49f3-8f4a-d8cc90c8a17d}*SharedItemsImports = 13
11761187
src\BuiltInTools\AspireService\Microsoft.WebTools.AspireService.projitems*{445efbd5-6730-4f09-943d-278e77501ffd}*SharedItemsImports = 5
1188+
src\BuiltInTools\HotReloadAgent.PipeRpc\Microsoft.DotNet.HotReload.Agent.PipeRpc.projitems*{445efbd5-6730-4f09-943d-278e77501ffd}*SharedItemsImports = 5
11771189
src\BuiltInTools\AspireService\Microsoft.WebTools.AspireService.projitems*{94c8526e-dcc2-442f-9868-3dd0ba2688be}*SharedItemsImports = 13
11781190
src\Compatibility\ApiCompat\Microsoft.DotNet.ApiCompat.Shared\Microsoft.DotNet.ApiCompat.Shared.projitems*{9d36039f-d0a1-462f-85b4-81763c6b02cb}*SharedItemsImports = 13
11791191
src\Compatibility\ApiCompat\Microsoft.DotNet.ApiCompat.Shared\Microsoft.DotNet.ApiCompat.Shared.projitems*{a9103b98-d888-4260-8a05-fa36f640698a}*SharedItemsImports = 5
1192+
src\BuiltInTools\HotReloadAgent.PipeRpc\Microsoft.DotNet.HotReload.Agent.PipeRpc.projitems*{fa3c7f91-42a2-45ad-897c-f646b081016c}*SharedItemsImports = 13
11801193
EndGlobalSection
11811194
EndGlobal

src/BuiltInTools/DotNetDeltaApplier/Microsoft.Extensions.DotNetDeltaApplier.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<Import Project="..\HotReloadAgent\Microsoft.DotNet.HotReload.Agent.projitems" Label="Shared" />
3+
<Import Project="..\HotReloadAgent.PipeRpc\Microsoft.DotNet.HotReload.Agent.PipeRpc.projitems" Label="Shared" />
34
<PropertyGroup>
45
<!--
56
dotnet-watch may inject this assembly to .NET 6.0+ app, so we can't target a newer version.
@@ -14,11 +15,10 @@
1415

1516
<ItemGroup>
1617
<Compile Include="..\dotnet-watch\EnvironmentVariables_StartupHook.cs" Link="EnvironmentVariables_StartupHook.cs" />
17-
<Compile Include="..\dotnet-watch\HotReload\NamedPipeContract.cs" />
1818
</ItemGroup>
1919

2020
<ItemGroup>
21-
<InternalsVisibleTo Include="Microsoft.Extensions.DotNetDeltaApplier.Tests"/>
21+
<InternalsVisibleTo Include="Microsoft.Extensions.DotNetDeltaApplier.Tests" />
2222
</ItemGroup>
2323

2424
</Project>

src/BuiltInTools/DotNetDeltaApplier/StartupHook.cs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,26 +47,36 @@ public static void Initialize()
4747
{
4848
agent.Reporter.Report("Writing capabilities: " + agent.Capabilities, AgentMessageSeverity.Verbose);
4949

50-
var initPayload = new ClientInitializationPayload(agent.Capabilities);
50+
var initPayload = new ClientInitializationRequest(agent.Capabilities);
5151
await initPayload.WriteAsync(pipeClient, CancellationToken.None);
5252

5353
while (pipeClient.IsConnected)
5454
{
55-
var update = await UpdatePayload.ReadAsync(pipeClient, CancellationToken.None);
56-
55+
var update = await ManagedCodeUpdateRequest.ReadAsync(pipeClient, CancellationToken.None);
5756
Log($"ResponseLoggingLevel = {update.ResponseLoggingLevel}");
5857

59-
agent.ApplyDeltas(update.Deltas);
58+
bool success;
59+
try
60+
{
61+
agent.ApplyDeltas(update.Deltas);
62+
success = true;
63+
}
64+
catch (Exception e)
65+
{
66+
agent.Reporter.Report($"The runtime failed to applying the change: {e.Message}", AgentMessageSeverity.Error);
67+
agent.Reporter.Report("Further changes won't be applied to this process.", AgentMessageSeverity.Warning);
68+
success = false;
69+
}
70+
6071
var logEntries = agent.GetAndClearLogEntries(update.ResponseLoggingLevel);
6172

62-
// response:
63-
await pipeClient.WriteAsync((byte)UpdatePayload.ApplySuccessValue, CancellationToken.None);
64-
await UpdatePayload.WriteLogAsync(pipeClient, logEntries, CancellationToken.None);
73+
var response = new UpdateResponse(logEntries, success);
74+
await response.WriteAsync(pipeClient, CancellationToken.None);
6575
}
6676
}
67-
catch (Exception ex)
77+
catch (Exception e)
6878
{
69-
Log(ex.Message);
79+
Log(e.ToString());
7080
}
7181

7282
Log("Stopped received delta updates. Server is no longer connected.");
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<PropertyGroup>
3+
<!--
4+
Intentionally pinned. Supports Visual Studio in-proc agent client.
5+
-->
6+
<TargetFramework>netstandard2.0</TargetFramework>
7+
<GenerateDocumentationFile>false</GenerateDocumentationFile>
8+
<DebugType>none</DebugType>
9+
<GenerateDependencyFile>false</GenerateDependencyFile>
10+
<Nullable>enable</Nullable>
11+
<LangVersion>preview</LangVersion>
12+
13+
<!-- NuGet -->
14+
<IsPackable>true</IsPackable>
15+
<IsSourcePackage>true</IsSourcePackage>
16+
<PackageId>Microsoft.DotNet.HotReload.Agent.PipeRpc</PackageId>
17+
<IncludeBuildOutput>false</IncludeBuildOutput>
18+
<PackageDescription>
19+
Package containing sources of Hot Reload agent pipe RPC.
20+
</PackageDescription>
21+
<!-- Remove once https://github.com/NuGet/Home/issues/8583 is fixed -->
22+
<NoWarn>$(NoWarn);NU5128</NoWarn>
23+
</PropertyGroup>
24+
25+
<ItemGroup>
26+
<!-- netstandard2.0 polyfills -->
27+
<PackageReference Include="System.Buffers" />
28+
<PackageReference Include="System.Memory" />
29+
<PackageReference Include="System.Threading.Tasks.Extensions" />
30+
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" />
31+
</ItemGroup>
32+
33+
<!-- Make sure the shared source files do not require any global usings -->
34+
<ItemGroup>
35+
<Using Remove="@(Using)" />
36+
</ItemGroup>
37+
<ItemGroup>
38+
<Compile Include="..\HotReloadAgent\AgentMessageSeverity.cs" Link="AgentContracts\AgentMessageSeverity.cs" />
39+
<Compile Include="..\HotReloadAgent\ResponseLoggingLevel.cs" Link="AgentContracts\ResponseLoggingLevel.cs" />
40+
<Compile Include="..\HotReloadAgent\UpdateDelta.cs" Link="AgentContracts\UpdateDelta.cs" />
41+
</ItemGroup>
42+
</Project>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup>
4+
<MSBuildAllProjects Condition="'$(MSBuildVersion)' == '' Or '$(MSBuildVersion)' &lt; '16.0'">$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
5+
<HasSharedItems>true</HasSharedItems>
6+
<SharedGUID>{FA3C7F91-42A2-45AD-897C-F646B081016C}</SharedGUID>
7+
</PropertyGroup>
8+
<PropertyGroup Label="Configuration">
9+
<Import_RootNamespace>Microsoft.DotNet.HotReload</Import_RootNamespace>
10+
</PropertyGroup>
11+
<ItemGroup>
12+
<Compile Include="$(MSBuildThisFileDirectory)**\*.cs" />
13+
</ItemGroup>
14+
</Project>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup Label="Globals">
4+
<ProjectGuid>FA3C7F91-42A2-45AD-897C-F646B081016C</ProjectGuid>
5+
<MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
6+
</PropertyGroup>
7+
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
8+
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.Common.Default.props" />
9+
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.Common.props" />
10+
<PropertyGroup />
11+
<Import Project="Microsoft.DotNet.HotReload.Agent.PipeRpc.projitems" Label="Shared" />
12+
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\CodeSharing\Microsoft.CodeSharing.CSharp.targets" />
13+
</Project>

0 commit comments

Comments
 (0)