diff --git a/.github/workflows/Bonsai.yml b/.github/workflows/Bonsai.yml
index 7ae6a4f1b..08b80cf95 100644
--- a/.github/workflows/Bonsai.yml
+++ b/.github/workflows/Bonsai.yml
@@ -113,7 +113,7 @@ jobs:
# This happens before pack since the bootstrapper package uses it
- name: Repack bootstrapper
if: matrix.create-installer || env.UseRepackForBootstrapperPackage == 'true'
- run: dotnet build Bonsai --no-restore --configuration ${{matrix.configuration}} -t:Repack
+ run: dotnet build Bonsai --no-restore --configuration ${{matrix.configuration}} -t:Repack -p:TargetFramework=net48
# ----------------------------------------------------------------------- Pack
# Since packages are core to Bonsai functionality we always pack them even if they won't be collected
diff --git a/Bonsai.Configuration/Bonsai.Configuration.csproj b/Bonsai.Configuration/Bonsai.Configuration.csproj
index 99cb66161..519289b82 100644
--- a/Bonsai.Configuration/Bonsai.Configuration.csproj
+++ b/Bonsai.Configuration/Bonsai.Configuration.csproj
@@ -2,11 +2,14 @@
false
false
- net472;netstandard2.0
+ net472;net8.0
+
+
+
True
diff --git a/Bonsai.Configuration/ConfigurationHelper.cs b/Bonsai.Configuration/ConfigurationHelper.cs
index 01b722b60..96ba02d97 100644
--- a/Bonsai.Configuration/ConfigurationHelper.cs
+++ b/Bonsai.Configuration/ConfigurationHelper.cs
@@ -207,11 +207,18 @@ public static void RegisterPath(this PackageConfiguration configuration, string
catch (BadImageFormatException) { continue; }
catch (IOException) { continue; }
- var locationKey = (assemblyName.Name, assemblyName.ProcessorArchitecture);
+#if NET7_0_OR_GREATER
+ // Support for ProcessorArchitecture was removed in NET7 so assume MSIL for now
+ var processorArchitecture = ProcessorArchitecture.MSIL;
+#else
+ var processorArchitecture = assemblyName.ProcessorArchitecture;
+#endif
+
+ var locationKey = (assemblyName.Name, processorArchitecture);
if (!configuration.AssemblyLocations.Contains(locationKey))
{
configuration.AssemblyReferences.Add(assemblyName.Name);
- configuration.AssemblyLocations.Add(assemblyName.Name, assemblyName.ProcessorArchitecture, assemblyFile);
+ configuration.AssemblyLocations.Add(assemblyName.Name, processorArchitecture, assemblyFile);
}
}
}
diff --git a/Bonsai.Configuration/PackageConfigurationUpdater.cs b/Bonsai.Configuration/PackageConfigurationUpdater.cs
index db667a214..db7fb95c3 100644
--- a/Bonsai.Configuration/PackageConfigurationUpdater.cs
+++ b/Bonsai.Configuration/PackageConfigurationUpdater.cs
@@ -98,7 +98,7 @@ static bool IsTaggedPackage(PackageReaderBase package)
return tags != null && tags.Contains(PackageTagFilter);
}
- static string ResolvePlatformNameAlias(string name)
+ static ProcessorArchitecture ResolveArchitectureAlias(string name)
{
switch (name)
{
@@ -108,20 +108,20 @@ static string ResolvePlatformNameAlias(string name)
case "intel64":
case "x86-64":
case "x86_64":
- return "x64";
+ return ProcessorArchitecture.Amd64;
case "win32":
case "x86":
case "ia32":
case "386":
- return "x86";
+ return ProcessorArchitecture.X86;
default:
- return string.Empty;
+ return ProcessorArchitecture.None;
}
}
- static string ResolvePathPlatformName(string path)
+ static ProcessorArchitecture ResolvePathArchitecture(string path)
{
- var platformName = string.Empty;
+ var architecture = ProcessorArchitecture.None;
var components = path.Split(DirectorySeparators, StringSplitOptions.RemoveEmptyEntries);
components = Array.ConvertAll(components, name => name.ToLower());
@@ -130,23 +130,24 @@ static string ResolvePathPlatformName(string path)
{
for (int i = 3; i < components.Length; i++)
{
- platformName = ResolvePlatformNameAlias(components[i]);
- if (!string.IsNullOrEmpty(platformName)) break;
+ architecture = ResolveArchitectureAlias(components[i]);
+ if (architecture != ProcessorArchitecture.None) break;
}
}
- return platformName;
+ return architecture;
}
- static IEnumerable GetAssemblyLocations(NuGetFramework projectFramework, PackageReaderBase package)
+ static IEnumerable> GetArchitectureSpecificAssemblyLocations(NuGetFramework projectFramework, PackageReaderBase package)
{
var nearestFramework = package.GetItems(PackagingConstants.Folders.Build).GetNearest(projectFramework);
- if (nearestFramework == null) return Enumerable.Empty();
+ if (nearestFramework == null) return Enumerable.Empty>();
return from file in nearestFramework.Items
- where Path.GetExtension(file) == AssemblyExtension &&
- !string.IsNullOrEmpty(ResolvePathPlatformName(file))
- select PathUtility.GetPathWithForwardSlashes(file);
+ where Path.GetExtension(file) == AssemblyExtension
+ let architecture = ResolvePathArchitecture(file)
+ where architecture != ProcessorArchitecture.None
+ group PathUtility.GetPathWithForwardSlashes(file) by architecture;
}
static IEnumerable GetLibraryFolders(PackageReaderBase package, string installPath)
@@ -164,9 +165,11 @@ static IEnumerable GetBuildLibraryFolders(PackageReaderBase packa
return from file in nativeFramework.Items
group file by Path.GetDirectoryName(file) into folder
- let platform = ResolvePathPlatformName(folder.Key)
- where !string.IsNullOrWhiteSpace(platform)
- select new LibraryFolder(CombinePath(installPath, folder.Key), platform);
+ let architecture = ResolvePathArchitecture(folder.Key)
+ where architecture != ProcessorArchitecture.None
+ select new LibraryFolder(
+ CombinePath(installPath, folder.Key),
+ architecture == ProcessorArchitecture.X86 ? "x86" : "x64");
}
static IEnumerable GetRuntimeLibraryFolders(PackageReaderBase package, string installPath)
@@ -189,21 +192,39 @@ static IEnumerable GetCompatibleAssemblyReferences(NuGetFramework projec
void RegisterAssemblyLocations(PackageReaderBase package, string installPath, string relativePath, bool addReferences)
{
- var assemblyLocations = GetAssemblyLocations(bootstrapperFramework, package);
- RegisterAssemblyLocations(assemblyLocations, installPath, relativePath, addReferences);
+ var platformSpecificLocations = GetArchitectureSpecificAssemblyLocations(bootstrapperFramework, package);
+ foreach (var assemblyLocations in platformSpecificLocations)
+ {
+ RegisterAssemblyLocations(assemblyLocations, installPath, relativePath, addReferences, assemblyLocations.Key);
+ }
}
- void RegisterAssemblyLocations(IEnumerable assemblyLocations, string installPath, string relativePath, bool addReferences)
+ void RegisterAssemblyLocations(
+ IEnumerable assemblyLocations,
+ string installPath,
+ string relativePath,
+ bool addReferences,
+ ProcessorArchitecture processorArchitecture = ProcessorArchitecture.None)
{
foreach (var path in assemblyLocations)
{
var assemblyFile = CombinePath(installPath, path);
var assemblyName = AssemblyName.GetAssemblyName(assemblyFile);
+ if (processorArchitecture == ProcessorArchitecture.None)
+ {
+#if NET7_0_OR_GREATER
+ // Support for ProcessorArchitecture was removed in NET7 so assume MSIL for now
+ processorArchitecture = ProcessorArchitecture.MSIL;
+#else
+ processorArchitecture = assemblyName.ProcessorArchitecture;
+#endif
+ }
+
var assemblyLocation = CombinePath(relativePath, path);
- var assemblyLocationKey = (assemblyName.Name, assemblyName.ProcessorArchitecture);
+ var assemblyLocationKey = (assemblyName.Name, processorArchitecture);
if (!packageConfiguration.AssemblyLocations.Contains(assemblyLocationKey))
{
- packageConfiguration.AssemblyLocations.Add(assemblyName.Name, assemblyName.ProcessorArchitecture, assemblyLocation);
+ packageConfiguration.AssemblyLocations.Add(assemblyName.Name, processorArchitecture, assemblyLocation);
}
else if (packageConfiguration.AssemblyLocations[assemblyLocationKey].Location != assemblyLocation)
{
@@ -219,8 +240,11 @@ void RegisterAssemblyLocations(IEnumerable assemblyLocations, string ins
void RemoveAssemblyLocations(PackageReaderBase package, string installPath, bool removeReference)
{
- var assemblyLocations = GetAssemblyLocations(bootstrapperFramework, package);
- RemoveAssemblyLocations(assemblyLocations, installPath, removeReference);
+ var platformSpecificLocations = GetArchitectureSpecificAssemblyLocations(bootstrapperFramework, package);
+ foreach (var assemblyLocations in platformSpecificLocations)
+ {
+ RemoveAssemblyLocations(assemblyLocations, installPath, removeReference);
+ }
}
void RemoveAssemblyLocations(IEnumerable assemblyLocations, string installPath, bool removeReference)
@@ -462,6 +486,13 @@ public override Task OnPackageInstalledAsync(PackageIdentity package, NuGetFrame
}
}
+ // Reference assemblies should generally always be MSIL but for backwards compatibility
+ // we allow the processor architecture to be set by the assembly for .NET Framework.
+ // In future releases of the modern .NET bootstrapper we need to revisit this entirely
+ // and ensure that none of these considerations impact on the Bonsai.config file,
+ // most likely by removing all platform-specific paths and references. Runtime assembly
+ // resolution is OS-specific and architecture-specific and should not be versioned together
+ // with the package dependency graph.
var assemblyLocations = GetCompatibleAssemblyReferences(projectFramework, packageReader);
Owner.RegisterAssemblyLocations(assemblyLocations, installPath, relativePath, taggedPackage);
packageConfiguration.Save();
diff --git a/Bonsai.Configuration/ScriptExtensionsProvider.cs b/Bonsai.Configuration/ScriptExtensionsProvider.cs
index 1be4dab37..30ccad5f8 100644
--- a/Bonsai.Configuration/ScriptExtensionsProvider.cs
+++ b/Bonsai.Configuration/ScriptExtensionsProvider.cs
@@ -1,5 +1,4 @@
-#if NET472_OR_GREATER
-using Microsoft.CSharp;
+using Microsoft.CSharp;
using NuGet.Common;
using NuGet.Configuration;
using NuGet.Frameworks;
@@ -181,8 +180,9 @@ string GetAssemblyLocation(string fileName)
else
{
var assemblyName = AssemblyName.GetAssemblyName(assemblyFile);
+ var assemblyUri = new Uri(assemblyFile).AbsoluteUri;
configuration.AssemblyReferences.Add(assemblyName.Name);
- configuration.AssemblyLocations.Add(assemblyName.Name, ProcessorArchitecture.MSIL, assemblyName.CodeBase);
+ configuration.AssemblyLocations.Add(assemblyName.Name, ProcessorArchitecture.MSIL, assemblyUri);
scriptEnvironment.AssemblyName = assemblyName;
}
return scriptEnvironment;
@@ -190,4 +190,3 @@ string GetAssemblyLocation(string fileName)
}
}
}
-#endif
diff --git a/Bonsai.Core.Tests/Bonsai.Core.Tests.csproj b/Bonsai.Core.Tests/Bonsai.Core.Tests.csproj
index 7108861ef..97b1258a9 100644
--- a/Bonsai.Core.Tests/Bonsai.Core.Tests.csproj
+++ b/Bonsai.Core.Tests/Bonsai.Core.Tests.csproj
@@ -8,10 +8,10 @@
-
-
-
-
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/Bonsai.Core/Bonsai.Core.csproj b/Bonsai.Core/Bonsai.Core.csproj
index 5dc070c26..20acb7430 100644
--- a/Bonsai.Core/Bonsai.Core.csproj
+++ b/Bonsai.Core/Bonsai.Core.csproj
@@ -3,18 +3,18 @@
Bonsai - Core Library
Bonsai Core Library containing base classes and workflow infrastructure.
Bonsai Rx Reactive Extensions
- net472;netstandard2.0;net6.0
+ net472;netstandard2.0;net8.0
Bonsai
-
+
-
-
-
+
+
+
-
+
diff --git a/Bonsai.Core/Expressions/ExpressionBuilderGraphExtensions.cs b/Bonsai.Core/Expressions/ExpressionBuilderGraphExtensions.cs
index 4123e96c8..b2d9037f5 100644
--- a/Bonsai.Core/Expressions/ExpressionBuilderGraphExtensions.cs
+++ b/Bonsai.Core/Expressions/ExpressionBuilderGraphExtensions.cs
@@ -1131,7 +1131,7 @@ static ExpressionBuilder UnwrapConvert(ExpressionBuilder builder, Func
/// Initializes a new instance of the class with
/// serialized data.
@@ -92,5 +93,6 @@ protected WorkflowBuildException(SerializationInfo info, StreamingContext contex
: base(info, context)
{
}
+#endif
}
}
diff --git a/Bonsai.Core/WorkflowException.cs b/Bonsai.Core/WorkflowException.cs
index 7d274d015..44fe61214 100644
--- a/Bonsai.Core/WorkflowException.cs
+++ b/Bonsai.Core/WorkflowException.cs
@@ -78,6 +78,7 @@ public WorkflowException(string message, ExpressionBuilder builder, Exception in
Builder = builder;
}
+#if NETFRAMEWORK
///
/// Initializes a new instance of the class with
/// serialized data.
@@ -94,6 +95,7 @@ protected WorkflowException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
+#endif
///
/// Gets the instance that was the cause for the exception.
diff --git a/Bonsai.Core/WorkflowRuntimeException.cs b/Bonsai.Core/WorkflowRuntimeException.cs
index a2ffc18b1..947ad0265 100644
--- a/Bonsai.Core/WorkflowRuntimeException.cs
+++ b/Bonsai.Core/WorkflowRuntimeException.cs
@@ -76,6 +76,7 @@ public WorkflowRuntimeException(string message, ExpressionBuilder builder, Excep
{
}
+#if NETFRAMEWORK
///
/// Initializes a new instance of the class with
/// serialized data.
@@ -92,5 +93,6 @@ protected WorkflowRuntimeException(SerializationInfo info, StreamingContext cont
: base(info, context)
{
}
+#endif
}
}
diff --git a/Bonsai.Design/Bonsai.Design.csproj b/Bonsai.Design/Bonsai.Design.csproj
index 88c419edd..09b11b2bb 100644
--- a/Bonsai.Design/Bonsai.Design.csproj
+++ b/Bonsai.Design/Bonsai.Design.csproj
@@ -3,17 +3,21 @@
Bonsai - Design Library
Bonsai Design Library containing base visualizer classes and editor infrastructure.
Bonsai Design Rx Reactive Extensions
+ net472;net8.0-windows
true
- net472
-
+
+
+
+
+
+
+
+
-
+
-
-
-
\ No newline at end of file
diff --git a/Bonsai.Design/MemberSelectorEditorController.cs b/Bonsai.Design/MemberSelectorEditorController.cs
index 61d9efebe..64b68d0d5 100644
--- a/Bonsai.Design/MemberSelectorEditorController.cs
+++ b/Bonsai.Design/MemberSelectorEditorController.cs
@@ -80,7 +80,7 @@ internal void InitializeMemberTree(TreeNodeCollection nodes, Type componentType)
{
if (componentType == null)
{
- throw new ArgumentNullException("componentType");
+ throw new ArgumentNullException(nameof(componentType));
}
componentType.VisitMember((member, memberType) => EnsureNode(nodes, member.Name, memberType));
diff --git a/Bonsai.Design/PropertyGrid.cs b/Bonsai.Design/PropertyGrid.cs
index 07b8925ea..974fcb4de 100644
--- a/Bonsai.Design/PropertyGrid.cs
+++ b/Bonsai.Design/PropertyGrid.cs
@@ -1,4 +1,5 @@
-using System.Drawing;
+using System.Diagnostics;
+using System.Drawing;
using System.Reflection;
using System.Windows.Forms;
@@ -16,6 +17,7 @@ protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
base.ScaleControl(factor, specified);
}
+ [Conditional("NETFRAMEWORK")]
internal static void ScaleDescriptionPanel(System.Windows.Forms.PropertyGrid propertyGrid, SizeF factor)
{
foreach (Control control in propertyGrid.Controls)
diff --git a/Bonsai.Design/TypeVisitor.cs b/Bonsai.Design/TypeVisitor.cs
index ac5eb4d37..b943ec78a 100644
--- a/Bonsai.Design/TypeVisitor.cs
+++ b/Bonsai.Design/TypeVisitor.cs
@@ -23,7 +23,7 @@ internal static void VisitMember(this Type type, Action visito
{
if (type == null)
{
- throw new ArgumentNullException("componentType");
+ throw new ArgumentNullException(nameof(type));
}
foreach (var field in type.GetFields(BindingFlags.Instance | BindingFlags.Public)
diff --git a/Bonsai.Editor.Tests/Bonsai.Editor.Tests.csproj b/Bonsai.Editor.Tests/Bonsai.Editor.Tests.csproj
index 1f6d31481..a35485721 100644
--- a/Bonsai.Editor.Tests/Bonsai.Editor.Tests.csproj
+++ b/Bonsai.Editor.Tests/Bonsai.Editor.Tests.csproj
@@ -1,4 +1,4 @@
-
+
false
false
@@ -8,10 +8,10 @@
-
-
-
-
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/Bonsai.Editor/AboutBox.cs b/Bonsai.Editor/AboutBox.cs
index a30a103b6..886077861 100644
--- a/Bonsai.Editor/AboutBox.cs
+++ b/Bonsai.Editor/AboutBox.cs
@@ -52,7 +52,7 @@ public string AssemblyTitle
return titleAttribute.Title;
}
}
- return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
+ return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location);
}
}
diff --git a/Bonsai.Editor/Bonsai.Editor.csproj b/Bonsai.Editor/Bonsai.Editor.csproj
index d21f28c96..7a154255a 100644
--- a/Bonsai.Editor/Bonsai.Editor.csproj
+++ b/Bonsai.Editor/Bonsai.Editor.csproj
@@ -3,27 +3,32 @@
Bonsai - Editor
An integrated development environment for the Bonsai visual programming language.
Bonsai Editor Rx Reactive Extensions
- true
false
- net472
+ net472;net8.0-windows
+ true
+
+
-
-
-
-
+
+
+
+
+
-
+
+
+
True
diff --git a/Bonsai.Editor/EditorForm.cs b/Bonsai.Editor/EditorForm.cs
index e90ad05f9..48f0799af 100644
--- a/Bonsai.Editor/EditorForm.cs
+++ b/Bonsai.Editor/EditorForm.cs
@@ -353,6 +353,7 @@ protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
scaleFactor = factor;
inverseScaleFactor = new SizeF(1f / factor.Width, 1f / factor.Height);
+#if NETFRAMEWORK
const float DefaultToolboxSplitterDistance = 245f;
var workflowSplitterScale = EditorSettings.IsRunningOnMono ? 0.5f / factor.Width : 1.0f;
var toolboxSplitterScale = EditorSettings.IsRunningOnMono ? 0.75f / factor.Height : 1.0f;
@@ -373,6 +374,7 @@ protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
statusStrip.ImageScalingSize = toolStrip.ImageScalingSize;
propertyGrid.LargeButtons = scalingFactor >= 2;
}
+#endif
base.ScaleControl(factor, specified);
}
diff --git a/Bonsai.Editor/GraphView/SvgRenderer.cs b/Bonsai.Editor/GraphView/SvgRenderer.cs
index 7f066566b..15b680141 100644
--- a/Bonsai.Editor/GraphView/SvgRenderer.cs
+++ b/Bonsai.Editor/GraphView/SvgRenderer.cs
@@ -616,7 +616,7 @@ public SvgRenderer GetIconRenderer(GraphNode node)
{
if (node == null)
{
- throw new ArgumentNullException("node");
+ throw new ArgumentNullException(nameof(node));
}
var icon = node.Icon;
@@ -661,7 +661,7 @@ bool TryGetIconRenderer(ElementIcon icon, out SvgRenderer renderer)
{
if (icon == null)
{
- throw new ArgumentNullException("icon");
+ throw new ArgumentNullException(nameof(icon));
}
if (!rendererCache.TryGetValue(icon.Name, out renderer))
diff --git a/Bonsai.Editor/StartScreen.cs b/Bonsai.Editor/StartScreen.cs
index 07cbefc38..33ab20eaf 100644
--- a/Bonsai.Editor/StartScreen.cs
+++ b/Bonsai.Editor/StartScreen.cs
@@ -125,8 +125,8 @@ protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
var newFileImage = (Image)resources.GetObject("newToolStripMenuItem.Image");
var openFileImage = (Image)resources.GetObject("openFileToolStripMenuItem.Image");
var openFolderImage = (Image)resources.GetObject("openToolStripMenuItem.Image");
- var galleryItemImage = (Image)(resources.GetObject("galleryToolStripMenuItem.Image"));
- var packageManagerItemImage = (Image)(resources.GetObject("packageManagerToolStripMenuItem.Image"));
+ var galleryItemImage = (Image)resources.GetObject("galleryToolStripMenuItem.Image");
+ var packageManagerItemImage = (Image)resources.GetObject("packageManagerToolStripMenuItem.Image");
var editorTheme = EditorSettings.Instance.EditorTheme;
if (editorTheme == ColorTheme.Dark)
{
diff --git a/Bonsai.NuGet.Design/Bonsai.NuGet.Design.csproj b/Bonsai.NuGet.Design/Bonsai.NuGet.Design.csproj
index 6c16915e2..e38da51b9 100644
--- a/Bonsai.NuGet.Design/Bonsai.NuGet.Design.csproj
+++ b/Bonsai.NuGet.Design/Bonsai.NuGet.Design.csproj
@@ -1,17 +1,20 @@
false
- true
false
- net472
+ net472;net8.0-windows
+ true
+
-
+
+
+
True
diff --git a/Bonsai.NuGet.Design/LicenseAcceptanceDialog.cs b/Bonsai.NuGet.Design/LicenseAcceptanceDialog.cs
index 93ce161a9..214cac6d1 100644
--- a/Bonsai.NuGet.Design/LicenseAcceptanceDialog.cs
+++ b/Bonsai.NuGet.Design/LicenseAcceptanceDialog.cs
@@ -15,7 +15,7 @@ public LicenseAcceptanceDialog(IEnumerable licensePackag
{
if (licensePackages == null)
{
- throw new ArgumentNullException("licensePackages");
+ throw new ArgumentNullException(nameof(licensePackages));
}
InitializeComponent();
diff --git a/Bonsai.NuGet.Design/PackageBuilderDialog.cs b/Bonsai.NuGet.Design/PackageBuilderDialog.cs
index e77f7b327..8c0a74a9d 100644
--- a/Bonsai.NuGet.Design/PackageBuilderDialog.cs
+++ b/Bonsai.NuGet.Design/PackageBuilderDialog.cs
@@ -520,14 +520,9 @@ class ConstantPropertyDescriptor : PropertyDescriptor
readonly object constant;
public ConstantPropertyDescriptor(string name, object value)
- : base(name, new Attribute[0])
+ : base(name, Array.Empty())
{
- if (value == null)
- {
- throw new ArgumentNullException("value");
- }
-
- constant = value;
+ constant = value ?? throw new ArgumentNullException(nameof(value));
}
public override bool CanResetValue(object component)
diff --git a/Bonsai.NuGet.Design/PackageManagerDialog.Designer.cs b/Bonsai.NuGet.Design/PackageManagerDialog.Designer.cs
index c5f75219e..c51cf8a4f 100644
--- a/Bonsai.NuGet.Design/PackageManagerDialog.Designer.cs
+++ b/Bonsai.NuGet.Design/PackageManagerDialog.Designer.cs
@@ -241,7 +241,7 @@ private void InitializeComponent()
// packageSourceLabel
//
this.packageSourceLabel.Location = new System.Drawing.Point(4, 0);
- this.packageSourceLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ this.packageSourceLabel.Margin = new System.Windows.Forms.Padding(4, 0, 0, 0);
this.packageSourceLabel.Name = "packageSourceLabel";
this.packageSourceLabel.Size = new System.Drawing.Size(120, 27);
this.packageSourceLabel.TabIndex = 3;
diff --git a/Bonsai.NuGet.Design/PackageSourceConfigurationDialog.Designer.cs b/Bonsai.NuGet.Design/PackageSourceConfigurationDialog.Designer.cs
index aa8d73488..507758848 100644
--- a/Bonsai.NuGet.Design/PackageSourceConfigurationDialog.Designer.cs
+++ b/Bonsai.NuGet.Design/PackageSourceConfigurationDialog.Designer.cs
@@ -207,10 +207,9 @@ private void InitializeComponent()
//
// checkBoxesImageList
//
- this.checkBoxesImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("checkBoxesImageList.ImageStream")));
+ this.checkBoxesImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+ this.checkBoxesImageList.ImageSize = new System.Drawing.Size(16, 16);
this.checkBoxesImageList.TransparentColor = System.Drawing.Color.Transparent;
- this.checkBoxesImageList.Images.SetKeyName(0, "unchecked");
- this.checkBoxesImageList.Images.SetKeyName(1, "checked");
//
// machineWideListLabel
//
@@ -308,4 +307,4 @@ private void InitializeComponent()
private System.Windows.Forms.ColumnHeader machineWideNameHeader;
private System.Windows.Forms.ColumnHeader machineWideSourceHeader;
}
-}
\ No newline at end of file
+}
diff --git a/Bonsai.NuGet.Design/PackageSourceConfigurationDialog.cs b/Bonsai.NuGet.Design/PackageSourceConfigurationDialog.cs
index 0109c942a..998c2babe 100644
--- a/Bonsai.NuGet.Design/PackageSourceConfigurationDialog.cs
+++ b/Bonsai.NuGet.Design/PackageSourceConfigurationDialog.cs
@@ -1,5 +1,6 @@
using NuGet.Configuration;
using System;
+using System.Drawing;
using System.Linq;
using System.Windows.Forms;
@@ -16,13 +17,21 @@ public PackageSourceConfigurationDialog(IPackageSourceProvider sourceProvider)
{
if (sourceProvider == null)
{
- throw new ArgumentNullException("sourceProvider");
+ throw new ArgumentNullException(nameof(sourceProvider));
}
InitializeComponent();
provider = sourceProvider;
}
+ protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
+ {
+ checkBoxesImageList.Images.Clear();
+ checkBoxesImageList.Images.Add("unchecked", Properties.Resources.UncheckedImage);
+ checkBoxesImageList.Images.Add("checked", Properties.Resources.CheckedImage);
+ base.ScaleControl(factor, specified);
+ }
+
static PackageSource GetItemPackageSource(ListViewItem item)
{
if (item.Tag == null)
diff --git a/Bonsai.NuGet.Design/PackageSourceConfigurationDialog.resx b/Bonsai.NuGet.Design/PackageSourceConfigurationDialog.resx
index 8bcad8443..acf64cb99 100644
--- a/Bonsai.NuGet.Design/PackageSourceConfigurationDialog.resx
+++ b/Bonsai.NuGet.Design/PackageSourceConfigurationDialog.resx
@@ -121,7 +121,7 @@
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vwAADr8BOAVTJAAAAKFJREFUOE+lkUEKwzAMBPM2P87f6C99dbPCKrOKS1K6IGI5O0NpjjnnX+MLMsaY
+ vQAADr0BR/uQrQAAAKFJREFUOE+lkUEKwzAMBPM2P87f6C99dbPCKrOKS1K6IGI5O0NpjjnnX+MLMsaY
nHUdMcYWRFBrLeax4Cy+VuerQB0yVaBySHYCvdOZzE4QEj0pyDsNmYug955AFXzekbkIBGSRAt3lmcxW
kJLd+VbAcp38ZWSqIP6onSRhdciYgJ+KEsLqGGPLCiUVVoyxBUlJhRVjbClZEoMVY7j8PvN4A80ziomU
990nAAAAAElFTkSuQmCC
@@ -130,7 +130,7 @@
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vwAADr8BOAVTJAAAAJlJREFUOE+lktENgCAMRJmN4VjDLfmttmnJXalR4yWXUOQ9E6WJyK/ykDLnPLQ+
+ vQAADr0BR/uQrQAAAJlJREFUOE+lktENgCAMRJmN4VjDLfmttmnJXalR4yWXUOQ9E6WJyK/ykDLnPLQ+
rhBDA8Rh8ZKEGBo8AY8xrFlCDA1XEO69W7OEGBwquJIgkwUlHA0JMpsAD1frV4J4E0IheRQEnAX4DJlN
4LWPmQTrXiBTCexX6RoFvmcSZLJgXZZKoNEzyJAAcyfQEEMDRCGsb1uIweF7pZ0wbIqJ5IDpuQAAAABJ
RU5ErkJggg==
@@ -139,7 +139,7 @@
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vwAADr8BOAVTJAAAAUlJREFUOE+lU6GOg1AQ5BP6Cf2E+4QLnqQWV4EHjUJhGzxJJbICDxpFQvCHg4DA
+ vQAADr0BR/uQrQAAAUlJREFUOE+lU6GOg1AQ5BP6Cf2E+4QLnqQWV4EHjUJhGzxJJbICDxpFQvCHg4DA
Yd/tLPvK4wJ34iaZ9GVndxh4WwtYluVCfBIVcSYGLPwA1SPp0bxpIaiqSjmOw2zbdhMJdL4S6yzLlG3b
qigK6JHI3FCmacoi6HmeGscRSZAswDmOY9bQR7WXjK5AExJoAzBJEjTOXdexIWowoVpNvMjoChQg5Hm+
M8HT8Eo4G6muMrbHmQkIk2ma8PRPaT8G3Ikc1TSAKdWf0nYMGT5M4Lrun/E/iDM+nDlofgPf9/kDysgG
@@ -151,56 +151,13 @@
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vwAADr8BOAVTJAAAAEZJREFUOE/dkTEKADAIxHyb/3+Pa4twQ4WAnS+QKXIdGkRVHVJ5p48zc+g80IGk
+ vQAADr0BR/uQrQAAAEZJREFUOE/dkTEKADAIxHyb/3+Pa4twQ4WAnS+QKXIdGkRVHVJ5p48zc+g80IGk
ARJf+9VpgKRjUn8x6UADyjsmA6TyQ8QFk1WSrGFXjdQAAAAASUVORK5CYII=
180, 17
-
-
- AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
- LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
- ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA+
- CAAAAk1TRnQBSQFMAgEBAgEAAVABAAFQAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
- AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
- AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
- AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
- AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
- AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
- AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
- ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
- AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
- AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
- AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
- AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
- AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
- AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
- AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
- AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
- ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
- Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
- AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
- AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
- AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
- ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
- Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
- AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
- AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
- AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
- AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
- AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
- AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAIP8gACD/IAAB/w3r
- A/8N6wL/IAAB/wHrC/8B6wP/AesL/wHrAv8gAAH/AesL/wHrA/8B6wX/AbwF/wHrAv8gAAH/AesL/wHr
- A/8B6wT/AeoBAAG8BP8B6wL/IAAB/wHrC/8B6wP/AesC/wHzARUCAAERBP8B6wL/IAAB/wHrC/8B6wP/
- AesB/wHzARECAAEOAQAB7AP/AesC/yAAAf8B6wv/AesD/wHrAf8BkgEAAQ4BvAHvAgABvAL/AesC/yAA
- Af8B6wv/AesD/wHrAv8B7AG8Av8BEwEAAREC/wHrAv8gAAH/AesL/wHrA/8B6wb/AfMBDgEAAewB/wHr
- Av8gAAH/AesL/wHrA/8B6wf/Ae8BAAEOAf8B6wL/IAAB/wHrC/8B6wP/AesI/wHsAfEB/wHrAv8gAAH/
- AesL/wHrA/8B6wv/AesC/yAAAf8N6wP/DesC/yAAIP8gAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEB
- AQABAQUAAYAXAAP/gQAL
-
-
17, 17
diff --git a/Bonsai.NuGet.Design/Properties/Resources.Designer.cs b/Bonsai.NuGet.Design/Properties/Resources.Designer.cs
index 59253af59..cdca4e43e 100644
--- a/Bonsai.NuGet.Design/Properties/Resources.Designer.cs
+++ b/Bonsai.NuGet.Design/Properties/Resources.Designer.cs
@@ -19,7 +19,7 @@ namespace Bonsai.NuGet.Design.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
@@ -69,6 +69,16 @@ internal static string AllNodeName {
}
}
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap CheckedImage {
+ get {
+ object obj = ResourceManager.GetObject("CheckedImage", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
///
/// Looks up a localized string similar to No existing package metadata file exists. Do you want to create a new file?.
///
@@ -406,6 +416,16 @@ internal static System.Drawing.Bitmap SettingsImage {
}
}
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap UncheckedImage {
+ get {
+ object obj = ResourceManager.GetObject("UncheckedImage", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
///
/// Looks up a localized string similar to Uninstalling....
///
diff --git a/Bonsai.NuGet.Design/Properties/Resources.resx b/Bonsai.NuGet.Design/Properties/Resources.resx
index a785397d2..da2bf1d0a 100644
--- a/Bonsai.NuGet.Design/Properties/Resources.resx
+++ b/Bonsai.NuGet.Design/Properties/Resources.resx
@@ -173,7 +173,7 @@
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- wgAADsIBFShKgAAAANdJREFUOE+dU7kNwzAM1CjZwQtpBA/gwqVX8CKpAggI4FojuHNrwIVahZeQhh7a
+ wQAADsEBuJFr7QAAANdJREFUOE+dU7kNwzAM1CjZwQtpBA/gwqVX8CKpAggI4FojuHNrwIVahZeQhh7a
cXLAFSJ5Rz2UKRFCsERHjAURs1xWg5I3op/mKbb3NjZjkxEx5FCDWpZ9wOK1e3SVsOTwHGCyZia08Eho
Ao1s4kVssTWtUNi7PgLLtuwxPo6FgdPOnBJCAEYSgwZaGGTFJbXuQmi/GmjdhapBKjjrDqoGqeisOygG
1SWKEDjqnl5i9YyyC+Co+/6MPAv+yhQKs0ECaPEe5SvTqI4ywCb/faYUlPzhOxvzAkO1WA01cJaNAAAA
@@ -198,7 +198,7 @@
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- wQAADsEBuJFr7QAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTFH80I3AAABzElEQVRYR82X
+ wAAADsABataJCQAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTFH80I3AAABzElEQVRYR82X
y23DMAyGM0JH6QhF7hkgm6RZwsgMzQa5uyPk3Pba9uoWyOOo6gtElZEpy3aBuAQ+IBHJn4xedmbOuUkx
B2/J74eCHQ6H+9PpVHn2HmfAeEVcSMnaoAbO5/PD8Xh8Top1Qjx5QaJlvRvwYvxis0hPqiB1ZcUGmqa5
88mtqd7tdm69Xrv5fN6CcfxpjmePXpC+WLEBkrRIXdduuVyahVOII17ne/ZB+mKdDfjgq2nfbDZmoRLk
@@ -275,15 +275,31 @@
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAADYSURBVDhPpVOxEYMwDGQUZqGnd0nhsegZI00oXDkjeAOS
- htbRK3qfQ4ocWHd/Z0n/byzs7hj7vk+CmyAfgNpktN+QZi+IRs4ppTwMgwJr1o3Tm+wTKAi2ZVlyCEGJ
- WNNgnmetoYc6uNCYXA1iLfDe53EcS441aszNJFKMM6s7Cf/Ar4QWBmVg3AU7rvc1P7eXAmt+ETjkQwsD
- HRLOSRLFMT4UNKE5uBysGqBRg2LmNKk5wGkD59wXrxi0HqF5iG2/0e7C9YuEkKTtKiNQEFx7THVI88Rz
- 7ro3JJCBt2M2zxYAAAAASUVORK5CYII=
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wwAADsMBx2+oZAAAANhJREFUOE+lU7ERgzAMZBRmoad3SeGx6BkjTShcOSN4A5KG1tErep9DihxYd39n
+ Sf9vLOzuGPu+T4KbIB+A2mS035BmL4hGzimlPAyDAmvWjdOb7BMoCLZlWXIIQYlY02CeZ62hhzq40Jhc
+ DWIt8N7ncRxLjjVqzM0kUowzqzsJ/8CvhBYGZWDcBTuu9zU/t5cCa34ROORDCwMdEs5JEsUxPhQ0oTm4
+ HKwaoFGDYuY0qTnAaQPn3BevGLQeoXmIbb/R7sL1i4SQpO0qI1AQXHtMdUjzxHPuujckkIG3YzbPFgAA
+ AABJRU5ErkJggg==
The package '{0}' is not a gallery package. Please install this package through the package manager dialog.
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wQAADsEBuJFr7QAAAJpJREFUOE+lzgEJwCAQhWFT2MEIhjCDMWxgB2uYwwoWsMSNd+xExpQ5fxDm2H07
+ RYcxEELYPlIHdvoFxBip1srP20DOmZRSpLXm+xbQWuNBANgCLQF8VEq5b0TOOR42xtxvFkBKqa8KRFbH
+ GdEpgHXxJxl6ri5NAQTEWtuRcXVpCUjeewbG1aVPAHobRp+BWa/A7pEYOOkQILoAJ5VmTOFnoT4AAAAA
+ SUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ wQAADsEBuJFr7QAAAC1JREFUOE9j+E8hABtQXl5OMoYBuAGkgFEDRg0AgUFqAKkYBsAGUAIoNOD/fwB6
+ Pq+umpazgQAAAABJRU5ErkJggg==
+
+
\ No newline at end of file
diff --git a/Bonsai.NuGet/Bonsai.NuGet.csproj b/Bonsai.NuGet/Bonsai.NuGet.csproj
index 357f00f46..7ab9e607b 100644
--- a/Bonsai.NuGet/Bonsai.NuGet.csproj
+++ b/Bonsai.NuGet/Bonsai.NuGet.csproj
@@ -2,13 +2,13 @@
false
false
- net472;netstandard2.0
+ net472;net8.0
-
+
-
-
+
+
diff --git a/Bonsai.Player/Bonsai.Player.csproj b/Bonsai.Player/Bonsai.Player.csproj
index 7ce2e0d48..e9393f4d0 100644
--- a/Bonsai.Player/Bonsai.Player.csproj
+++ b/Bonsai.Player/Bonsai.Player.csproj
@@ -3,7 +3,7 @@
Exe
Bonsai - Player
bonsai
- net6.0
+ net8.0
A tool for running Bonsai workflows from the command-line.
Bonsai Player Rx Reactive Extensions
false
diff --git a/Bonsai.System.Tests/Bonsai.System.Tests.csproj b/Bonsai.System.Tests/Bonsai.System.Tests.csproj
index 5bb95f1e0..d95d1a1ea 100644
--- a/Bonsai.System.Tests/Bonsai.System.Tests.csproj
+++ b/Bonsai.System.Tests/Bonsai.System.Tests.csproj
@@ -5,10 +5,10 @@
net472
-
-
-
-
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/Bonsai.System/Bonsai.System.csproj b/Bonsai.System/Bonsai.System.csproj
index 3572e4d7f..7048a4fe2 100644
--- a/Bonsai.System/Bonsai.System.csproj
+++ b/Bonsai.System/Bonsai.System.csproj
@@ -5,8 +5,8 @@
Bonsai Rx Reactive Extensions IO Serial Port Resources
net472;netstandard2.0
-
-
+
+
diff --git a/Bonsai/Bonsai.csproj b/Bonsai/Bonsai.csproj
index 66926e891..ee1cc53b8 100644
--- a/Bonsai/Bonsai.csproj
+++ b/Bonsai/Bonsai.csproj
@@ -4,15 +4,23 @@
A visual programming language for data stream processing built on top of Rx for .NET.
Bonsai Rx Reactive Extensions
false
+ net48;net8.0-windows
true
- net48
Exe
true
..\Bonsai.Editor\Bonsai.ico
+
+
+ $(Configuration.ToLowerInvariant())
+
+
+
+
App.manifest
+
-
+
all
runtime; build; native; contentfiles; analyzers
@@ -54,7 +62,7 @@
-
@@ -75,6 +83,7 @@
+
@@ -105,15 +114,15 @@
-
-
+
+
-
-
+
+
diff --git a/Bonsai/EditorBootstrapper.cs b/Bonsai/EditorBootstrapper.cs
index 93e3ebb98..efa049f83 100644
--- a/Bonsai/EditorBootstrapper.cs
+++ b/Bonsai/EditorBootstrapper.cs
@@ -17,6 +17,9 @@ public static void EnableVisualStyles()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
+#if NETCOREAPP
+ Application.SetHighDpiMode(HighDpiMode.SystemAware);
+#endif
visualStylesEnabled = true;
}
}
diff --git a/Bonsai/Launcher.cs b/Bonsai/Launcher.cs
index cdd2a1177..7de4c378e 100644
--- a/Bonsai/Launcher.cs
+++ b/Bonsai/Launcher.cs
@@ -22,7 +22,11 @@ namespace Bonsai
{
static class Launcher
{
+#if NETFRAMEWORK
internal static readonly NuGetFramework ProjectFramework = NuGetFramework.ParseFolder("net48");
+#else
+ internal static readonly NuGetFramework ProjectFramework = NuGetFramework.ParseFolder("net8.0-windows7.0");
+#endif
internal static int LaunchPackageManager(
PackageConfiguration packageConfiguration,
diff --git a/Bonsai/LoaderResource.cs b/Bonsai/LoaderResource.cs
index c91d6947d..fc79ab584 100644
--- a/Bonsai/LoaderResource.cs
+++ b/Bonsai/LoaderResource.cs
@@ -9,7 +9,13 @@ static class LoaderResource
{
public static MetadataLoadContext CreateMetadataLoadContext(PackageConfiguration configuration)
{
- var runtimeAssemblies = Directory.GetFiles(RuntimeEnvironment.GetRuntimeDirectory(), "*.dll");
+ var runtimeDirectory = RuntimeEnvironment.GetRuntimeDirectory();
+ var runtimeAssemblies = Directory.EnumerateFiles(runtimeDirectory, "*.dll");
+#if NETCOREAPP
+ var windowsDesktopDirectory = Path.GetDirectoryName(typeof(System.Windows.Forms.Form).Assembly.Location);
+ var windowsDesktopAssemblies = Directory.EnumerateFiles(windowsDesktopDirectory, "*.dll");
+ runtimeAssemblies = System.Linq.Enumerable.Concat(runtimeAssemblies, windowsDesktopAssemblies);
+#endif
var resolver = new PackageAssemblyResolver(configuration, runtimeAssemblies);
return new MetadataLoadContext(resolver);
}
diff --git a/Bonsai/Program.cs b/Bonsai/Program.cs
index 8f2737d48..97be4afba 100644
--- a/Bonsai/Program.cs
+++ b/Bonsai/Program.cs
@@ -220,7 +220,11 @@ internal static int Main(string[] args)
editorArgs.AddRange(new[] { PipeCommand, pipeName });
var setupInfo = new ProcessStartInfo();
+#if NETFRAMEWORK
setupInfo.FileName = Assembly.GetEntryAssembly().Location;
+#else
+ setupInfo.FileName = Environment.ProcessPath;
+#endif
setupInfo.Arguments = string.Join(" ", editorArgs);
setupInfo.WorkingDirectory = workingDirectory;
setupInfo.UseShellExecute = false;
diff --git a/Bonsai/Properties/Resources.Designer.cs b/Bonsai/Properties/Resources.Designer.cs
index f43b8cfeb..2dbdb7b69 100644
--- a/Bonsai/Properties/Resources.Designer.cs
+++ b/Bonsai/Properties/Resources.Designer.cs
@@ -19,7 +19,7 @@ namespace Bonsai.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
diff --git a/tooling/Common.csproj.props b/tooling/Common.csproj.props
index 6d1aa7a8a..7177608da 100644
--- a/tooling/Common.csproj.props
+++ b/tooling/Common.csproj.props
@@ -31,6 +31,9 @@
true
+
+ true
+
none
diff --git a/tooling/CurrentVersion.props b/tooling/CurrentVersion.props
index aa48087d5..6193f263e 100644
--- a/tooling/CurrentVersion.props
+++ b/tooling/CurrentVersion.props
@@ -1,6 +1,6 @@
- 2.8.6
+ 2.9.0
\ No newline at end of file