Skip to content

Commit 6775693

Browse files
authored
Improve solution file detection and update .NET versions (#930)
* Improve solution file detection and update .NET versions Enhanced solution file detection logic in build scripts to support .slnx and fallback to any .sln* file. Updated docfx.json to reference net10.0 assemblies and added MSBuild.Sdk.Extras to global.json for improved SDK resolution. * Update DynamicData.dll path to net9.0 in docfx.json Changed the referenced DynamicData.dll from netstandard2.0 to net9.0 in the docfx.json file to reflect the updated target framework.
1 parent 3941c97 commit 6775693

File tree

4 files changed

+111
-57
lines changed

4 files changed

+111
-57
lines changed

build/Build.cs

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
using Nuke.Common;
22
using Nuke.Common.IO;
3+
using Nuke.Common.ProjectModel;
34
using Nuke.Common.Tooling;
4-
using ReactiveUI.Web;
5+
using Nuke.Common.Tools.DotNet;
56
using Nuke.Common.Tools.MSBuild;
6-
using System.IO;
7+
using ReactiveUI.Web;
78
using System;
9+
using System.IO;
10+
using System.Linq;
11+
using static Nuke.Common.Tools.DotNet.DotNetTasks;
812

913
class Build : NukeBuild
1014
{
@@ -65,19 +69,33 @@ class Build : NukeBuild
6569
var dirRx = RxUIAPIDirectory / "external" / project / $"{project}-main" / "src";
6670
File.Copy(RootDirectory / "global.json", dirRx / "global.json", true);
6771
var solutionFile = dirRx / $"{project}.sln";
72+
73+
// Find any .sln or .slnx file as a fallback
74+
var solutionFileSearch = Directory.EnumerateFiles(dirRx, "*.sln*").FirstOrDefault();
6875
if (File.Exists(solutionFile) == false)
6976
{
7077
solutionFile += "x";
7178
if (File.Exists(solutionFile) == false)
7279
{
73-
SourceFetcher.LogRepositoryError(reactiveui, project, $"Solution file not found: {dirRx / $"{project}.sln(x)"}");
74-
continue;
80+
if (File.Exists(solutionFileSearch))
81+
{
82+
solutionFile = solutionFileSearch;
83+
}
84+
else
85+
{
86+
SourceFetcher.LogRepositoryError(reactiveui, project, $"Solution file not found: {dirRx / $"{project}.sln(x)"}");
87+
continue;
88+
}
7589
}
7690
}
77-
MSBuildTasks.MSBuild(s => s
91+
92+
SourceFetcher.LogInfo($"Restoring {solutionFile}...");
93+
DotNetRestore(s => s.SetProjectFile(solutionFile));
94+
SourceFetcher.LogInfo($"Building {solutionFile}...");
95+
DotNetBuild(s => s
7896
.SetProjectFile(solutionFile)
7997
.SetConfiguration(Configuration)
80-
.SetRestore(true));
98+
.EnableNoRestore());
8199
SourceFetcher.LogInfo($"{project} build complete");
82100
}
83101
catch (Exception ex)
@@ -100,6 +118,8 @@ class Build : NukeBuild
100118
return;
101119
}
102120
}
121+
122+
SourceFetcher.LogInfo($"Building {solutionFile}...");
103123
MSBuildTasks.MSBuild(s => s
104124
.SetProjectFile(solutionFile)
105125
.SetConfiguration(Configuration)

build/SourceFetcher.cs

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,26 @@ private static void FetchNuGet(string owner, string repository, AbsolutePath fin
115115
LogRepositoryInfo(owner, repository, "Restoring Packages for ");
116116

117117
var directory = useSrc ? finalPath / $"{repository}-main" / "src" : finalPath;
118-
RunDotNet(directory, $"restore {repository}.sln");
118+
119+
// Find any .sln or .slnx file and run dotnet restore on it
120+
var solutionFile = Directory.EnumerateFiles(directory.ToString(), "*.sln*").FirstOrDefault();
121+
122+
if (File.Exists(directory / $"{repository}.sln"))
123+
{
124+
RunDotNet(directory, $"restore {repository}.sln");
125+
}
126+
else if (File.Exists(directory / $"{repository}.slnx"))
127+
{
128+
RunDotNet(directory, $"restore {repository}.slnx");
129+
}
130+
else if (solutionFile != null)
131+
{
132+
RunDotNet(directory, $"restore {Path.GetFileName(solutionFile)}");
133+
}
134+
else
135+
{
136+
LogRepositoryError(owner, repository, "No solution file found to restore packages.");
137+
}
119138
}
120139

121140
private static void WorkflowRestore(string owner, string repository, AbsolutePath finalPath, bool useSrc)
@@ -125,7 +144,25 @@ private static void WorkflowRestore(string owner, string repository, AbsolutePat
125144
LogRepositoryInfo(owner, repository, "Restoring workload for ");
126145

127146
var directory = useSrc ? finalPath / $"{repository}-main" / "src" : finalPath;
128-
RunDotNet(directory, $"workload restore {repository}.sln");
147+
148+
// Find any .sln or .slnx file and run dotnet restore on it
149+
var solutionFile = Directory.EnumerateFiles(directory.ToString(), "*.sln*").FirstOrDefault();
150+
if (File.Exists(directory / $"{repository}.sln"))
151+
{
152+
RunDotNet(directory, $"workload restore {repository}.sln");
153+
}
154+
else if (File.Exists(directory / $"{repository}.slnx"))
155+
{
156+
RunDotNet(directory, $"workload restore {repository}.slnx");
157+
}
158+
else if (solutionFile != null)
159+
{
160+
RunDotNet(directory, $"workload restore {Path.GetFileName(solutionFile)}");
161+
}
162+
else
163+
{
164+
LogRepositoryError(owner, repository, "No solution file found to restore workloads.");
165+
}
129166
}
130167
}
131168

@@ -159,7 +196,7 @@ internal static void LogInfo(string message)
159196
}
160197
}
161198

162-
private static void LogRepositoryInfo(string owner, string repository, string message) =>
199+
internal static void LogRepositoryInfo(string owner, string repository, string message) =>
163200
LogInfo($"{message} {owner}/{repository}...");
164201

165202
internal static void LogRepositoryError(string owner, string repository, string message)

global.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,8 @@
22
"sdk": {
33
"version": "10.0.101",
44
"rollForward": "latestFeature"
5+
},
6+
"msbuild-sdks": {
7+
"MSBuild.Sdk.Extras": "3.0.44"
58
}
69
}

reactiveui/docfx.json

Lines changed: 42 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,55 +4,49 @@
44
"src": [
55
{
66
"files": [
7-
"/**/Akavache.Core/bin/*/netstandard2.0/Akavache.dll",
8-
"/**/Akavache.SystemTextJson/bin/*/netstandard2.0/Akavache.SystemTextJson.dll",
9-
"/**/Akavache.NewtonsoftJson/bin/*/netstandard2.0/Akavache.NewtonsoftJson.dll",
10-
"/**/Akavache.Sqlite3/bin/*/netstandard2.0/Akavache.Sqlite3.dll",
11-
"/**/Akavache.EncryptedSqlite3/bin/*/netstandard2.0/Akavache.EncryptedSqlite3.dll",
12-
"/**/Akavache.Drawing/bin/*/netstandard2.0/Akavache.Drawing.dll",
13-
"/**/Akavache.Settings/bin/*/netstandard2.0/Akavache.Settings",
14-
"/**/Fusillade/bin/*/netstandard2.0/Fusillade.dll",
7+
"/**/Akavache.Core/bin/*/net10.0/Akavache.dll",
8+
"/**/Akavache.SystemTextJson/bin/*/net10.0/Akavache.SystemTextJson.dll",
9+
"/**/Akavache.NewtonsoftJson/bin/*/net10.0/Akavache.NewtonsoftJson.dll",
10+
"/**/Akavache.Sqlite3/bin/*/net10.0/Akavache.Sqlite3.dll",
11+
"/**/Akavache.EncryptedSqlite3/bin/*/net10.0/Akavache.EncryptedSqlite3.dll",
12+
"/**/Akavache.Drawing/bin/*/net10.0/Akavache.Drawing.dll",
13+
"/**/Akavache.Settings/bin/*/net10.0/Akavache.Settings",
14+
"/**/Fusillade/bin/*/net10.0/Fusillade.dll",
1515
"/**/Punchclock/bin/*/netstandard2.0/Punchclock.dll",
16-
"/**/ReactiveUI/bin/*/netstandard2.0/ReactiveUI.dll",
17-
"/**/ReactiveUI/bin/*/monoandroid13.0/ReactiveUI.dll",
18-
"/**/ReactiveUI/bin/*/xamarin.ios10/ReactiveUI.dll",
19-
"/**/ReactiveUI/bin/*/xamarin.mac20/ReactiveUI.dll",
20-
"/**/ReactiveUI.AndroidSupport/bin/*/monoandroid13.0/ReactiveUI.AndroidSupport.dll",
21-
"/**/ReactiveUI.AndroidX/bin/*/monoandroid13.0/ReactiveUI.AndroidX.dll",
22-
"/**/ReactiveUI.Blazor/bin/*/netstandard2.0/ReactiveUI.Blazor.dll",
23-
"/**/ReactiveUI.Blend/bin/*/net9.0-windows10.0.17763.0/ReactiveUI.Blend.dll",
24-
"/**/ReactiveUI.Drawing/bin/*/netstandard2.0/ReactiveUI.Drawing.dll",
25-
"/**/ReactiveUI.Fody/bin/*/netstandard2.0/ReactiveUI.Fody.dll",
26-
"/**/ReactiveUI.Fody.Analyzer/bin/*/netstandard2.0/ReactiveUI.Fody.Analyzer.dll",
27-
"/**/ReactiveUI.Fody.Helpers/bin/*/netstandard2.0/ReactiveUI.Fody.Helpers.dll",
28-
"/**/ReactiveUI.Maui/bin/*/net9.0/ReactiveUI.Maui.dll",
29-
"/**/ReactiveUI.Testing/bin/*/netstandard2.0/ReactiveUI.Testing.dll",
30-
"/**/ReactiveUI.Winforms/bin/*/net9.0-windows10.0.19041.0/ReactiveUI.Winforms.dll",
31-
"/**/ReactiveUI.WinUI/bin/*/net9.0-windows10.0.17763.0/ReactiveUI.WinUI.dll",
32-
"/**/ReactiveUI.Wpf/bin/*/net9.0-windows10.0.19041.0/ReactiveUI.Wpf.dll",
33-
"/**/ReactiveUI.XamForms/bin/*/netstandard2.0/ReactiveUI.XamForms.dll",
34-
"/**/ReactiveUI.Validation/bin/*/netstandard2.0/ReactiveUI.Validation.dll",
35-
"/**/ReactiveUI.Validation.AndroidSupport/bin/*/monoandroid13.0/ReactiveUI.Validation.AndroidSupport.dll",
36-
"/**/ReactiveUI.Validation.AndroidX/bin/*/monoandroid13.0/ReactiveUI.Validation.AndroidX.dll",
37-
"/**/Splat.Builder/bin/*/netstandard2.0/Splat.Builder.dll",
38-
"/**/Splat/bin/*/netstandard2.0/Splat.dll",
39-
"/**/Splat.AppCenter/bin/*/netstandard2.0/Splat.AppCenter.dll",
40-
"/**/Splat.ApplicationInsights/bin/*/netstandard2.0/Splat.ApplicationInsights.dll",
41-
"/**/Splat.Autofac/bin/*/netstandard2.0/Splat.Autofac.dll",
42-
"/**/Splat.Drawing/bin/*/netstandard2.0/Splat.Drawing.dll",
43-
"/**/Splat.DryIoc/bin/*/netstandard2.0/Splat.DryIoc.dll",
44-
"/**/Splat.Exceptionless/bin/*/netstandard2.0/Splat.Exceptionless.dll",
45-
"/**/Splat.Log4Net/bin/*/netstandard2.0/Splat.Log4Net.dll",
46-
"/**/Splat.Microsoft.Extensions.DependencyInjection/bin/*/netstandard2.0/Splat.Microsoft.Extensions.DependencyInjection.dll",
47-
"/**/Splat.Microsoft.Extensions.Logging/bin/*/netstandard2.0/Splat.Microsoft.Extensions.Logging.dll",
48-
"/**/Splat.Ninject/bin/*/netstandard2.0/Splat.Ninject.dll",
49-
"/**/Splat.NLog/bin/*/netstandard2.0/Splat.NLog.dll",
50-
"/**/Splat.Prism/bin/*/netstandard2.0/Splat.Prism.dll",
51-
"/**/Splat.Prism.Forms/bin/*/netstandard2.0/Splat.Prism.Forms.dll",
52-
"/**/Splat.Raygun/bin/*/netstandard2.0/Splat.Raygun.dll",
53-
"/**/Splat.Serilog/bin/*/netstandard2.0/Splat.Serilog.dll",
54-
"/**/Splat.SimpleInjector/bin/*/netstandard2.0/Splat.SimpleInjector.dll",
55-
"/**/DynamicData/bin/*/netstandard2.0/DynamicData.dll"
16+
"/**/ReactiveUI/bin/*/net10.0/ReactiveUI.dll",
17+
"/**/ReactiveUI.AndroidX/bin/*/net10.0-android/ReactiveUI.AndroidX.dll",
18+
"/**/ReactiveUI.Blazor/bin/*/net10.0/ReactiveUI.Blazor.dll",
19+
"/**/ReactiveUI.Blend/bin/*/net10.0-windows10.0.19041.0/ReactiveUI.Blend.dll",
20+
"/**/ReactiveUI.Drawing/bin/*/net10.0/ReactiveUI.Drawing.dll",
21+
"/**/ReactiveUI.Maui/bin/*/net10.0/ReactiveUI.Maui.dll",
22+
"/**/ReactiveUI.Testing/bin/*/net10.0/ReactiveUI.Testing.dll",
23+
"/**/ReactiveUI.Winforms/bin/*/net10.0-windows10.0.19041.0/ReactiveUI.Winforms.dll",
24+
"/**/ReactiveUI.WinUI/bin/*/net10.0-windows10.0.19041.0/ReactiveUI.WinUI.dll",
25+
"/**/ReactiveUI.Wpf/bin/*/net10.0-windows10.0.19041.0/ReactiveUI.Wpf.dll",
26+
"/**/ReactiveUI.Validation/bin/*/net10.0/ReactiveUI.Validation.dll",
27+
"/**/ReactiveUI.Validation.AndroidX/bin/*/net10.0-android/ReactiveUI.Validation.AndroidX.dll",
28+
"/**/ReactiveUI.Maui.Plugins.Popup/bin/*/net10.0/ReactiveUI.Maui.Plugins.Popup.dll",
29+
"/**/Splat.Core/bin/*/net10.0/Splat.Core.dll",
30+
"/**/Splat.Builder/bin/*/net10.0/Splat.Builder.dll",
31+
"/**/Splat/bin/*/net10.0/Splat.dll",
32+
"/**/Splat.AppCenter/bin/*/net10.0/Splat.AppCenter.dll",
33+
"/**/Splat.ApplicationInsights/bin/*/net10.0/Splat.ApplicationInsights.dll",
34+
"/**/Splat.Autofac/bin/*/net10.0/Splat.Autofac.dll",
35+
"/**/Splat.Drawing/bin/*/net10.0/Splat.Drawing.dll",
36+
"/**/Splat.DryIoc/bin/*/net10.0/Splat.DryIoc.dll",
37+
"/**/Splat.Exceptionless/bin/*/net10.0/Splat.Exceptionless.dll",
38+
"/**/Splat.Log4Net/bin/*/net10.0/Splat.Log4Net.dll",
39+
"/**/Splat.Microsoft.Extensions.DependencyInjection/bin/*/net10.0/Splat.Microsoft.Extensions.DependencyInjection.dll",
40+
"/**/Splat.Microsoft.Extensions.Logging/bin/*/net10.0/Splat.Microsoft.Extensions.Logging.dll",
41+
"/**/Splat.Ninject/bin/*/net10.0/Splat.Ninject.dll",
42+
"/**/Splat.NLog/bin/*/net10.0/Splat.NLog.dll",
43+
"/**/Splat.Prism/bin/*/net10.0/Splat.Prism.dll",
44+
"/**/Splat.Prism.Forms/bin/*/net10.0/Splat.Prism.Forms.dll",
45+
"/**/Splat.Raygun/bin/*/net10.0/Splat.Raygun.dll",
46+
"/**/Splat.Serilog/bin/*/net10.0/Splat.Serilog.dll",
47+
"/**/Splat.SimpleInjector/bin/*/net10.0/Splat.SimpleInjector.dll",
48+
"/**/DynamicData/bin/*/net9.0/DynamicData.dll",
49+
"/**/ReactiveUI.Extensions/bin/*/net10.0/ReactiveUI.Extensions.dll"
5650
]
5751
}
5852
],

0 commit comments

Comments
 (0)