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