diff --git a/.github/workflows/dynamoNet6.0_build.yml b/.github/workflows/dynamoNet6.0_build.yml
new file mode 100644
index 00000000000..bc5375361c9
--- /dev/null
+++ b/.github/workflows/dynamoNet6.0_build.yml
@@ -0,0 +1,41 @@
+# Build Dynamo using latest VS and DotNET
+name: Dynamo-net6.0-Build
+on: [push,pull_request]
+jobs:
+ build:
+ runs-on: windows-latest
+ steps:
+ - name: Checkout Dynamo Repo
+ uses: actions/checkout@v2
+ with:
+ path: Dynamo
+ repository: DynamoDS/Dynamo
+ - name: Setup dotnet
+ uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: '6.0.x'
+ - name: Install dependencies for windows runtime
+ run: dotnet restore $Env:GITHUB_WORKSPACE\Dynamo\src\DynamoCore.net6.sln --runtime=win10-x64
+ - name: Build Dynamo with MSBuild for Windows
+ run: |
+ echo "***Continue with the build, Good luck developer!***"
+ cd "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin\"
+ .\MSBuild.exe $Env:GITHUB_WORKSPACE\Dynamo\src\DynamoCore.net6.sln /p:Configuration=Release /p:Platform=NET60_Windows
+ # look for Dynamo
+ - name: Navigate to Dynamo Windows Folder
+ run: |
+ cd "$Env:GITHUB_WORKSPACE\Dynamo\bin\NET60_Windows\Release"
+ echo "***Locating DynamoCLI for Windows!***"
+ test ".\DynamoCLI.exe" && echo "DynamoCLI exists!"
+ - name: Install dependencies for linux runtime
+ run: dotnet restore $Env:GITHUB_WORKSPACE\Dynamo\src\DynamoCore.net6.sln --runtime=linux-x64
+ - name: Build Dynamo with MSBuild for Linux
+ run: |
+ echo "***Continue with the build, Good luck developer!***"
+ cd "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin\"
+ .\MSBuild.exe $Env:GITHUB_WORKSPACE\Dynamo\src\DynamoCore.net6.sln /p:Configuration=Release /p:Platform=NET60_Linux
+ - name: Navigate to Dynamo Linux Folder
+ run: |
+ cd "$Env:GITHUB_WORKSPACE\Dynamo\bin\NET60_Linux\Release"
+ echo "***Locating DynamoCLI for Linux!***"
+ test ".\DynamoCLI.exe" && echo "DynamoCLI exists!"
\ No newline at end of file
diff --git a/src/Config/CS_SDK.props b/src/Config/CS_SDK.props
index 43c770c4497..30a812431c9 100644
--- a/src/Config/CS_SDK.props
+++ b/src/Config/CS_SDK.props
@@ -1,14 +1,15 @@
+ AnyCPU;x64;NET60_Windows;NET60_Linux;
Debug
AnyCPU
+ x64
16.0
net48
512
false
false
- $(SolutionDir)..\bin\AnyCPU\$(Configuration)
- int\
+ $(SolutionDir)..\bin\$(Platform)\$(Configuration)
$(SolutionDir)..\extern\NUnit
DirectX11
prompt
@@ -19,8 +20,6 @@
true
false
MSB3539
-
- v4.8
None
true
@@ -34,18 +33,37 @@
true
TRACE
+
+ net6.0
+
+ true
+ false
+
+
+ win10-x64
+
+
+ linux-x64
+
+
+ int\$(TargetFramework)\
+ obj\$(TargetFramework)\
+
+
+
+
Properties\AssemblySharedInfo.cs
-
+
false
@@ -91,4 +109,19 @@
+
+
+
+
+ v4.8
+
+
+
+
+
+ $(FrameworkAssembliesPath)System.Drawing.dll
+
+ $(PkgSystem_Drawing_Common)\lib\net6.0\System.Drawing.Common.dll
+
+
diff --git a/src/Dynamo.All.sln b/src/Dynamo.All.sln
index e04b620cc1b..a78a9d20570 100644
--- a/src/Dynamo.All.sln
+++ b/src/Dynamo.All.sln
@@ -1013,4 +1013,4 @@ Global
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {89CB19C6-BF0A-4E6A-BFDA-79D143EAB59D}
EndGlobalSection
-EndGlobal
+EndGlobal
\ No newline at end of file
diff --git a/src/DynamoApplications/DynamoApplications.csproj b/src/DynamoApplications/DynamoApplications.csproj
index 9f8a5fceb87..12383a79d2b 100644
--- a/src/DynamoApplications/DynamoApplications.csproj
+++ b/src/DynamoApplications/DynamoApplications.csproj
@@ -1,4 +1,4 @@
-
+
@@ -9,8 +9,11 @@
DynamoApplications
DynamoApplications
-
-
+
+
+
+
+
diff --git a/src/DynamoApplications/StartupUtils.cs b/src/DynamoApplications/StartupUtils.cs
index 2e33dd86daa..04f99bbc003 100644
--- a/src/DynamoApplications/StartupUtils.cs
+++ b/src/DynamoApplications/StartupUtils.cs
@@ -13,11 +13,59 @@
using Dynamo.Updates;
using DynamoApplications.Properties;
using DynamoShapeManager;
+using DynamoUtilities;
using Microsoft.Win32;
+#if NET6_0_OR_GREATER
+using CommandLine;
+#else
using NDesk.Options;
+#endif
namespace Dynamo.Applications
{
+#if NET6_0_OR_GREATER
+ internal class CMDLineOptions
+ {
+ [Option('l', "Locale", Required = false, HelpText = "Running Dynamo under a different locale setting.")]
+ public string Locale { get; set; } = String.Empty;
+ [Option('c', "CommandFilePath", Required = false, HelpText = "Instruct Dynamo to open a commandfile and run the commands it contains at this path," +
+ "this option is only supported when run from DynamoSandbox")]
+ public string CommandFilePath { get; set; } = String.Empty;
+ [Option('o', "OpenFilePath", Required = false, HelpText = "Instruct Dynamo to open headless and run a dyn file at this path.")]
+ public string OpenFilePath { get; set; } = String.Empty;
+ [Option('v', "Verbose", Required = false, HelpText = "Instruct Dynamo to output all evalautions it performs to an xml file at this path.")]
+ public string Verbose { get; set; } = String.Empty;
+ [Option('x', "ConvertFile", Required = false, HelpText = "When used in combination with the 'O' flag, opens a .dyn file from the specified path and converts it to .json." +
+ "File will have the .json extension and be located in the same directory as the original file.")]
+ public bool ConvertFile { get; set; }
+ [Option('g', "Geometry", Required = false, HelpText = "Instruct Dynamo to output geometry from all evaluations to a json file at this path.")]
+ public string GeometryFilePath { get; set; } = String.Empty;
+ [Option('i', "Import", Required = false, HelpText = "Instruct Dynamo to import an assembly as a node library.This argument should be a filepath to a single.dll" +
+ " - if you wish to import multiple dlls - list the dlls separated by a space: -i 'assembly1.dll' 'assembly2.dll'")]
+ public IEnumerable ImportedPaths { get; set; } = new List();
+ [Option('g', "GeometryPath", Required = false, HelpText = "relative or absolute path to a directory containing ASM. When supplied, instead of searching the hard disk for ASM, it will be loaded directly from this path.")]
+ public string ASMPath { get; set; } = String.Empty;
+ [Option('k', "KeepAlive", Required = false, HelpText = "Keepalive mode, leave the Dynamo process running until a loaded extension shuts it down.")]
+ public bool KeepAlive { get; set; }
+ [Option('n', "NoConsole", Required = false, HelpText = "Don't rely on the console window to interact with CLI in Keepalive mode.")]
+ public bool NoConsole { get; set; }
+ [Option('u', "UserData", Required = false, HelpText = "Specify user data folder to be used by PathResolver with CLI.")]
+ public string UserDataFolder { get; set; } = String.Empty;
+ [Option("CommonData", Required = false, HelpText = "Specify common data folder to be used by PathResolver with CLI.")]
+ public string CommonDataFolder { get; set; } = String.Empty;
+ [Option("HostName", Required = false, HelpText = "Identify Dynamo variation associated with host.")]
+ public string HostName { get; set; } = String.Empty;
+ [Option("DisableAnalytics", Required = false, HelpText = "Disables analytics in Dynamo for the process liftime.")]
+ public bool DisableAnalytics { get; set; }
+ [Option("ParentId", Required = false, HelpText = "Identify Dynamo host analytics parent id.")]
+ public string ParentId { get; set; } = String.Empty;
+ [Option("SessionId", Required = false, HelpText = "Identify Dynamo host analytics session id.")]
+ public string SessionId { get; set; } = String.Empty;
+ [Option("CERLocation", Required = false, HelpText = "Specify the crash error report tool location on disk.")]
+ public string CERLocation { get; set; } = String.Empty;
+ }
+#endif
+
public class StartupUtils
{
//TODO internal?
@@ -25,7 +73,10 @@ public class StartupUtils
/// Raised when loading of the ASM binaries fails. A failure message is passed as a parameter.
///
public static event Action ASMPreloadFailure;
-
+
+#if NET6_0_OR_GREATER
+ [System.Runtime.Versioning.SupportedOSPlatform("windows")]
+#endif
internal class SandboxLookUp : DynamoLookUp
{
public override IEnumerable GetDynamoInstallLocations()
@@ -69,6 +120,34 @@ public struct CommandLineArguments
{
public static CommandLineArguments Parse(string[] args)
{
+#if NET6_0_OR_GREATER
+
+ return Parser.Default.ParseArguments(args).MapResult((cmdArgs) => {
+ if (!string.IsNullOrEmpty(cmdArgs.Verbose) && string.IsNullOrEmpty(cmdArgs.OpenFilePath))
+ {
+ Console.WriteLine("you must supply a file to open if you want to save an evaluation output ");
+ }
+
+ return new CommandLineArguments()
+ {
+ Locale = cmdArgs.Locale,
+ CommandFilePath = cmdArgs.CommandFilePath,
+ OpenFilePath = cmdArgs.OpenFilePath,
+ Verbose = cmdArgs.Verbose,
+ ConvertFile = cmdArgs.ConvertFile,
+ GeometryFilePath = cmdArgs.GeometryFilePath,
+ ImportedPaths = cmdArgs.ImportedPaths,
+ ASMPath = cmdArgs.ASMPath,
+ KeepAlive = cmdArgs.KeepAlive,
+ NoConsole = cmdArgs.NoConsole,
+ UserDataFolder = cmdArgs.UserDataFolder,
+ CommonDataFolder = cmdArgs.CommonDataFolder,
+ DisableAnalytics = cmdArgs.DisableAnalytics,
+ AnalyticsInfo = new HostAnalyticsInfo() { HostName = cmdArgs.HostName, ParentId = cmdArgs.ParentId, SessionId = cmdArgs.SessionId },
+ CERLocation = cmdArgs.CERLocation
+ };
+ }, errs => new CommandLineArguments());
+#else
// Running Dynamo sandbox with a command file:
// DynamoSandbox.exe /c "C:\file path\file.xml"
//
@@ -172,14 +251,17 @@ public static CommandLineArguments Parse(string[] args)
AnalyticsInfo = new HostAnalyticsInfo() { HostName = hostname, ParentId = parentId, SessionId = sessionId },
CERLocation = cerLocation
};
+#endif
}
+#if NET6_0_OR_GREATER
+#else
private static void ShowHelp(OptionSet opSet)
{
Console.WriteLine("options:");
opSet.WriteOptionDescriptions(Console.Out);
}
-
+#endif
public string Locale { get; set; }
public string CommandFilePath { get; set; }
public string OpenFilePath { get; set; }
@@ -196,7 +278,6 @@ private static void ShowHelp(OptionSet opSet)
public string HostName { get; set; }
public bool DisableAnalytics { get; set; }
public HostAnalyticsInfo AnalyticsInfo { get; set; }
-
public string CERLocation { get; set; }
}
@@ -205,6 +286,9 @@ private static void ShowHelp(OptionSet opSet)
///
/// libG ProtoInterface path
/// libG folder path
+#if NET6_0_OR_GREATER
+ [System.Runtime.Versioning.SupportedOSPlatform("windows")]
+#endif
public static void PreloadShapeManager(ref string geometryFactoryPath, ref string preloaderLocation)
{
var exePath = Assembly.GetExecutingAssembly().Location;
@@ -227,6 +311,9 @@ public static void PreloadShapeManager(ref string geometryFactoryPath, ref strin
///for now, building an updatemanager instance requires finding Dynamo install location
///which if we are running on mac os or *nix will use different logic then SandboxLookup
///
+#if NET6_0_OR_GREATER
+ [System.Runtime.Versioning.SupportedOSPlatform("windows")]
+#endif
private static IUpdateManager InitializeUpdateManager()
{
var cfg = UpdateManagerConfiguration.GetSettings(new SandboxLookUp());
@@ -312,7 +399,7 @@ public static DynamoModel MakeModel(bool CLImode)
private static bool PreloadASM(string asmPath, out string geometryFactoryPath, out string preloaderLocation )
{
- if (string.IsNullOrEmpty(asmPath))
+ if (string.IsNullOrEmpty(asmPath) && OSHelper.IsWindows())
{
geometryFactoryPath = string.Empty;
preloaderLocation = string.Empty;
@@ -378,7 +465,7 @@ private static DynamoModel StartDynamoWithDefaultConfig(bool CLImode,
CLIMode = CLImode
};
config.AuthProvider = CLImode ? null : new Core.IDSDKManager();
- config.UpdateManager = CLImode ? null : InitializeUpdateManager();
+ config.UpdateManager = CLImode ? null : OSHelper.IsWindows() ? InitializeUpdateManager() : null;
config.StartInTestMode = CLImode;
config.PathResolver = CLImode ? new CLIPathResolver(preloaderLocation, userDataFolder, commonDataFolder) as IPathResolver : new SandboxPathResolver(preloaderLocation) as IPathResolver;
diff --git a/src/DynamoCLI/DynamoCLI.csproj b/src/DynamoCLI/DynamoCLI.csproj
index d9fd20e4a27..9edcaeab983 100644
--- a/src/DynamoCLI/DynamoCLI.csproj
+++ b/src/DynamoCLI/DynamoCLI.csproj
@@ -1,4 +1,4 @@
-
+
@@ -8,11 +8,12 @@
Properties
DynamoCLI
DynamoCLI
+ false
true
-
+
@@ -40,6 +41,7 @@
{c0d6dee5-5532-4345-9c66-4c00d7fdb8be}
DesignScriptBuiltin
+ False
{ef879a10-041d-4c68-83e7-3192685f1bae}
diff --git a/src/DynamoCLI/Program.cs b/src/DynamoCLI/Program.cs
index b9b9338cfd8..bc916f338d3 100644
--- a/src/DynamoCLI/Program.cs
+++ b/src/DynamoCLI/Program.cs
@@ -1,5 +1,7 @@
using System;
+using System.IO;
using System.Linq;
+using System.Reflection;
using System.Threading;
using Dynamo.Applications;
using Dynamo.Models;
@@ -30,7 +32,6 @@ static internal void Main(string[] args)
var thread = new Thread(() => RunKeepAlive(cmdLineArgs));
thread.Name = "DynamoModelKeepAlive";
- thread.SetApartmentState(ApartmentState.STA);
thread.Start();
if (!useConsole)
@@ -85,8 +86,6 @@ private static void RunKeepAlive(StartupUtils.CommandLineArguments cmdLineArgs)
Console.WriteLine("DynamoCLI is running in keepalive mode");
Console.WriteLine("Press Enter to shutdown...");
}
-
- System.Windows.Threading.Dispatcher.Run();
}
catch
{
diff --git a/src/DynamoCore.net6.sln b/src/DynamoCore.net6.sln
new file mode 100644
index 00000000000..3ddc77aa6cd
--- /dev/null
+++ b/src/DynamoCore.net6.sln
@@ -0,0 +1,280 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32901.215
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DynamoCore", "DynamoCore\DynamoCore.csproj", "{7858FA8C-475F-4B8E-B468-1F8200778CF8}"
+ ProjectSection(ProjectDependencies) = postProject
+ {133FC760-5699-46D9-BEA6-E816B5F01016} = {133FC760-5699-46D9-BEA6-E816B5F01016}
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Engine", "Engine", "{A6533823-A64A-441C-B7A2-7B2772F87002}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProtoAssociative", "Engine\ProtoAssociative\ProtoAssociative.csproj", "{7318D5E5-9D15-4ABE-8A51-92F58D4F0B85}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProtoCore", "Engine\ProtoCore\ProtoCore.csproj", "{7A9E0314-966F-4584-BAA3-7339CBB849D1}"
+ ProjectSection(ProjectDependencies) = postProject
+ {133FC760-5699-46D9-BEA6-E816B5F01016} = {133FC760-5699-46D9-BEA6-E816B5F01016}
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProtoImperative", "Engine\ProtoImperative\ProtoImperative.csproj", "{0D3D43DC-BD7E-46F0-93F7-1C6A6CC79948}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProtoScript", "Engine\ProtoScript\ProtoScript.csproj", "{A4794476-7D0E-41C0-AD83-4AB929C0A46C}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{FA7BE306-A3B0-45FA-9D87-0C69E6932C13}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreNodes", "Libraries\CoreNodes\CoreNodes.csproj", "{87550B2B-6CB8-461E-8965-DFAFE3AAFB5C}"
+ ProjectSection(ProjectDependencies) = postProject
+ {133FC760-5699-46D9-BEA6-E816B5F01016} = {133FC760-5699-46D9-BEA6-E816B5F01016}
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreNodeModels", "Libraries\CoreNodeModels\CoreNodeModels.csproj", "{D8262D40-4880-41E4-91E4-AF8F480C8637}"
+ ProjectSection(ProjectDependencies) = postProject
+ {C5ADC05B-34E8-47BF-8E78-9C7BF96418C2} = {C5ADC05B-34E8-47BF-8E78-9C7BF96418C2}
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DynamoServices", "NodeServices\DynamoServices.csproj", "{EF879A10-041D-4C68-83E7-3192685F1BAE}"
+ ProjectSection(ProjectDependencies) = postProject
+ {133FC760-5699-46D9-BEA6-E816B5F01016} = {133FC760-5699-46D9-BEA6-E816B5F01016}
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DynamoUtilities", "DynamoUtilities\DynamoUtilities.csproj", "{B5F435CB-0D8A-40B1-A4F7-5ECB3CE792A9}"
+ ProjectSection(ProjectDependencies) = postProject
+ {133FC760-5699-46D9-BEA6-E816B5F01016} = {133FC760-5699-46D9-BEA6-E816B5F01016}
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Units", "Libraries\DynamoUnits\Units.csproj", "{6E0A079E-85F1-45A1-AD5B-9855E4344809}"
+ ProjectSection(ProjectDependencies) = postProject
+ {133FC760-5699-46D9-BEA6-E816B5F01016} = {133FC760-5699-46D9-BEA6-E816B5F01016}
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GraphLayout", "Engine\GraphLayout\GraphLayout.csproj", "{C2595B04-856D-40AE-8B99-4804C7A70708}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VMDataBridge", "Libraries\VMDataBridge\VMDataBridge.csproj", "{CCB6E56B-2DA1-4EBA-A1F9-E8510E129D12}"
+ ProjectSection(ProjectDependencies) = postProject
+ {133FC760-5699-46D9-BEA6-E816B5F01016} = {133FC760-5699-46D9-BEA6-E816B5F01016}
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{D114C59C-CF66-4CC2-980F-9301FB4EA4E1}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DynamoConversions", "Libraries\DynamoConversions\DynamoConversions.csproj", "{C5ADC05B-34E8-47BF-8E78-9C7BF96418C2}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DynamoShapeManager", "Tools\DynamoShapeManager\DynamoShapeManager.csproj", "{263FA9C1-F81E-4A8E-95E0-8CDAE20F177B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DynamoInstallDetective", "Tools\DynamoInstallDetective\DynamoInstallDetective.csproj", "{98692887-B389-4F73-A71A-9FC516738DAB}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DynamoCLI", "DynamoCLI\DynamoCLI.csproj", "{5F9AE581-6781-4A4C-A262-1B06CD27208B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DynamoApplications", "DynamoApplications\DynamoApplications.csproj", "{AA782772-FE61-4226-BAA4-EB529FA1646B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DynamoPackages", "DynamoPackages\DynamoPackages.csproj", "{47533B7C-0E1A-44A4-8511-B438645F052A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DesignScriptBuiltin", "Libraries\DesignScriptBuiltin\DesignScriptBuiltin.csproj", "{C0D6DEE5-5532-4345-9C66-4C00D7FDB8BE}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Extensions", "Extensions", "{88D45B00-E564-41DB-B57C-9509646CAA49}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AssemblyInfoGenerator", "AssemblySharedInfoGenerator\AssemblyInfoGenerator.csproj", "{133FC760-5699-46D9-BEA6-E816B5F01016}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DynamoFeatureFlags", "Tools\DynamoFeatureFlags\DynamoFeatureFlags.csproj", "{94CF053D-BB66-4FC7-883B-48F072701BA9}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|NET60_Linux = Debug|NET60_Linux
+ Debug|NET60_Windows = Debug|NET60_Windows
+ Release|NET60_Linux = Release|NET60_Linux
+ Release|NET60_Windows = Release|NET60_Windows
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {7858FA8C-475F-4B8E-B468-1F8200778CF8}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {7858FA8C-475F-4B8E-B468-1F8200778CF8}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {7858FA8C-475F-4B8E-B468-1F8200778CF8}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {7858FA8C-475F-4B8E-B468-1F8200778CF8}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {7858FA8C-475F-4B8E-B468-1F8200778CF8}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {7858FA8C-475F-4B8E-B468-1F8200778CF8}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {7858FA8C-475F-4B8E-B468-1F8200778CF8}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {7858FA8C-475F-4B8E-B468-1F8200778CF8}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {7318D5E5-9D15-4ABE-8A51-92F58D4F0B85}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {7318D5E5-9D15-4ABE-8A51-92F58D4F0B85}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {7318D5E5-9D15-4ABE-8A51-92F58D4F0B85}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {7318D5E5-9D15-4ABE-8A51-92F58D4F0B85}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {7318D5E5-9D15-4ABE-8A51-92F58D4F0B85}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {7318D5E5-9D15-4ABE-8A51-92F58D4F0B85}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {7318D5E5-9D15-4ABE-8A51-92F58D4F0B85}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {7318D5E5-9D15-4ABE-8A51-92F58D4F0B85}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {7A9E0314-966F-4584-BAA3-7339CBB849D1}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {7A9E0314-966F-4584-BAA3-7339CBB849D1}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {7A9E0314-966F-4584-BAA3-7339CBB849D1}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {7A9E0314-966F-4584-BAA3-7339CBB849D1}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {7A9E0314-966F-4584-BAA3-7339CBB849D1}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {7A9E0314-966F-4584-BAA3-7339CBB849D1}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {7A9E0314-966F-4584-BAA3-7339CBB849D1}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {7A9E0314-966F-4584-BAA3-7339CBB849D1}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {0D3D43DC-BD7E-46F0-93F7-1C6A6CC79948}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {0D3D43DC-BD7E-46F0-93F7-1C6A6CC79948}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {0D3D43DC-BD7E-46F0-93F7-1C6A6CC79948}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {0D3D43DC-BD7E-46F0-93F7-1C6A6CC79948}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {0D3D43DC-BD7E-46F0-93F7-1C6A6CC79948}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {0D3D43DC-BD7E-46F0-93F7-1C6A6CC79948}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {0D3D43DC-BD7E-46F0-93F7-1C6A6CC79948}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {0D3D43DC-BD7E-46F0-93F7-1C6A6CC79948}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {A4794476-7D0E-41C0-AD83-4AB929C0A46C}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {A4794476-7D0E-41C0-AD83-4AB929C0A46C}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {A4794476-7D0E-41C0-AD83-4AB929C0A46C}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {A4794476-7D0E-41C0-AD83-4AB929C0A46C}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {A4794476-7D0E-41C0-AD83-4AB929C0A46C}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {A4794476-7D0E-41C0-AD83-4AB929C0A46C}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {A4794476-7D0E-41C0-AD83-4AB929C0A46C}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {A4794476-7D0E-41C0-AD83-4AB929C0A46C}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {87550B2B-6CB8-461E-8965-DFAFE3AAFB5C}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {87550B2B-6CB8-461E-8965-DFAFE3AAFB5C}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {87550B2B-6CB8-461E-8965-DFAFE3AAFB5C}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {87550B2B-6CB8-461E-8965-DFAFE3AAFB5C}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {87550B2B-6CB8-461E-8965-DFAFE3AAFB5C}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {87550B2B-6CB8-461E-8965-DFAFE3AAFB5C}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {87550B2B-6CB8-461E-8965-DFAFE3AAFB5C}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {87550B2B-6CB8-461E-8965-DFAFE3AAFB5C}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {D8262D40-4880-41E4-91E4-AF8F480C8637}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {D8262D40-4880-41E4-91E4-AF8F480C8637}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {D8262D40-4880-41E4-91E4-AF8F480C8637}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {D8262D40-4880-41E4-91E4-AF8F480C8637}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {D8262D40-4880-41E4-91E4-AF8F480C8637}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {D8262D40-4880-41E4-91E4-AF8F480C8637}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {D8262D40-4880-41E4-91E4-AF8F480C8637}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {D8262D40-4880-41E4-91E4-AF8F480C8637}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {EF879A10-041D-4C68-83E7-3192685F1BAE}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {EF879A10-041D-4C68-83E7-3192685F1BAE}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {EF879A10-041D-4C68-83E7-3192685F1BAE}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {EF879A10-041D-4C68-83E7-3192685F1BAE}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {EF879A10-041D-4C68-83E7-3192685F1BAE}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {EF879A10-041D-4C68-83E7-3192685F1BAE}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {EF879A10-041D-4C68-83E7-3192685F1BAE}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {EF879A10-041D-4C68-83E7-3192685F1BAE}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {B5F435CB-0D8A-40B1-A4F7-5ECB3CE792A9}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {B5F435CB-0D8A-40B1-A4F7-5ECB3CE792A9}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {B5F435CB-0D8A-40B1-A4F7-5ECB3CE792A9}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {B5F435CB-0D8A-40B1-A4F7-5ECB3CE792A9}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {B5F435CB-0D8A-40B1-A4F7-5ECB3CE792A9}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {B5F435CB-0D8A-40B1-A4F7-5ECB3CE792A9}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {B5F435CB-0D8A-40B1-A4F7-5ECB3CE792A9}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {B5F435CB-0D8A-40B1-A4F7-5ECB3CE792A9}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {6E0A079E-85F1-45A1-AD5B-9855E4344809}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {6E0A079E-85F1-45A1-AD5B-9855E4344809}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {6E0A079E-85F1-45A1-AD5B-9855E4344809}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {6E0A079E-85F1-45A1-AD5B-9855E4344809}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {6E0A079E-85F1-45A1-AD5B-9855E4344809}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {6E0A079E-85F1-45A1-AD5B-9855E4344809}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {6E0A079E-85F1-45A1-AD5B-9855E4344809}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {6E0A079E-85F1-45A1-AD5B-9855E4344809}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {C2595B04-856D-40AE-8B99-4804C7A70708}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {C2595B04-856D-40AE-8B99-4804C7A70708}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {C2595B04-856D-40AE-8B99-4804C7A70708}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {C2595B04-856D-40AE-8B99-4804C7A70708}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {C2595B04-856D-40AE-8B99-4804C7A70708}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {C2595B04-856D-40AE-8B99-4804C7A70708}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {C2595B04-856D-40AE-8B99-4804C7A70708}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {C2595B04-856D-40AE-8B99-4804C7A70708}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {CCB6E56B-2DA1-4EBA-A1F9-E8510E129D12}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {CCB6E56B-2DA1-4EBA-A1F9-E8510E129D12}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {CCB6E56B-2DA1-4EBA-A1F9-E8510E129D12}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {CCB6E56B-2DA1-4EBA-A1F9-E8510E129D12}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {CCB6E56B-2DA1-4EBA-A1F9-E8510E129D12}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {CCB6E56B-2DA1-4EBA-A1F9-E8510E129D12}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {CCB6E56B-2DA1-4EBA-A1F9-E8510E129D12}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {CCB6E56B-2DA1-4EBA-A1F9-E8510E129D12}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {C5ADC05B-34E8-47BF-8E78-9C7BF96418C2}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {C5ADC05B-34E8-47BF-8E78-9C7BF96418C2}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {C5ADC05B-34E8-47BF-8E78-9C7BF96418C2}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {C5ADC05B-34E8-47BF-8E78-9C7BF96418C2}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {C5ADC05B-34E8-47BF-8E78-9C7BF96418C2}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {C5ADC05B-34E8-47BF-8E78-9C7BF96418C2}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {C5ADC05B-34E8-47BF-8E78-9C7BF96418C2}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {C5ADC05B-34E8-47BF-8E78-9C7BF96418C2}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {263FA9C1-F81E-4A8E-95E0-8CDAE20F177B}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {263FA9C1-F81E-4A8E-95E0-8CDAE20F177B}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {263FA9C1-F81E-4A8E-95E0-8CDAE20F177B}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {263FA9C1-F81E-4A8E-95E0-8CDAE20F177B}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {263FA9C1-F81E-4A8E-95E0-8CDAE20F177B}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {263FA9C1-F81E-4A8E-95E0-8CDAE20F177B}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {263FA9C1-F81E-4A8E-95E0-8CDAE20F177B}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {263FA9C1-F81E-4A8E-95E0-8CDAE20F177B}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {98692887-B389-4F73-A71A-9FC516738DAB}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {98692887-B389-4F73-A71A-9FC516738DAB}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {98692887-B389-4F73-A71A-9FC516738DAB}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {98692887-B389-4F73-A71A-9FC516738DAB}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {98692887-B389-4F73-A71A-9FC516738DAB}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {98692887-B389-4F73-A71A-9FC516738DAB}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {98692887-B389-4F73-A71A-9FC516738DAB}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {98692887-B389-4F73-A71A-9FC516738DAB}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {5F9AE581-6781-4A4C-A262-1B06CD27208B}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {5F9AE581-6781-4A4C-A262-1B06CD27208B}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {5F9AE581-6781-4A4C-A262-1B06CD27208B}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {5F9AE581-6781-4A4C-A262-1B06CD27208B}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {5F9AE581-6781-4A4C-A262-1B06CD27208B}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {5F9AE581-6781-4A4C-A262-1B06CD27208B}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {5F9AE581-6781-4A4C-A262-1B06CD27208B}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {5F9AE581-6781-4A4C-A262-1B06CD27208B}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {AA782772-FE61-4226-BAA4-EB529FA1646B}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {AA782772-FE61-4226-BAA4-EB529FA1646B}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {AA782772-FE61-4226-BAA4-EB529FA1646B}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {AA782772-FE61-4226-BAA4-EB529FA1646B}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {AA782772-FE61-4226-BAA4-EB529FA1646B}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {AA782772-FE61-4226-BAA4-EB529FA1646B}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {AA782772-FE61-4226-BAA4-EB529FA1646B}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {AA782772-FE61-4226-BAA4-EB529FA1646B}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {47533B7C-0E1A-44A4-8511-B438645F052A}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {47533B7C-0E1A-44A4-8511-B438645F052A}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {47533B7C-0E1A-44A4-8511-B438645F052A}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {47533B7C-0E1A-44A4-8511-B438645F052A}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {47533B7C-0E1A-44A4-8511-B438645F052A}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {47533B7C-0E1A-44A4-8511-B438645F052A}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {47533B7C-0E1A-44A4-8511-B438645F052A}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {47533B7C-0E1A-44A4-8511-B438645F052A}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {C0D6DEE5-5532-4345-9C66-4C00D7FDB8BE}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {C0D6DEE5-5532-4345-9C66-4C00D7FDB8BE}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {C0D6DEE5-5532-4345-9C66-4C00D7FDB8BE}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {C0D6DEE5-5532-4345-9C66-4C00D7FDB8BE}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {C0D6DEE5-5532-4345-9C66-4C00D7FDB8BE}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {C0D6DEE5-5532-4345-9C66-4C00D7FDB8BE}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {C0D6DEE5-5532-4345-9C66-4C00D7FDB8BE}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {C0D6DEE5-5532-4345-9C66-4C00D7FDB8BE}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {133FC760-5699-46D9-BEA6-E816B5F01016}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {133FC760-5699-46D9-BEA6-E816B5F01016}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {133FC760-5699-46D9-BEA6-E816B5F01016}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {133FC760-5699-46D9-BEA6-E816B5F01016}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {133FC760-5699-46D9-BEA6-E816B5F01016}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {133FC760-5699-46D9-BEA6-E816B5F01016}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {133FC760-5699-46D9-BEA6-E816B5F01016}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {133FC760-5699-46D9-BEA6-E816B5F01016}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ {94CF053D-BB66-4FC7-883B-48F072701BA9}.Debug|NET60_Linux.ActiveCfg = Debug|NET60_Linux
+ {94CF053D-BB66-4FC7-883B-48F072701BA9}.Debug|NET60_Linux.Build.0 = Debug|NET60_Linux
+ {94CF053D-BB66-4FC7-883B-48F072701BA9}.Debug|NET60_Windows.ActiveCfg = Debug|NET60_Windows
+ {94CF053D-BB66-4FC7-883B-48F072701BA9}.Debug|NET60_Windows.Build.0 = Debug|NET60_Windows
+ {94CF053D-BB66-4FC7-883B-48F072701BA9}.Release|NET60_Linux.ActiveCfg = Release|NET60_Linux
+ {94CF053D-BB66-4FC7-883B-48F072701BA9}.Release|NET60_Linux.Build.0 = Release|NET60_Linux
+ {94CF053D-BB66-4FC7-883B-48F072701BA9}.Release|NET60_Windows.ActiveCfg = Release|NET60_Windows
+ {94CF053D-BB66-4FC7-883B-48F072701BA9}.Release|NET60_Windows.Build.0 = Release|NET60_Windows
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {7318D5E5-9D15-4ABE-8A51-92F58D4F0B85} = {A6533823-A64A-441C-B7A2-7B2772F87002}
+ {7A9E0314-966F-4584-BAA3-7339CBB849D1} = {A6533823-A64A-441C-B7A2-7B2772F87002}
+ {0D3D43DC-BD7E-46F0-93F7-1C6A6CC79948} = {A6533823-A64A-441C-B7A2-7B2772F87002}
+ {A4794476-7D0E-41C0-AD83-4AB929C0A46C} = {A6533823-A64A-441C-B7A2-7B2772F87002}
+ {87550B2B-6CB8-461E-8965-DFAFE3AAFB5C} = {FA7BE306-A3B0-45FA-9D87-0C69E6932C13}
+ {D8262D40-4880-41E4-91E4-AF8F480C8637} = {FA7BE306-A3B0-45FA-9D87-0C69E6932C13}
+ {6E0A079E-85F1-45A1-AD5B-9855E4344809} = {FA7BE306-A3B0-45FA-9D87-0C69E6932C13}
+ {C2595B04-856D-40AE-8B99-4804C7A70708} = {A6533823-A64A-441C-B7A2-7B2772F87002}
+ {CCB6E56B-2DA1-4EBA-A1F9-E8510E129D12} = {FA7BE306-A3B0-45FA-9D87-0C69E6932C13}
+ {C5ADC05B-34E8-47BF-8E78-9C7BF96418C2} = {FA7BE306-A3B0-45FA-9D87-0C69E6932C13}
+ {263FA9C1-F81E-4A8E-95E0-8CDAE20F177B} = {D114C59C-CF66-4CC2-980F-9301FB4EA4E1}
+ {98692887-B389-4F73-A71A-9FC516738DAB} = {D114C59C-CF66-4CC2-980F-9301FB4EA4E1}
+ {47533B7C-0E1A-44A4-8511-B438645F052A} = {88D45B00-E564-41DB-B57C-9509646CAA49}
+ {C0D6DEE5-5532-4345-9C66-4C00D7FDB8BE} = {FA7BE306-A3B0-45FA-9D87-0C69E6932C13}
+ {94CF053D-BB66-4FC7-883B-48F072701BA9} = {D114C59C-CF66-4CC2-980F-9301FB4EA4E1}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {89CB19C6-BF0A-4E6A-BFDA-79D143EAB59D}
+ EndGlobalSection
+EndGlobal
diff --git a/src/DynamoCore/Configuration/PathManager.cs b/src/DynamoCore/Configuration/PathManager.cs
index e1f9d4a2b65..efc079d6090 100644
--- a/src/DynamoCore/Configuration/PathManager.cs
+++ b/src/DynamoCore/Configuration/PathManager.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
diff --git a/src/DynamoCore/Core/NodeModelAssemblyLoader.cs b/src/DynamoCore/Core/NodeModelAssemblyLoader.cs
index 99c96fca888..1a9244cbfee 100644
--- a/src/DynamoCore/Core/NodeModelAssemblyLoader.cs
+++ b/src/DynamoCore/Core/NodeModelAssemblyLoader.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -7,7 +7,6 @@
using Dynamo.Graph.Nodes;
using Dynamo.Logging;
using Dynamo.Migration;
-using Dynamo.Utilities;
namespace Dynamo.Models
{
@@ -218,7 +217,7 @@ internal static IEnumerable GetCustomizationTypesUsingReflection(Assembly
var customizerType = Type.GetType("Dynamo.Wpf.INodeViewCustomization`1,DynamoCoreWpf");
if (customizerType != null)
{
- output = assem.GetTypes().Where(t => !t.IsAbstract && TypeExtensions.ImplementsGeneric(customizerType, t));
+ output = assem.GetTypes().Where(t => !t.IsAbstract && Utilities.TypeExtensions.ImplementsGeneric(customizerType, t));
return output;
}
}
diff --git a/src/DynamoCore/DynamoCore.csproj b/src/DynamoCore/DynamoCore.csproj
index 7d70e872d47..1bfd00826d8 100644
--- a/src/DynamoCore/DynamoCore.csproj
+++ b/src/DynamoCore/DynamoCore.csproj
@@ -17,10 +17,16 @@
-
+
+
+
+
+
+
+
-
+
@@ -28,7 +34,6 @@
-
@@ -159,29 +164,25 @@
-->
-
+
-
-
-
-
-
+
-
+
-
+
\ No newline at end of file
diff --git a/src/DynamoCore/Logging/DynamoAnalyticsClient.cs b/src/DynamoCore/Logging/DynamoAnalyticsClient.cs
index 157397c87a5..2d3e37c367d 100644
--- a/src/DynamoCore/Logging/DynamoAnalyticsClient.cs
+++ b/src/DynamoCore/Logging/DynamoAnalyticsClient.cs
@@ -1,6 +1,5 @@
-using System;
+using System;
using System.Diagnostics;
-using Autodesk.Analytics.Google;
using Autodesk.Analytics.ADP;
using Autodesk.Analytics.Core;
using Autodesk.Analytics.Events;
@@ -179,15 +178,18 @@ public DynamoAnalyticsClient(DynamoModel dynamoModel)
product = new ProductInfo() { Id = "DYN", Name = hostName, VersionString = appversion, AppVersion = appversion, BuildId = buildId, ReleaseId = releaseId };
}
+ // TODO: Google analytics can be made available on dotnet6-windows (windows only)
private void RegisterGATracker(Service service)
{
+#if NET48
//Some clients such as Revit may allow start/close Dynamo multiple times
//in the same session so register only if the factory is not registered.
- if (service.GetTrackerFactory(GATrackerFactory.Name) == null)
+ if (service.GetTrackerFactory(Autodesk.Analytics.Google.GATrackerFactory.Name) == null)
{
- service.Register(new GATrackerFactory(ANALYTICS_PROPERTY));
- service.AddTrackerFactoryFilter(GATrackerFactory.Name, () => ReportingGoogleAnalytics);
+ service.Register(new Autodesk.Analytics.Google.GATrackerFactory(ANALYTICS_PROPERTY));
+ service.AddTrackerFactoryFilter(Autodesk.Analytics.Google.GATrackerFactory.Name, () => ReportingGoogleAnalytics);
}
+#endif
}
private void RegisterADPTracker(Service service)
@@ -369,4 +371,4 @@ public void Dispose()
}
}
}
-}
\ No newline at end of file
+}
diff --git a/src/DynamoCoreWpf/DynamoCoreWpf.csproj b/src/DynamoCoreWpf/DynamoCoreWpf.csproj
index 15840a9019f..37eae248cc7 100644
--- a/src/DynamoCoreWpf/DynamoCoreWpf.csproj
+++ b/src/DynamoCoreWpf/DynamoCoreWpf.csproj
@@ -69,6 +69,7 @@
+
diff --git a/src/DynamoPackages/DynamoPackages.csproj b/src/DynamoPackages/DynamoPackages.csproj
index 072e717d141..1360c6ba42d 100644
--- a/src/DynamoPackages/DynamoPackages.csproj
+++ b/src/DynamoPackages/DynamoPackages.csproj
@@ -1,4 +1,4 @@
-
+
@@ -9,7 +9,7 @@
DynamoPackages
DynamoPackages
-
+
diff --git a/src/DynamoPackages/PackageLoader.cs b/src/DynamoPackages/PackageLoader.cs
index 66df796c3e2..cd53a3ec77d 100644
--- a/src/DynamoPackages/PackageLoader.cs
+++ b/src/DynamoPackages/PackageLoader.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -724,7 +724,10 @@ private static void CheckPackageNodeLibraryCertificates(string packageDirectoryP
var filepath = Path.Combine(discoveredPkg.BinaryDirectory, filename);
try
{
- CertificateVerification.CheckAssemblyForValidCertificate(filepath);
+ if (OSHelper.IsWindows())
+ {
+ CertificateVerification.CheckAssemblyForValidCertificate(filepath);
+ }
}
catch (Exception e)
{
diff --git a/src/DynamoUtilities/CertificateVerification.cs b/src/DynamoUtilities/CertificateVerification.cs
index dd191ab5ce3..0236b089bab 100644
--- a/src/DynamoUtilities/CertificateVerification.cs
+++ b/src/DynamoUtilities/CertificateVerification.cs
@@ -1,15 +1,19 @@
-using System;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
+using System.Runtime.Versioning;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
namespace DynamoUtilities
{
+#if NET6_0_OR_GREATER
+ [SupportedOSPlatform("Windows")]
+#endif
internal sealed class WinTrustInterop
{
#region WinTrustData struct field enums
@@ -152,6 +156,9 @@ enum WinVerifyTrustResult : uint
UntrustedRoot = 0x800B0109 // CERT_E_UNTRUSTEDROOT - A certification chain processed correctly but terminated in a root certificate that is not trusted by the trust provider.
}
+#if NET6_0_OR_GREATER
+ [SupportedOSPlatform("Windows")]
+#endif
public class WinTrust
{
private static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);
@@ -165,6 +172,9 @@ [In] [MarshalAs(UnmanagedType.LPStruct)] Guid pgActionID,
[In] WinTrustData pWVTData
);
+#if NET6_0_OR_GREATER
+ [SupportedOSPlatform("Windows")]
+#endif
// call WinTrust.WinVerifyTrust() to check embedded file signature
public static bool VerifyEmbeddedSignature(string fileName)
{
@@ -191,6 +201,9 @@ private WinTrust() { }
}
}
+#if NET6_0_OR_GREATER
+ [SupportedOSPlatform("Windows")]
+#endif
public class CertificateVerification
{
///
diff --git a/src/DynamoUtilities/DynamoUtilities.csproj b/src/DynamoUtilities/DynamoUtilities.csproj
index 45a41699dca..794a59fc366 100644
--- a/src/DynamoUtilities/DynamoUtilities.csproj
+++ b/src/DynamoUtilities/DynamoUtilities.csproj
@@ -1,4 +1,4 @@
-
+
@@ -11,9 +11,22 @@
DynamoUtilities
DynamoUtilities
-
-
-
+
+
+
+
+
+
+
+
+
+
+ true
+ none
+
+
+ $(PkgSystem_Collections_Immutable)\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll
+
diff --git a/src/DynamoUtilities/EnumerableExtensions.cs b/src/DynamoUtilities/EnumerableExtensions.cs
index 2e091e9f650..8ec1fc58182 100644
--- a/src/DynamoUtilities/EnumerableExtensions.cs
+++ b/src/DynamoUtilities/EnumerableExtensions.cs
@@ -1,10 +1,10 @@
-using System;
+using System;
using System.Collections;
using System.Collections.Generic;
+using System.Collections.Immutable;
using System.Collections.ObjectModel;
using System.Linq;
using System.Xml;
-using ICSharpCode.AvalonEdit.Utils;
namespace Dynamo.Utilities
{
diff --git a/src/DynamoUtilities/PathHelper.cs b/src/DynamoUtilities/PathHelper.cs
index 37b585e3a09..08927dfbeb6 100644
--- a/src/DynamoUtilities/PathHelper.cs
+++ b/src/DynamoUtilities/PathHelper.cs
@@ -1,9 +1,8 @@
using System;
-using System.Collections;
-using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
+using System.Runtime.Versioning;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Xml;
@@ -11,6 +10,21 @@
namespace DynamoUtilities
{
+ internal static class OSHelper
+ {
+#if NET6_0_OR_GREATER
+ [SupportedOSPlatformGuard("windows")]
+#endif
+ public static bool IsWindows()
+ {
+#if NET6_0_OR_GREATER
+ return OperatingSystem.IsWindows();
+#else
+ return true;// net48, assuming we will no deliver net48 on anything else but windows (also no more mono builds)
+#endif
+
+ }
+ }
public class PathHelper
{
private static readonly string sizeUnits = " KB";
@@ -61,7 +75,10 @@ public static bool IsReadOnlyPath(string filePath)
// We mark the path read only when
// 1. file read-only
// 2. user does not have write access to the folder
- return Finfo.IsReadOnly || !HasWritePermissionOnDir(Finfo.Directory.ToString());
+
+ // We have no cross platform Directory access writes APIs.
+ bool hasWritePermissionOnDir = OSHelper.IsWindows() ? HasWritePermissionOnDir(Finfo.Directory.ToString()) : true;
+ return Finfo.IsReadOnly || !hasWritePermissionOnDir;
}
else
return false;
@@ -72,13 +89,19 @@ public static bool IsReadOnlyPath(string filePath)
///
/// Folder path
///
+#if NET6_0_OR_GREATER
+ [SupportedOSPlatform("windows")]
+#endif
public static bool HasWritePermissionOnDir(string folderPath)
{
try
{
var writeAllow = false;
var writeDeny = false;
- var accessControlList = Directory.GetAccessControl(folderPath);
+ DirectoryInfo dInfo = new DirectoryInfo(folderPath);
+ if (dInfo == null)
+ return false;
+ var accessControlList = dInfo.GetAccessControl();
if (accessControlList == null)
return false;
var accessRules = accessControlList.GetAccessRules(true, true,
@@ -100,7 +123,7 @@ public static bool HasWritePermissionOnDir(string folderPath)
return writeAllow && !writeDeny;
}
- catch(Exception)
+ catch (Exception)
{
return false;
}
@@ -111,13 +134,20 @@ public static bool HasWritePermissionOnDir(string folderPath)
///
/// Folder path
///
+#if NET6_0_OR_GREATER
+ [SupportedOSPlatform("windows")]
+#endif
internal static bool HasReadPermissionOnDir(string folderPath)
{
try
{
var readAllow = false;
var readDeny = false;
- var accessControlList = Directory.GetAccessControl(folderPath);
+
+ DirectoryInfo dInfo = new DirectoryInfo(folderPath);
+ if (dInfo == null)
+ return false;
+ var accessControlList = dInfo.GetAccessControl();
if (accessControlList == null)
return false;
@@ -136,7 +166,7 @@ internal static bool HasReadPermissionOnDir(string folderPath)
if (!curentUser.User.Equals(rule.IdentityReference) &&
!curentUser.Groups.Contains(rule.IdentityReference))
continue;
-
+
if (rule.AccessControlType == AccessControlType.Allow)
readAllow = true;
else if (rule.AccessControlType == AccessControlType.Deny)
@@ -168,7 +198,7 @@ public static bool isValidXML(string path, out XmlDocument xmlDoc, out Exception
ex = null;
return true;
}
- catch(Exception e)
+ catch (Exception e)
{
xmlDoc = null;
ex = e;
@@ -189,7 +219,7 @@ public static bool isFileContentsValidJson(string fileContents, out Exception ex
ex = new JsonReaderException();
return false;
}
-
+
try
{
fileContents = fileContents.Trim();
@@ -199,16 +229,16 @@ public static bool isFileContentsValidJson(string fileContents, out Exception ex
var obj = Newtonsoft.Json.Linq.JToken.Parse(fileContents);
return true;
}
- else
+ else
{
ex = new JsonReaderException();
}
}
- catch(Exception e)
+ catch (Exception e)
{
ex = e;
}
-
+
return false;
}
@@ -339,14 +369,18 @@ internal static string ValidateDirectory(string directoryPath, bool absolutePath
throw new DirectoryNotFoundException($"The input path: {directoryPath} does not exist or is not a folder");
}
- if (read && !PathHelper.HasReadPermissionOnDir(directoryPath))
+ // TODO: figure out read/write permissions for Linux
+ if (OSHelper.IsWindows())
{
- throw new System.Security.SecurityException($"Dynamo does not have the required permissions for the path: {directoryPath}");
- }
+ if (read && !PathHelper.HasReadPermissionOnDir(directoryPath))
+ {
+ throw new System.Security.SecurityException($"Dynamo does not have the required permissions for the path: {directoryPath}");
+ }
- if (write && !PathHelper.HasWritePermissionOnDir(directoryPath))
- {
- throw new System.Security.SecurityException($"Dynamo does not have the required permissions for the path: {directoryPath}");
+ if (write && !PathHelper.HasWritePermissionOnDir(directoryPath))
+ {
+ throw new System.Security.SecurityException($"Dynamo does not have the required permissions for the path: {directoryPath}");
+ }
}
return directoryPath;
@@ -388,7 +422,7 @@ internal static bool IsSubDirectoryOfDirectory(string subdirectory, string direc
{
string subdirPath = FormatDirectoryPath(subdirectory);
string directoryPath = FormatDirectoryPath(directory);
-
+
return subdirPath.StartsWith(directoryPath, StringComparison.OrdinalIgnoreCase);
}
diff --git a/src/DynamoUtilities/Properties/AssemblyInfo.cs b/src/DynamoUtilities/Properties/AssemblyInfo.cs
index 279839de1bb..c3981334ac4 100644
--- a/src/DynamoUtilities/Properties/AssemblyInfo.cs
+++ b/src/DynamoUtilities/Properties/AssemblyInfo.cs
@@ -21,4 +21,6 @@
[assembly: InternalsVisibleTo("DynamoPackages")]
[assembly: InternalsVisibleTo("ProtoScript")]
[assembly: InternalsVisibleTo("ProtoCore")]
+[assembly: InternalsVisibleTo("DynamoApplications")]
+[assembly: InternalsVisibleTo("DynamoCLI")]
[assembly: InternalsVisibleTo("NodeDocumentationMarkdownGenerator")]
diff --git a/src/Engine/ProtoCore/ProtoCore.csproj b/src/Engine/ProtoCore/ProtoCore.csproj
index e3f7e204682..30d7c5c966b 100644
--- a/src/Engine/ProtoCore/ProtoCore.csproj
+++ b/src/Engine/ProtoCore/ProtoCore.csproj
@@ -1,4 +1,4 @@
-
+
@@ -12,7 +12,7 @@
false
ProtoCore.snk
-
+
CS3008, CS3003
@@ -20,13 +20,22 @@
-
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/src/Libraries/CoreNodeModels/CoreNodeModels.csproj b/src/Libraries/CoreNodeModels/CoreNodeModels.csproj
index 87882b64ced..fd074618fb2 100644
--- a/src/Libraries/CoreNodeModels/CoreNodeModels.csproj
+++ b/src/Libraries/CoreNodeModels/CoreNodeModels.csproj
@@ -20,14 +20,18 @@
+
+
+ true
+
+ runtime
+
+
+
+
+
+
-
- true
-
- runtime
-
-
-
{7858fa8c-475f-4b8e-b468-1f8200778cf8}
DynamoCore
@@ -86,20 +90,16 @@
Resources.en-US.Designer.cs
-
+
-
-
-
-
-
+
-
+
\ No newline at end of file
diff --git a/src/Libraries/CoreNodes/CoreNodes.csproj b/src/Libraries/CoreNodes/CoreNodes.csproj
index 73671efd6ef..07dc7f1465e 100644
--- a/src/Libraries/CoreNodes/CoreNodes.csproj
+++ b/src/Libraries/CoreNodes/CoreNodes.csproj
@@ -15,7 +15,7 @@
-
+
@@ -23,6 +23,14 @@
runtime
+
+
+
+
+
+
+
+
{7858fa8c-475f-4b8e-b468-1f8200778cf8}
DynamoCore
@@ -81,20 +89,16 @@
Resources.en-US.Designer.cs
-
+
-
-
-
-
-
+
\ No newline at end of file
diff --git a/src/Libraries/CoreNodes/FileSystem.cs b/src/Libraries/CoreNodes/FileSystem.cs
index 285b94426f2..0681b1ee302 100644
--- a/src/Libraries/CoreNodes/FileSystem.cs
+++ b/src/Libraries/CoreNodes/FileSystem.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
@@ -7,6 +7,7 @@
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
+using System.Runtime.Versioning;
using Autodesk.DesignScript.Runtime;
using Dynamo.Events;
using Dynamo.Graph.Nodes;
@@ -336,7 +337,9 @@ public static void MoveDirectory(string path, string newPath, bool overwriteFile
#region Obsolete Methods
-
+#if NET6_0_OR_GREATER
+ [SupportedOSPlatform("windows")]
+#endif
[NodeObsolete("ReadImageObsolete", typeof(Properties.Resources))]
public static Color[] ReadImage(string path, int xSamples, int ySamples)
{
@@ -345,6 +348,9 @@ public static Color[] ReadImage(string path, int xSamples, int ySamples)
return Image.Pixels(image, xSamples, ySamples).SelectMany(x => x).ToArray();
}
+#if NET6_0_OR_GREATER
+ [SupportedOSPlatform("windows")]
+#endif
[NodeObsolete("LoadImageFromPathObsolete", typeof(Properties.Resources))]
public static Bitmap LoadImageFromPath(string path)
{
@@ -357,6 +363,9 @@ public static string ReadText(string path)
return ReadText(FileFromPath(path));
}
+#if NET6_0_OR_GREATER
+ [SupportedOSPlatform("windows")]
+#endif
[NodeObsolete("WriteImageObsolete", typeof(Properties.Resources))]
public static bool WriteImage(string filePath, string fileName, Bitmap image)
{
@@ -376,6 +385,9 @@ public static bool ExportToCSV(string filePath, object[][] data)
///
/// Methods for operating on Image Bitmaps.
///
+#if NET6_0_OR_GREATER
+ [SupportedOSPlatform("windows")]
+#endif
public static class Image
{
///
diff --git a/src/Libraries/DesignScriptBuiltin/DesignScriptBuiltin.csproj b/src/Libraries/DesignScriptBuiltin/DesignScriptBuiltin.csproj
index 389d156ae27..486d8da720c 100644
--- a/src/Libraries/DesignScriptBuiltin/DesignScriptBuiltin.csproj
+++ b/src/Libraries/DesignScriptBuiltin/DesignScriptBuiltin.csproj
@@ -1,4 +1,4 @@
-
+
@@ -10,7 +10,7 @@
DesignScriptBuiltin
$(OutputPath)\$(UICulture)\DesignScriptBuiltin.xml
-
+
true
none
@@ -19,6 +19,10 @@
$(PkgSystem_Collections_Immutable)\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll
+
+
+
+
{ef879a10-041d-4c68-83e7-3192685f1bae}
@@ -47,17 +51,13 @@
Resources.en-US.Designer.cs
-
-
-
-
-
+
-
+
\ No newline at end of file
diff --git a/src/Libraries/DynamoConversions/DynamoConversions.csproj b/src/Libraries/DynamoConversions/DynamoConversions.csproj
index c8020736dd0..16df5b45c1c 100644
--- a/src/Libraries/DynamoConversions/DynamoConversions.csproj
+++ b/src/Libraries/DynamoConversions/DynamoConversions.csproj
@@ -1,4 +1,4 @@
-
+
diff --git a/src/Libraries/DynamoUnits/Quantity.cs b/src/Libraries/DynamoUnits/Quantity.cs
index adb42e2e293..7fd5479b558 100644
--- a/src/Libraries/DynamoUnits/Quantity.cs
+++ b/src/Libraries/DynamoUnits/Quantity.cs
@@ -1,6 +1,9 @@
-using System;
+using System;
using System.Collections.Generic;
using Autodesk.DesignScript.Runtime;
+#if NET6_0_OR_GREATER
+using ForgeUnitsCLR = Autodesk.ForgeUnits;
+#endif
namespace DynamoUnits
{
diff --git a/src/Libraries/DynamoUnits/Symbol.cs b/src/Libraries/DynamoUnits/Symbol.cs
index cc252df5891..acfa69bf3dc 100644
--- a/src/Libraries/DynamoUnits/Symbol.cs
+++ b/src/Libraries/DynamoUnits/Symbol.cs
@@ -1,8 +1,12 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Text;
using Autodesk.DesignScript.Runtime;
+#if NET6_0_OR_GREATER
+using ForgeUnitsCLR = Autodesk.ForgeUnits;
+#endif
+
namespace DynamoUnits
{
///
diff --git a/src/Libraries/DynamoUnits/Unit.cs b/src/Libraries/DynamoUnits/Unit.cs
index 089287f2ae8..cc0ec9677e9 100644
--- a/src/Libraries/DynamoUnits/Unit.cs
+++ b/src/Libraries/DynamoUnits/Unit.cs
@@ -1,6 +1,9 @@
-using System;
+using System;
using System.Collections.Generic;
using Autodesk.DesignScript.Runtime;
+#if NET6_0_OR_GREATER
+using ForgeUnitsCLR = Autodesk.ForgeUnits;
+#endif
namespace DynamoUnits
{
diff --git a/src/Libraries/DynamoUnits/Units.csproj b/src/Libraries/DynamoUnits/Units.csproj
index a23a4ebd09a..db97b715d14 100644
--- a/src/Libraries/DynamoUnits/Units.csproj
+++ b/src/Libraries/DynamoUnits/Units.csproj
@@ -10,10 +10,18 @@
DynamoUnits
$(OutputPath)\DynamoUnits.xml
-
+
-
-
+
+
+
+
+
+
+
+ build
+
+
@@ -68,17 +76,13 @@
-
-
-
-
-
+
-
+
diff --git a/src/Libraries/DynamoUnits/Utilities.cs b/src/Libraries/DynamoUnits/Utilities.cs
index 97158afc2c4..651befda698 100644
--- a/src/Libraries/DynamoUnits/Utilities.cs
+++ b/src/Libraries/DynamoUnits/Utilities.cs
@@ -1,11 +1,15 @@
-using System;
+using System;
using System.Collections.Generic;
-using System.Linq;
using Autodesk.DesignScript.Runtime;
using System.Reflection;
using System.IO;
using System.Configuration;
+#if NET6_0_OR_GREATER
+using ForgeUnitsCLR = Autodesk.ForgeUnits;
+using SchemasCLR = Autodesk.ForgeUnits;
+#endif
+
namespace DynamoUnits
{
///
diff --git a/src/Tools/DynamoInstallDetective/DynamoInstallDetective.csproj b/src/Tools/DynamoInstallDetective/DynamoInstallDetective.csproj
index 5a0835a9cbe..63f6d7c06e6 100644
--- a/src/Tools/DynamoInstallDetective/DynamoInstallDetective.csproj
+++ b/src/Tools/DynamoInstallDetective/DynamoInstallDetective.csproj
@@ -9,7 +9,11 @@
DynamoInstallDetective
DynamoInstallDetective
-
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Tools/DynamoInstallDetective/ProductLookUp.cs b/src/Tools/DynamoInstallDetective/ProductLookUp.cs
index 9ea45de99b4..fb502c03f5e 100644
--- a/src/Tools/DynamoInstallDetective/ProductLookUp.cs
+++ b/src/Tools/DynamoInstallDetective/ProductLookUp.cs
@@ -1,15 +1,19 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Configuration;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
+using System.Runtime.Versioning;
using Microsoft.Win32;
namespace DynamoInstallDetective
{
// Utility class for interacting with the windows registry.
+#if NET6_0_OR_GREATER
+ [SupportedOSPlatform("windows")]
+#endif
internal static class RegUtils
{
// Utility class to enable/disable registry caching within a scope.
@@ -228,6 +232,9 @@ public interface IProductCollection
///
/// Implements basic look up algorithm to get product installations using registry keys
///
+#if NET6_0_OR_GREATER
+ [SupportedOSPlatform("windows")]
+#endif
public class InstalledProductLookUp : IProductLookUp
{
///
@@ -341,6 +348,9 @@ public virtual Tuple GetVersionInfoFromFile(string filePath)
}
}
+#if NET6_0_OR_GREATER
+ [SupportedOSPlatform("windows")]
+#endif
class InstalledProduct : IInstalledProduct
{
public string ProductName { get; set; }
@@ -386,6 +396,9 @@ public override int GetHashCode()
}
}
+#if NET6_0_OR_GREATER
+ [SupportedOSPlatform("windows")]
+#endif
public class InstalledProducts : IProductCollection
{
public IEnumerable Products { get; protected set; }
@@ -416,7 +429,9 @@ public virtual void LookUpAndInitProducts(IProductLookUp lookUp)
}
}
-
+#if NET6_0_OR_GREATER
+ [SupportedOSPlatform("windows")]
+#endif
public class DynamoProducts : InstalledProducts
{
const string PRODUCT_ID07_X = @"{6B5FA6CA-9D69-46CF-B517-1F90C64F7C0B}";
diff --git a/src/Tools/DynamoInstallDetective/Utilities.cs b/src/Tools/DynamoInstallDetective/Utilities.cs
index 9e42d2fc914..a4f5fe3e729 100644
--- a/src/Tools/DynamoInstallDetective/Utilities.cs
+++ b/src/Tools/DynamoInstallDetective/Utilities.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
@@ -9,6 +9,9 @@ namespace DynamoInstallDetective
///
/// Utility class for install detective
///
+#if NET6_0_OR_GREATER
+ [System.Runtime.Versioning.SupportedOSPlatform("windows")]
+#endif
public static class Utilities
{
///
diff --git a/src/Tools/DynamoShapeManager/DynamoShapeManager.csproj b/src/Tools/DynamoShapeManager/DynamoShapeManager.csproj
index 1fe52b1e729..af43bb8f5d2 100644
--- a/src/Tools/DynamoShapeManager/DynamoShapeManager.csproj
+++ b/src/Tools/DynamoShapeManager/DynamoShapeManager.csproj
@@ -1,4 +1,4 @@
-
+
@@ -9,7 +9,10 @@
DynamoShapeManager
DynamoShapeManager
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Tools/DynamoShapeManager/Preloader.cs b/src/Tools/DynamoShapeManager/Preloader.cs
index b755ea9a0f2..426d34821dc 100644
--- a/src/Tools/DynamoShapeManager/Preloader.cs
+++ b/src/Tools/DynamoShapeManager/Preloader.cs
@@ -52,7 +52,9 @@ public class Preloader
/// typical setup this would be the same directory that contains Dynamo
/// core modules. This must represent a valid directory.
///
- ///
+#if NET6_0_OR_GREATER
+ [System.Runtime.Versioning.SupportedOSPlatform("windows")]
+#endif
public Preloader(string rootFolder)
: this(rootFolder, new[]
{
@@ -99,7 +101,9 @@ internal static Version MapLibGVersionEnumToFullVersion(LibraryVersion libVersio
///
/// A list of version numbers to check for in order
/// of preference. This argument cannot be null or empty.
- ///
+#if NET6_0_OR_GREATER
+ [System.Runtime.Versioning.SupportedOSPlatform("windows")]
+#endif
[Obsolete("please use constructor Preloader constructor with signature Preloader(string,IEnumerable)")]
public Preloader(string rootFolder, IEnumerable versions) :
this(rootFolder, versions.Select(libVersion => MapLibGVersionEnumToFullVersion(libVersion)))
@@ -118,7 +122,9 @@ public Preloader(string rootFolder, IEnumerable versions) :
///
/// A list of version numbers to check for in order
/// of preference. This argument cannot be null or empty.
- ///
+#if NET6_0_OR_GREATER
+ [System.Runtime.Versioning.SupportedOSPlatform("windows")]
+#endif
public Preloader(string rootFolder, IEnumerable versions)
{
if (string.IsNullOrEmpty(rootFolder))
@@ -187,6 +193,9 @@ public Preloader(string rootFolder, string shapeManagerPath, LibraryVersion vers
/// The version of shape manager.
///
[Obsolete("please use constructor Preloader constructor with signature Preloader(string,IEnumerable)")]
+#if NET6_0_OR_GREATER
+ [System.Runtime.Versioning.SupportedOSPlatform("windows")]
+#endif
public Preloader(string rootFolder, LibraryVersion version)
: this(rootFolder, new[] { version }) { }
diff --git a/src/Tools/DynamoShapeManager/Utilities.cs b/src/Tools/DynamoShapeManager/Utilities.cs
index b0214890ea6..181e7eb21aa 100644
--- a/src/Tools/DynamoShapeManager/Utilities.cs
+++ b/src/Tools/DynamoShapeManager/Utilities.cs
@@ -174,6 +174,9 @@ private static List ProductsWithASM
/// or None otherwise.
///
[Obsolete("Please use version of this method which accepts precise collection of version objects.")]
+#if NET6_0_OR_GREATER
+ [System.Runtime.Versioning.SupportedOSPlatform("windows")]
+#endif
public static LibraryVersion GetInstalledAsmVersion(List versions, ref string location, string rootFolder)
{
if (string.IsNullOrEmpty(rootFolder))
@@ -248,7 +251,9 @@ public static LibraryVersion GetInstalledAsmVersion(List version
/// of Tuples - these represent versions of ASM which are located on the user's machine.
/// Returns System.Version of ASM if any installed ASM is found,
/// or null otherwise.
- ///
+#if NET6_0_OR_GREATER
+ [System.Runtime.Versioning.SupportedOSPlatform("windows")]
+#endif
public static Version GetInstalledAsmVersion2(IEnumerable versions, ref string location, string rootFolder, Func getASMInstallsFunc = null)
{
if (string.IsNullOrEmpty(rootFolder))
@@ -553,6 +558,9 @@ public static string GetGeometryFactoryPath2(string rootFolder, Version version)
}
+#if NET6_0_OR_GREATER
+ [System.Runtime.Versioning.SupportedOSPlatform("windows")]
+#endif
private static IEnumerable GetAsmInstallations(string rootFolder)
{
var assemblyPath = Path.Combine(Path.Combine(rootFolder, "DynamoInstallDetective.dll"));
@@ -588,6 +596,9 @@ private static IEnumerable GetAsmInstallations(string rootFolder)
/// Files found on an ASM installation location.
/// Major version of ASM found in the specified location.
/// Whether the files represent a complete ASM installation or not.
+#if NET6_0_OR_GREATER
+ [System.Runtime.Versioning.SupportedOSPlatform("windows")]
+#endif
internal static bool IsASMInstallationComplete(IEnumerable filePaths, int majorVersion)
{
var fileNames = filePaths.Select(path => Path.GetFileName(path).ToUpper());
@@ -611,11 +622,28 @@ internal static bool IsASMInstallationComplete(IEnumerable filePaths, in
///
/// optional - to be used for testing - default is the ASM search pattern
///
- public static Version GetVersionFromPath(string asmPath, string searchPattern = "ASMAHL*.dll")
+ public static Version GetVersionFromPath(string asmPath, string searchPattern = "*ASMAHL*.*")
{
var ASMFilePath = Directory.GetFiles(asmPath, searchPattern, SearchOption.TopDirectoryOnly).FirstOrDefault();
if (ASMFilePath != null && File.Exists(ASMFilePath))
{
+#if NET6_0_OR_GREATER
+ if (!OperatingSystem.IsWindows())
+ {
+ string fileName = Path.GetFileNameWithoutExtension(ASMFilePath);
+
+ var version = new string(fileName
+ .SkipWhile(c => !char.IsDigit(c))
+ .TakeWhile(c => char.IsDigit(c))
+ .Take(3).ToArray());
+
+ if (string.IsNullOrEmpty(version))
+ {
+ throw new Exception($"Cannot extract ASM version. Bad version format found for file {fileName}");
+ }
+ return new Version($"{version}.0.0");
+ }
+#endif
var asmVersion = FileVersionInfo.GetVersionInfo(ASMFilePath);
var libGversion = new Version(asmVersion.FileMajorPart, asmVersion.FileMinorPart, asmVersion.FileBuildPart);
return libGversion;