diff --git a/VisualStudio.Extension-2019/AutomaticUpdates/UpdateManager.cs b/VisualStudio.Extension-2019/AutomaticUpdates/UpdateManager.cs index 8def9bc9..4d38f9d5 100644 --- a/VisualStudio.Extension-2019/AutomaticUpdates/UpdateManager.cs +++ b/VisualStudio.Extension-2019/AutomaticUpdates/UpdateManager.cs @@ -3,21 +3,21 @@ // See LICENSE file in the project root for full license information. // -using GalaSoft.MvvmLight.Messaging; +using CommunityToolkit.Mvvm.Messaging; using Microsoft.VisualStudio.Shell; using nanoFramework.Tools.Debugger; using nanoFramework.Tools.VisualStudio.Extension.FirmwareUpdate; +using nanoFramework.Tools.VisualStudio.Extension.Messages; using nanoFramework.Tools.VisualStudio.Extension.ToolWindow.ViewModel; using System; using System.Collections.Concurrent; using System.Linq; -using System.Threading; using System.Threading.Tasks; using Task = System.Threading.Tasks.Task; namespace nanoFramework.Tools.VisualStudio.Extension.AutomaticUpdates { - public class UpdateManager + public class UpdateManager : IRecipient, IRecipient { private static UpdateManager s_instance; private ViewModelLocator ViewModelLocator; @@ -32,7 +32,7 @@ private UpdateManager(Package package) } public static void Initialize( - AsyncPackage package, + AsyncPackage package, ViewModelLocator vmLocator) { s_instance = new UpdateManager(package) @@ -40,8 +40,18 @@ public static void Initialize( ViewModelLocator = vmLocator }; - Messenger.Default.Register(s_instance, DeviceExplorerViewModel.MessagingTokens.LaunchFirmwareUpdateForNanoDevice, (message) => s_instance.LaunchUpdate(message.Notification)); - Messenger.Default.Register(s_instance, DeviceExplorerViewModel.MessagingTokens.NanoDeviceHasDeparted, (message) => s_instance.ProcessNanoDeviceDeparture(message.Notification)); + WeakReferenceMessenger.Default.Register(s_instance); + WeakReferenceMessenger.Default.Register(s_instance); + } + + public void Receive(NanoDeviceHasDepartedMessage message) + { + s_instance.ProcessNanoDeviceDeparture(message.DeviceId); + } + + public void Receive(NanoDeviceIsConnectedMessage message) + { + s_instance.LaunchUpdate(message.DeviceId); } private void ProcessNanoDeviceDeparture(string deviceId) @@ -159,7 +169,7 @@ private void LaunchUpdate(string deviceId) Version currentClrVersion = null; // try to store CLR version - if(nanoDevice.DebugEngine.IsConnectedTonanoCLR) + if (nanoDevice.DebugEngine.IsConnectedTonanoCLR) { if (nanoDevice.DeviceInfo.Valid) { @@ -206,7 +216,7 @@ private void LaunchUpdate(string deviceId) } // check if the device is still there - if(ViewModelLocator.DeviceExplorer.AvailableDevices.FirstOrDefault(d => d.DeviceUniqueId == deviceUniqueId) == null) + if (ViewModelLocator.DeviceExplorer.AvailableDevices.FirstOrDefault(d => d.DeviceUniqueId == deviceUniqueId) == null) { #if DEBUG Console.WriteLine($"[Automatic Updates] {nanoDevice.TargetName} is not available anymore."); @@ -351,7 +361,7 @@ private void LaunchUpdate(string deviceId) } internal static async Task GetFirmwarePackageAsync( - string targetName, + string targetName, string platformName) { if (platformName.StartsWith("STM32")) diff --git a/VisualStudio.Extension-2019/NanoFrameworkPackage.cs b/VisualStudio.Extension-2019/NanoFrameworkPackage.cs index 3fcec8b2..2f92e57a 100644 --- a/VisualStudio.Extension-2019/NanoFrameworkPackage.cs +++ b/VisualStudio.Extension-2019/NanoFrameworkPackage.cs @@ -3,9 +3,8 @@ // See LICENSE file in the project root for full license information. // -using GalaSoft.MvvmLight.Ioc; +using CommunityToolkit.Mvvm.DependencyInjection; using Microsoft; -using Microsoft.VisualStudio; using Microsoft.VisualStudio.ProjectSystem.VS; using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; @@ -534,7 +533,7 @@ protected override async Task InitializeAsync(CancellationToken cancellationToke Application.Current.Resources.Add("Locator", viewModelLocator); } - SimpleIoc.Default.GetInstance().Package = this; + Ioc.Default.GetRequiredService().Package = this; await MessageCentre.InitializeAsync(this, ".NET nanoFramework Extension"); diff --git a/VisualStudio.Extension-2019/ToolWindow.DeviceExplorer/DeviceExplorerControl.xaml.cs b/VisualStudio.Extension-2019/ToolWindow.DeviceExplorer/DeviceExplorerControl.xaml.cs index de1ccac7..025eea52 100644 --- a/VisualStudio.Extension-2019/ToolWindow.DeviceExplorer/DeviceExplorerControl.xaml.cs +++ b/VisualStudio.Extension-2019/ToolWindow.DeviceExplorer/DeviceExplorerControl.xaml.cs @@ -5,9 +5,10 @@ namespace nanoFramework.Tools.VisualStudio.Extension { - using GalaSoft.MvvmLight.Messaging; + using CommunityToolkit.Mvvm.Messaging; using Microsoft.VisualStudio.Shell; using nanoFramework.Tools.Debugger; + using nanoFramework.Tools.VisualStudio.Extension.Messages; using nanoFramework.Tools.VisualStudio.Extension.ToolWindow.ViewModel; using System; using System.Windows.Controls; @@ -15,7 +16,7 @@ namespace nanoFramework.Tools.VisualStudio.Extension /// /// Interaction logic for DeviceExplorerControl. /// - public partial class DeviceExplorerControl : UserControl + public partial class DeviceExplorerControl : UserControl, IRecipient { // strongly-typed view models enable x:bind public DeviceExplorerViewModel ViewModel => DataContext as DeviceExplorerViewModel; @@ -30,7 +31,7 @@ public DeviceExplorerControl() Loaded += DeviceExplorerControl_Loaded; deviceTreeView.SelectedItemChanged += DevicesTreeView_SelectedItemChanged; - Messenger.Default.Register(this, DeviceExplorerViewModel.MessagingTokens.ForceSelectionOfNanoDevice, (message) => ForceSelectionOfNanoDeviceHandlerAsync().ConfigureAwait(false)); + WeakReferenceMessenger.Default.Register(this); } private void DeviceExplorerControl_Loaded(object sender, System.Windows.RoutedEventArgs e) @@ -120,7 +121,7 @@ private async System.Threading.Tasks.Task ForceSelectionOfNanoDeviceHandlerAsync } while (tryCount-- > 0); - Messenger.Default.Send(new NotificationMessage(""), DeviceExplorerViewModel.MessagingTokens.SelectedNanoDeviceHasChanged); + WeakReferenceMessenger.Default.Send(new SelectedNanoDeviceHasChangedMessage()); // force redrawing to show selection deviceTreeView.InvalidateVisual(); @@ -128,6 +129,11 @@ private async System.Threading.Tasks.Task ForceSelectionOfNanoDeviceHandlerAsync deviceTreeView.InvalidateVisual(); } + public void Receive(ForceSelectionOfNanoDeviceMessage message) + { + ForceSelectionOfNanoDeviceHandlerAsync().ConfigureAwait(false); + } + #endregion } } diff --git a/VisualStudio.Extension-2019/ToolWindow.DeviceExplorer/SettingsDialog.xaml.cs b/VisualStudio.Extension-2019/ToolWindow.DeviceExplorer/SettingsDialog.xaml.cs index 2525924a..1156a95d 100644 --- a/VisualStudio.Extension-2019/ToolWindow.DeviceExplorer/SettingsDialog.xaml.cs +++ b/VisualStudio.Extension-2019/ToolWindow.DeviceExplorer/SettingsDialog.xaml.cs @@ -5,19 +5,20 @@ namespace nanoFramework.Tools.VisualStudio.Extension { - using GalaSoft.MvvmLight.Messaging; + using CommunityToolkit.Mvvm.Messaging; using Microsoft.VisualStudio.PlatformUI; using Microsoft.VisualStudio.Shell; - using nanoFramework.Tools.VisualStudio.Extension.ToolWindow.ViewModel; + using nanoFramework.Tools.VisualStudio.Extension.Messages; using System.Collections.Generic; using System.Net; using System.Windows.Controls.Primitives; using System.Windows.Forms; + /// /// Interaction logic for DeviceExplorerControl. /// - public partial class SettingsDialog : DialogWindow + public partial class SettingsDialog : DialogWindow, IRecipient { private const string _stopVirtualDeviceLabel = "Stop Virtual Device"; private const string _startVirtualDeviceLabel = "Start Virtual Device"; @@ -41,7 +42,7 @@ public SettingsDialog() // init controls private void InitControls() { - Messenger.Default.Register(this, DeviceExplorerViewModel.MessagingTokens.VirtualDeviceOperationExecuting, (message) => this.UpdateStartStopAvailabilityAsync(message.Notification).ConfigureAwait(false)); + WeakReferenceMessenger.Default.Register(this); // set controls according to stored preferences GenerateDeploymentImage.IsChecked = NanoFrameworkPackage.SettingGenerateDeploymentImage; @@ -95,11 +96,11 @@ private void InitControls() CloseButton.Focus(); } - private async System.Threading.Tasks.Task UpdateStartStopAvailabilityAsync(string installCompleted) + private async System.Threading.Tasks.Task UpdateStartStopAvailabilityAsync(bool installCompleted) { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - StartStopDevice.IsEnabled = !bool.Parse(installCompleted) + StartStopDevice.IsEnabled = !installCompleted && NanoFrameworkPackage.VirtualDeviceService.NanoClrIsInstalled && NanoFrameworkPackage.VirtualDeviceService.CanStartVirtualDevice; } @@ -266,5 +267,10 @@ private void AutoUpdateNanoClrImage_Checked(object sender, System.Windows.Routed // save new state NanoFrameworkPackage.SettingVirtualDeviceAutoUpdateNanoClrImage = (sender as ToggleButton).IsChecked ?? false; } + + public void Receive(VirtualDeviceOperationExecutingMessage message) + { + UpdateStartStopAvailabilityAsync(message.InstallCompleted).ConfigureAwait(false); + } } } diff --git a/VisualStudio.Extension-2019/VisualStudio.Extension-vs2019.csproj b/VisualStudio.Extension-2019/VisualStudio.Extension-vs2019.csproj index 8ca2d5d2..fa2c3b73 100644 --- a/VisualStudio.Extension-2019/VisualStudio.Extension-vs2019.csproj +++ b/VisualStudio.Extension-2019/VisualStudio.Extension-vs2019.csproj @@ -479,6 +479,9 @@ 3.5.0 + + 8.1.0 + 4.3.0 @@ -508,6 +511,9 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all + + 7.0.0 + 16.9.20 @@ -532,9 +538,6 @@ 5.0.0 - - 5.4.1.1 - 1.14.2 runtime; build; native; contentfiles; analyzers; buildtransitive @@ -641,4 +644,4 @@ --> - + \ No newline at end of file diff --git a/VisualStudio.Extension-2019/packages.lock.json b/VisualStudio.Extension-2019/packages.lock.json index aa780944..5b345375 100644 --- a/VisualStudio.Extension-2019/packages.lock.json +++ b/VisualStudio.Extension-2019/packages.lock.json @@ -16,6 +16,18 @@ "System.ValueTuple": "4.5.0" } }, + "CommunityToolkit.Mvvm": { + "type": "Direct", + "requested": "[8.1.0, )", + "resolved": "8.1.0", + "contentHash": "xxOt7lu9a5kB5Fs9RfcxzVlKnhuuPe+w7AXHtmCFtS3oldrsUhEMxHfNulluXSscUUoGxZ0jh55Om12ZP6abHA==", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "System.ComponentModel.Annotations": "5.0.0", + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, "Extended.Wpf.Toolkit": { "type": "Direct", "requested": "[4.3.0, )", @@ -161,6 +173,17 @@ "resolved": "3.3.3", "contentHash": "vvz3XCHVrd/Ks4xPoutLmL/T2+8JcOk/OMs3ngwQqnzokQCGEDsY+WjK/txCsDWU29sX3fGzH/FnYwNV93O1mA==" }, + "Microsoft.Extensions.DependencyInjection": { + "type": "Direct", + "requested": "[7.0.0, )", + "resolved": "7.0.0", + "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, "Microsoft.VisualStudio.Composition": { "type": "Direct", "requested": "[16.9.20, )", @@ -329,12 +352,6 @@ "System.Security.Principal.Windows": "5.0.0" } }, - "MvvmLightLibsStd10": { - "type": "Direct", - "requested": "[5.4.1.1, )", - "resolved": "5.4.1.1", - "contentHash": "zU9KXgq8dfnzxxOvvAVtasbhaQGoDlTr8Pw2AjZ1NB905GQljrxqkgh3jo5/47Vux5duw3/faUgcZjdfomGvFw==" - }, "nanoFramework.CoreLibrary": { "type": "Direct", "requested": "[1.14.2, )", @@ -2047,6 +2064,11 @@ "System.Memory": "4.5.4" } }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "dMkqfy2el8A8/I76n2Hi1oBFEbG1SfxD2l5nhwXV3XjlnOmwxJlQbYpJH4W51odnU9sARCSAgv7S3CyAFMkpYg==" + }, "System.ComponentModel.Composition": { "type": "Transitive", "resolved": "4.5.0", @@ -2427,6 +2449,24 @@ "VSSDK.IDE.12": "[12.0.4, 13.0.0)" } }, + "csharp.assemblyinfotemplate": { + "type": "Project" + }, + "csharp.blankapplication-vs2019": { + "type": "Project" + }, + "csharp.classlibrary-vs2019": { + "type": "Project" + }, + "csharp.classtemplate": { + "type": "Project" + }, + "csharp.resourcetemplate": { + "type": "Project" + }, + "csharp.testapplication-vs2019": { + "type": "Project" + }, "nanoFramework.Tools.BuildTasks": { "type": "Project", "dependencies": { @@ -2434,6 +2474,810 @@ "Microsoft.Build.Utilities.Core": "[16.11.0, )" } } + }, + ".NETFramework,Version=v4.7.2/win": { + "Microsoft.Win32.Primitives": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", + "dependencies": { + "runtime.win.Microsoft.Win32.Primitives": "4.3.0" + } + }, + "Microsoft.Win32.Registry": { + "type": "Direct", + "requested": "[5.0.0, )", + "resolved": "5.0.0", + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + }, + "System.Collections": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "dependencies": { + "runtime.any.System.Collections": "4.3.0" + } + }, + "System.Console": { + "type": "Direct", + "requested": "[4.3.1, )", + "resolved": "4.3.1", + "contentHash": "6iKDG36vugpW230eBGMLL6GQIx+Buf5txz6DFC1c4MOH8qcOo2mFzId6GsJUTptR4AusnDsdUeCYuzDiftD39w==", + "dependencies": { + "runtime.win.System.Console": "4.3.1" + } + }, + "System.Diagnostics.Debug": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", + "dependencies": { + "runtime.win.System.Diagnostics.Debug": "4.3.0" + } + }, + "System.Diagnostics.Tracing": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", + "dependencies": { + "runtime.any.System.Diagnostics.Tracing": "4.3.0" + } + }, + "System.Globalization.Calendars": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", + "dependencies": { + "runtime.any.System.Globalization.Calendars": "4.3.0" + } + }, + "System.IO.FileSystem": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", + "dependencies": { + "System.IO.FileSystem.Primitives": "4.3.0", + "runtime.win.System.IO.FileSystem": "4.3.0" + } + }, + "System.Net.Sockets": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", + "dependencies": { + "runtime.win.System.Net.Sockets": "4.3.0" + } + }, + "System.Resources.ResourceManager": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "dependencies": { + "runtime.any.System.Resources.ResourceManager": "4.3.0" + } + }, + "System.Runtime.Extensions": { + "type": "Direct", + "requested": "[4.3.1, )", + "resolved": "4.3.1", + "contentHash": "qAtKMcHOAq9/zKkl0dwvF0T0pmgCQxX1rC49rJXoU8jq+lw6MC3uXy7nLFmjEI20T3Aq069eWz4LcYR64vEmJw==", + "dependencies": { + "runtime.win.System.Runtime.Extensions": "4.3.0" + } + }, + "System.Runtime.InteropServices.RuntimeInformation": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==" + }, + "System.Security.Cryptography.Algorithms": { + "type": "Direct", + "requested": "[4.3.1, )", + "resolved": "4.3.1", + "contentHash": "DVUblnRfnarrI5olEC2B/OCsJQd0anjVaObQMndHSc43efbc88/RMOlDyg/EyY0ix5ecyZMXS8zMksb5ukebZA==", + "dependencies": { + "System.IO": "4.3.0", + "System.Runtime": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0" + } + }, + "System.Threading.Tasks": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "dependencies": { + "runtime.any.System.Threading.Tasks": "4.3.0" + } + }, + "runtime.any.System.Collections": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "23g6rqftKmovn2cLeGsuHUYm0FD7pdutb0uQMJpZ3qTvq+zHkgmt6J65VtRry4WDGYlmkMa4xDACtaQ94alNag==" + }, + "runtime.any.System.Diagnostics.Tracing": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "1lpifymjGDzoYIaam6/Hyqf8GhBI3xXYLK2TgEvTtuZMorG3Kb9QnMTIKhLjJYXIiu1JvxjngHvtVFQQlpQ3HQ==" + }, + "runtime.any.System.Globalization.Calendars": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "M1r+760j1CNA6M/ZaW6KX8gOS8nxPRqloqDcJYVidRG566Ykwcs29AweZs2JF+nMOCgWDiMfPSTMfvwOI9F77w==" + }, + "runtime.any.System.IO": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "SDZ5AD1DtyRoxYtEcqQ3HDlcrorMYXZeCt7ZhG9US9I5Vva+gpIWDGMkcwa5XiKL0ceQKRZIX2x0XEjLX7PDzQ==" + }, + "runtime.any.System.Reflection": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "hLC3A3rI8jipR5d9k7+f0MgRCW6texsAp0MWkN/ci18FMtQ9KH7E2vDn/DH2LkxsszlpJpOn9qy6Z6/69rH6eQ==" + }, + "runtime.any.System.Resources.ResourceManager": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Lxb89SMvf8w9p9+keBLyL6H6x/TEmc6QVsIIA0T36IuyOY3kNvIdyGddA2qt35cRamzxF8K5p0Opq4G4HjNbhQ==" + }, + "runtime.any.System.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "fRS7zJgaG9NkifaAxGGclDDoRn9HC7hXACl52Or06a/fxdzDajWb5wov3c6a+gVSlekRoexfjwQSK9sh5um5LQ==" + }, + "runtime.any.System.Threading.Tasks": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "OhBAVBQG5kFj1S+hCEQ3TUHBAEtZ3fbEMgZMRNdN8A0Pj4x+5nTELEqL59DU0TjKVE6II3dqKw4Dklb3szT65w==" + }, + "runtime.win.Microsoft.Win32.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "NU51SEt/ZaD2MF48sJ17BIqx7rjeNNLXUevfMOjqQIetdndXwYjZfZsT6jD+rSWp/FYxjesdK4xUSl4OTEI0jw==" + }, + "runtime.win.System.Console": { + "type": "Transitive", + "resolved": "4.3.1", + "contentHash": "vHPXC3B18dxhyipVce8xQT1MQv1o5srYZqBlCNu9p9MNjhgGOntdQh/Xh2X4o7M2F839YUcQiGwu8Q498FyDjg==" + }, + "runtime.win.System.Diagnostics.Debug": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "hHHP0WCStene2jjeYcuDkETozUYF/3sHVRHAEOgS3L15hlip24ssqCTnJC28Z03Wpo078oMcJd0H4egD2aJI8g==" + }, + "runtime.win.System.IO.FileSystem": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Z37zcSCpXuGCYtFbqYO0TwOVXxS2d+BXgSoDFZmRg8BC4Cuy54edjyIvhhcfCrDQA9nl+EPFTgHN54dRAK7mNA==" + }, + "runtime.win.System.Net.Sockets": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "FK/2gX6MmuLIKNCGsV59Fe4IYrLrI5n9pQ1jh477wiivEM/NCXDT2dRetH5FSfY0bQ+VgTLcS3zcmjQ8my3nxQ==" + }, + "runtime.win.System.Runtime.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "RkgHVhUPvzZxuUubiZe8yr/6CypRVXj0VBzaR8hsqQ8f+rUo7e4PWrHTLOCjd8fBMGWCrY//fi7Ku3qXD7oHRw==" + }, + "System.IO": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "dependencies": { + "runtime.any.System.IO": "4.3.0" + } + }, + "System.Net.Http": { + "type": "Transitive", + "resolved": "4.3.4", + "contentHash": "aOa2d51SEbmM+H+Csw7yJOuNZoHkrP2XnAurye5HWYgGVVU54YZDvsLUYRv6h18X3sPnjNCANmN7ZhIPiqMcjA==", + "dependencies": { + "System.Security.Cryptography.X509Certificates": "4.3.0" + } + }, + "System.Reflection": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "dependencies": { + "runtime.any.System.Reflection": "4.3.0" + } + }, + "System.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "dependencies": { + "runtime.any.System.Runtime": "4.3.0" + } + }, + "System.Security.AccessControl": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==", + "dependencies": { + "System.Security.Principal.Windows": "5.0.0" + } + }, + "System.Security.Cryptography.Encoding": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==" + }, + "System.Security.Cryptography.X509Certificates": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", + "dependencies": { + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0" + } + }, + "System.Security.Principal.Windows": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" + }, + "System.Threading.AccessControl": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "WJ9w9m4iHJVq0VoH7hZvYAccbRq95itYRhAAXd6M4kVCzLmT6NqTwmSXKwp3oQilWHhYTXgqaIXxBfg8YaqtmA==", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + } + }, + ".NETFramework,Version=v4.7.2/win-x64": { + "Microsoft.Win32.Primitives": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", + "dependencies": { + "runtime.win.Microsoft.Win32.Primitives": "4.3.0" + } + }, + "Microsoft.Win32.Registry": { + "type": "Direct", + "requested": "[5.0.0, )", + "resolved": "5.0.0", + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + }, + "System.Collections": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "dependencies": { + "runtime.any.System.Collections": "4.3.0" + } + }, + "System.Console": { + "type": "Direct", + "requested": "[4.3.1, )", + "resolved": "4.3.1", + "contentHash": "6iKDG36vugpW230eBGMLL6GQIx+Buf5txz6DFC1c4MOH8qcOo2mFzId6GsJUTptR4AusnDsdUeCYuzDiftD39w==", + "dependencies": { + "runtime.win.System.Console": "4.3.1" + } + }, + "System.Diagnostics.Debug": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", + "dependencies": { + "runtime.win.System.Diagnostics.Debug": "4.3.0" + } + }, + "System.Diagnostics.Tracing": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", + "dependencies": { + "runtime.any.System.Diagnostics.Tracing": "4.3.0" + } + }, + "System.Globalization.Calendars": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", + "dependencies": { + "runtime.any.System.Globalization.Calendars": "4.3.0" + } + }, + "System.IO.FileSystem": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", + "dependencies": { + "System.IO.FileSystem.Primitives": "4.3.0", + "runtime.win.System.IO.FileSystem": "4.3.0" + } + }, + "System.Net.Sockets": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", + "dependencies": { + "runtime.win.System.Net.Sockets": "4.3.0" + } + }, + "System.Resources.ResourceManager": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "dependencies": { + "runtime.any.System.Resources.ResourceManager": "4.3.0" + } + }, + "System.Runtime.Extensions": { + "type": "Direct", + "requested": "[4.3.1, )", + "resolved": "4.3.1", + "contentHash": "qAtKMcHOAq9/zKkl0dwvF0T0pmgCQxX1rC49rJXoU8jq+lw6MC3uXy7nLFmjEI20T3Aq069eWz4LcYR64vEmJw==", + "dependencies": { + "runtime.win.System.Runtime.Extensions": "4.3.0" + } + }, + "System.Runtime.InteropServices.RuntimeInformation": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==" + }, + "System.Security.Cryptography.Algorithms": { + "type": "Direct", + "requested": "[4.3.1, )", + "resolved": "4.3.1", + "contentHash": "DVUblnRfnarrI5olEC2B/OCsJQd0anjVaObQMndHSc43efbc88/RMOlDyg/EyY0ix5ecyZMXS8zMksb5ukebZA==", + "dependencies": { + "System.IO": "4.3.0", + "System.Runtime": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0" + } + }, + "System.Threading.Tasks": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "dependencies": { + "runtime.any.System.Threading.Tasks": "4.3.0" + } + }, + "runtime.any.System.Collections": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "23g6rqftKmovn2cLeGsuHUYm0FD7pdutb0uQMJpZ3qTvq+zHkgmt6J65VtRry4WDGYlmkMa4xDACtaQ94alNag==" + }, + "runtime.any.System.Diagnostics.Tracing": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "1lpifymjGDzoYIaam6/Hyqf8GhBI3xXYLK2TgEvTtuZMorG3Kb9QnMTIKhLjJYXIiu1JvxjngHvtVFQQlpQ3HQ==" + }, + "runtime.any.System.Globalization.Calendars": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "M1r+760j1CNA6M/ZaW6KX8gOS8nxPRqloqDcJYVidRG566Ykwcs29AweZs2JF+nMOCgWDiMfPSTMfvwOI9F77w==" + }, + "runtime.any.System.IO": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "SDZ5AD1DtyRoxYtEcqQ3HDlcrorMYXZeCt7ZhG9US9I5Vva+gpIWDGMkcwa5XiKL0ceQKRZIX2x0XEjLX7PDzQ==" + }, + "runtime.any.System.Reflection": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "hLC3A3rI8jipR5d9k7+f0MgRCW6texsAp0MWkN/ci18FMtQ9KH7E2vDn/DH2LkxsszlpJpOn9qy6Z6/69rH6eQ==" + }, + "runtime.any.System.Resources.ResourceManager": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Lxb89SMvf8w9p9+keBLyL6H6x/TEmc6QVsIIA0T36IuyOY3kNvIdyGddA2qt35cRamzxF8K5p0Opq4G4HjNbhQ==" + }, + "runtime.any.System.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "fRS7zJgaG9NkifaAxGGclDDoRn9HC7hXACl52Or06a/fxdzDajWb5wov3c6a+gVSlekRoexfjwQSK9sh5um5LQ==" + }, + "runtime.any.System.Threading.Tasks": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "OhBAVBQG5kFj1S+hCEQ3TUHBAEtZ3fbEMgZMRNdN8A0Pj4x+5nTELEqL59DU0TjKVE6II3dqKw4Dklb3szT65w==" + }, + "runtime.win.Microsoft.Win32.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "NU51SEt/ZaD2MF48sJ17BIqx7rjeNNLXUevfMOjqQIetdndXwYjZfZsT6jD+rSWp/FYxjesdK4xUSl4OTEI0jw==" + }, + "runtime.win.System.Console": { + "type": "Transitive", + "resolved": "4.3.1", + "contentHash": "vHPXC3B18dxhyipVce8xQT1MQv1o5srYZqBlCNu9p9MNjhgGOntdQh/Xh2X4o7M2F839YUcQiGwu8Q498FyDjg==" + }, + "runtime.win.System.Diagnostics.Debug": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "hHHP0WCStene2jjeYcuDkETozUYF/3sHVRHAEOgS3L15hlip24ssqCTnJC28Z03Wpo078oMcJd0H4egD2aJI8g==" + }, + "runtime.win.System.IO.FileSystem": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Z37zcSCpXuGCYtFbqYO0TwOVXxS2d+BXgSoDFZmRg8BC4Cuy54edjyIvhhcfCrDQA9nl+EPFTgHN54dRAK7mNA==" + }, + "runtime.win.System.Net.Sockets": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "FK/2gX6MmuLIKNCGsV59Fe4IYrLrI5n9pQ1jh477wiivEM/NCXDT2dRetH5FSfY0bQ+VgTLcS3zcmjQ8my3nxQ==" + }, + "runtime.win.System.Runtime.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "RkgHVhUPvzZxuUubiZe8yr/6CypRVXj0VBzaR8hsqQ8f+rUo7e4PWrHTLOCjd8fBMGWCrY//fi7Ku3qXD7oHRw==" + }, + "System.IO": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "dependencies": { + "runtime.any.System.IO": "4.3.0" + } + }, + "System.Net.Http": { + "type": "Transitive", + "resolved": "4.3.4", + "contentHash": "aOa2d51SEbmM+H+Csw7yJOuNZoHkrP2XnAurye5HWYgGVVU54YZDvsLUYRv6h18X3sPnjNCANmN7ZhIPiqMcjA==", + "dependencies": { + "System.Security.Cryptography.X509Certificates": "4.3.0" + } + }, + "System.Reflection": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "dependencies": { + "runtime.any.System.Reflection": "4.3.0" + } + }, + "System.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "dependencies": { + "runtime.any.System.Runtime": "4.3.0" + } + }, + "System.Security.AccessControl": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==", + "dependencies": { + "System.Security.Principal.Windows": "5.0.0" + } + }, + "System.Security.Cryptography.Encoding": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==" + }, + "System.Security.Cryptography.X509Certificates": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", + "dependencies": { + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0" + } + }, + "System.Security.Principal.Windows": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" + }, + "System.Threading.AccessControl": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "WJ9w9m4iHJVq0VoH7hZvYAccbRq95itYRhAAXd6M4kVCzLmT6NqTwmSXKwp3oQilWHhYTXgqaIXxBfg8YaqtmA==", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + } + }, + ".NETFramework,Version=v4.7.2/win-x86": { + "Microsoft.Win32.Primitives": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", + "dependencies": { + "runtime.win.Microsoft.Win32.Primitives": "4.3.0" + } + }, + "Microsoft.Win32.Registry": { + "type": "Direct", + "requested": "[5.0.0, )", + "resolved": "5.0.0", + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + }, + "System.Collections": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "dependencies": { + "runtime.any.System.Collections": "4.3.0" + } + }, + "System.Console": { + "type": "Direct", + "requested": "[4.3.1, )", + "resolved": "4.3.1", + "contentHash": "6iKDG36vugpW230eBGMLL6GQIx+Buf5txz6DFC1c4MOH8qcOo2mFzId6GsJUTptR4AusnDsdUeCYuzDiftD39w==", + "dependencies": { + "runtime.win.System.Console": "4.3.1" + } + }, + "System.Diagnostics.Debug": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", + "dependencies": { + "runtime.win.System.Diagnostics.Debug": "4.3.0" + } + }, + "System.Diagnostics.Tracing": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", + "dependencies": { + "runtime.any.System.Diagnostics.Tracing": "4.3.0" + } + }, + "System.Globalization.Calendars": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", + "dependencies": { + "runtime.any.System.Globalization.Calendars": "4.3.0" + } + }, + "System.IO.FileSystem": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", + "dependencies": { + "System.IO.FileSystem.Primitives": "4.3.0", + "runtime.win.System.IO.FileSystem": "4.3.0" + } + }, + "System.Net.Sockets": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", + "dependencies": { + "runtime.win.System.Net.Sockets": "4.3.0" + } + }, + "System.Resources.ResourceManager": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "dependencies": { + "runtime.any.System.Resources.ResourceManager": "4.3.0" + } + }, + "System.Runtime.Extensions": { + "type": "Direct", + "requested": "[4.3.1, )", + "resolved": "4.3.1", + "contentHash": "qAtKMcHOAq9/zKkl0dwvF0T0pmgCQxX1rC49rJXoU8jq+lw6MC3uXy7nLFmjEI20T3Aq069eWz4LcYR64vEmJw==", + "dependencies": { + "runtime.win.System.Runtime.Extensions": "4.3.0" + } + }, + "System.Runtime.InteropServices.RuntimeInformation": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==" + }, + "System.Security.Cryptography.Algorithms": { + "type": "Direct", + "requested": "[4.3.1, )", + "resolved": "4.3.1", + "contentHash": "DVUblnRfnarrI5olEC2B/OCsJQd0anjVaObQMndHSc43efbc88/RMOlDyg/EyY0ix5ecyZMXS8zMksb5ukebZA==", + "dependencies": { + "System.IO": "4.3.0", + "System.Runtime": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0" + } + }, + "System.Threading.Tasks": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "dependencies": { + "runtime.any.System.Threading.Tasks": "4.3.0" + } + }, + "runtime.any.System.Collections": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "23g6rqftKmovn2cLeGsuHUYm0FD7pdutb0uQMJpZ3qTvq+zHkgmt6J65VtRry4WDGYlmkMa4xDACtaQ94alNag==" + }, + "runtime.any.System.Diagnostics.Tracing": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "1lpifymjGDzoYIaam6/Hyqf8GhBI3xXYLK2TgEvTtuZMorG3Kb9QnMTIKhLjJYXIiu1JvxjngHvtVFQQlpQ3HQ==" + }, + "runtime.any.System.Globalization.Calendars": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "M1r+760j1CNA6M/ZaW6KX8gOS8nxPRqloqDcJYVidRG566Ykwcs29AweZs2JF+nMOCgWDiMfPSTMfvwOI9F77w==" + }, + "runtime.any.System.IO": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "SDZ5AD1DtyRoxYtEcqQ3HDlcrorMYXZeCt7ZhG9US9I5Vva+gpIWDGMkcwa5XiKL0ceQKRZIX2x0XEjLX7PDzQ==" + }, + "runtime.any.System.Reflection": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "hLC3A3rI8jipR5d9k7+f0MgRCW6texsAp0MWkN/ci18FMtQ9KH7E2vDn/DH2LkxsszlpJpOn9qy6Z6/69rH6eQ==" + }, + "runtime.any.System.Resources.ResourceManager": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Lxb89SMvf8w9p9+keBLyL6H6x/TEmc6QVsIIA0T36IuyOY3kNvIdyGddA2qt35cRamzxF8K5p0Opq4G4HjNbhQ==" + }, + "runtime.any.System.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "fRS7zJgaG9NkifaAxGGclDDoRn9HC7hXACl52Or06a/fxdzDajWb5wov3c6a+gVSlekRoexfjwQSK9sh5um5LQ==" + }, + "runtime.any.System.Threading.Tasks": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "OhBAVBQG5kFj1S+hCEQ3TUHBAEtZ3fbEMgZMRNdN8A0Pj4x+5nTELEqL59DU0TjKVE6II3dqKw4Dklb3szT65w==" + }, + "runtime.win.Microsoft.Win32.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "NU51SEt/ZaD2MF48sJ17BIqx7rjeNNLXUevfMOjqQIetdndXwYjZfZsT6jD+rSWp/FYxjesdK4xUSl4OTEI0jw==" + }, + "runtime.win.System.Console": { + "type": "Transitive", + "resolved": "4.3.1", + "contentHash": "vHPXC3B18dxhyipVce8xQT1MQv1o5srYZqBlCNu9p9MNjhgGOntdQh/Xh2X4o7M2F839YUcQiGwu8Q498FyDjg==" + }, + "runtime.win.System.Diagnostics.Debug": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "hHHP0WCStene2jjeYcuDkETozUYF/3sHVRHAEOgS3L15hlip24ssqCTnJC28Z03Wpo078oMcJd0H4egD2aJI8g==" + }, + "runtime.win.System.IO.FileSystem": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Z37zcSCpXuGCYtFbqYO0TwOVXxS2d+BXgSoDFZmRg8BC4Cuy54edjyIvhhcfCrDQA9nl+EPFTgHN54dRAK7mNA==" + }, + "runtime.win.System.Net.Sockets": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "FK/2gX6MmuLIKNCGsV59Fe4IYrLrI5n9pQ1jh477wiivEM/NCXDT2dRetH5FSfY0bQ+VgTLcS3zcmjQ8my3nxQ==" + }, + "runtime.win.System.Runtime.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "RkgHVhUPvzZxuUubiZe8yr/6CypRVXj0VBzaR8hsqQ8f+rUo7e4PWrHTLOCjd8fBMGWCrY//fi7Ku3qXD7oHRw==" + }, + "System.IO": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "dependencies": { + "runtime.any.System.IO": "4.3.0" + } + }, + "System.Net.Http": { + "type": "Transitive", + "resolved": "4.3.4", + "contentHash": "aOa2d51SEbmM+H+Csw7yJOuNZoHkrP2XnAurye5HWYgGVVU54YZDvsLUYRv6h18X3sPnjNCANmN7ZhIPiqMcjA==", + "dependencies": { + "System.Security.Cryptography.X509Certificates": "4.3.0" + } + }, + "System.Reflection": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "dependencies": { + "runtime.any.System.Reflection": "4.3.0" + } + }, + "System.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "dependencies": { + "runtime.any.System.Runtime": "4.3.0" + } + }, + "System.Security.AccessControl": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==", + "dependencies": { + "System.Security.Principal.Windows": "5.0.0" + } + }, + "System.Security.Cryptography.Encoding": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==" + }, + "System.Security.Cryptography.X509Certificates": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", + "dependencies": { + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0" + } + }, + "System.Security.Principal.Windows": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" + }, + "System.Threading.AccessControl": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "WJ9w9m4iHJVq0VoH7hZvYAccbRq95itYRhAAXd6M4kVCzLmT6NqTwmSXKwp3oQilWHhYTXgqaIXxBfg8YaqtmA==", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + } } } } \ No newline at end of file diff --git a/VisualStudio.Extension-2022/AutomaticUpdates/UpdateManager.cs b/VisualStudio.Extension-2022/AutomaticUpdates/UpdateManager.cs index 8def9bc9..4d38f9d5 100644 --- a/VisualStudio.Extension-2022/AutomaticUpdates/UpdateManager.cs +++ b/VisualStudio.Extension-2022/AutomaticUpdates/UpdateManager.cs @@ -3,21 +3,21 @@ // See LICENSE file in the project root for full license information. // -using GalaSoft.MvvmLight.Messaging; +using CommunityToolkit.Mvvm.Messaging; using Microsoft.VisualStudio.Shell; using nanoFramework.Tools.Debugger; using nanoFramework.Tools.VisualStudio.Extension.FirmwareUpdate; +using nanoFramework.Tools.VisualStudio.Extension.Messages; using nanoFramework.Tools.VisualStudio.Extension.ToolWindow.ViewModel; using System; using System.Collections.Concurrent; using System.Linq; -using System.Threading; using System.Threading.Tasks; using Task = System.Threading.Tasks.Task; namespace nanoFramework.Tools.VisualStudio.Extension.AutomaticUpdates { - public class UpdateManager + public class UpdateManager : IRecipient, IRecipient { private static UpdateManager s_instance; private ViewModelLocator ViewModelLocator; @@ -32,7 +32,7 @@ private UpdateManager(Package package) } public static void Initialize( - AsyncPackage package, + AsyncPackage package, ViewModelLocator vmLocator) { s_instance = new UpdateManager(package) @@ -40,8 +40,18 @@ public static void Initialize( ViewModelLocator = vmLocator }; - Messenger.Default.Register(s_instance, DeviceExplorerViewModel.MessagingTokens.LaunchFirmwareUpdateForNanoDevice, (message) => s_instance.LaunchUpdate(message.Notification)); - Messenger.Default.Register(s_instance, DeviceExplorerViewModel.MessagingTokens.NanoDeviceHasDeparted, (message) => s_instance.ProcessNanoDeviceDeparture(message.Notification)); + WeakReferenceMessenger.Default.Register(s_instance); + WeakReferenceMessenger.Default.Register(s_instance); + } + + public void Receive(NanoDeviceHasDepartedMessage message) + { + s_instance.ProcessNanoDeviceDeparture(message.DeviceId); + } + + public void Receive(NanoDeviceIsConnectedMessage message) + { + s_instance.LaunchUpdate(message.DeviceId); } private void ProcessNanoDeviceDeparture(string deviceId) @@ -159,7 +169,7 @@ private void LaunchUpdate(string deviceId) Version currentClrVersion = null; // try to store CLR version - if(nanoDevice.DebugEngine.IsConnectedTonanoCLR) + if (nanoDevice.DebugEngine.IsConnectedTonanoCLR) { if (nanoDevice.DeviceInfo.Valid) { @@ -206,7 +216,7 @@ private void LaunchUpdate(string deviceId) } // check if the device is still there - if(ViewModelLocator.DeviceExplorer.AvailableDevices.FirstOrDefault(d => d.DeviceUniqueId == deviceUniqueId) == null) + if (ViewModelLocator.DeviceExplorer.AvailableDevices.FirstOrDefault(d => d.DeviceUniqueId == deviceUniqueId) == null) { #if DEBUG Console.WriteLine($"[Automatic Updates] {nanoDevice.TargetName} is not available anymore."); @@ -351,7 +361,7 @@ private void LaunchUpdate(string deviceId) } internal static async Task GetFirmwarePackageAsync( - string targetName, + string targetName, string platformName) { if (platformName.StartsWith("STM32")) diff --git a/VisualStudio.Extension-2022/NanoFrameworkPackage.cs b/VisualStudio.Extension-2022/NanoFrameworkPackage.cs index e97f0b03..56a26218 100644 --- a/VisualStudio.Extension-2022/NanoFrameworkPackage.cs +++ b/VisualStudio.Extension-2022/NanoFrameworkPackage.cs @@ -3,7 +3,7 @@ // See LICENSE file in the project root for full license information. // -using GalaSoft.MvvmLight.Ioc; +using CommunityToolkit.Mvvm.DependencyInjection; using Microsoft; using Microsoft.VisualStudio.ProjectSystem.VS; using Microsoft.VisualStudio.Shell; @@ -532,7 +532,7 @@ protected override async Task InitializeAsync(CancellationToken cancellationToke Application.Current.Resources.Add("Locator", viewModelLocator); } - SimpleIoc.Default.GetInstance().Package = this; + Ioc.Default.GetRequiredService().Package = this; await MessageCentre.InitializeAsync(this, ".NET nanoFramework Extension"); diff --git a/VisualStudio.Extension-2022/ToolWindow.DeviceExplorer/DeviceExplorerControl.xaml.cs b/VisualStudio.Extension-2022/ToolWindow.DeviceExplorer/DeviceExplorerControl.xaml.cs index c861e97d..ec2a3717 100644 --- a/VisualStudio.Extension-2022/ToolWindow.DeviceExplorer/DeviceExplorerControl.xaml.cs +++ b/VisualStudio.Extension-2022/ToolWindow.DeviceExplorer/DeviceExplorerControl.xaml.cs @@ -5,9 +5,10 @@ namespace nanoFramework.Tools.VisualStudio.Extension { - using GalaSoft.MvvmLight.Messaging; + using CommunityToolkit.Mvvm.Messaging; using Microsoft.VisualStudio.Shell; using nanoFramework.Tools.Debugger; + using nanoFramework.Tools.VisualStudio.Extension.Messages; using nanoFramework.Tools.VisualStudio.Extension.ToolWindow.ViewModel; using System; using System.Windows.Controls; @@ -15,7 +16,7 @@ namespace nanoFramework.Tools.VisualStudio.Extension /// /// Interaction logic for DeviceExplorerControl. /// - public partial class DeviceExplorerControl : UserControl + public partial class DeviceExplorerControl : UserControl, IRecipient { // strongly-typed view models enable x:bind public DeviceExplorerViewModel ViewModel => DataContext as DeviceExplorerViewModel; @@ -30,7 +31,7 @@ public DeviceExplorerControl() Loaded += DeviceExplorerControl_Loaded; deviceTreeView.SelectedItemChanged += DevicesTreeView_SelectedItemChanged; - Messenger.Default.Register(this, DeviceExplorerViewModel.MessagingTokens.ForceSelectionOfNanoDevice, (message) => ForceSelectionOfNanoDeviceHandlerAsync().ConfigureAwait(false)); + WeakReferenceMessenger.Default.Register(this); } private void DeviceExplorerControl_Loaded(object sender, System.Windows.RoutedEventArgs e) @@ -119,7 +120,7 @@ private async System.Threading.Tasks.Task ForceSelectionOfNanoDeviceHandlerAsync } while (tryCount-- > 0); - Messenger.Default.Send(new NotificationMessage(""), DeviceExplorerViewModel.MessagingTokens.SelectedNanoDeviceHasChanged); + WeakReferenceMessenger.Default.Send(new SelectedNanoDeviceHasChangedMessage()); // force redrawing to show selection deviceTreeView.InvalidateVisual(); @@ -127,6 +128,11 @@ private async System.Threading.Tasks.Task ForceSelectionOfNanoDeviceHandlerAsync deviceTreeView.InvalidateVisual(); } + + public void Receive(ForceSelectionOfNanoDeviceMessage message) + { + ForceSelectionOfNanoDeviceHandlerAsync().ConfigureAwait(false); + } #endregion } } diff --git a/VisualStudio.Extension-2022/ToolWindow.DeviceExplorer/SettingsDialog.xaml.cs b/VisualStudio.Extension-2022/ToolWindow.DeviceExplorer/SettingsDialog.xaml.cs index e2d9bd88..390980e2 100644 --- a/VisualStudio.Extension-2022/ToolWindow.DeviceExplorer/SettingsDialog.xaml.cs +++ b/VisualStudio.Extension-2022/ToolWindow.DeviceExplorer/SettingsDialog.xaml.cs @@ -5,11 +5,10 @@ namespace nanoFramework.Tools.VisualStudio.Extension { - using GalaSoft.MvvmLight.Messaging; + using CommunityToolkit.Mvvm.Messaging; using Microsoft.VisualStudio.PlatformUI; using Microsoft.VisualStudio.Shell; - using Microsoft.VisualStudio.Threading; - using nanoFramework.Tools.VisualStudio.Extension.ToolWindow.ViewModel; + using nanoFramework.Tools.VisualStudio.Extension.Messages; using System.Collections.Generic; using System.Net; using System.Threading.Tasks; @@ -19,7 +18,7 @@ namespace nanoFramework.Tools.VisualStudio.Extension /// /// Interaction logic for DeviceExplorerControl. /// - public partial class SettingsDialog : DialogWindow + public partial class SettingsDialog : DialogWindow, IRecipient { private const string _stopVirtualDeviceLabel = "Stop Virtual Device"; private const string _startVirtualDeviceLabel = "Start Virtual Device"; @@ -43,7 +42,7 @@ public SettingsDialog() // init controls private void InitControls() { - Messenger.Default.Register(this, DeviceExplorerViewModel.MessagingTokens.VirtualDeviceOperationExecuting, (message) => this.UpdateStartStopAvailabilityAsync(message.Notification).ConfigureAwait(false)); + WeakReferenceMessenger.Default.Register(this); // set controls according to stored preferences GenerateDeploymentImage.IsChecked = NanoFrameworkPackage.SettingGenerateDeploymentImage; @@ -97,11 +96,11 @@ private void InitControls() CloseButton.Focus(); } - private async Task UpdateStartStopAvailabilityAsync(string installCompleted) + private async Task UpdateStartStopAvailabilityAsync(bool installCompleted) { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); - StartStopDevice.IsEnabled = !bool.Parse(installCompleted) + StartStopDevice.IsEnabled = !installCompleted && NanoFrameworkPackage.VirtualDeviceService.NanoClrIsInstalled && NanoFrameworkPackage.VirtualDeviceService.CanStartVirtualDevice; } @@ -268,5 +267,10 @@ private void AutoUpdateNanoClrImage_Checked(object sender, System.Windows.Routed // save new state NanoFrameworkPackage.SettingVirtualDeviceAutoUpdateNanoClrImage = (sender as ToggleButton).IsChecked ?? false; } + + public void Receive(VirtualDeviceOperationExecutingMessage message) + { + UpdateStartStopAvailabilityAsync(message.InstallCompleted).ConfigureAwait(false); + } } } diff --git a/VisualStudio.Extension-2022/VisualStudio.Extension-vs2022.csproj b/VisualStudio.Extension-2022/VisualStudio.Extension-vs2022.csproj index 3c88e1ca..184854e5 100644 --- a/VisualStudio.Extension-2022/VisualStudio.Extension-vs2022.csproj +++ b/VisualStudio.Extension-2022/VisualStudio.Extension-vs2022.csproj @@ -493,6 +493,9 @@ 3.6.0 + + 8.1.0 + 17.5.33428.366 @@ -525,6 +528,9 @@ runtime; build; native; contentfiles; analyzers; buildtransitive all + + 7.0.0 + 17.4.16 @@ -546,9 +552,6 @@ 5.0.0 - - 5.4.1.1 - 1.14.2 runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/VisualStudio.Extension-2022/packages.lock.json b/VisualStudio.Extension-2022/packages.lock.json index 888fe3a7..2543f6d6 100644 --- a/VisualStudio.Extension-2022/packages.lock.json +++ b/VisualStudio.Extension-2022/packages.lock.json @@ -16,6 +16,18 @@ "System.ValueTuple": "4.5.0" } }, + "CommunityToolkit.Mvvm": { + "type": "Direct", + "requested": "[8.1.0, )", + "resolved": "8.1.0", + "contentHash": "xxOt7lu9a5kB5Fs9RfcxzVlKnhuuPe+w7AXHtmCFtS3oldrsUhEMxHfNulluXSscUUoGxZ0jh55Om12ZP6abHA==", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "System.ComponentModel.Annotations": "5.0.0", + "System.Memory": "4.5.5", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, "envdte80": { "type": "Direct", "requested": "[17.5.33428.366, )", @@ -173,6 +185,17 @@ "resolved": "3.3.4", "contentHash": "0k2Jwpc8eq0hjOtX6TxRkHm9clkJ2PAQ3heEHgqIJZcsfdFosC/iyz18nsgTVDDWpID80rC7aiYK7ripx+Qndg==" }, + "Microsoft.Extensions.DependencyInjection": { + "type": "Direct", + "requested": "[7.0.0, )", + "resolved": "7.0.0", + "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "7.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0", + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, "Microsoft.VisualStudio.Composition": { "type": "Direct", "requested": "[17.4.16, )", @@ -320,12 +343,6 @@ "System.Security.Principal.Windows": "5.0.0" } }, - "MvvmLightLibsStd10": { - "type": "Direct", - "requested": "[5.4.1.1, )", - "resolved": "5.4.1.1", - "contentHash": "zU9KXgq8dfnzxxOvvAVtasbhaQGoDlTr8Pw2AjZ1NB905GQljrxqkgh3jo5/47Vux5duw3/faUgcZjdfomGvFw==" - }, "nanoFramework.CoreLibrary": { "type": "Direct", "requested": "[1.14.2, )", @@ -1758,6 +1775,11 @@ "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "dMkqfy2el8A8/I76n2Hi1oBFEbG1SfxD2l5nhwXV3XjlnOmwxJlQbYpJH4W51odnU9sARCSAgv7S3CyAFMkpYg==" + }, "System.ComponentModel.Composition": { "type": "Transitive", "resolved": "6.0.0", @@ -2125,6 +2147,819 @@ "Microsoft.Build.Utilities.Core": "[17.1.0, )" } } + }, + ".NETFramework,Version=v4.7.2/win": { + "Microsoft.Win32.Primitives": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", + "dependencies": { + "runtime.win.Microsoft.Win32.Primitives": "4.3.0" + } + }, + "Microsoft.Win32.Registry": { + "type": "Direct", + "requested": "[5.0.0, )", + "resolved": "5.0.0", + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + }, + "System.Collections": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "dependencies": { + "runtime.any.System.Collections": "4.3.0" + } + }, + "System.Console": { + "type": "Direct", + "requested": "[4.3.1, )", + "resolved": "4.3.1", + "contentHash": "6iKDG36vugpW230eBGMLL6GQIx+Buf5txz6DFC1c4MOH8qcOo2mFzId6GsJUTptR4AusnDsdUeCYuzDiftD39w==", + "dependencies": { + "runtime.win.System.Console": "4.3.1" + } + }, + "System.Diagnostics.Debug": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", + "dependencies": { + "runtime.win.System.Diagnostics.Debug": "4.3.0" + } + }, + "System.Diagnostics.Tracing": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", + "dependencies": { + "runtime.any.System.Diagnostics.Tracing": "4.3.0" + } + }, + "System.Globalization.Calendars": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", + "dependencies": { + "runtime.any.System.Globalization.Calendars": "4.3.0" + } + }, + "System.IO.FileSystem": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", + "dependencies": { + "System.IO.FileSystem.Primitives": "4.3.0", + "runtime.win.System.IO.FileSystem": "4.3.0" + } + }, + "System.Net.Sockets": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", + "dependencies": { + "runtime.win.System.Net.Sockets": "4.3.0" + } + }, + "System.Resources.ResourceManager": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "dependencies": { + "runtime.any.System.Resources.ResourceManager": "4.3.0" + } + }, + "System.Runtime.Extensions": { + "type": "Direct", + "requested": "[4.3.1, )", + "resolved": "4.3.1", + "contentHash": "qAtKMcHOAq9/zKkl0dwvF0T0pmgCQxX1rC49rJXoU8jq+lw6MC3uXy7nLFmjEI20T3Aq069eWz4LcYR64vEmJw==", + "dependencies": { + "runtime.win.System.Runtime.Extensions": "4.3.0" + } + }, + "System.Runtime.InteropServices.RuntimeInformation": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==" + }, + "System.Security.Cryptography.Algorithms": { + "type": "Direct", + "requested": "[4.3.1, )", + "resolved": "4.3.1", + "contentHash": "DVUblnRfnarrI5olEC2B/OCsJQd0anjVaObQMndHSc43efbc88/RMOlDyg/EyY0ix5ecyZMXS8zMksb5ukebZA==", + "dependencies": { + "System.IO": "4.3.0", + "System.Runtime": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0" + } + }, + "System.Threading.Tasks": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "dependencies": { + "runtime.any.System.Threading.Tasks": "4.3.0" + } + }, + "runtime.any.System.Collections": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "23g6rqftKmovn2cLeGsuHUYm0FD7pdutb0uQMJpZ3qTvq+zHkgmt6J65VtRry4WDGYlmkMa4xDACtaQ94alNag==" + }, + "runtime.any.System.Diagnostics.Tracing": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "1lpifymjGDzoYIaam6/Hyqf8GhBI3xXYLK2TgEvTtuZMorG3Kb9QnMTIKhLjJYXIiu1JvxjngHvtVFQQlpQ3HQ==" + }, + "runtime.any.System.Globalization.Calendars": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "M1r+760j1CNA6M/ZaW6KX8gOS8nxPRqloqDcJYVidRG566Ykwcs29AweZs2JF+nMOCgWDiMfPSTMfvwOI9F77w==" + }, + "runtime.any.System.IO": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "SDZ5AD1DtyRoxYtEcqQ3HDlcrorMYXZeCt7ZhG9US9I5Vva+gpIWDGMkcwa5XiKL0ceQKRZIX2x0XEjLX7PDzQ==" + }, + "runtime.any.System.Resources.ResourceManager": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Lxb89SMvf8w9p9+keBLyL6H6x/TEmc6QVsIIA0T36IuyOY3kNvIdyGddA2qt35cRamzxF8K5p0Opq4G4HjNbhQ==" + }, + "runtime.any.System.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "fRS7zJgaG9NkifaAxGGclDDoRn9HC7hXACl52Or06a/fxdzDajWb5wov3c6a+gVSlekRoexfjwQSK9sh5um5LQ==" + }, + "runtime.any.System.Threading.Tasks": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "OhBAVBQG5kFj1S+hCEQ3TUHBAEtZ3fbEMgZMRNdN8A0Pj4x+5nTELEqL59DU0TjKVE6II3dqKw4Dklb3szT65w==" + }, + "runtime.win.Microsoft.Win32.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "NU51SEt/ZaD2MF48sJ17BIqx7rjeNNLXUevfMOjqQIetdndXwYjZfZsT6jD+rSWp/FYxjesdK4xUSl4OTEI0jw==" + }, + "runtime.win.System.Console": { + "type": "Transitive", + "resolved": "4.3.1", + "contentHash": "vHPXC3B18dxhyipVce8xQT1MQv1o5srYZqBlCNu9p9MNjhgGOntdQh/Xh2X4o7M2F839YUcQiGwu8Q498FyDjg==" + }, + "runtime.win.System.Diagnostics.Debug": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "hHHP0WCStene2jjeYcuDkETozUYF/3sHVRHAEOgS3L15hlip24ssqCTnJC28Z03Wpo078oMcJd0H4egD2aJI8g==" + }, + "runtime.win.System.IO.FileSystem": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Z37zcSCpXuGCYtFbqYO0TwOVXxS2d+BXgSoDFZmRg8BC4Cuy54edjyIvhhcfCrDQA9nl+EPFTgHN54dRAK7mNA==" + }, + "runtime.win.System.Net.Sockets": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "FK/2gX6MmuLIKNCGsV59Fe4IYrLrI5n9pQ1jh477wiivEM/NCXDT2dRetH5FSfY0bQ+VgTLcS3zcmjQ8my3nxQ==" + }, + "runtime.win.System.Runtime.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "RkgHVhUPvzZxuUubiZe8yr/6CypRVXj0VBzaR8hsqQ8f+rUo7e4PWrHTLOCjd8fBMGWCrY//fi7Ku3qXD7oHRw==" + }, + "System.Configuration.ConfigurationManager": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "7T+m0kDSlIPTHIkPMIu6m6tV6qsMqJpvQWW2jIc2qi7sn40qxFo0q+7mEQAhMPXZHMKnWrnv47ntGlM/ejvw3g==", + "dependencies": { + "System.Security.Permissions": "6.0.0" + } + }, + "System.IO": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "dependencies": { + "runtime.any.System.IO": "4.3.0" + } + }, + "System.Net.Http": { + "type": "Transitive", + "resolved": "4.3.4", + "contentHash": "aOa2d51SEbmM+H+Csw7yJOuNZoHkrP2XnAurye5HWYgGVVU54YZDvsLUYRv6h18X3sPnjNCANmN7ZhIPiqMcjA==", + "dependencies": { + "System.Security.Cryptography.X509Certificates": "4.3.0" + } + }, + "System.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "dependencies": { + "runtime.any.System.Runtime": "4.3.0" + } + }, + "System.Security.AccessControl": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==", + "dependencies": { + "System.Security.Principal.Windows": "5.0.0" + } + }, + "System.Security.Cryptography.Encoding": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==" + }, + "System.Security.Cryptography.X509Certificates": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", + "dependencies": { + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0" + } + }, + "System.Security.Permissions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "T/uuc7AklkDoxmcJ7LGkyX1CcSviZuLCa4jg3PekfJ7SU0niF0IVTXwUiNVP9DSpzou2PpxJ+eNY2IfDM90ZCg==", + "dependencies": { + "System.Security.AccessControl": "6.0.0" + } + }, + "System.Security.Principal.Windows": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" + }, + "System.Threading.AccessControl": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "2258mqWesMch/xCpcnjJBgJP33yhpZLGLbEOm01qwq0efG4b+NG8c9sxYOWNxmDQ82swXrnQRl1Yp2wC1NrfZA==", + "dependencies": { + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + } + }, + ".NETFramework,Version=v4.7.2/win-x64": { + "Microsoft.Win32.Primitives": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", + "dependencies": { + "runtime.win.Microsoft.Win32.Primitives": "4.3.0" + } + }, + "Microsoft.Win32.Registry": { + "type": "Direct", + "requested": "[5.0.0, )", + "resolved": "5.0.0", + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + }, + "System.Collections": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "dependencies": { + "runtime.any.System.Collections": "4.3.0" + } + }, + "System.Console": { + "type": "Direct", + "requested": "[4.3.1, )", + "resolved": "4.3.1", + "contentHash": "6iKDG36vugpW230eBGMLL6GQIx+Buf5txz6DFC1c4MOH8qcOo2mFzId6GsJUTptR4AusnDsdUeCYuzDiftD39w==", + "dependencies": { + "runtime.win.System.Console": "4.3.1" + } + }, + "System.Diagnostics.Debug": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", + "dependencies": { + "runtime.win.System.Diagnostics.Debug": "4.3.0" + } + }, + "System.Diagnostics.Tracing": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", + "dependencies": { + "runtime.any.System.Diagnostics.Tracing": "4.3.0" + } + }, + "System.Globalization.Calendars": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", + "dependencies": { + "runtime.any.System.Globalization.Calendars": "4.3.0" + } + }, + "System.IO.FileSystem": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", + "dependencies": { + "System.IO.FileSystem.Primitives": "4.3.0", + "runtime.win.System.IO.FileSystem": "4.3.0" + } + }, + "System.Net.Sockets": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", + "dependencies": { + "runtime.win.System.Net.Sockets": "4.3.0" + } + }, + "System.Resources.ResourceManager": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "dependencies": { + "runtime.any.System.Resources.ResourceManager": "4.3.0" + } + }, + "System.Runtime.Extensions": { + "type": "Direct", + "requested": "[4.3.1, )", + "resolved": "4.3.1", + "contentHash": "qAtKMcHOAq9/zKkl0dwvF0T0pmgCQxX1rC49rJXoU8jq+lw6MC3uXy7nLFmjEI20T3Aq069eWz4LcYR64vEmJw==", + "dependencies": { + "runtime.win.System.Runtime.Extensions": "4.3.0" + } + }, + "System.Runtime.InteropServices.RuntimeInformation": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==" + }, + "System.Security.Cryptography.Algorithms": { + "type": "Direct", + "requested": "[4.3.1, )", + "resolved": "4.3.1", + "contentHash": "DVUblnRfnarrI5olEC2B/OCsJQd0anjVaObQMndHSc43efbc88/RMOlDyg/EyY0ix5ecyZMXS8zMksb5ukebZA==", + "dependencies": { + "System.IO": "4.3.0", + "System.Runtime": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0" + } + }, + "System.Threading.Tasks": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "dependencies": { + "runtime.any.System.Threading.Tasks": "4.3.0" + } + }, + "runtime.any.System.Collections": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "23g6rqftKmovn2cLeGsuHUYm0FD7pdutb0uQMJpZ3qTvq+zHkgmt6J65VtRry4WDGYlmkMa4xDACtaQ94alNag==" + }, + "runtime.any.System.Diagnostics.Tracing": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "1lpifymjGDzoYIaam6/Hyqf8GhBI3xXYLK2TgEvTtuZMorG3Kb9QnMTIKhLjJYXIiu1JvxjngHvtVFQQlpQ3HQ==" + }, + "runtime.any.System.Globalization.Calendars": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "M1r+760j1CNA6M/ZaW6KX8gOS8nxPRqloqDcJYVidRG566Ykwcs29AweZs2JF+nMOCgWDiMfPSTMfvwOI9F77w==" + }, + "runtime.any.System.IO": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "SDZ5AD1DtyRoxYtEcqQ3HDlcrorMYXZeCt7ZhG9US9I5Vva+gpIWDGMkcwa5XiKL0ceQKRZIX2x0XEjLX7PDzQ==" + }, + "runtime.any.System.Resources.ResourceManager": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Lxb89SMvf8w9p9+keBLyL6H6x/TEmc6QVsIIA0T36IuyOY3kNvIdyGddA2qt35cRamzxF8K5p0Opq4G4HjNbhQ==" + }, + "runtime.any.System.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "fRS7zJgaG9NkifaAxGGclDDoRn9HC7hXACl52Or06a/fxdzDajWb5wov3c6a+gVSlekRoexfjwQSK9sh5um5LQ==" + }, + "runtime.any.System.Threading.Tasks": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "OhBAVBQG5kFj1S+hCEQ3TUHBAEtZ3fbEMgZMRNdN8A0Pj4x+5nTELEqL59DU0TjKVE6II3dqKw4Dklb3szT65w==" + }, + "runtime.win.Microsoft.Win32.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "NU51SEt/ZaD2MF48sJ17BIqx7rjeNNLXUevfMOjqQIetdndXwYjZfZsT6jD+rSWp/FYxjesdK4xUSl4OTEI0jw==" + }, + "runtime.win.System.Console": { + "type": "Transitive", + "resolved": "4.3.1", + "contentHash": "vHPXC3B18dxhyipVce8xQT1MQv1o5srYZqBlCNu9p9MNjhgGOntdQh/Xh2X4o7M2F839YUcQiGwu8Q498FyDjg==" + }, + "runtime.win.System.Diagnostics.Debug": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "hHHP0WCStene2jjeYcuDkETozUYF/3sHVRHAEOgS3L15hlip24ssqCTnJC28Z03Wpo078oMcJd0H4egD2aJI8g==" + }, + "runtime.win.System.IO.FileSystem": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Z37zcSCpXuGCYtFbqYO0TwOVXxS2d+BXgSoDFZmRg8BC4Cuy54edjyIvhhcfCrDQA9nl+EPFTgHN54dRAK7mNA==" + }, + "runtime.win.System.Net.Sockets": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "FK/2gX6MmuLIKNCGsV59Fe4IYrLrI5n9pQ1jh477wiivEM/NCXDT2dRetH5FSfY0bQ+VgTLcS3zcmjQ8my3nxQ==" + }, + "runtime.win.System.Runtime.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "RkgHVhUPvzZxuUubiZe8yr/6CypRVXj0VBzaR8hsqQ8f+rUo7e4PWrHTLOCjd8fBMGWCrY//fi7Ku3qXD7oHRw==" + }, + "System.Configuration.ConfigurationManager": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "7T+m0kDSlIPTHIkPMIu6m6tV6qsMqJpvQWW2jIc2qi7sn40qxFo0q+7mEQAhMPXZHMKnWrnv47ntGlM/ejvw3g==", + "dependencies": { + "System.Security.Permissions": "6.0.0" + } + }, + "System.IO": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "dependencies": { + "runtime.any.System.IO": "4.3.0" + } + }, + "System.Net.Http": { + "type": "Transitive", + "resolved": "4.3.4", + "contentHash": "aOa2d51SEbmM+H+Csw7yJOuNZoHkrP2XnAurye5HWYgGVVU54YZDvsLUYRv6h18X3sPnjNCANmN7ZhIPiqMcjA==", + "dependencies": { + "System.Security.Cryptography.X509Certificates": "4.3.0" + } + }, + "System.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "dependencies": { + "runtime.any.System.Runtime": "4.3.0" + } + }, + "System.Security.AccessControl": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==", + "dependencies": { + "System.Security.Principal.Windows": "5.0.0" + } + }, + "System.Security.Cryptography.Encoding": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==" + }, + "System.Security.Cryptography.X509Certificates": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", + "dependencies": { + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0" + } + }, + "System.Security.Permissions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "T/uuc7AklkDoxmcJ7LGkyX1CcSviZuLCa4jg3PekfJ7SU0niF0IVTXwUiNVP9DSpzou2PpxJ+eNY2IfDM90ZCg==", + "dependencies": { + "System.Security.AccessControl": "6.0.0" + } + }, + "System.Security.Principal.Windows": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" + }, + "System.Threading.AccessControl": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "2258mqWesMch/xCpcnjJBgJP33yhpZLGLbEOm01qwq0efG4b+NG8c9sxYOWNxmDQ82swXrnQRl1Yp2wC1NrfZA==", + "dependencies": { + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + } + }, + ".NETFramework,Version=v4.7.2/win-x86": { + "Microsoft.Win32.Primitives": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", + "dependencies": { + "runtime.win.Microsoft.Win32.Primitives": "4.3.0" + } + }, + "Microsoft.Win32.Registry": { + "type": "Direct", + "requested": "[5.0.0, )", + "resolved": "5.0.0", + "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + }, + "System.Collections": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "dependencies": { + "runtime.any.System.Collections": "4.3.0" + } + }, + "System.Console": { + "type": "Direct", + "requested": "[4.3.1, )", + "resolved": "4.3.1", + "contentHash": "6iKDG36vugpW230eBGMLL6GQIx+Buf5txz6DFC1c4MOH8qcOo2mFzId6GsJUTptR4AusnDsdUeCYuzDiftD39w==", + "dependencies": { + "runtime.win.System.Console": "4.3.1" + } + }, + "System.Diagnostics.Debug": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", + "dependencies": { + "runtime.win.System.Diagnostics.Debug": "4.3.0" + } + }, + "System.Diagnostics.Tracing": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", + "dependencies": { + "runtime.any.System.Diagnostics.Tracing": "4.3.0" + } + }, + "System.Globalization.Calendars": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", + "dependencies": { + "runtime.any.System.Globalization.Calendars": "4.3.0" + } + }, + "System.IO.FileSystem": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", + "dependencies": { + "System.IO.FileSystem.Primitives": "4.3.0", + "runtime.win.System.IO.FileSystem": "4.3.0" + } + }, + "System.Net.Sockets": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", + "dependencies": { + "runtime.win.System.Net.Sockets": "4.3.0" + } + }, + "System.Resources.ResourceManager": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "dependencies": { + "runtime.any.System.Resources.ResourceManager": "4.3.0" + } + }, + "System.Runtime.Extensions": { + "type": "Direct", + "requested": "[4.3.1, )", + "resolved": "4.3.1", + "contentHash": "qAtKMcHOAq9/zKkl0dwvF0T0pmgCQxX1rC49rJXoU8jq+lw6MC3uXy7nLFmjEI20T3Aq069eWz4LcYR64vEmJw==", + "dependencies": { + "runtime.win.System.Runtime.Extensions": "4.3.0" + } + }, + "System.Runtime.InteropServices.RuntimeInformation": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==" + }, + "System.Security.Cryptography.Algorithms": { + "type": "Direct", + "requested": "[4.3.1, )", + "resolved": "4.3.1", + "contentHash": "DVUblnRfnarrI5olEC2B/OCsJQd0anjVaObQMndHSc43efbc88/RMOlDyg/EyY0ix5ecyZMXS8zMksb5ukebZA==", + "dependencies": { + "System.IO": "4.3.0", + "System.Runtime": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0" + } + }, + "System.Threading.Tasks": { + "type": "Direct", + "requested": "[4.3.0, )", + "resolved": "4.3.0", + "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "dependencies": { + "runtime.any.System.Threading.Tasks": "4.3.0" + } + }, + "runtime.any.System.Collections": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "23g6rqftKmovn2cLeGsuHUYm0FD7pdutb0uQMJpZ3qTvq+zHkgmt6J65VtRry4WDGYlmkMa4xDACtaQ94alNag==" + }, + "runtime.any.System.Diagnostics.Tracing": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "1lpifymjGDzoYIaam6/Hyqf8GhBI3xXYLK2TgEvTtuZMorG3Kb9QnMTIKhLjJYXIiu1JvxjngHvtVFQQlpQ3HQ==" + }, + "runtime.any.System.Globalization.Calendars": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "M1r+760j1CNA6M/ZaW6KX8gOS8nxPRqloqDcJYVidRG566Ykwcs29AweZs2JF+nMOCgWDiMfPSTMfvwOI9F77w==" + }, + "runtime.any.System.IO": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "SDZ5AD1DtyRoxYtEcqQ3HDlcrorMYXZeCt7ZhG9US9I5Vva+gpIWDGMkcwa5XiKL0ceQKRZIX2x0XEjLX7PDzQ==" + }, + "runtime.any.System.Resources.ResourceManager": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Lxb89SMvf8w9p9+keBLyL6H6x/TEmc6QVsIIA0T36IuyOY3kNvIdyGddA2qt35cRamzxF8K5p0Opq4G4HjNbhQ==" + }, + "runtime.any.System.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "fRS7zJgaG9NkifaAxGGclDDoRn9HC7hXACl52Or06a/fxdzDajWb5wov3c6a+gVSlekRoexfjwQSK9sh5um5LQ==" + }, + "runtime.any.System.Threading.Tasks": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "OhBAVBQG5kFj1S+hCEQ3TUHBAEtZ3fbEMgZMRNdN8A0Pj4x+5nTELEqL59DU0TjKVE6II3dqKw4Dklb3szT65w==" + }, + "runtime.win.Microsoft.Win32.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "NU51SEt/ZaD2MF48sJ17BIqx7rjeNNLXUevfMOjqQIetdndXwYjZfZsT6jD+rSWp/FYxjesdK4xUSl4OTEI0jw==" + }, + "runtime.win.System.Console": { + "type": "Transitive", + "resolved": "4.3.1", + "contentHash": "vHPXC3B18dxhyipVce8xQT1MQv1o5srYZqBlCNu9p9MNjhgGOntdQh/Xh2X4o7M2F839YUcQiGwu8Q498FyDjg==" + }, + "runtime.win.System.Diagnostics.Debug": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "hHHP0WCStene2jjeYcuDkETozUYF/3sHVRHAEOgS3L15hlip24ssqCTnJC28Z03Wpo078oMcJd0H4egD2aJI8g==" + }, + "runtime.win.System.IO.FileSystem": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Z37zcSCpXuGCYtFbqYO0TwOVXxS2d+BXgSoDFZmRg8BC4Cuy54edjyIvhhcfCrDQA9nl+EPFTgHN54dRAK7mNA==" + }, + "runtime.win.System.Net.Sockets": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "FK/2gX6MmuLIKNCGsV59Fe4IYrLrI5n9pQ1jh477wiivEM/NCXDT2dRetH5FSfY0bQ+VgTLcS3zcmjQ8my3nxQ==" + }, + "runtime.win.System.Runtime.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "RkgHVhUPvzZxuUubiZe8yr/6CypRVXj0VBzaR8hsqQ8f+rUo7e4PWrHTLOCjd8fBMGWCrY//fi7Ku3qXD7oHRw==" + }, + "System.Configuration.ConfigurationManager": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "7T+m0kDSlIPTHIkPMIu6m6tV6qsMqJpvQWW2jIc2qi7sn40qxFo0q+7mEQAhMPXZHMKnWrnv47ntGlM/ejvw3g==", + "dependencies": { + "System.Security.Permissions": "6.0.0" + } + }, + "System.IO": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "dependencies": { + "runtime.any.System.IO": "4.3.0" + } + }, + "System.Net.Http": { + "type": "Transitive", + "resolved": "4.3.4", + "contentHash": "aOa2d51SEbmM+H+Csw7yJOuNZoHkrP2XnAurye5HWYgGVVU54YZDvsLUYRv6h18X3sPnjNCANmN7ZhIPiqMcjA==", + "dependencies": { + "System.Security.Cryptography.X509Certificates": "4.3.0" + } + }, + "System.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "dependencies": { + "runtime.any.System.Runtime": "4.3.0" + } + }, + "System.Security.AccessControl": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==", + "dependencies": { + "System.Security.Principal.Windows": "5.0.0" + } + }, + "System.Security.Cryptography.Encoding": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==" + }, + "System.Security.Cryptography.X509Certificates": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", + "dependencies": { + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0" + } + }, + "System.Security.Permissions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "T/uuc7AklkDoxmcJ7LGkyX1CcSviZuLCa4jg3PekfJ7SU0niF0IVTXwUiNVP9DSpzou2PpxJ+eNY2IfDM90ZCg==", + "dependencies": { + "System.Security.AccessControl": "6.0.0" + } + }, + "System.Security.Principal.Windows": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" + }, + "System.Threading.AccessControl": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "2258mqWesMch/xCpcnjJBgJP33yhpZLGLbEOm01qwq0efG4b+NG8c9sxYOWNxmDQ82swXrnQRl1Yp2wC1NrfZA==", + "dependencies": { + "System.Security.AccessControl": "6.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + } } } } \ No newline at end of file diff --git a/vs-extension.shared/DebugLauncher/NanoDebuggerLaunchProvider.cs b/vs-extension.shared/DebugLauncher/NanoDebuggerLaunchProvider.cs index 229aaabb..d8465734 100644 --- a/vs-extension.shared/DebugLauncher/NanoDebuggerLaunchProvider.cs +++ b/vs-extension.shared/DebugLauncher/NanoDebuggerLaunchProvider.cs @@ -3,7 +3,7 @@ // See LICENSE file in the project root for full license information. // -using GalaSoft.MvvmLight.Ioc; +using CommunityToolkit.Mvvm.DependencyInjection; using Microsoft.VisualStudio.ProjectSystem; using Microsoft.VisualStudio.ProjectSystem.Debug; using Microsoft.VisualStudio.ProjectSystem.VS.Debug; @@ -45,12 +45,13 @@ public override async Task> QueryDebugTarget // output information about assembly running this to help debugging MessageCentre.InternalErrorWriteLine($"Launching debugger provider from v{_informationalVersionAttribute.InformationalVersion}"); - if (SimpleIoc.Default.GetInstance().SelectedDevice != null) + var deviceExplorerViewModel = Ioc.Default.GetRequiredService(); + if (deviceExplorerViewModel.SelectedDevice != null) { - var deployDeviceName = SimpleIoc.Default.GetInstance().SelectedDevice.Description; + var deployDeviceName = deviceExplorerViewModel.SelectedDevice.Description; // get device - var device = SimpleIoc.Default.GetInstance().SelectedDevice; + var device = deviceExplorerViewModel.SelectedDevice; // check for debug engine if (device.DebugEngine == null) diff --git a/vs-extension.shared/Messages/ForceSelectionOfNanoDeviceMessage.cs b/vs-extension.shared/Messages/ForceSelectionOfNanoDeviceMessage.cs new file mode 100644 index 00000000..583dd709 --- /dev/null +++ b/vs-extension.shared/Messages/ForceSelectionOfNanoDeviceMessage.cs @@ -0,0 +1,11 @@ +// +// Copyright (c) .NET Foundation and Contributors +// See LICENSE file in the project root for full license information. +// + +namespace nanoFramework.Tools.VisualStudio.Extension.Messages +{ + public sealed class ForceSelectionOfNanoDeviceMessage + { + } +} diff --git a/vs-extension.shared/Messages/NanoDeviceHasDepartedMessage.cs b/vs-extension.shared/Messages/NanoDeviceHasDepartedMessage.cs new file mode 100644 index 00000000..856d7a09 --- /dev/null +++ b/vs-extension.shared/Messages/NanoDeviceHasDepartedMessage.cs @@ -0,0 +1,17 @@ +// +// Copyright (c) .NET Foundation and Contributors +// See LICENSE file in the project root for full license information. +// + +namespace nanoFramework.Tools.VisualStudio.Extension.Messages +{ + public sealed class NanoDeviceHasDepartedMessage + { + public string DeviceId { get; } + + public NanoDeviceHasDepartedMessage(string deviceId) + { + DeviceId = deviceId; + } + } +} diff --git a/vs-extension.shared/Messages/NanoDeviceIsConnectedMessage.cs b/vs-extension.shared/Messages/NanoDeviceIsConnectedMessage.cs new file mode 100644 index 00000000..25c4791f --- /dev/null +++ b/vs-extension.shared/Messages/NanoDeviceIsConnectedMessage.cs @@ -0,0 +1,17 @@ +// +// Copyright (c) .NET Foundation and Contributors +// See LICENSE file in the project root for full license information. +// + +namespace nanoFramework.Tools.VisualStudio.Extension.Messages +{ + public sealed class NanoDeviceIsConnectedMessage + { + public string DeviceId { get; } + + public NanoDeviceIsConnectedMessage(string deviceId) + { + DeviceId = deviceId; + } + } +} diff --git a/vs-extension.shared/Messages/NanoDevicesCollectionHasChangedMessage.cs b/vs-extension.shared/Messages/NanoDevicesCollectionHasChangedMessage.cs new file mode 100644 index 00000000..8536ce5d --- /dev/null +++ b/vs-extension.shared/Messages/NanoDevicesCollectionHasChangedMessage.cs @@ -0,0 +1,11 @@ +// +// Copyright (c) .NET Foundation and Contributors +// See LICENSE file in the project root for full license information. +// + +namespace nanoFramework.Tools.VisualStudio.Extension.Messages +{ + public sealed class NanoDevicesCollectionHasChangedMessage + { + } +} diff --git a/vs-extension.shared/Messages/NanoDevicesDeviceEnumerationCompletedMessage.cs b/vs-extension.shared/Messages/NanoDevicesDeviceEnumerationCompletedMessage.cs new file mode 100644 index 00000000..a095a54c --- /dev/null +++ b/vs-extension.shared/Messages/NanoDevicesDeviceEnumerationCompletedMessage.cs @@ -0,0 +1,11 @@ +// +// Copyright (c) .NET Foundation and Contributors +// See LICENSE file in the project root for full license information. +// + +namespace nanoFramework.Tools.VisualStudio.Extension.Messages +{ + public sealed class NanoDevicesDeviceEnumerationCompletedMessage + { + } +} diff --git a/vs-extension.shared/Messages/SelectedNanoDeviceHasChangedMessage.cs b/vs-extension.shared/Messages/SelectedNanoDeviceHasChangedMessage.cs new file mode 100644 index 00000000..6439ca75 --- /dev/null +++ b/vs-extension.shared/Messages/SelectedNanoDeviceHasChangedMessage.cs @@ -0,0 +1,11 @@ +// +// Copyright (c) .NET Foundation and Contributors +// See LICENSE file in the project root for full license information. +// + +namespace nanoFramework.Tools.VisualStudio.Extension.Messages +{ + public sealed class SelectedNanoDeviceHasChangedMessage + { + } +} diff --git a/vs-extension.shared/Messages/VirtualDeviceOperationExecutingMessage.cs b/vs-extension.shared/Messages/VirtualDeviceOperationExecutingMessage.cs new file mode 100644 index 00000000..d8be7d1f --- /dev/null +++ b/vs-extension.shared/Messages/VirtualDeviceOperationExecutingMessage.cs @@ -0,0 +1,17 @@ +// +// Copyright (c) .NET Foundation and Contributors +// See LICENSE file in the project root for full license information. +// + +namespace nanoFramework.Tools.VisualStudio.Extension.Messages +{ + public sealed class VirtualDeviceOperationExecutingMessage + { + public bool InstallCompleted { get; } + + public VirtualDeviceOperationExecutingMessage(bool installCompleted) + { + InstallCompleted = installCompleted; + } + } +} diff --git a/vs-extension.shared/ToolWindow.DeviceExplorer/DeviceExplorerCommand.cs b/vs-extension.shared/ToolWindow.DeviceExplorer/DeviceExplorerCommand.cs index 3ca6e97c..95482a82 100644 --- a/vs-extension.shared/ToolWindow.DeviceExplorer/DeviceExplorerCommand.cs +++ b/vs-extension.shared/ToolWindow.DeviceExplorer/DeviceExplorerCommand.cs @@ -3,12 +3,13 @@ // See LICENSE file in the project root for full license information. // -using GalaSoft.MvvmLight.Ioc; -using GalaSoft.MvvmLight.Messaging; +using CommunityToolkit.Mvvm.DependencyInjection; +using CommunityToolkit.Mvvm.Messaging; using Microsoft.VisualStudio.Shell; using nanoFramework.Tools.Debugger; using nanoFramework.Tools.Debugger.Extensions; using nanoFramework.Tools.Debugger.WireProtocol; +using nanoFramework.Tools.VisualStudio.Extension.Messages; using nanoFramework.Tools.VisualStudio.Extension.ToolWindow.ViewModel; using System; using System.ComponentModel.Design; @@ -21,7 +22,7 @@ namespace nanoFramework.Tools.VisualStudio.Extension /// /// Command handler /// - internal sealed class DeviceExplorerCommand + internal sealed class DeviceExplorerCommand : IRecipient, IRecipient, IRecipient { /// /// Command ID. @@ -115,7 +116,7 @@ public static DeviceExplorerCommand Instance /// /// Gets the service provider from the owner package. /// - private Microsoft.VisualStudio.Shell.IAsyncServiceProvider ServiceProvider + private IAsyncServiceProvider ServiceProvider { get { @@ -145,12 +146,12 @@ public static async Task InitializeAsync(AsyncPackage package, ViewModelLocator await Instance.CreateToolbarHandlersAsync(); - SimpleIoc.Default.GetInstance().NanoDeviceCommService = Instance.NanoDeviceCommService; + Ioc.Default.GetRequiredService().NanoDeviceCommService = Instance.NanoDeviceCommService; // setup message listeners to be notified of events occurring in the View Model - Messenger.Default.Register(Instance, DeviceExplorerViewModel.MessagingTokens.SelectedNanoDeviceHasChanged, (message) => Instance.SelectedNanoDeviceHasChangedHandlerAsync().ConfigureAwait(false)); - Messenger.Default.Register(Instance, DeviceExplorerViewModel.MessagingTokens.NanoDevicesCollectionHasChanged, (message) => Instance.NanoDevicesCollectionChangedHandlerAsync().ConfigureAwait(false)); - Messenger.Default.Register(Instance, DeviceExplorerViewModel.MessagingTokens.NanoDevicesDeviceEnumerationCompleted, (message) => Instance.NanoDevicesDeviceEnumerationCompletedHandlerAsync().ConfigureAwait(false)); + WeakReferenceMessenger.Default.Register(Instance); + WeakReferenceMessenger.Default.Register(Instance); + WeakReferenceMessenger.Default.Register(Instance); } private async Task CreateToolbarHandlersAsync() @@ -1239,7 +1240,21 @@ private static CommandID GenerateCommandID(int commandID) { return new CommandID(new Guid(guidDeviceExplorerCmdSet), commandID); } - #endregion + + public void Receive(SelectedNanoDeviceHasChangedMessage message) + { + SelectedNanoDeviceHasChangedHandlerAsync().ConfigureAwait(false); + } + + public void Receive(NanoDevicesCollectionHasChangedMessage message) + { + NanoDevicesCollectionChangedHandlerAsync().ConfigureAwait(false); + } + + public void Receive(NanoDevicesDeviceEnumerationCompletedMessage message) + { + NanoDevicesDeviceEnumerationCompletedHandlerAsync().ConfigureAwait(false); + } } } diff --git a/vs-extension.shared/ToolWindow.DeviceExplorer/ViewModel/DeviceExplorerViewModel.cs b/vs-extension.shared/ToolWindow.DeviceExplorer/ViewModel/DeviceExplorerViewModel.cs index 0b78ed10..fa440370 100644 --- a/vs-extension.shared/ToolWindow.DeviceExplorer/ViewModel/DeviceExplorerViewModel.cs +++ b/vs-extension.shared/ToolWindow.DeviceExplorer/ViewModel/DeviceExplorerViewModel.cs @@ -3,21 +3,19 @@ // See LICENSE file in the project root for full license information. // -using GalaSoft.MvvmLight; -using GalaSoft.MvvmLight.Messaging; +using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Messaging; using Microsoft.VisualStudio.Shell; using nanoFramework.Tools.Debugger; using nanoFramework.Tools.Debugger.WireProtocol; +using nanoFramework.Tools.VisualStudio.Extension.Messages; using PropertyChanged; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; -using System.Net; -using System.Runtime.CompilerServices; using System.Text; -using System.Threading; using Task = System.Threading.Tasks.Task; namespace nanoFramework.Tools.VisualStudio.Extension.ToolWindow.ViewModel @@ -31,11 +29,8 @@ namespace nanoFramework.Tools.VisualStudio.Extension.ToolWindow.ViewModel /// /// You can also use Blend to data bind with the tool's support. /// - /// - /// See http://www.galasoft.ch/mvvm - /// /// - public class DeviceExplorerViewModel : ViewModelBase, INotifyPropertyChanging + public class DeviceExplorerViewModel : ObservableRecipient, INotifyPropertyChanging { public const int WRITE_TO_OUTPUT_TOKEN = 1; public const int SELECTED_NULL_TOKEN = 2; @@ -61,16 +56,6 @@ public class DeviceExplorerViewModel : ViewModelBase, INotifyPropertyChanging /// public Package Package { get; set; } - /// - /// Gets the service provider from the owner package. - /// - private IServiceProvider _serviceProvider - { - get - { - return Package; - } - } public INanoDeviceCommService NanoDeviceCommService { private get; set; } @@ -79,20 +64,7 @@ private IServiceProvider _serviceProvider /// public DeviceExplorerViewModel() { - if (IsInDesignMode) - { - // Code runs in Blend --> create design time data. - AvailableDevices = new ObservableCollection(); - - //AvailableDevices.Add(new NanoDevice() { Description = "Awesome nanodevice1" }); - //AvailableDevices.Add(new NanoDevice() { Description = "Awesome nanodevice2" }); - } - else - { - // Code runs "for real" - AvailableDevices = new ObservableCollection(); - } - + AvailableDevices = new ObservableCollection(); SelectedDevice = null; } @@ -122,18 +94,18 @@ private void SerialDebugClient_DeviceEnumerationCompleted(object sender, EventAr // save status _deviceEnumerationCompleted = true; - SelectedTransportType = Debugger.WireProtocol.TransportType.Serial; + SelectedTransportType = TransportType.Serial; UpdateAvailableDevices(); - MessengerInstance.Send(new NotificationMessage(""), MessagingTokens.NanoDevicesDeviceEnumerationCompleted); + WeakReferenceMessenger.Default.Send(new NanoDevicesDeviceEnumerationCompletedMessage()); } private void UpdateAvailableDevices() { switch (SelectedTransportType) { - case Debugger.WireProtocol.TransportType.Serial: + case TransportType.Serial: AvailableDevices = new ObservableCollection(NanoDeviceCommService.DebugClient.NanoFrameworkDevices); // add handler, but make sure we aren't adding another one so remove it first @@ -141,12 +113,12 @@ private void UpdateAvailableDevices() NanoDeviceCommService.DebugClient.NanoFrameworkDevices.CollectionChanged += NanoFrameworkDevices_CollectionChanged; break; - case Debugger.WireProtocol.TransportType.Usb: + case TransportType.Usb: //AvailableDevices = new ObservableCollection(UsbDebugService.NanoFrameworkDevices); //NanoDeviceCommService.NanoFrameworkDevicesCollectionChanged += NanoDeviceCommService_NanoFrameworkDevicesCollectionChanged; break; - case Debugger.WireProtocol.TransportType.TcpIp: + case TransportType.TcpIp: // TODO //await Task.Delay(2500); // AvailableDevices = new ObservableCollection(); @@ -170,7 +142,7 @@ private void UpdateAvailableDevices() // launch firmware update task foreach (var d in AvailableDevices) { - MessengerInstance.Send(new NotificationMessage(d.ConnectionId.ToString()), MessagingTokens.LaunchFirmwareUpdateForNanoDevice); + WeakReferenceMessenger.Default.Send(new NanoDeviceIsConnectedMessage(d.ConnectionId.ToString())); } } } @@ -184,7 +156,7 @@ public void NanoFrameworkDevices_CollectionChanged(object sender, System.Collect // AvailableDevices = new ObservableCollection(UsbDebugService.NanoFrameworkDevices); // break; - case Debugger.WireProtocol.TransportType.Serial: + case TransportType.Serial: AvailableDevices = new ObservableCollection(NanoDeviceCommService.DebugClient.NanoFrameworkDevices); break; @@ -193,14 +165,14 @@ public void NanoFrameworkDevices_CollectionChanged(object sender, System.Collect break; } - MessengerInstance.Send(new NotificationMessage(""), MessagingTokens.NanoDevicesCollectionHasChanged); + WeakReferenceMessenger.Default.Send(new SelectedNanoDeviceHasChangedMessage()); // launch update for arriving devices, if any if (e.NewItems != null) { foreach (var d in e.NewItems) { - MessengerInstance.Send(new NotificationMessage((d as NanoDeviceBase).ConnectionId.ToString()), MessagingTokens.LaunchFirmwareUpdateForNanoDevice); + WeakReferenceMessenger.Default.Send(new NanoDeviceIsConnectedMessage((d as NanoDeviceBase).ConnectionId.ToString())); } } @@ -209,7 +181,7 @@ public void NanoFrameworkDevices_CollectionChanged(object sender, System.Collect { foreach (var d in e.OldItems) { - MessengerInstance.Send(new NotificationMessage((d as NanoDeviceBase).ConnectionId.ToString()), MessagingTokens.NanoDeviceHasDeparted); + WeakReferenceMessenger.Default.Send(new NanoDeviceHasDepartedMessage((d as NanoDeviceBase).ConnectionId.ToString())); } } @@ -256,13 +228,13 @@ private void ForceNanoDeviceSelection(NanoDeviceBase nanoDevice) SelectedDevice = nanoDevice; // request forced selection of device in UI - _ = Task.Run(() => { MessengerInstance.Send(new NotificationMessage(""), MessagingTokens.ForceSelectionOfNanoDevice); }); + _ = Task.Run(() => { WeakReferenceMessenger.Default.Send(new ForceSelectionOfNanoDeviceMessage()); }); } public void ForceNanoDeviceSelection() { // request forced selection of device in UI - _ = Task.Run(() => { MessengerInstance.Send(new NotificationMessage(""), MessagingTokens.ForceSelectionOfNanoDevice); }); + _ = Task.Run(() => { WeakReferenceMessenger.Default.Send(new ForceSelectionOfNanoDeviceMessage()); }); } public void OnSelectedDeviceChanged() @@ -271,7 +243,7 @@ public void OnSelectedDeviceChanged() LastDeviceConnectedHash = 0; // signal event that the selected device has changed - MessengerInstance.Send(new NotificationMessage(""), MessagingTokens.SelectedNanoDeviceHasChanged); + WeakReferenceMessenger.Default.Send(new SelectedNanoDeviceHasChangedMessage()); } @@ -365,20 +337,5 @@ public bool CanChangeMacAddress } #endregion - - #region messaging tokens - - public static class MessagingTokens - { - public static readonly string SelectedNanoDeviceHasChanged = new Guid("{C3173983-A19A-49DD-A4BD-F25D360F7334}").ToString(); - public static readonly string NanoDevicesCollectionHasChanged = new Guid("{3E8906F9-F68A-45B7-A0CE-6D42BDB22455}").ToString(); - public static readonly string NanoDevicesDeviceEnumerationCompleted = new Guid("{347E2874-212C-4BC8-BB38-16E91FFCAB32}").ToString(); - public static readonly string ForceSelectionOfNanoDevice = new Guid("{8F012794-BC66-429D-9F9D-A9B0F546D6B5}").ToString(); - public static readonly string LaunchFirmwareUpdateForNanoDevice = new Guid("{93822E8C-4A94-4573-AC4F-DEB7FA703933}").ToString(); - public static readonly string NanoDeviceHasDeparted = new Guid("{38429FA1-3C16-44C2-937E-227C20AC0342}").ToString(); - public static readonly string VirtualDeviceOperationExecuting = new Guid("{B1B40C6E-5EE7-4A69-BB70-9A8663C928C1}").ToString(); - } - - #endregion } } diff --git a/vs-extension.shared/ToolWindow.DeviceExplorer/ViewModel/ViewModelLocator.cs b/vs-extension.shared/ToolWindow.DeviceExplorer/ViewModel/ViewModelLocator.cs index f82eef96..818b6f8d 100644 --- a/vs-extension.shared/ToolWindow.DeviceExplorer/ViewModel/ViewModelLocator.cs +++ b/vs-extension.shared/ToolWindow.DeviceExplorer/ViewModel/ViewModelLocator.cs @@ -3,7 +3,8 @@ // See LICENSE file in the project root for full license information. // -using GalaSoft.MvvmLight.Ioc; +using CommunityToolkit.Mvvm.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; namespace nanoFramework.Tools.VisualStudio.Extension.ToolWindow.ViewModel { @@ -18,31 +19,18 @@ public class ViewModelLocator /// public ViewModelLocator() { - ////if (ViewModelBase.IsInDesignModeStatic) - ////{ - //// // Create design time view services and models - //// SimpleIoc.Default.Register(); - ////} - ////else - ////{ - //// // Create run time view services and models - //// SimpleIoc.Default.Register(); - ////} + var serviceCollection = new ServiceCollection(); + serviceCollection.AddSingleton(); - SimpleIoc.Default.Register(); + Ioc.Default.ConfigureServices(serviceCollection.BuildServiceProvider()); } public DeviceExplorerViewModel DeviceExplorer { get { - return SimpleIoc.Default.GetInstance(); + return Ioc.Default.GetRequiredService(); } } - - public static void Cleanup() - { - // TODO Clear the ViewModels - } } } diff --git a/vs-extension.shared/VirtualDeviceService/VirtualDeviceService.cs b/vs-extension.shared/VirtualDeviceService/VirtualDeviceService.cs index 7f51a324..60acea69 100644 --- a/vs-extension.shared/VirtualDeviceService/VirtualDeviceService.cs +++ b/vs-extension.shared/VirtualDeviceService/VirtualDeviceService.cs @@ -5,24 +5,14 @@ using CliWrap; using CliWrap.Buffered; -using GalaSoft.MvvmLight.Messaging; -using Humanizer; +using CommunityToolkit.Mvvm.Messaging; using Microsoft; -using Microsoft.VisualStudio.RpcContracts.Commands; using Microsoft.VisualStudio.Shell; -using Microsoft.VisualStudio.Threading; -using Mono.Cecil.Cil; -using nanoFramework.Tools.VisualStudio.Extension.ToolWindow.ViewModel; +using nanoFramework.Tools.VisualStudio.Extension.Messages; using System; -using System.Collections.Generic; using System.Diagnostics; -using System.IO.Packaging; -using System.Management.Instrumentation; -using System.Security.Policy; -using System.Text; using System.Text.RegularExpressions; using System.Threading; -using System.Threading.Tasks; namespace nanoFramework.Tools.VisualStudio.Extension { @@ -33,7 +23,7 @@ internal class VirtualDeviceService : IVirtualDeviceService // taken from E9008 @ nanoclr private const int NanoClrErrorUnknowErrorStartingInstance = 9008; - private readonly Microsoft.VisualStudio.Shell.IAsyncServiceProvider _serviceProvider; + private readonly IAsyncServiceProvider _serviceProvider; private Process _nanoClrProcess = null; private INanoDeviceCommService _nanoDeviceCommService; @@ -105,7 +95,7 @@ public void InstallNanoClrTool() .WithValidation(CommandResultValidation.None); // signal install/update ongoing - Messenger.Default.Send(new NotificationMessage(true.ToString()), DeviceExplorerViewModel.MessagingTokens.VirtualDeviceOperationExecuting); + WeakReferenceMessenger.Default.Send(new VirtualDeviceOperationExecutingMessage(true)); // setup cancellation token with a timeout of 1 minute using (var cts = new CancellationTokenSource()) @@ -140,7 +130,7 @@ public void InstallNanoClrTool() }); // signal install/update completed - Messenger.Default.Send(new NotificationMessage(false.ToString()), DeviceExplorerViewModel.MessagingTokens.VirtualDeviceOperationExecuting); + WeakReferenceMessenger.Default.Send(new VirtualDeviceOperationExecutingMessage(false)); } } @@ -280,7 +270,7 @@ public void StopVirtualDevice(bool shutdownProcessing = false) // rescan devices _nanoDeviceCommService.DebugClient.ReScanDevices(); } - catch(Exception ex) + catch(Exception) { // catch all, don't bother } @@ -304,7 +294,7 @@ public async System.Threading.Tasks.Task StartVirtualDeviceAsync(bool resc await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(CancellationToken.None); // signal start operation - Messenger.Default.Send(new NotificationMessage(true.ToString()), DeviceExplorerViewModel.MessagingTokens.VirtualDeviceOperationExecuting); + WeakReferenceMessenger.Default.Send(new VirtualDeviceOperationExecutingMessage(true)); MessageCentre.InternalErrorWriteLine($"VirtualDevice: Attempting to start virtual device"); @@ -474,7 +464,7 @@ public async System.Threading.Tasks.Task StartVirtualDeviceAsync(bool resc finally { // signal start operation completed - Messenger.Default.Send(new NotificationMessage(false.ToString()), DeviceExplorerViewModel.MessagingTokens.VirtualDeviceOperationExecuting); + WeakReferenceMessenger.Default.Send(new VirtualDeviceOperationExecutingMessage(false)); // rescan devices, if start was successful and this wasn't requested to skip if (_nanoClrProcess != null diff --git a/vs-extension.shared/vs-extension.shared.projitems b/vs-extension.shared/vs-extension.shared.projitems index 12c8e788..0564a9b0 100644 --- a/vs-extension.shared/vs-extension.shared.projitems +++ b/vs-extension.shared/vs-extension.shared.projitems @@ -64,6 +64,13 @@ + + + + + + +