Skip to content

Commit cf8db81

Browse files
committed
fix: Roslyn + MSBuild + RoslynPad working with each other
1 parent ca98fca commit cf8db81

30 files changed

Lines changed: 275 additions & 105 deletions

File tree

build/Stride.sln

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Microsoft Visual Studio Solution File, Format Version 12.00
2-
# Visual Studio Version 17
3-
VisualStudioVersion = 17.0.31612.314
2+
# Visual Studio Version 18
3+
VisualStudioVersion = 18.0.11205.157 d18.0
44
MinimumVisualStudioVersion = 16.0
55
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "90-Tools", "90-Tools", "{1AE1AC60-5D2F-4CA7-AE20-888F44551185}"
66
EndProject

sources/Directory.Packages.props

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -34,33 +34,35 @@
3434
<PackageVersion Include="Silk.NET.Windowing.Sdl" Version="2.22.0" />
3535
<PackageVersion Include="Stride.SharpFont" Version="1.0.1" />
3636
<PackageVersion Include="System.Drawing.Common" Version="8.0.1" />
37-
<PackageVersion Include="System.Memory" Version="4.5.5" />
37+
<PackageVersion Include="System.Memory" Version="4.6.3" />
3838
<PackageVersion Include="System.Threading.Tasks.Dataflow" Version="10.0.0" />
39-
<PackageVersion Include="System.ValueTuple" Version="4.5.0" />
39+
<PackageVersion Include="System.ValueTuple" Version="4.6.1" />
4040
<PackageVersion Include="Vortice.Vulkan" Version="2.1.2" />
4141
</ItemGroup>
4242
<!-- Other dependencies -->
4343
<ItemGroup>
4444
<PackageVersion Include="JetBrains.Rider.PathLocator" Version="1.0.12" />
4545
<PackageVersion Include="Microsoft.AspNet.WebApi.Client" Version="5.2.7" />
46-
<PackageVersion Include="Microsoft.Build" Version="17.0.0" />
47-
<PackageVersion Include="Microsoft.Build.Locator" Version="1.6.10" />
48-
<PackageVersion Include="Microsoft.Build.Utilities.Core" Version="17.0.0" />
49-
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Features" Version="3.6.0" />
50-
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="3.6.0" />
51-
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.6.0" />
52-
<PackageVersion Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" Version="3.6.0" />
46+
<PackageVersion Include="Microsoft.NET.StringTools" Version="18.0.2" />
47+
<PackageVersion Include="Microsoft.Build" Version="18.0.2" />
48+
<PackageVersion Include="Microsoft.Build.Framework" Version="18.0.2" />
49+
<PackageVersion Include="Microsoft.Build.Locator" Version="1.10.12" />
50+
<PackageVersion Include="Microsoft.Build.Utilities.Core" Version="18.0.2" />
51+
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Features" Version="4.12.0" />
52+
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.12.0" />
53+
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.12.0" />
54+
<PackageVersion Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" Version="4.12.0" />
5355
<PackageVersion Include="Microsoft.CSharp" Version="4.7.0" />
5456
<PackageVersion Include="Microsoft.Extensions.DependencyModel" Version="10.0.0" />
5557
<PackageVersion Include="Microsoft.VisualStudio.Setup.Configuration.Interop" Version="3.8.2112" />
5658
<PackageVersion Include="Mono.Cecil" Version="0.11.5" />
5759
<PackageVersion Include="Mono.Options" Version="6.12.0.148" />
58-
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
59-
<PackageVersion Include="NuGet.Commands" Version="6.14.0" />
60-
<PackageVersion Include="NuGet.Configuration" Version="6.14.0" />
60+
<PackageVersion Include="Newtonsoft.Json" Version="13.0.4" />
61+
<PackageVersion Include="NuGet.Commands" Version="7.0.0" />
62+
<PackageVersion Include="NuGet.Configuration" Version="7.0.0" />
6163
<PackageVersion Include="NuGet.PackageManagement" Version="6.14.0" />
62-
<PackageVersion Include="NuGet.Protocol" Version="6.14.0" />
63-
<PackageVersion Include="NuGet.Resolver" Version="6.14.0" />
64+
<PackageVersion Include="NuGet.Protocol" Version="7.0.0" />
65+
<PackageVersion Include="NuGet.Resolver" Version="7.0.0" />
6466
<PackageVersion Include="Silk.NET.Assimp" Version="2.22.0" />
6567
<PackageVersion Include="Stride.GNU.Getopt" Version="2.0.0" />
6668
<PackageVersion Include="Stride.GNU.Gettext" Version="2.0.0" />
@@ -77,8 +79,8 @@
7779
<PackageVersion Include="System.IO.FileSystem" Version="4.3.0" />
7880
<PackageVersion Include="System.IO.FileSystem.Primitives" Version="4.3.0" />
7981
<PackageVersion Include="System.Management" Version="10.0.0" />
80-
<PackageVersion Include="System.Reactive" Version="6.0.0" />
81-
<PackageVersion Include="System.Reactive.Linq" Version="6.0.0" />
82+
<PackageVersion Include="System.Reactive" Version="6.1.0" />
83+
<PackageVersion Include="System.Reactive.Linq" Version="6.1.0" />
8284
<PackageVersion Include="System.Reflection" Version="4.3.0" />
8385
<PackageVersion Include="System.Reflection.Emit" Version="4.7.0" />
8486
<PackageVersion Include="System.Reflection.Metadata" Version="10.0.0" />
@@ -127,21 +129,21 @@
127129
</ItemGroup>
128130
<!-- Windows/WPF dependencies -->
129131
<ItemGroup>
130-
<PackageVersion Include="AvalonEdit" Version="6.3.0.90" />
132+
<PackageVersion Include="AvalonEdit" Version="6.3.1.120" />
131133
<PackageVersion Include="Dirkster.AvalonDock" Version="4.72.1" />
132134
<PackageVersion Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.77" />
133135
<PackageVersion Include="Microsoft.Win32.Registry" Version="5.0.0" />
134136
<PackageVersion Include="Microsoft-WindowsAPICodePack-Shell" Version="1.1.5" />
135137
<PackageVersion Include="Stride.CrashReport" Version="1.0.2" />
136138
<PackageVersion Include="Stride.GraphX.WPF.Controls" Version="2.4.0" />
137139
<PackageVersion Include="Stride.Metrics" Version="1.0.3" />
138-
<PackageVersion Include="RoslynPad.Editor.Windows" Version="1.2.0" />
139-
<PackageVersion Include="RoslynPad.Roslyn" Version="3.6.0" />
140-
<PackageVersion Include="RoslynPad.Roslyn.Windows" Version="3.6.0" />
140+
<PackageVersion Include="RoslynPad.Editor.Windows" Version="4.12.1" />
141+
<PackageVersion Include="RoslynPad.Roslyn" Version="4.12.1" />
142+
<PackageVersion Include="RoslynPad.Roslyn.Windows" Version="4.12.1" />
141143
</ItemGroup>
142144
<!-- Analyzers -->
143145
<ItemGroup>
144-
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" PrivateAssets="all" />
145-
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.7.0" PrivateAssets="all" />
146+
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.11.0" PrivateAssets="all" />
147+
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.14.0" PrivateAssets="all" />
146148
</ItemGroup>
147-
</Project>
149+
</Project>

sources/assets/Stride.Core.Assets.CompilerApp/Stride.Core.Assets.CompilerApp.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
<None Include="..\..\..\deps\Stride.MSBuild.Tasks\bin\Release\**\*.*" PackagePath="tools\" Pack="true" />
2424
</ItemGroup>
2525
<ItemGroup>
26+
<PackageReference Include="Microsoft.NET.StringTools" ExcludeAssets="runtime" PrivateAssets="all" />
27+
<PackageReference Include="Microsoft.Build.Framework" ExcludeAssets="runtime" PrivateAssets="all" />
28+
<PackageReference Include="Microsoft.Build.Utilities.Core" ExcludeAssets="runtime" PrivateAssets="all" />
2629
<ProjectReference Include="..\..\engine\Stride.Assets.Models\Stride.Assets.Models.csproj" />
2730
<ProjectReference Include="..\..\engine\Stride.Particles\Stride.Particles.csproj" />
2831
<ProjectReference Include="..\..\engine\Stride.Physics\Stride.Physics.csproj" />

sources/assets/Stride.Core.Assets.Quantum/Stride.Core.Assets.Quantum.csproj

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@
1414
<RestorePackages>true</RestorePackages>
1515
</PropertyGroup>
1616
<ItemGroup>
17-
<PackageReference Include="Microsoft.Build" ExcludeAssets="runtime" />
18-
<PackageReference Include="Microsoft.Build.Utilities.Core" ExcludeAssets="runtime" />
17+
<PackageReference Include="Microsoft.NET.StringTools" ExcludeAssets="runtime" PrivateAssets="all" />
18+
<PackageReference Include="Microsoft.Build.Framework" ExcludeAssets="runtime" PrivateAssets="all" />
19+
<PackageReference Include="Microsoft.Build" ExcludeAssets="runtime" PrivateAssets="all" />
20+
<PackageReference Include="Microsoft.Build.Utilities.Core" ExcludeAssets="runtime" PrivateAssets="all" />
1921
<PackageReference Include="System.Collections.Immutable" />
2022
<PackageReference Include="System.Diagnostics.Tracing" />
2123
<PackageReference Include="System.Runtime" />

sources/assets/Stride.Core.Assets/Stride.Core.Assets.csproj

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@
1313
<RestorePackages>true</RestorePackages>
1414
</PropertyGroup>
1515
<ItemGroup>
16-
<PackageReference Include="Microsoft.Build" ExcludeAssets="runtime" />
16+
<PackageReference Include="Microsoft.NET.StringTools" ExcludeAssets="runtime" PrivateAssets="all" />
17+
<PackageReference Include="Microsoft.Build.Framework" ExcludeAssets="runtime" PrivateAssets="all" />
18+
<PackageReference Include="Microsoft.Build" ExcludeAssets="runtime" PrivateAssets="all" />
1719
<PackageReference Include="Microsoft.Build.Locator" />
18-
<PackageReference Include="Microsoft.Build.Utilities.Core" ExcludeAssets="runtime" />
20+
<PackageReference Include="Microsoft.Build.Utilities.Core" ExcludeAssets="runtime" PrivateAssets="all" />
1921
<PackageReference Include="System.Reflection.Emit" />
2022
<PackageReference Include="System.Threading.Tasks.Dataflow" />
2123
</ItemGroup>

sources/assets/Stride.Core.Assets/VSProjectHelper.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ public static string GetOrCompileProjectAssembly(string fullProjectLocation, ILo
7474
var asyncBuild = new CancellableAsyncBuild(project, assemblyPath);
7575
asyncBuild.Build(project, targets, flags, new LoggerRedirect(logger, onlyErrors));
7676
var buildResult = asyncBuild.BuildTask.Result;
77+
if (buildResult.Exception != null)
78+
logger.Error("Build failed", buildResult.Exception);
7779
}
7880
}
7981
}

sources/core/Stride.Core.AssemblyProcessor/Stride.Core.AssemblyProcessor.csproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@
3939
<ItemGroup>
4040
<PackageReference Include="Mono.Cecil" />
4141
<PackageReference Include="Mono.Options" />
42-
<PackageReference Include="Microsoft.Build.Utilities.Core" ExcludeAssets="runtime" />
42+
<PackageReference Include="Microsoft.NET.StringTools" ExcludeAssets="runtime" PrivateAssets="all" />
43+
<PackageReference Include="Microsoft.Build.Framework" ExcludeAssets="runtime" PrivateAssets="all" />
44+
<PackageReference Include="Microsoft.Build.Utilities.Core" ExcludeAssets="runtime" PrivateAssets="all" />
4345
<PackageReference Include="Polysharp">
4446
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
4547
<PrivateAssets>all</PrivateAssets>

sources/core/Stride.Core.CompilerServices/Stride.Core.CompilerServices.csproj

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@
2121
</Compile>
2222
</ItemGroup>
2323
<ItemGroup>
24-
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" />
24+
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers">
25+
<PrivateAssets>all</PrivateAssets>
26+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
27+
</PackageReference>
2528
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" />
2629
<PackageReference Include="PolySharp">
2730
<PrivateAssets>all</PrivateAssets>

sources/core/Stride.Core.Tasks/Stride.Core.Tasks.csproj

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515
<StartupObject />
1616
</PropertyGroup>
1717
<ItemGroup>
18-
<PackageReference Include="Microsoft.Build" ExcludeAssets="runtime" />
18+
<PackageReference Include="Microsoft.NET.StringTools" ExcludeAssets="runtime" PrivateAssets="all" />
19+
<PackageReference Include="Microsoft.Build.Framework" ExcludeAssets="runtime" PrivateAssets="all" />
20+
<PackageReference Include="Microsoft.Build" ExcludeAssets="runtime" PrivateAssets="all" />
1921
<PackageReference Include="Microsoft.Build.Locator" />
20-
<PackageReference Include="Microsoft.Build.Utilities.Core" ExcludeAssets="runtime" />
22+
<PackageReference Include="Microsoft.Build.Utilities.Core" ExcludeAssets="runtime" PrivateAssets="all" />
2123
<PackageReference Include="Microsoft.VisualStudio.Setup.Configuration.Interop">
2224
<EmbedInteropTypes>True</EmbedInteropTypes>
2325
</PackageReference>

sources/editor/Stride.Assets.Presentation/AssetEditors/ProjectWatcher.cs

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,15 @@
1212
using System.Threading.Tasks;
1313
using System.Threading.Tasks.Dataflow;
1414
using Microsoft.CodeAnalysis;
15+
using Microsoft.CodeAnalysis.MSBuild;
1516
using Microsoft.CodeAnalysis.Text;
17+
using Stride.Assets.Presentation.AssetEditors.ScriptEditor;
1618
using Stride.Core.Assets;
1719
using Stride.Core.Assets.Editor.ViewModel;
18-
using Stride.Core.IO;
19-
using Microsoft.CodeAnalysis.MSBuild;
2020
using Stride.Core.Collections;
21+
using Stride.Core.Diagnostics;
2122
using Stride.Core.Extensions;
22-
using Stride.Assets.Presentation.AssetEditors.ScriptEditor;
23+
using Stride.Core.IO;
2324
using Project = Microsoft.CodeAnalysis.Project;
2425

2526
namespace Stride.Assets.Presentation.AssetEditors
@@ -52,6 +53,7 @@ public AssemblyChangedEvent(PackageLoadedAssembly assembly, AssemblyChangeType c
5253

5354
public class ProjectWatcher : IDisposable
5455
{
56+
private readonly LoggerResult logger;
5557
private readonly TrackingCollection<TrackedAssembly> trackedAssemblies;
5658
private readonly BufferBlock<FileEvent> fileChanged = new BufferBlock<FileEvent>();
5759
private readonly IDisposable fileChangedLink1;
@@ -67,14 +69,31 @@ public class ProjectWatcher : IDisposable
6769

6870
private MSBuildWorkspace msbuildWorkspace;
6971

70-
private Lazy<Task<RoslynHost>> roslynHost = new Lazy<Task<RoslynHost>>(() => Task.Factory.StartNew(() => new RoslynHost()));
72+
private Lazy<Task<RoslynHost>> roslynHost;
7173

72-
public ProjectWatcher(SessionViewModel session, bool trackBinaries = true)
74+
private RoslynHost CreateRoslynHost()
75+
{
76+
try
77+
{
78+
return new RoslynHost();
79+
}
80+
catch (Exception e)
81+
{
82+
logger.Error($"Could not create {nameof(RoslynHost)}", e);
83+
throw;
84+
}
85+
}
86+
87+
public ProjectWatcher(SessionViewModel session, LoggerResult logger, bool trackBinaries = true)
7388
{
7489
trackedAssemblies = new TrackingCollection<TrackedAssembly>();
7590

7691
this.trackBinaries = trackBinaries;
7792
this.session = session;
93+
this.logger = logger;
94+
95+
roslynHost = new Lazy<Task<RoslynHost>>(() => Task.Factory.StartNew(() => CreateRoslynHost()));
96+
7897
session.LocalPackages.CollectionChanged += LocalPackagesChanged;
7998

8099
directoryWatcher = new DirectoryWatcher();
@@ -109,7 +128,7 @@ private async IAsyncEnumerable<List<AssemblyChangedEvent>> BatchChanges()
109128
foreach (var referenceProject in referencedProjects)
110129
{
111130
var foundProject = msbuildWorkspace.CurrentSolution.GetProject(referenceProject);
112-
if(foundProject is null)
131+
if (foundProject is null)
113132
continue;
114133
var assemblyName = foundProject.AssemblyName;
115134
var target = trackedAssemblies.FirstOrDefault(x => x.Project.AssemblyName == assemblyName);

0 commit comments

Comments
 (0)