From f2295f8dd233320adf49bff8584f6b35463acaca Mon Sep 17 00:00:00 2001 From: fHolz Date: Tue, 5 Apr 2022 22:01:54 +0200 Subject: [PATCH 01/39] Added new .netstandard20 project for custom MSBuild-Task utilizing GitInfo --- .../HeuristicLab.Build/HeuristicLab.Build.sln | 25 +++++++++++++++++++ .../HeuristicLab.Build.csproj | 13 ++++++++++ .../HeuristicLab.Build/UpdateVersion.cs | 25 +++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 build/source/HeuristicLab.Build/HeuristicLab.Build.sln create mode 100644 build/source/HeuristicLab.Build/HeuristicLab.Build/HeuristicLab.Build.csproj create mode 100644 build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs diff --git a/build/source/HeuristicLab.Build/HeuristicLab.Build.sln b/build/source/HeuristicLab.Build/HeuristicLab.Build.sln new file mode 100644 index 0000000000..560c3c601c --- /dev/null +++ b/build/source/HeuristicLab.Build/HeuristicLab.Build.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.1.32328.378 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HeuristicLab.Build", "HeuristicLab.Build\HeuristicLab.Build.csproj", "{1DED3389-7FEF-4871-A9C5-E7B947D83DEA}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1DED3389-7FEF-4871-A9C5-E7B947D83DEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1DED3389-7FEF-4871-A9C5-E7B947D83DEA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1DED3389-7FEF-4871-A9C5-E7B947D83DEA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1DED3389-7FEF-4871-A9C5-E7B947D83DEA}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {9CA9B6B7-C917-4A4A-99D8-3372EBE82FF3} + EndGlobalSection +EndGlobal diff --git a/build/source/HeuristicLab.Build/HeuristicLab.Build/HeuristicLab.Build.csproj b/build/source/HeuristicLab.Build/HeuristicLab.Build/HeuristicLab.Build.csproj new file mode 100644 index 0000000000..7f38bd23a4 --- /dev/null +++ b/build/source/HeuristicLab.Build/HeuristicLab.Build/HeuristicLab.Build.csproj @@ -0,0 +1,13 @@ + + + + netstandard2.0 + + + + + + + + + diff --git a/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs b/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs new file mode 100644 index 0000000000..350c4b316c --- /dev/null +++ b/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs @@ -0,0 +1,25 @@ +using System.IO; +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; + +namespace HeuristicLab.Build { + public class UpdateVersion : Task { + + [Required] + public string ProjectDir { get; set; } + + public override bool Execute() { + + string commitCount = ThisAssembly.Git.Commits; + Log.LogMessage(MessageImportance.High, $"Updating {Path.Combine(ProjectDir, "Properties", "AssemblyInfo.cs")}"); + var assemblyInfoFrameContent = File.ReadAllText(Path.Combine(ProjectDir, "Properties", "AssemblyInfo.cs.frame")); + File.WriteAllText(Path.Combine(ProjectDir, "Properties", "AssemblyInfo.cs"), assemblyInfoFrameContent.Replace("$WCREV$", commitCount)); + + Log.LogMessage(MessageImportance.High, $"Updating {Path.Combine(ProjectDir, "Plugin.cs")}"); + var pluginFrameContent = File.ReadAllText(Path.Combine(ProjectDir, "Plugin.cs.frame")); + File.WriteAllText(Path.Combine(ProjectDir, "Plugin.cs"), pluginFrameContent.Replace("$WCREV$", commitCount)); + + return true; + } + } +} From 1c539f7f5de2a0eae3a5d59844ef886693a7fa99 Mon Sep 17 00:00:00 2001 From: Holzinger Florian Date: Wed, 6 Apr 2022 08:25:52 +0200 Subject: [PATCH 02/39] Check if frame file exists --- .../HeuristicLab.Build/UpdateVersion.cs | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs b/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs index 350c4b316c..afa00f101b 100644 --- a/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs +++ b/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs @@ -9,15 +9,25 @@ public class UpdateVersion : Task { public string ProjectDir { get; set; } public override bool Execute() { - string commitCount = ThisAssembly.Git.Commits; - Log.LogMessage(MessageImportance.High, $"Updating {Path.Combine(ProjectDir, "Properties", "AssemblyInfo.cs")}"); - var assemblyInfoFrameContent = File.ReadAllText(Path.Combine(ProjectDir, "Properties", "AssemblyInfo.cs.frame")); - File.WriteAllText(Path.Combine(ProjectDir, "Properties", "AssemblyInfo.cs"), assemblyInfoFrameContent.Replace("$WCREV$", commitCount)); - Log.LogMessage(MessageImportance.High, $"Updating {Path.Combine(ProjectDir, "Plugin.cs")}"); - var pluginFrameContent = File.ReadAllText(Path.Combine(ProjectDir, "Plugin.cs.frame")); - File.WriteAllText(Path.Combine(ProjectDir, "Plugin.cs"), pluginFrameContent.Replace("$WCREV$", commitCount)); + string assemblyInfoFramePath = Path.Combine(ProjectDir, "Properties", "AssemblyInfo.cs.frame"); + string assemblyInfoPath = Path.Combine(ProjectDir, "Properties", "AssemblyInfo.cs"); + + if (File.Exists(assemblyInfoFramePath)) { + Log.LogMessage($"Updating {assemblyInfoPath}"); + var assemblyInfoFrameContent = File.ReadAllText(assemblyInfoFramePath); + File.WriteAllText(Path.Combine(ProjectDir, "Properties", "AssemblyInfo.cs"), assemblyInfoFrameContent.Replace("$WCREV$", commitCount)); + } + + string pluginFramePath = Path.Combine(ProjectDir, "Plugin.cs.frame"); + string pluginPath = Path.Combine(ProjectDir, "Plugin.cs"); + + if (File.Exists(pluginFramePath)) { + Log.LogMessage($"Updating {Path.Combine(ProjectDir, "Plugin.cs")}"); + var pluginFrameContent = File.ReadAllText(Path.Combine(ProjectDir, "Plugin.cs.frame")); + File.WriteAllText(Path.Combine(ProjectDir, "Plugin.cs"), pluginFrameContent.Replace("$WCREV$", commitCount)); + } return true; } From 494e8386b0fccf0d7794308a4de27ee504d80c8e Mon Sep 17 00:00:00 2001 From: Holzinger Florian Date: Wed, 6 Apr 2022 08:29:03 +0200 Subject: [PATCH 03/39] Removed unnecessary Path.Combines --- .../HeuristicLab.Build/UpdateVersion.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs b/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs index afa00f101b..52ad75652d 100644 --- a/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs +++ b/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs @@ -17,16 +17,17 @@ public override bool Execute() { if (File.Exists(assemblyInfoFramePath)) { Log.LogMessage($"Updating {assemblyInfoPath}"); var assemblyInfoFrameContent = File.ReadAllText(assemblyInfoFramePath); - File.WriteAllText(Path.Combine(ProjectDir, "Properties", "AssemblyInfo.cs"), assemblyInfoFrameContent.Replace("$WCREV$", commitCount)); + File.WriteAllText(assemblyInfoPath, assemblyInfoFrameContent.Replace("$WCREV$", commitCount)); } + string pluginFramePath = Path.Combine(ProjectDir, "Plugin.cs.frame"); string pluginPath = Path.Combine(ProjectDir, "Plugin.cs"); if (File.Exists(pluginFramePath)) { - Log.LogMessage($"Updating {Path.Combine(ProjectDir, "Plugin.cs")}"); - var pluginFrameContent = File.ReadAllText(Path.Combine(ProjectDir, "Plugin.cs.frame")); - File.WriteAllText(Path.Combine(ProjectDir, "Plugin.cs"), pluginFrameContent.Replace("$WCREV$", commitCount)); + Log.LogMessage($"Updating {pluginPath}"); + var pluginFrameContent = File.ReadAllText(pluginFramePath); + File.WriteAllText(pluginPath, pluginFrameContent.Replace("$WCREV$", commitCount)); } return true; From d0a1935b4f64c1edd401d7eda413e81d3c518b07 Mon Sep 17 00:00:00 2001 From: Holzinger Florian Date: Wed, 6 Apr 2022 13:14:10 +0200 Subject: [PATCH 04/39] Added compiled library containing new build task --- build/bin/HeuristicLab.Build.deps.json | 535 +++++++++++++++++++++++++ build/bin/HeuristicLab.Build.dll | Bin 0 -> 6144 bytes 2 files changed, 535 insertions(+) create mode 100644 build/bin/HeuristicLab.Build.deps.json create mode 100644 build/bin/HeuristicLab.Build.dll diff --git a/build/bin/HeuristicLab.Build.deps.json b/build/bin/HeuristicLab.Build.deps.json new file mode 100644 index 0000000000..eeffb22e30 --- /dev/null +++ b/build/bin/HeuristicLab.Build.deps.json @@ -0,0 +1,535 @@ +{ + "runtimeTarget": { + "name": ".NETStandard,Version=v2.0/", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETStandard,Version=v2.0": {}, + ".NETStandard,Version=v2.0/": { + "HeuristicLab.Build/1.0.0": { + "dependencies": { + "GitInfo": "2.2.0", + "Microsoft.Build.Utilities.Core": "17.1.0", + "NETStandard.Library": "2.0.3" + }, + "runtime": { + "HeuristicLab.Build.dll": {} + } + }, + "GitInfo/2.2.0": {}, + "Microsoft.Build.Framework/17.1.0": { + "dependencies": { + "Microsoft.Win32.Registry": "4.3.0", + "System.Security.Permissions": "4.7.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Build.Framework.dll": { + "assemblyVersion": "15.1.0.0", + "fileVersion": "17.1.0.7609" + } + } + }, + "Microsoft.Build.Utilities.Core/17.1.0": { + "dependencies": { + "Microsoft.Build.Framework": "17.1.0", + "Microsoft.NET.StringTools": "1.0.0", + "Microsoft.Win32.Registry": "4.3.0", + "System.Collections.Immutable": "5.0.0", + "System.Configuration.ConfigurationManager": "4.7.0", + "System.Security.Permissions": "4.7.0", + "System.Text.Encoding.CodePages": "4.0.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Build.Utilities.Core.dll": { + "assemblyVersion": "15.1.0.0", + "fileVersion": "17.1.0.7609" + } + } + }, + "Microsoft.NET.StringTools/1.0.0": { + "dependencies": { + "System.Memory": "4.5.4", + "System.Runtime.CompilerServices.Unsafe": "5.0.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.NET.StringTools.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.26302" + } + } + }, + "Microsoft.NETCore.Platforms/1.1.0": {}, + "Microsoft.NETCore.Targets/1.1.0": {}, + "Microsoft.Win32.Registry/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + } + }, + "NETStandard.Library/2.0.3": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0" + } + }, + "System.Buffers/4.5.1": { + "runtime": { + "lib/netstandard2.0/System.Buffers.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.6.28619.1" + } + } + }, + "System.Collections/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Collections.Immutable/5.0.0": { + "dependencies": { + "System.Memory": "4.5.4" + }, + "runtime": { + "lib/netstandard2.0/System.Collections.Immutable.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.20.51904" + } + } + }, + "System.Configuration.ConfigurationManager/4.7.0": { + "dependencies": { + "System.Security.Cryptography.ProtectedData": "4.7.0", + "System.Security.Permissions": "4.7.0" + }, + "runtime": { + "lib/netstandard2.0/System.Configuration.ConfigurationManager.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "System.Globalization/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.IO/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Memory/4.5.4": { + "dependencies": { + "System.Buffers": "4.5.1", + "System.Numerics.Vectors": "4.4.0", + "System.Runtime.CompilerServices.Unsafe": "5.0.0" + }, + "runtime": { + "lib/netstandard2.0/System.Memory.dll": { + "assemblyVersion": "4.0.1.1", + "fileVersion": "4.6.28619.1" + } + } + }, + "System.Numerics.Vectors/4.4.0": { + "runtime": { + "lib/netstandard2.0/System.Numerics.Vectors.dll": { + "assemblyVersion": "4.1.3.0", + "fileVersion": "4.6.25519.3" + } + } + }, + "System.Reflection/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Resources.ResourceManager/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "System.Runtime.CompilerServices.Unsafe/5.0.0": { + "runtime": { + "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.20.51904" + } + } + }, + "System.Runtime.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.Handles/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.InteropServices/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Security.AccessControl/4.7.0": { + "dependencies": { + "System.Security.Principal.Windows": "4.7.0" + }, + "runtime": { + "lib/netstandard2.0/System.Security.AccessControl.dll": { + "assemblyVersion": "4.1.3.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "System.Security.Cryptography.ProtectedData/4.7.0": { + "dependencies": { + "System.Memory": "4.5.4" + }, + "runtime": { + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll": { + "assemblyVersion": "4.0.5.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "System.Security.Permissions/4.7.0": { + "dependencies": { + "System.Security.AccessControl": "4.7.0" + }, + "runtime": { + "lib/netstandard2.0/System.Security.Permissions.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "System.Security.Principal.Windows/4.7.0": { + "runtime": { + "lib/netstandard2.0/System.Security.Principal.Windows.dll": { + "assemblyVersion": "4.1.3.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "System.Text.Encoding/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Text.Encoding.CodePages/4.0.1": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.0.11" + } + }, + "System.Threading/4.0.11": { + "dependencies": { + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.Threading.dll": { + "assemblyVersion": "4.0.11.0", + "fileVersion": "1.0.24212.1" + } + } + }, + "System.Threading.Tasks/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + } + } + }, + "libraries": { + "HeuristicLab.Build/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "GitInfo/2.2.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-SKTmjt40sYqoDB3S7HFVUToUN/vl6Zrt+PuSHdjbQDlcBx0JAZBdS7BXVbVKyy+0iaaF3FBd4ZxspIlKQCC9Lw==", + "path": "gitinfo/2.2.0", + "hashPath": "gitinfo.2.2.0.nupkg.sha512" + }, + "Microsoft.Build.Framework/17.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7PPEbjuL/lKQ8ftblxwBZKf5alZCA4GDvBTiO3UAVxtRe52a2jL3mc8TpKNiJZzytGz7fKdR5ClDCs7+Uw4hMg==", + "path": "microsoft.build.framework/17.1.0", + "hashPath": "microsoft.build.framework.17.1.0.nupkg.sha512" + }, + "Microsoft.Build.Utilities.Core/17.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JqhQ4q6L4IyA0Wh3PrDrxHHYMVHyOLIusyC4imAnhcnZiOC4+CwgVRSdo8fLsQmvz0Jab8FFrU1NPZFbDoxRng==", + "path": "microsoft.build.utilities.core/17.1.0", + "hashPath": "microsoft.build.utilities.core.17.1.0.nupkg.sha512" + }, + "Microsoft.NET.StringTools/1.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZYVcoDM0LnSyT5nWoRGfShYdOecCw2sOXWwP6j1Z0u48Xq3+BVvZ+EiPCX9/8Gz439giW+O1H1kWF9Eb/w6rVg==", + "path": "microsoft.net.stringtools/1.0.0", + "hashPath": "microsoft.net.stringtools.1.0.0.nupkg.sha512" + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", + "path": "microsoft.netcore.platforms/1.1.0", + "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512" + }, + "Microsoft.NETCore.Targets/1.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==", + "path": "microsoft.netcore.targets/1.1.0", + "hashPath": "microsoft.netcore.targets.1.1.0.nupkg.sha512" + }, + "Microsoft.Win32.Registry/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Lw1/VwLH1yxz6SfFEjVRCN0pnflLEsWgnV4qsdJ512/HhTwnKXUG+zDQ4yTO3K/EJQemGoNaBHX5InISNKTzUQ==", + "path": "microsoft.win32.registry/4.3.0", + "hashPath": "microsoft.win32.registry.4.3.0.nupkg.sha512" + }, + "NETStandard.Library/2.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", + "path": "netstandard.library/2.0.3", + "hashPath": "netstandard.library.2.0.3.nupkg.sha512" + }, + "System.Buffers/4.5.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==", + "path": "system.buffers/4.5.1", + "hashPath": "system.buffers.4.5.1.nupkg.sha512" + }, + "System.Collections/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "path": "system.collections/4.3.0", + "hashPath": "system.collections.4.3.0.nupkg.sha512" + }, + "System.Collections.Immutable/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==", + "path": "system.collections.immutable/5.0.0", + "hashPath": "system.collections.immutable.5.0.0.nupkg.sha512" + }, + "System.Configuration.ConfigurationManager/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/anOTeSZCNNI2zDilogWrZ8pNqCmYbzGNexUnNhjW8k0sHqEZ2nHJBp147jBV3hGYswu5lINpNg1vxR7bnqvVA==", + "path": "system.configuration.configurationmanager/4.7.0", + "hashPath": "system.configuration.configurationmanager.4.7.0.nupkg.sha512" + }, + "System.Globalization/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", + "path": "system.globalization/4.3.0", + "hashPath": "system.globalization.4.3.0.nupkg.sha512" + }, + "System.IO/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "path": "system.io/4.3.0", + "hashPath": "system.io.4.3.0.nupkg.sha512" + }, + "System.Memory/4.5.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==", + "path": "system.memory/4.5.4", + "hashPath": "system.memory.4.5.4.nupkg.sha512" + }, + "System.Numerics.Vectors/4.4.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==", + "path": "system.numerics.vectors/4.4.0", + "hashPath": "system.numerics.vectors.4.4.0.nupkg.sha512" + }, + "System.Reflection/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "path": "system.reflection/4.3.0", + "hashPath": "system.reflection.4.3.0.nupkg.sha512" + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", + "path": "system.reflection.primitives/4.3.0", + "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512" + }, + "System.Resources.ResourceManager/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "path": "system.resources.resourcemanager/4.3.0", + "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512" + }, + "System.Runtime/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "path": "system.runtime/4.3.0", + "hashPath": "system.runtime.4.3.0.nupkg.sha512" + }, + "System.Runtime.CompilerServices.Unsafe/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA==", + "path": "system.runtime.compilerservices.unsafe/5.0.0", + "hashPath": "system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512" + }, + "System.Runtime.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", + "path": "system.runtime.extensions/4.3.0", + "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512" + }, + "System.Runtime.Handles/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", + "path": "system.runtime.handles/4.3.0", + "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512" + }, + "System.Runtime.InteropServices/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", + "path": "system.runtime.interopservices/4.3.0", + "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512" + }, + "System.Security.AccessControl/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==", + "path": "system.security.accesscontrol/4.7.0", + "hashPath": "system.security.accesscontrol.4.7.0.nupkg.sha512" + }, + "System.Security.Cryptography.ProtectedData/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ehYW0m9ptxpGWvE4zgqongBVWpSDU/JCFD4K7krxkQwSz/sFQjEXCUqpvencjy6DYDbn7Ig09R8GFffu8TtneQ==", + "path": "system.security.cryptography.protecteddata/4.7.0", + "hashPath": "system.security.cryptography.protecteddata.4.7.0.nupkg.sha512" + }, + "System.Security.Permissions/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-dkOV6YYVBnYRa15/yv004eCGRBVADXw8qRbbNiCn/XpdJSUXkkUeIvdvFHkvnko4CdKMqG8yRHC4ox83LSlMsQ==", + "path": "system.security.permissions/4.7.0", + "hashPath": "system.security.permissions.4.7.0.nupkg.sha512" + }, + "System.Security.Principal.Windows/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==", + "path": "system.security.principal.windows/4.7.0", + "hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512" + }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "path": "system.text.encoding/4.3.0", + "hashPath": "system.text.encoding.4.3.0.nupkg.sha512" + }, + "System.Text.Encoding.CodePages/4.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-h4z6rrA/hxWf4655D18IIZ0eaLRa3tQC/j+e26W+VinIHY0l07iEXaAvO0YSYq3MvCjMYy8Zs5AdC1sxNQOB7Q==", + "path": "system.text.encoding.codepages/4.0.1", + "hashPath": "system.text.encoding.codepages.4.0.1.nupkg.sha512" + }, + "System.Threading/4.0.11": { + "type": "package", + "serviceable": true, + "sha512": "sha512-N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==", + "path": "system.threading/4.0.11", + "hashPath": "system.threading.4.0.11.nupkg.sha512" + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "path": "system.threading.tasks/4.3.0", + "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512" + } + } +} \ No newline at end of file diff --git a/build/bin/HeuristicLab.Build.dll b/build/bin/HeuristicLab.Build.dll new file mode 100644 index 0000000000000000000000000000000000000000..86dcef89b8c924e8782b4c800729acf3701388fa GIT binary patch literal 6144 zcmeHLYit}>6+Sb&UfY{wW5-F8v`M;-U1d`z>viHJPMU}9tmC-&vGMvrS|fXQ_j*0a z?966n*0m|6u2c{YA+-{Ph988YfD{R&1}X@k5`jWn1mOo#P=D~K5I>M8ssITIhzQ@g zvum%tP89fo`lEMszq#je&pr3tJNMk#fhS%d9})Rc@7y7}h9{R!iT8#Dh(iy5KSZz9 z-fX<4^xte8nbDna-nO!~mJ6pf)3n@hN`&o#8P?5kd?*>tSs4*sw=URRG@a-n>Q{X9 zx7(u^OQXF*JHu;~7*QQK0gwCRD4t=|PE?kJfvV>>GuVGw7J%S$@zK;Lq!G5m#^iJH z!A#1-?hrRRi555zE6WtoTJZY!5{;~s-HQ$r)s)F=K%Xw7qpp~9LBACOKqh@F`VC5! zFws=hcI-4L>02inJkbrPWu+6|M{QwPP-I_e3YBd=fLc~MiMq>3*}TkgMPc7ms-jOd z65Uusq)6_64?EQeW)!4Hcc@RphX2u>s_z-uAZm#D>0OuvSx+`FA5lbXOs;}B}gw#kq2s;O9O$6}>MqsbS+K3iaM>erypr$@xKL>?? zg+K%&n^}gAa>N(e>=tm=6&Y7cj0S(LH&Atb^`4{U1J(Oij#TT7R8#M-uc;hrb3<(l z)z=~fk*z#7H@x6fHoB9KcPquH^BT^!M`O|bvHfj_c@3(_0ItQ_H+`IF4$s@zt4&GQ z*3GQL8ZI{5TX;5&Ch2Icx1E}LNBiR7^@El1p^uZ$|1f% z`iIm^sMo=N8-3Xy&l@kcb@W?!&;}m=>gbnhI~_nv#jlQDlQI?7n0f=f+weYBOX{zZ zT9240w1vK{j4k}d_Z?uL%I&KXCna9CsSN`La5pjRkGk3)LhcLw|VqbU*a~AEN~DBz*+B7j+X;H9s z$JNvQS}NLI(7`f=>$sYk(d-Nji@c$w1tqP5jYq$g9T1MAWd)tm4M8WZTuL_u4d`jx za;$0BGZ7tibwhV`;Y3ebwp7dMZd`K(#YL)+%?i8Qww`jdlp&HXvxminf^LgUmy2UC zRR9O3^BBVJ6{fJEQYP|jaOWlU3cE|9F2@nMlrcY|yX8GbG&?KYQ@GuTr!4z?r9RJa zOxTWYnU%smbK0_VnhT+3+*RwOWlrna0{mZQ#G9LB4hut@lP#xm5Ug9KkajBtY(O*T zmjuHF)75iA@?AZ}(Jzzs%!xF|bXGG8g1R+FjA+@?CMkA}7AJw7L46LkiaYP6Btn!X zvGCMwYi4?e5}NDbOvSP<29riK=RCzVX9n9!7_02EXvQ#jcUg|^TK4>?Z4~{H?iGEZ z(R>C=U!sb;dRR;w*v*J2B}EQGIT}37!uQj{$b-W^FYS7AmXib8Im?FkCNP@D_@!9H zbuDXJ{5m)#Rw+EC{g@Q?tezH5aVKL)ymTP%`U>z)#_o5hXAUo#1JX=uE)Avlm84$X zEh-=yTBge|M))#0ZtJcn5nZ;e%@g0pOIw+Ga(Q>Yv`+HnukD~iI8)n*HYISnT9hY& zr;Afo5Uv$1T|fuz9L{8e(3wn{hF%ospaYzSwg#yndidVD)G!L`8ECV0ld?FSX?-(| z<7^zJ9-Q*cu#vzh1;|)ql`$GBX-P9O`;;_LHD_|}zsR1m9iX{u7s=f$?Y82#n zE<5HXY+mwtC_ z>|+aTu zdWx;WXFa|vf4GyV8Q)K(((L2g>KN|tlfWLF@kwNlAsPhT2R!Bd>q4*l-}|?B&*fds z#e1Ic2;5Yc-+7tM-?WN6J#E;#d{k*^O6tULf_cAooTG>VG#k+OB<%6=%V+pJW>n0Bkl+0b?_NB-*^fbKr!+1f zhz<@{KKt{_{Jmd$IAP&e$=(?3*|4}Y?>6L~*ka}JH$$Iux+`@}%)uy|$^DEQMN%;E z;}XI5g@Sw~5KXqk5y~SrJfkeKp9`HZ>X;mNsL1DB&)OxwnUXh(`-)@v_};pBH<=6~ zoyLg&%eutyg{07OJ1e8P6iY(J Date: Wed, 6 Apr 2022 13:26:16 +0200 Subject: [PATCH 05/39] Adapted all .csproj files to use new MSBuild Task --- .../HeuristicLab.Algorithms.ALPS-3.3.csproj | 17 ++--------------- ...cLab.Algorithms.Benchmarks.Views-3.3.csproj | 17 ++--------------- ...uristicLab.Algorithms.Benchmarks-3.3.csproj | 17 ++--------------- ....Algorithms.CMAEvolutionStrategy-3.4.csproj | 17 ++--------------- ...ithms.DataAnalysis.DecisionTrees-3.4.csproj | 17 ++--------------- ...b.Algorithms.DataAnalysis.Glmnet-3.4.csproj | 17 ++--------------- ...ab.Algorithms.DataAnalysis.Views-3.4.csproj | 18 ++---------------- ...isticLab.Algorithms.DataAnalysis-3.4.csproj | 17 ++--------------- ...Lab.Algorithms.EvolutionStrategy-3.3.csproj | 17 ++--------------- ...cLab.Algorithms.GeneticAlgorithm-3.3.csproj | 17 ++--------------- ...icLab.Algorithms.GradientDescent-3.3.csproj | 17 ++--------------- ...risticLab.Algorithms.LocalSearch-3.3.csproj | 17 ++--------------- ...lgorithms.MOCMAEvolutionStrategy-3.3.csproj | 17 ++--------------- ...Algorithms.MultiObjectiveLocalSearch.csproj | 11 ++--------- .../HeuristicLab.Algorithms.NSGA2-3.3.csproj | 17 ++--------------- ...springSelectionEvolutionStrategy-3.3.csproj | 17 ++--------------- ...fspringSelectionGeneticAlgorithm-3.3.csproj | 17 ++--------------- ...s.ParameterlessPopulationPyramid-3.3.csproj | 18 ++---------------- ...rithms.ParticleSwarmOptimization-3.3.csproj | 16 ++-------------- .../HeuristicLab.Algorithms.RAPGA-3.3.csproj | 17 ++--------------- ...isticLab.Algorithms.RandomSearch-3.3.csproj | 18 ++---------------- ...sticLab.Algorithms.ScatterSearch-3.3.csproj | 17 ++--------------- ...ab.Algorithms.SimulatedAnnealing-3.3.csproj | 17 ++--------------- ...uristicLab.Algorithms.TabuSearch-3.3.csproj | 17 ++--------------- ...ithms.VariableNeighborhoodSearch-3.3.csproj | 17 ++--------------- ...ticLab.Analysis.Statistics.Views-3.3.csproj | 17 ++--------------- .../3.3/HeuristicLab.Analysis.Views-3.3.csproj | 17 ++--------------- .../3.3/HeuristicLab.Analysis-3.3.csproj | 17 ++--------------- ...ab.Clients.Access.Administration-3.3.csproj | 15 ++------------- ...euristicLab.Clients.Access.Views-3.3.csproj | 15 ++------------- .../3.3/HeuristicLab.Clients.Access-3.3.csproj | 15 ++------------- .../3.3/HeuristicLab.Clients.Common-3.3.csproj | 17 ++--------------- ...icLab.Clients.Hive.Administrator-3.3.csproj | 16 ++-------------- ...isticLab.Clients.Hive.JobManager-3.3.csproj | 16 ++-------------- ...risticLab.Clients.Hive.Slave.App-3.3.csproj | 16 ++-------------- ...Clients.Hive.Slave.ConsoleClient-3.3.csproj | 16 ++-------------- ...cLab.Clients.Hive.Slave.TrayIcon-3.3.csproj | 16 ++-------------- ...sticLab.Clients.Hive.Slave.Views-3.3.csproj | 16 ++-------------- ...lients.Hive.Slave.WindowsService-3.3.csproj | 16 ++-------------- .../HeuristicLab.Clients.Hive.Slave-3.3.csproj | 14 ++------------ .../HeuristicLab.Clients.Hive.Views-3.3.csproj | 16 ++-------------- .../3.3/HeuristicLab.Clients.Hive-3.3.csproj | 15 ++------------- .../HeuristicLab.Clients.OKB.Views-3.3.csproj | 15 ++------------- .../3.3/HeuristicLab.Clients.OKB-3.3.csproj | 15 ++------------- .../3.4/HeuristicLab.CodeEditor-3.4.csproj | 18 ++---------------- .../3.3/HeuristicLab.Collections-3.3.csproj | 17 ++--------------- .../HeuristicLab.Common.Resources-3.3.csproj | 17 ++--------------- .../3.3/HeuristicLab.Common-3.3.csproj | 17 ++--------------- .../3.3/HeuristicLab.Core.Views-3.3.csproj | 17 ++--------------- .../3.3/HeuristicLab.Core-3.3.csproj | 17 ++--------------- .../3.3/HeuristicLab.Data.Views-3.3.csproj | 17 ++--------------- .../3.3/HeuristicLab.Data-3.3.csproj | 17 ++--------------- ...isticLab.DataPreprocessing.Views-3.4.csproj | 17 ++--------------- .../HeuristicLab.DataPreprocessing-3.4.csproj | 17 ++--------------- .../HeuristicLab.DebugEngine.Views-3.3.csproj | 17 ++--------------- .../3.3/HeuristicLab.DebugEngine-3.3.csproj | 17 ++--------------- ...b.Encodings.BinaryVectorEncoding-3.3.csproj | 17 ++--------------- ....Encodings.IntegerVectorEncoding-3.3.csproj | 17 ++--------------- ....Encodings.LinearLinkageEncoding-3.4.csproj | 17 ++--------------- ...odings.PermutationEncoding.Views-3.3.csproj | 17 ++--------------- ...ab.Encodings.PermutationEncoding-3.3.csproj | 17 ++--------------- ...Lab.Encodings.RealVectorEncoding-3.3.csproj | 17 ++--------------- ...Encodings.ScheduleEncoding.Views-3.3.csproj | 17 ++--------------- ...icLab.Encodings.ScheduleEncoding-3.3.csproj | 17 ++--------------- ...olicExpressionTreeEncoding.Views-3.4.csproj | 17 ++--------------- ...s.SymbolicExpressionTreeEncoding-3.4.csproj | 17 ++--------------- ...isticLab.ExactOptimization.Views-3.3.csproj | 10 ++-------- .../HeuristicLab.ExactOptimization-3.3.csproj | 10 ++-------- .../HeuristicLab.ALGLIB-3.15.0.csproj | 17 ++--------------- .../HeuristicLab.ALGLIB-3.17.0.csproj | 17 ++--------------- .../HeuristicLab.ALGLIB-3.7.0.csproj | 17 ++--------------- .../1.0.0/HeuristicLab.Attic.csproj | 17 ++--------------- .../HeuristicLab.AutoDiff-1.0.csproj | 17 ++--------------- .../HeuristicLab.AvalonEdit-5.0.1.csproj | 18 ++---------------- .../HeuristicLab.Cecil-0.9.5.csproj | 17 ++--------------- .../1.0/HeuristicLab.DayView-1.0.csproj | 16 ++-------------- .../HeuristicLab.DotNetScilab-1.0.csproj | 17 ++--------------- .../HeuristicLab.EPPlus-4.0.3.csproj | 17 ++--------------- .../1.12/HeuristicLab.GeoIP.csproj | 16 ++-------------- .../HeuristicLab.LibSVM-3.12.csproj | 17 ++--------------- .../HeuristicLab.MathJax-2.7.5.csproj | 17 ++--------------- .../HeuristicLab.MatlabConnector-1.0.csproj | 17 ++--------------- .../HeuristicLab.NRefactory-5.5.0.csproj | 18 ++---------------- .../HeuristicLab.OrTools-7.0.0.csproj | 10 ++-------- .../3.6.1/HeuristicLab.Protobuf.csproj | 17 ++--------------- .../HeuristicLab.ProtobufCS-2.4.1.473.csproj | 17 ++--------------- .../HeuristicLab.SimSharp-3.3.2.csproj | 18 ++---------------- .../HeuristicLab.WinFormsUI-2.7.0.csproj | 17 ++--------------- .../3.3/HeuristicLab.Hive-3.3.csproj | 16 ++-------------- ...uristicLab.MainForm.WindowsForms-3.3.csproj | 17 ++--------------- .../3.3/HeuristicLab.MainForm-3.3.csproj | 17 ++--------------- ...Lab.Operators.Programmable.Views-3.3.csproj | 17 ++--------------- ...risticLab.Operators.Programmable-3.3.csproj | 17 ++--------------- ...s.Views.GraphVisualization.Views-3.3.csproj | 17 ++--------------- ...erators.Views.GraphVisualization-3.3.csproj | 17 ++--------------- .../HeuristicLab.Operators.Views-3.3.csproj | 17 ++--------------- .../3.3/HeuristicLab.Operators-3.3.csproj | 17 ++--------------- ...risticLab.Optimization.Operators-3.3.csproj | 17 ++--------------- .../HeuristicLab.Optimization.Views-3.3.csproj | 17 ++--------------- .../3.3/HeuristicLab.Optimization-3.3.csproj | 17 ++--------------- .../3.3/HeuristicLab.Optimizer-3.3.csproj | 17 ++--------------- ...euristicLab.ParallelEngine.Views-3.3.csproj | 17 ++--------------- .../3.3/HeuristicLab.ParallelEngine-3.3.csproj | 17 ++--------------- .../HeuristicLab.Parameters.Views-3.3.csproj | 17 ++--------------- .../3.3/HeuristicLab.Parameters-3.3.csproj | 17 ++--------------- .../HeuristicLab.Persistence.GUI-3.3.csproj | 17 ++--------------- .../3.3/HeuristicLab.Persistence-3.3.csproj | 15 ++------------- ...euristicLab.PluginInfrastructure-3.3.csproj | 16 ++-------------- ...ticLab.Problems.BinPacking.Views-3.3.csproj | 17 ++--------------- ...HeuristicLab.Problems.BinPacking-3.3.csproj | 17 ++--------------- .../HeuristicLab.Problems.Binary-3.3.csproj | 18 ++---------------- ...is.Symbolic.Classification.Views-3.4.csproj | 17 ++--------------- ...Analysis.Symbolic.Classification-3.4.csproj | 17 ++--------------- ...alysis.Symbolic.Regression.Views-3.4.csproj | 17 ++--------------- ...DataAnalysis.Symbolic.Regression-3.4.csproj | 17 ++--------------- ...mbolic.TimeSeriesPrognosis.Views-3.4.csproj | 18 ++---------------- ...sis.Symbolic.TimeSeriesPrognosis-3.4.csproj | 18 ++---------------- ...lems.DataAnalysis.Symbolic.Views-3.4.csproj | 17 ++--------------- ...b.Problems.DataAnalysis.Symbolic-3.4.csproj | 17 ++--------------- ...blems.DataAnalysis.Trading.Views-3.4.csproj | 18 ++---------------- ...ab.Problems.DataAnalysis.Trading-3.4.csproj | 18 ++---------------- ...cLab.Problems.DataAnalysis.Views-3.4.csproj | 17 ++--------------- ...uristicLab.Problems.DataAnalysis-3.4.csproj | 17 ++--------------- ...b.Problems.ExternalEvaluation.GP-3.5.csproj | 16 ++-------------- ...oblems.ExternalEvaluation.Matlab-3.3.csproj | 18 ++---------------- ...oblems.ExternalEvaluation.Scilab-3.3.csproj | 18 ++---------------- ...roblems.ExternalEvaluation.Views-3.4.csproj | 17 ++--------------- ...cLab.Problems.ExternalEvaluation-3.4.csproj | 3 ++- ...roblems.GeneticProgramming.Views-3.3.csproj | 17 ++--------------- ...cLab.Problems.GeneticProgramming-3.3.csproj | 17 ++--------------- ...ab.Problems.GrammaticalEvolution-3.4.csproj | 17 ++--------------- ...risticLab.Problems.GraphColoring-3.3.csproj | 17 ++--------------- ...b.Problems.Instances.CordeauGQAP-3.3.csproj | 16 ++-------------- ...ticLab.Problems.Instances.DIMACS-3.3.csproj | 17 ++--------------- ...ems.Instances.DataAnalysis.Views-3.3.csproj | 17 ++--------------- ....Problems.Instances.DataAnalysis-3.3.csproj | 16 ++-------------- ...b.Problems.Instances.ElloumiCTAP-3.3.csproj | 16 ++-------------- ....Problems.Instances.Orienteering-3.3.csproj | 18 ++---------------- ...ticLab.Problems.Instances.QAPLIB-3.3.csproj | 16 ++-------------- ...ab.Problems.Instances.Scheduling-3.3.csproj | 17 ++--------------- ....Problems.Instances.TSPLIB.Views-3.3.csproj | 16 ++-------------- ...ticLab.Problems.Instances.TSPLIB-3.3.csproj | 16 ++-------------- ...s.Instances.VehicleRouting.Views-3.4.csproj | 16 ++-------------- ...roblems.Instances.VehicleRouting-3.4.csproj | 16 ++-------------- ...sticLab.Problems.Instances.Views-3.3.csproj | 17 ++--------------- .../HeuristicLab.Problems.Instances-3.3.csproj | 16 ++-------------- ...isticLab.Problems.Knapsack.Views-3.3.csproj | 17 ++--------------- .../HeuristicLab.Problems.Knapsack-3.3.csproj | 17 ++--------------- ....Problems.LinearAssignment.Views-3.3.csproj | 16 ++-------------- ...ticLab.Problems.LinearAssignment-3.3.csproj | 16 ++-------------- .../3.3/HeuristicLab.Problems.NK-3.3.csproj | 18 ++---------------- ...cLab.Problems.Orienteering.Views-3.3.csproj | 18 ++---------------- ...uristicLab.Problems.Orienteering-3.3.csproj | 18 ++---------------- ...HeuristicLab.Problems.PTSP.Views-3.3.csproj | 18 ++---------------- .../3.3/HeuristicLab.Problems.PTSP-3.3.csproj | 18 ++---------------- ...b.Problems.ParameterOptimization-3.3.csproj | 18 ++---------------- ...cLab.Problems.Programmable.Views-3.3.csproj | 18 ++---------------- ...uristicLab.Problems.Programmable-3.3.csproj | 18 ++---------------- ...s.QuadraticAssignment.Algorithms-3.3.csproj | 17 ++--------------- ...oblems.QuadraticAssignment.Views-3.3.csproj | 17 ++--------------- ...Lab.Problems.QuadraticAssignment-3.3.csproj | 16 ++-------------- ...ticLab.Problems.Scheduling.Views-3.3.csproj | 17 ++--------------- ...HeuristicLab.Problems.Scheduling-3.3.csproj | 17 ++--------------- ...ems.TestFunctions.MultiObjective-3.3.csproj | 17 ++--------------- ...Lab.Problems.TestFunctions.Views-3.3.csproj | 17 ++--------------- ...risticLab.Problems.TestFunctions-3.3.csproj | 17 ++--------------- ...Problems.TravelingSalesman.Views-3.3.csproj | 17 ++--------------- ...icLab.Problems.TravelingSalesman-3.3.csproj | 17 ++--------------- ...ab.Problems.VehicleRouting.Views-3.4.csproj | 16 ++-------------- ...isticLab.Problems.VehicleRouting-3.4.csproj | 16 ++-------------- .../3.3/HeuristicLab.Random-3.3.csproj | 17 ++--------------- .../HeuristicLab.Scripting.Views-3.3.csproj | 17 ++--------------- .../3.3/HeuristicLab.Scripting-3.3.csproj | 17 ++--------------- .../3.3/HeuristicLab.Selection-3.3.csproj | 17 ++--------------- .../HeuristicLab.SequentialEngine-3.3.csproj | 17 ++--------------- ...icLab.Services.Access.DataAccess-3.3.csproj | 16 ++-------------- .../HeuristicLab.Services.Access-3.3.csproj | 16 ++-------------- ...b.Services.Deployment.DataAccess-3.3.csproj | 17 ++--------------- ...HeuristicLab.Services.Deployment-3.3.csproj | 16 ++-------------- ...sticLab.Services.Hive.DataAccess-3.3.csproj | 16 ++-------------- ...Lab.Services.Hive.JanitorService-3.3.csproj | 16 ++-------------- .../3.3/HeuristicLab.Services.Hive-3.3.csproj | 16 ++-------------- ...isticLab.Services.OKB.DataAccess-3.3.csproj | 16 ++-------------- .../3.3/HeuristicLab.Services.OKB-3.3.csproj | 16 ++-------------- ...cLab.Services.WebApp.Maintenance-3.3.csproj | 10 ++-------- ...icLab.Services.WebApp.Statistics-3.3.csproj | 10 ++-------- ...risticLab.Services.WebApp.Status-3.3.csproj | 10 ++-------- .../HeuristicLab.Services.WebApp-3.3.csproj | 10 ++-------- .../3.3/HeuristicLab.Tracing-3.3.csproj | 17 ++--------------- ...lization.ChartControlsExtensions-3.3.csproj | 17 ++--------------- HeuristicLab/3.3/HeuristicLab-3.3.csproj | 13 ++----------- 191 files changed, 382 insertions(+), 2762 deletions(-) diff --git a/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj b/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj index 671eecec8e..67b49a4088 100644 --- a/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj +++ b/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj @@ -191,19 +191,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj b/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj index e9d598b80b..fe893db2aa 100644 --- a/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj +++ b/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj @@ -157,21 +157,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj b/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj index c37f8067b0..b1c194c6a1 100644 --- a/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj +++ b/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj @@ -164,21 +164,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj b/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj index e32126e136..f105e4f248 100644 --- a/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj +++ b/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj @@ -245,19 +245,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj index c7c6e537aa..b4355478d1 100644 --- a/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj @@ -195,19 +195,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj index 5b13189e35..c7134adb81 100644 --- a/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj @@ -188,19 +188,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj index bfcb0a834d..cb341f4a8e 100644 --- a/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj @@ -342,22 +342,6 @@ - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj index 151cbd7a59..a9794825af 100644 --- a/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj @@ -498,19 +498,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj b/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj index 577b2936e1..3c2e6731d9 100644 --- a/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj +++ b/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj @@ -223,19 +223,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj b/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj index e797c37db9..6fa9c93e3c 100644 --- a/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj +++ b/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj @@ -226,19 +226,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj b/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj index 27c931623a..c99f986a14 100644 --- a/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj +++ b/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj @@ -202,21 +202,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -228,4 +213,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj b/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj index cb073a693f..0fb3a45e59 100644 --- a/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj @@ -223,19 +223,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj b/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj index 273b594bdb..d5a8dabe3b 100644 --- a/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj +++ b/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj @@ -176,21 +176,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.MultiObjectiveLocalSearch/3.3/HeuristicLab.Algorithms.MultiObjectiveLocalSearch.csproj b/HeuristicLab.Algorithms.MultiObjectiveLocalSearch/3.3/HeuristicLab.Algorithms.MultiObjectiveLocalSearch.csproj index 8355e5daaa..e02e5f9799 100644 --- a/HeuristicLab.Algorithms.MultiObjectiveLocalSearch/3.3/HeuristicLab.Algorithms.MultiObjectiveLocalSearch.csproj +++ b/HeuristicLab.Algorithms.MultiObjectiveLocalSearch/3.3/HeuristicLab.Algorithms.MultiObjectiveLocalSearch.csproj @@ -165,13 +165,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj b/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj index e7485e8aef..a335ac89e0 100644 --- a/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj +++ b/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj @@ -211,23 +211,10 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj b/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj index 1152839866..13bcb30265 100644 --- a/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj +++ b/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj @@ -223,19 +223,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj b/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj index 03f4021a85..04d077bffa 100644 --- a/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj +++ b/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj @@ -228,19 +228,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj b/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj index 5b406296be..01e6d54473 100644 --- a/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj +++ b/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj @@ -167,22 +167,6 @@ - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj b/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj index 6f9a8ad7b6..613662fd28 100644 --- a/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj +++ b/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj @@ -223,22 +223,10 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj b/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj index 2c0e2a3b02..be87789e0e 100644 --- a/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj +++ b/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj @@ -189,19 +189,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj b/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj index 2ee6ac40bd..ab8c2201d4 100644 --- a/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj @@ -142,22 +142,6 @@ - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj b/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj index f5cb170607..710fa1e864 100644 --- a/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj @@ -179,21 +179,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj b/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj index 4cae2eff5e..f7f7d5a395 100644 --- a/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj +++ b/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj @@ -218,19 +218,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj b/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj index 612433d0b2..7063f1631c 100644 --- a/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj @@ -231,19 +231,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj b/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj index 78344e98e0..a1c7c49c8c 100644 --- a/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj @@ -222,19 +222,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj b/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj index e79f291b8b..628bfbe5ed 100644 --- a/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj +++ b/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj @@ -270,19 +270,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj b/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj index 74ccf2d97a..978b3b392b 100644 --- a/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj +++ b/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj @@ -329,19 +329,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj b/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj index 8c9f381325..abacfc3553 100644 --- a/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj +++ b/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj @@ -276,19 +276,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj b/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj index 472fe74f4b..f5f636dd6d 100644 --- a/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj +++ b/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj @@ -307,19 +307,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -331,4 +318,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj b/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj index c80e70b1e0..0d04a4a0d7 100644 --- a/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj +++ b/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj @@ -259,19 +259,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -283,4 +270,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj b/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj index cb061a82c7..65868476ad 100644 --- a/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj +++ b/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj @@ -205,19 +205,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -229,4 +216,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj b/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj index 057d0a4765..37f22146aa 100644 --- a/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj +++ b/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj @@ -158,21 +158,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj b/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj index bf7bab67f4..fdf0ea44ed 100644 --- a/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj @@ -301,20 +301,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -326,4 +312,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj b/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj index a3daff52cf..081618308c 100644 --- a/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj +++ b/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj @@ -253,20 +253,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -278,4 +264,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj index 2051670eb7..d0f68131cf 100644 --- a/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj @@ -146,20 +146,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -171,4 +157,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj index ec18bc20ff..fb4a9b55c5 100644 --- a/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj @@ -118,20 +118,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj index 08307bc672..87cdbf91a6 100644 --- a/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj @@ -153,20 +153,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj index ab06e723d1..b6c823e458 100644 --- a/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj @@ -271,20 +271,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj index 77642824c8..f93b46968e 100644 --- a/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj @@ -170,20 +170,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj b/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj index 0cfcd21d7d..2c4d91f191 100644 --- a/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj @@ -182,18 +182,6 @@ - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) set ProjectDir=$(ProjectDir) @@ -221,4 +209,6 @@ $SolutionDir/MergeConfigs.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj b/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj index 774a136842..3cd2a4374c 100644 --- a/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj @@ -276,20 +276,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj b/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj index afd3cad792..9f7d2c7978 100644 --- a/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj +++ b/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj @@ -273,19 +273,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj b/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj index 02d573b650..ab8b699a92 100644 --- a/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj +++ b/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj @@ -388,19 +388,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj b/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj index 40a891565d..0c3cab5e2f 100644 --- a/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj +++ b/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj @@ -277,19 +277,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj b/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj index 3106d502cb..c675ae5b7a 100644 --- a/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj +++ b/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj @@ -241,22 +241,6 @@ - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj b/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj index 8294aebb45..2254629cee 100644 --- a/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj +++ b/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj @@ -210,19 +210,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Common.Resources/3.3/HeuristicLab.Common.Resources-3.3.csproj b/HeuristicLab.Common.Resources/3.3/HeuristicLab.Common.Resources-3.3.csproj index 6d1d80e199..41760ce8fb 100644 --- a/HeuristicLab.Common.Resources/3.3/HeuristicLab.Common.Resources-3.3.csproj +++ b/HeuristicLab.Common.Resources/3.3/HeuristicLab.Common.Resources-3.3.csproj @@ -505,19 +505,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj b/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj index 40a6ed5a04..5468e5ed39 100644 --- a/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj +++ b/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj @@ -198,19 +198,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj b/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj index c931cd46a6..8248798f8e 100644 --- a/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj +++ b/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj @@ -417,19 +417,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj b/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj index b545b43f2e..113241170b 100644 --- a/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj +++ b/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj @@ -286,19 +286,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj b/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj index f94b22ab3d..d9e983adc9 100644 --- a/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj +++ b/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj @@ -304,19 +304,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj b/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj index 2697e24f32..9a773115d1 100644 --- a/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj +++ b/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj @@ -233,19 +233,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj b/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj index 5af4703c52..9e3b448371 100644 --- a/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj +++ b/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj @@ -355,21 +355,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj b/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj index 529f57c2cb..11e7147f69 100644 --- a/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj +++ b/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj @@ -180,21 +180,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj b/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj index e2712edae3..a56294d652 100644 --- a/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj +++ b/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj @@ -201,21 +201,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj b/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj index 16797bb575..a1dd0bc86e 100644 --- a/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj +++ b/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj @@ -147,21 +147,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -173,4 +158,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj b/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj index dbab4ecbc7..1bfbd96643 100644 --- a/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj @@ -237,19 +237,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj b/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj index 9922aabde1..1f5282bd0f 100644 --- a/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj @@ -249,19 +249,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj b/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj index 69588e5615..4d1768dbff 100644 --- a/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj +++ b/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj @@ -216,21 +216,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj b/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj index 3817302baa..afea963393 100644 --- a/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj +++ b/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj @@ -232,19 +232,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj b/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj index e46cfc351c..3f7ee4bd90 100644 --- a/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj @@ -298,19 +298,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj b/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj index 73149d7d60..e0fcf1dbbd 100644 --- a/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj @@ -289,19 +289,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj b/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj index 12b2662732..773949df12 100644 --- a/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj +++ b/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj @@ -204,21 +204,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj b/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj index 0b7fc05478..19d3d3a50e 100644 --- a/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj @@ -233,21 +233,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj b/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj index 0feb792e2a..0fcca919af 100644 --- a/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj +++ b/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj @@ -285,19 +285,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj b/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj index 3c095f98bf..754b2e425e 100644 --- a/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj +++ b/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj @@ -308,19 +308,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj b/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj index 7d60fcc581..ec0ca70694 100644 --- a/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj +++ b/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj @@ -187,14 +187,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - copy /y "$(TargetPath)" "$(SolutionDir)\bin" @@ -205,4 +197,6 @@ call PreBuildEvent.cmd --> + + \ No newline at end of file diff --git a/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj b/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj index 62651cd1b0..4ec1b12b5a 100644 --- a/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj +++ b/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj @@ -208,14 +208,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - copy /y "$(TargetPath)" "$(SolutionDir)\bin" copy /y "$(TargetPath).config" "$(SolutionDir)\bin" @@ -227,4 +219,6 @@ copy /y "$(TargetPath).config" "$(SolutionDir)\bin" --> + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/HeuristicLab.ALGLIB-3.15.0/HeuristicLab.ALGLIB-3.15.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/HeuristicLab.ALGLIB-3.15.0/HeuristicLab.ALGLIB-3.15.0.csproj index 5b2e8c339c..2bc429326b 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/HeuristicLab.ALGLIB-3.15.0/HeuristicLab.ALGLIB-3.15.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/HeuristicLab.ALGLIB-3.15.0/HeuristicLab.ALGLIB-3.15.0.csproj @@ -95,19 +95,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/HeuristicLab.ALGLIB-3.17.0/HeuristicLab.ALGLIB-3.17.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/HeuristicLab.ALGLIB-3.17.0/HeuristicLab.ALGLIB-3.17.0.csproj index 69e8842541..98007b9d57 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/HeuristicLab.ALGLIB-3.17.0/HeuristicLab.ALGLIB-3.17.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/HeuristicLab.ALGLIB-3.17.0/HeuristicLab.ALGLIB-3.17.0.csproj @@ -95,19 +95,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/HeuristicLab.ALGLIB-3.7.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/HeuristicLab.ALGLIB-3.7.0.csproj index 8633f7bbf3..bd94098954 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/HeuristicLab.ALGLIB-3.7.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/HeuristicLab.ALGLIB-3.7.0.csproj @@ -139,19 +139,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.Attic/1.0.0/HeuristicLab.Attic.csproj b/HeuristicLab.ExtLibs/HeuristicLab.Attic/1.0.0/HeuristicLab.Attic.csproj index d0ec64c584..57c05079a9 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.Attic/1.0.0/HeuristicLab.Attic.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.Attic/1.0.0/HeuristicLab.Attic.csproj @@ -75,19 +75,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/HeuristicLab.AutoDiff-1.0/HeuristicLab.AutoDiff-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/HeuristicLab.AutoDiff-1.0/HeuristicLab.AutoDiff-1.0.csproj index 2a6e0cd39e..e0d8a580a8 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/HeuristicLab.AutoDiff-1.0/HeuristicLab.AutoDiff-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/HeuristicLab.AutoDiff-1.0/HeuristicLab.AutoDiff-1.0.csproj @@ -138,19 +138,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/HeuristicLab.AvalonEdit-5.0.1/HeuristicLab.AvalonEdit-5.0.1.csproj b/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/HeuristicLab.AvalonEdit-5.0.1/HeuristicLab.AvalonEdit-5.0.1.csproj index b72811708d..fbe3c9c537 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/HeuristicLab.AvalonEdit-5.0.1/HeuristicLab.AvalonEdit-5.0.1.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/HeuristicLab.AvalonEdit-5.0.1/HeuristicLab.AvalonEdit-5.0.1.csproj @@ -109,20 +109,6 @@ - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/HeuristicLab.Cecil-0.9.5/HeuristicLab.Cecil-0.9.5.csproj b/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/HeuristicLab.Cecil-0.9.5/HeuristicLab.Cecil-0.9.5.csproj index 8e2cc731d1..4f3447ec97 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/HeuristicLab.Cecil-0.9.5/HeuristicLab.Cecil-0.9.5.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/HeuristicLab.Cecil-0.9.5/HeuristicLab.Cecil-0.9.5.csproj @@ -109,19 +109,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.DayView/1.0/HeuristicLab.DayView-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.DayView/1.0/HeuristicLab.DayView-1.0.csproj index cbdbcdbfbe..d56610cd0e 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.DayView/1.0/HeuristicLab.DayView-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.DayView/1.0/HeuristicLab.DayView-1.0.csproj @@ -159,22 +159,10 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj index 4d9714e6f1..8ad11e3227 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj @@ -112,21 +112,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/HeuristicLab.EPPlus-4.0.3.csproj b/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/HeuristicLab.EPPlus-4.0.3.csproj index 17c1aff0ed..604a20b7d4 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/HeuristicLab.EPPlus-4.0.3.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/HeuristicLab.EPPlus-4.0.3.csproj @@ -112,21 +112,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/HeuristicLab.GeoIP.csproj b/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/HeuristicLab.GeoIP.csproj index cf036c3554..ac41d1b7c6 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/HeuristicLab.GeoIP.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/HeuristicLab.GeoIP.csproj @@ -127,20 +127,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/HeuristicLab.LibSVM-3.12/HeuristicLab.LibSVM-3.12.csproj b/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/HeuristicLab.LibSVM-3.12/HeuristicLab.LibSVM-3.12.csproj index 95c1dedb55..44ef9b7a1b 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/HeuristicLab.LibSVM-3.12/HeuristicLab.LibSVM-3.12.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/HeuristicLab.LibSVM-3.12/HeuristicLab.LibSVM-3.12.csproj @@ -167,19 +167,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.7.5/HeuristicLab.MathJax-2.7.5/HeuristicLab.MathJax-2.7.5.csproj b/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.7.5/HeuristicLab.MathJax-2.7.5/HeuristicLab.MathJax-2.7.5.csproj index da5559f507..b9a9665244 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.7.5/HeuristicLab.MathJax-2.7.5/HeuristicLab.MathJax-2.7.5.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.7.5/HeuristicLab.MathJax-2.7.5/HeuristicLab.MathJax-2.7.5.csproj @@ -172,19 +172,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj index ef911163cd..4e0ec05092 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj @@ -111,21 +111,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/HeuristicLab.NRefactory-5.5.0/HeuristicLab.NRefactory-5.5.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/HeuristicLab.NRefactory-5.5.0/HeuristicLab.NRefactory-5.5.0.csproj index df132df7ce..602f62ed58 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/HeuristicLab.NRefactory-5.5.0/HeuristicLab.NRefactory-5.5.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/HeuristicLab.NRefactory-5.5.0/HeuristicLab.NRefactory-5.5.0.csproj @@ -121,20 +121,6 @@ - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.OrTools/7.0.0/HeuristicLab.OrTools-7.0.0/HeuristicLab.OrTools-7.0.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.OrTools/7.0.0/HeuristicLab.OrTools-7.0.0/HeuristicLab.OrTools-7.0.0.csproj index 9bcf61126e..88d01725ee 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.OrTools/7.0.0/HeuristicLab.OrTools-7.0.0/HeuristicLab.OrTools-7.0.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.OrTools/7.0.0/HeuristicLab.OrTools-7.0.0/HeuristicLab.OrTools-7.0.0.csproj @@ -123,14 +123,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.Protobuf/3.6.1/HeuristicLab.Protobuf.csproj b/HeuristicLab.ExtLibs/HeuristicLab.Protobuf/3.6.1/HeuristicLab.Protobuf.csproj index 87bf07f20c..4c166c78d8 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.Protobuf/3.6.1/HeuristicLab.Protobuf.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.Protobuf/3.6.1/HeuristicLab.Protobuf.csproj @@ -71,19 +71,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/HeuristicLab.ProtobufCS/HeuristicLab.ProtobufCS-2.4.1.473.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/HeuristicLab.ProtobufCS/HeuristicLab.ProtobufCS-2.4.1.473.csproj index 39b9d0bd3a..e9c04901b1 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/HeuristicLab.ProtobufCS/HeuristicLab.ProtobufCS-2.4.1.473.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/HeuristicLab.ProtobufCS/HeuristicLab.ProtobufCS-2.4.1.473.csproj @@ -151,19 +151,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.3.2/HeuristicLab.SimSharp-3.3.2/HeuristicLab.SimSharp-3.3.2.csproj b/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.3.2/HeuristicLab.SimSharp-3.3.2/HeuristicLab.SimSharp-3.3.2.csproj index 24629e5de4..81467bfe25 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.3.2/HeuristicLab.SimSharp-3.3.2/HeuristicLab.SimSharp-3.3.2.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.3.2/HeuristicLab.SimSharp-3.3.2/HeuristicLab.SimSharp-3.3.2.csproj @@ -105,20 +105,6 @@ - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/HeuristicLab.WinFormsUI-2.7.0/HeuristicLab.WinFormsUI-2.7.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/HeuristicLab.WinFormsUI-2.7.0/HeuristicLab.WinFormsUI-2.7.0.csproj index af37e66958..240544e430 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/HeuristicLab.WinFormsUI-2.7.0/HeuristicLab.WinFormsUI-2.7.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/HeuristicLab.WinFormsUI-2.7.0/HeuristicLab.WinFormsUI-2.7.0.csproj @@ -157,19 +157,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj b/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj index 97cf2c136c..9931990a91 100644 --- a/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj +++ b/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj @@ -135,20 +135,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj b/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj index 8ebbb6357e..8cbf7670c4 100644 --- a/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj +++ b/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj @@ -286,19 +286,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj b/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj index fe536d6a4f..dfdb93d1c9 100644 --- a/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj +++ b/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj @@ -186,19 +186,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj b/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj index bc31627904..27fd6952a7 100644 --- a/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj +++ b/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj @@ -184,21 +184,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj b/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj index 441a2bb8bf..7ff956b4a4 100644 --- a/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj +++ b/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj @@ -203,19 +203,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj b/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj index d984b6c4ae..9a369dca91 100644 --- a/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj +++ b/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj @@ -211,21 +211,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -237,4 +222,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj b/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj index 744a45132c..85fd4f53fd 100644 --- a/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj +++ b/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj @@ -208,19 +208,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj b/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj index b0f444d29d..1b4fab7629 100644 --- a/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj +++ b/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj @@ -257,19 +257,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj b/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj index 60a8fe37ee..f550057661 100644 --- a/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj +++ b/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj @@ -233,19 +233,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj b/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj index 71d6e9c9b1..cab17f63a5 100644 --- a/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj +++ b/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj @@ -245,19 +245,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj b/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj index 7e7ecceca3..5c09d99750 100644 --- a/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj +++ b/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj @@ -467,19 +467,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj b/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj index 065596d3cc..71e8d21814 100644 --- a/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj +++ b/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj @@ -344,19 +344,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj b/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj index 54748d0312..cdab92676d 100644 --- a/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj +++ b/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj @@ -373,19 +373,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj b/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj index 24e0714af6..47dc0499d1 100644 --- a/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj +++ b/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj @@ -150,21 +150,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj b/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj index 25f68e3270..bac1476b6b 100644 --- a/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj +++ b/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj @@ -157,21 +157,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj b/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj index 66c21ddc8f..fdcf0587fa 100644 --- a/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj +++ b/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj @@ -252,19 +252,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj b/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj index a4a73666af..48e883ef8c 100644 --- a/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj +++ b/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj @@ -202,19 +202,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj b/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj index 2124322fbd..06707dafc5 100644 --- a/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj +++ b/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj @@ -191,19 +191,6 @@ False - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj b/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj index 28700a2296..d45ac69219 100644 --- a/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj +++ b/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj @@ -243,19 +243,6 @@ - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - @@ -307,4 +294,6 @@ $SolutionDir/PreBuildEvent.sh False + + \ No newline at end of file diff --git a/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj b/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj index bea208728c..530198bf34 100644 --- a/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj +++ b/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj @@ -369,18 +369,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.BinPacking.Views/3.3/HeuristicLab.Problems.BinPacking.Views-3.3.csproj b/HeuristicLab.Problems.BinPacking.Views/3.3/HeuristicLab.Problems.BinPacking.Views-3.3.csproj index 4465b11936..df4701ca40 100644 --- a/HeuristicLab.Problems.BinPacking.Views/3.3/HeuristicLab.Problems.BinPacking.Views-3.3.csproj +++ b/HeuristicLab.Problems.BinPacking.Views/3.3/HeuristicLab.Problems.BinPacking.Views-3.3.csproj @@ -176,19 +176,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj b/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj index dd555bc427..a71a7e07ce 100644 --- a/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj +++ b/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj @@ -247,19 +247,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj b/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj index 96de11261c..2eb24eca90 100644 --- a/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj +++ b/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj @@ -165,22 +165,6 @@ - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj index deab438a03..4051b170e1 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj @@ -300,19 +300,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj index 23b0365224..f5838b1e3f 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj @@ -281,19 +281,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj index d57dec8c09..fefc94e421 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj @@ -306,19 +306,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj index 40589ea6a2..9122d262aa 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj @@ -297,19 +297,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj index 4bfb8537ee..18acc5898e 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj @@ -245,20 +245,6 @@ --> - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj index af397ddbb8..ac9915c909 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj @@ -249,20 +249,6 @@ --> - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj index 91e336b6ee..9fc73a8f12 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj @@ -336,19 +336,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj index f2084a68f2..a4929fe456 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj @@ -440,19 +440,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj index 99243fc809..a4da331c1f 100644 --- a/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj @@ -229,20 +229,6 @@ --> - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj index 2de3500df7..36d27a18bd 100644 --- a/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj @@ -237,20 +237,6 @@ --> - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj index 2e93de85ae..9f2c0c4f04 100644 --- a/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj @@ -639,19 +639,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj b/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj index c7f3312709..8604ecd625 100644 --- a/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj @@ -352,19 +352,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj b/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj index 2045128de2..13fc9521eb 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj @@ -205,18 +205,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj b/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj index 1a0b08f981..95edd1cfd6 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj @@ -169,22 +169,6 @@ - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj b/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj index a9d3f94889..e64dd26bf4 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj @@ -175,22 +175,6 @@ - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj b/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj index fd19f9bbd0..0286d674d5 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj @@ -234,21 +234,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj b/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj index 622965e06c..2b2fc19c43 100644 --- a/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj @@ -271,7 +271,6 @@ set ProjectDir=$(ProjectDir) set SolutionDir=$(SolutionDir) call "$(ProjectDir)\Protos\ProcessProtos.cmd" -call PreBuildEvent.cmd export ProjectDir=$(ProjectDir) @@ -280,4 +279,6 @@ export SolutionDir=$(SolutionDir) $SolutionDir/PreBuildEvent.sh + + \ No newline at end of file diff --git a/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj b/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj index 16a294647a..aab9ceff18 100644 --- a/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj +++ b/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj @@ -255,19 +255,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj b/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj index 815a0969ee..b9fb908171 100644 --- a/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj +++ b/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj @@ -252,19 +252,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj b/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj index 73103907e3..c93cb4e527 100644 --- a/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj +++ b/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj @@ -259,21 +259,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj b/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj index 6adc2927d5..caac2155bb 100644 --- a/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj +++ b/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj @@ -173,21 +173,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj b/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj index 4afb381190..5aa38c69ae 100644 --- a/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj +++ b/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj @@ -144,20 +144,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -169,4 +155,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj b/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj index cd9df0e35c..78a23ba068 100644 --- a/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj +++ b/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj @@ -114,21 +114,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj b/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj index 78e059b65c..1aeaac2d53 100644 --- a/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj +++ b/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj @@ -216,21 +216,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj b/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj index f9c52da3fc..eee82c2284 100644 --- a/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj +++ b/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj @@ -450,20 +450,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj b/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj index 554db0f8dc..4557b2a0aa 100644 --- a/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj +++ b/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj @@ -146,20 +146,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -171,4 +157,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj b/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj index e2bea07d11..eaa953c6cb 100644 --- a/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj @@ -108,22 +108,6 @@ - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj b/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj index 7a5f3d7302..f6fa164c6f 100644 --- a/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj +++ b/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj @@ -155,20 +155,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -180,4 +166,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj b/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj index fa70b10c4b..8eaeae4245 100644 --- a/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj @@ -144,21 +144,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -170,4 +155,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj b/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj index ebba89e99b..0406f90b7c 100644 --- a/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj +++ b/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj @@ -187,20 +187,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj b/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj index a5bf88aea2..825cc196e1 100644 --- a/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj +++ b/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj @@ -157,20 +157,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -182,4 +168,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj b/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj index 76f70d92e3..c1258969fb 100644 --- a/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj +++ b/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj @@ -187,20 +187,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj b/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj index 4aec182276..719961dea1 100644 --- a/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj +++ b/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj @@ -189,20 +189,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -214,4 +200,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj b/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj index e0c7293154..06a37fdc0b 100644 --- a/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj @@ -192,21 +192,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj b/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj index 097c6d8002..b5dd1a2bf0 100644 --- a/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj +++ b/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj @@ -161,20 +161,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -186,4 +172,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj b/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj index 53be7056b9..dde63a4b3f 100644 --- a/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj +++ b/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj @@ -200,19 +200,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj b/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj index f0d4cd2e99..ee6b489a10 100644 --- a/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj +++ b/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj @@ -230,19 +230,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj b/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj index 9f634b1180..8c79aacc52 100644 --- a/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj +++ b/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj @@ -192,20 +192,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -217,4 +203,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj b/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj index 8661d009cc..c90f9b2138 100644 --- a/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj +++ b/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj @@ -203,20 +203,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -228,4 +214,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj b/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj index 6f773d4098..fdaa2be7e6 100644 --- a/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj +++ b/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj @@ -216,22 +216,6 @@ - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - @@ -243,4 +227,6 @@ --> + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj b/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj index 5d3a0b81ec..c1c09641a5 100644 --- a/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj +++ b/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj @@ -178,22 +178,6 @@ - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj b/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj index efb382b339..8ba82247f4 100644 --- a/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj +++ b/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj @@ -197,22 +197,6 @@ - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.PTSP.Views/3.3/HeuristicLab.Problems.PTSP.Views-3.3.csproj b/HeuristicLab.Problems.PTSP.Views/3.3/HeuristicLab.Problems.PTSP.Views-3.3.csproj index 6f401f92cc..802de88c5a 100644 --- a/HeuristicLab.Problems.PTSP.Views/3.3/HeuristicLab.Problems.PTSP.Views-3.3.csproj +++ b/HeuristicLab.Problems.PTSP.Views/3.3/HeuristicLab.Problems.PTSP.Views-3.3.csproj @@ -174,22 +174,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set OutDir=$(OutDir) -set TargetDir=$(TargetDir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj b/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj index 11816fa19e..61a7a19fa8 100644 --- a/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj +++ b/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj @@ -214,22 +214,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set OutDir=$(OutDir) -set TargetDir=$(TargetDir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj b/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj index a240538bef..85a6a89b35 100644 --- a/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj +++ b/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj @@ -172,22 +172,6 @@ - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj b/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj index 2845ac5497..e480d8128a 100644 --- a/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj +++ b/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj @@ -185,22 +185,6 @@ - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj b/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj index f443819cb6..27e47d52bc 100644 --- a/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj +++ b/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj @@ -205,22 +205,6 @@ - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set Outdir=$(Outdir) - - call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) - export SolutionDir=$(SolutionDir) - - $SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj index 5efa6923ff..28fcf80c6f 100644 --- a/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj @@ -209,21 +209,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -235,4 +220,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj index 54df3866d0..2325fff0e3 100644 --- a/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj @@ -217,21 +217,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -243,4 +228,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj index 4d93303285..765610e30a 100644 --- a/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj @@ -231,20 +231,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - @@ -256,4 +242,6 @@ $SolutionDir/PreBuildEvent.sh --> + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj b/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj index 932adc3469..9f21044213 100644 --- a/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj +++ b/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj @@ -212,21 +212,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj b/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj index 8bfa764575..1bf7e53a2d 100644 --- a/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj +++ b/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj @@ -219,21 +219,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj b/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj index 6b69137a4a..21392c6b51 100644 --- a/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj +++ b/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj @@ -238,21 +238,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - - export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj b/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj index e1c96ebb64..15fd31ce75 100644 --- a/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj +++ b/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj @@ -239,19 +239,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj b/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj index 19116e5c6b..f2925cd5f6 100644 --- a/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj +++ b/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj @@ -273,19 +273,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj b/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj index 9d5698b169..f675e69fc0 100644 --- a/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj +++ b/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj @@ -237,19 +237,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj b/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj index 42d40448da..cf1be80fb1 100644 --- a/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj +++ b/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj @@ -264,19 +264,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj b/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj index 601a7c6c56..e232bc20d9 100644 --- a/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj +++ b/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj @@ -305,22 +305,10 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj b/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj index db401e3ab5..0e37df3faa 100644 --- a/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj +++ b/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj @@ -490,22 +490,10 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj b/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj index 10491bd8aa..b3b54dce9d 100644 --- a/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj +++ b/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj @@ -215,19 +215,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj b/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj index f2e8df283d..14622fef61 100644 --- a/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj +++ b/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj @@ -192,21 +192,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj b/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj index 7086e94a96..d18eed9d42 100644 --- a/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj +++ b/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj @@ -158,21 +158,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj b/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj index 9c4ed8b11e..bc6e381b5d 100644 --- a/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj +++ b/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj @@ -228,19 +228,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj b/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj index b00a9591eb..62949e17e5 100644 --- a/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj +++ b/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj @@ -176,19 +176,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj b/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj index df2916a0a2..61515b9fe6 100644 --- a/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj @@ -153,20 +153,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj b/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj index ffa23d33db..99a2753c5f 100644 --- a/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj +++ b/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj @@ -163,20 +163,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj b/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj index 706714907d..d582acbd10 100644 --- a/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj @@ -181,19 +181,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj b/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj index 3a8623e576..951bb7085b 100644 --- a/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj +++ b/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj @@ -161,18 +161,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj b/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj index 44a6301792..93a8b03f80 100644 --- a/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj @@ -192,20 +192,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj b/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj index d66465fe40..c1fae52128 100644 --- a/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj +++ b/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj @@ -149,20 +149,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj b/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj index 9b62f01456..329560f767 100644 --- a/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj +++ b/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj @@ -219,20 +219,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj b/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj index 09f72c337b..b2900eb90b 100644 --- a/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj @@ -195,20 +195,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj index 22acd9906f..331b78155d 100644 --- a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj +++ b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj @@ -342,20 +342,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj b/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj index 97bfd6f0d4..27707b282c 100644 --- a/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj @@ -188,14 +188,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - + + \ No newline at end of file diff --git a/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj b/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj index f487525eca..0e45a7dcc6 100644 --- a/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj @@ -253,14 +253,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - + + \ No newline at end of file diff --git a/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj b/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj index 4b5afbab81..f6f8385d35 100644 --- a/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj @@ -151,14 +151,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - + + \ No newline at end of file diff --git a/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj b/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj index db305eeb1a..a894edbb15 100644 --- a/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj +++ b/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj @@ -344,18 +344,12 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - + + \ No newline at end of file diff --git a/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj b/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj index 04ade4f3f8..89518d9524 100644 --- a/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj +++ b/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj @@ -160,19 +160,6 @@ --> - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj b/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj index 0009163fc5..b8e6bad3e1 100644 --- a/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj +++ b/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj @@ -155,21 +155,6 @@ - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) -set Outdir=$(Outdir) - -call PreBuildEvent.cmd - - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - - + + \ No newline at end of file diff --git a/HeuristicLab/3.3/HeuristicLab-3.3.csproj b/HeuristicLab/3.3/HeuristicLab-3.3.csproj index a33314fc73..6794caa7d9 100644 --- a/HeuristicLab/3.3/HeuristicLab-3.3.csproj +++ b/HeuristicLab/3.3/HeuristicLab-3.3.csproj @@ -200,17 +200,6 @@ --> - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) - -call PreBuildEvent.cmd - -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) - -$SolutionDir/PreBuildEvent.sh - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) set ProjectDir=$(ProjectDir) @@ -231,4 +220,6 @@ export TargetDir=$(TargetDir) $SolutionDir/MergeConfigs.sh + + \ No newline at end of file From aeab9a4973523b62cdcd20b38b2ffc4b9ab5d9a6 Mon Sep 17 00:00:00 2001 From: Holzinger Florian Date: Wed, 6 Apr 2022 13:26:50 +0200 Subject: [PATCH 06/39] Removed obsolete PreBuildEvent scripts --- PreBuildEvent.cmd | 38 -------------------------------------- PreBuildEvent.sh | 29 ----------------------------- 2 files changed, 67 deletions(-) delete mode 100644 PreBuildEvent.cmd delete mode 100755 PreBuildEvent.sh diff --git a/PreBuildEvent.cmd b/PreBuildEvent.cmd deleted file mode 100644 index 94278a0c41..0000000000 --- a/PreBuildEvent.cmd +++ /dev/null @@ -1,38 +0,0 @@ -for /f %%i in ('git rev-list --count HEAD') do set RESULT=%%i - -IF EXIST "%ProjectDir%\Properties\AssemblyInfo.cs.frame" ( - IF EXIST "%ProjectDir%\Properties\AssemblyInfo.cs" DEL /F "%ProjectDir%\Properties\AssemblyInfo.cs" - - for /f "delims=" %%A in ('type "%ProjectDir%\Properties\AssemblyInfo.cs.frame"') do ( - - set "string=%%A" - setlocal EnableExtensions EnableDelayedExpansion - set "modified=!string:$WCREV$=%RESULT%!" - echo !modified!>>"%ProjectDir%\Properties\AssemblyInfo.cs" - endlocal - ) - -) -IF %ERRORLEVEL% NEQ 0 GOTO Error_Handling - -IF EXIST "%ProjectDir%\Plugin.cs.frame" ( - IF EXIST "%ProjectDir%\Plugin.cs" DEL /F "%ProjectDir%\Plugin.cs" - - for /f "delims=" %%A in ('type "%ProjectDir%\Plugin.cs.frame"') do ( - - set "string=%%A" - setlocal EnableExtensions EnableDelayedExpansion - set "modified=!string:$WCREV$=%RESULT%!" - echo !modified!>>"%ProjectDir%\Plugin.cs" - endlocal - ) - -) -IF %ERRORLEVEL% NEQ 0 GOTO Error_Handling -GOTO Done - -:Error_Handling -ECHO There was an error while running subwcrev. Please verify that the *.cs.frame files have been correctly converted to *.cs files, otherwise HeuristicLab won't build. -exit 0 - -:Done \ No newline at end of file diff --git a/PreBuildEvent.sh b/PreBuildEvent.sh deleted file mode 100755 index 3f823d8401..0000000000 --- a/PreBuildEvent.sh +++ /dev/null @@ -1,29 +0,0 @@ -export AIFile=$ProjectDir/Properties/AssemblyInfo.cs.frame -export PluginFile=$ProjectDir/Plugin.cs.frame - -command_exists () { - command -v "$1" -} - -if command_exists svnwcrev ; then - if [ -f $AIFile ]; - then - svnwcrev $ProjectDir $AIFile $ProjectDir/Properties/AssemblyInfo.cs - fi - - if [ -f $PluginFile ]; - then - svnwcrev $ProjectDir $PluginFile $ProjectDir/Plugin.cs - fi -else - if [ -f $AIFile ]; - then - sed 's/\$WCREV\$/'0'/g' $AIFile > $ProjectDir/Properties/AssemblyInfo.cs - fi - - if [ -f $PluginFile ]; - then - sed 's/\$WCREV\$/'0'/g' $PluginFile > $ProjectDir/Plugin.cs - fi -fi - From cc294e9b115b91b998f8387695d7edf015fef4fd Mon Sep 17 00:00:00 2001 From: Holzinger Florian Date: Wed, 6 Apr 2022 14:57:27 +0200 Subject: [PATCH 07/39] Included MergeConfigs script as MSBuild Task --- build/bin/HeuristicLab.Build.dll | Bin 6144 -> 14336 bytes .../HeuristicLab.Build/MergeConfigs.cs | 226 ++++++++++++++++++ 2 files changed, 226 insertions(+) create mode 100644 build/source/HeuristicLab.Build/HeuristicLab.Build/MergeConfigs.cs diff --git a/build/bin/HeuristicLab.Build.dll b/build/bin/HeuristicLab.Build.dll index 86dcef89b8c924e8782b4c800729acf3701388fa..c6b90ba82d05d9e00da8691b344e4cabe270313c 100644 GIT binary patch literal 14336 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 delta 2157 zcmZ`)Yiv|S6#i!J_I7t$w!3||JlwWux3=BgmKIuCO2tB3ELtcOD;ikZZCU$dyCrCZ zU4Cc~HKDnplo*kunvkeTtpN?u27`ba{Xv2u#vn2NFcCw1#Kg!CznN|$Xq=n*=A7@$ zIcMg~+M%z5$?KSwWnGrO{Qi4w3Wjcs8>V)BaL zHOASGD7qO)7?VX=>AQe*>K&E9R;x%>SUsZDdD%tE%kH+0h!RILB^4*rIwS6J?4ra3 z$hEGE;(}?FpRJ8uA_a$wfD37WuucV6S)H;l4rB#wxJkPJJctsL;5^aqQkV>eVG(}j8{IIO$n*K95vCjd(7w|PB2Gv zfw@K~(pO;JOlxUMXZcDF0{c1MHYj(+qLGn-aaFmP9k|S~WLp;+9rK4<(z>m^gq z{n8pqzps*8(Pz$`f*z`vC}7WGXYsVIIMtd1G3KNbFUSLo^CeWYX~r>eo9Mzh>}7-@&M+~|T08Nl zJP@b3Q_j(Fjm~Nz^UD!>bmKagP(@iiZd{QysHG(NxbeQWNrqF}MS559nx<;)SFL5R z2m<+-72Sznj5EY`spJ`rJBjh`#0Q3=vh}1Xjjw8^Tu&<1Sf-hP#{U0dUe^3kjXM~p z)2p`gTz)OLD9|&n+0%>8rz9+H#TdfN8?_ii9^I3Jg?=D#z{os!xT;$0YtE! z$8Z{N8TFXKPsUoD!ftG&b26;tvkVsP<*_7UC8;X*dPjdRF{ z5H2i1HqnbPaXF3?eXN2D6&iy$MW#k$oyJCu%^F+u{5CzaLt`hVMGslvktdQ<6;;rHn7Y% z&jXWMGl;gt!Ud*Lw;H0p*GYXhTD6p+{lV`v+aR94lT31ZwV#ddDg3gU?4{UXjb<)= zw6QZf`ee8_))I*}4es2zF4Q~755#6Zrc-X%s+&{zxL`Fx@6&~)kGV<11d-B?>xx7Nlp6|0xt4V2LZZ{(`!;M|A?$`1B87s-qg0m`*QBR9U8+g-m@t%V zgODzp7nz$=AgP;ffu+k}IK>jvD}`(666^PhnRpHJ)gX*I9%da@@@jVemkOev*P@pg zL?4%^7Fk1wAYDR~`WT>^Y?x0iS;f?G>?P7tO|hC!r8X&CiLJystZpVS29{X-h_cICW#lUOTNwRcNl2oBCEf1PK$F99HaW+wS wJoztHm+U<+Oh`8jK0cRox((XE#=#H5}ggpZ 0) { + XmlAttribute attrib = node.Attributes[0]; + builder.Append("["); + builder.Append("@" + attrib.Name + "='" + attrib.Value + "'"); + for (int i = 1; i < node.Attributes.Count; i++) { + attrib = node.Attributes[i]; + builder.Append(" and @" + attrib.Name + "='" + attrib.Value + "'"); + } + builder.Append("]"); + } + return builder.ToString(); + } + } +} From 59b2488d74f1a95e2406a4243ec7fc00ad0702c7 Mon Sep 17 00:00:00 2001 From: Holzinger Florian Date: Wed, 6 Apr 2022 17:19:09 +0200 Subject: [PATCH 08/39] Finished porting MergeConfigs script to c# --- build/bin/HeuristicLab.Build.dll | Bin 14336 -> 14848 bytes .../HeuristicLab.Build/MergeConfigs.cs | 331 +++++++++--------- .../HeuristicLab.Build/UpdateVersion.cs | 13 +- 3 files changed, 178 insertions(+), 166 deletions(-) diff --git a/build/bin/HeuristicLab.Build.dll b/build/bin/HeuristicLab.Build.dll index c6b90ba82d05d9e00da8691b344e4cabe270313c..2adae7f3c72fd27843e4a74504eab383d912878f 100644 GIT binary patch literal 14848 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 diff --git a/build/source/HeuristicLab.Build/HeuristicLab.Build/MergeConfigs.cs b/build/source/HeuristicLab.Build/HeuristicLab.Build/MergeConfigs.cs index fdb71e8a13..2a70497265 100644 --- a/build/source/HeuristicLab.Build/HeuristicLab.Build/MergeConfigs.cs +++ b/build/source/HeuristicLab.Build/HeuristicLab.Build/MergeConfigs.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.IO; +using System.Linq; using System.Text; using System.Xml; using Microsoft.Build.Framework; @@ -8,182 +10,187 @@ namespace HeuristicLab.Build { public class MergeConfigs : Task { [Required] - public string SourceFilePath { get; set; } + public string SolutionDir { get; set; } [Required] - public string DestinationFilePath { get; set; } + public string TargetDir { get; set; } public override bool Execute() { Log.LogMessage("ConfigMerger: Merge started ..."); - Log.LogMessage("ConfigMerger: Merge source: \"" + SourceFilePath + "\""); - Log.LogMessage("ConfigMerger: Merge destination: \"" + DestinationFilePath + "\""); - - XmlDocument source = new XmlDocument(); - source.Load(SourceFilePath); - XmlDocument destination = new XmlDocument(); - destination.Load(DestinationFilePath); - - XmlNode sourceNode; - XmlNode destinationNode; - - #region Merge 'system.serviceModel/behaviors/*' - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/behaviors"); - if (destinationNode == null) { - destinationNode = destination.CreateElement("behaviors"); - destination.SelectSingleNode("/configuration/system.serviceModel").AppendChild(destinationNode); - } + Log.LogMessage("ConfigMerger: Merge source: \"" + SolutionDir + "\""); + Log.LogMessage("ConfigMerger: Merge destination: \"" + TargetDir + "\""); + + string targetConfigPath = $"{TargetDir}HeuristicLab 3.3.exe.config"; + File.Copy($"{SolutionDir}\\HeuristicLab\\3.3\\app.config", targetConfigPath, true); + + var configs = Directory.EnumerateFiles(TargetDir, "*.dll.config"); + foreach (var sourceConfigPath in configs) { + XmlDocument source = new XmlDocument(); + source.Load(sourceConfigPath); + XmlDocument destination = new XmlDocument(); + destination.Load(targetConfigPath); + + XmlNode sourceNode; + XmlNode destinationNode; + + #region Merge 'system.serviceModel/behaviors/*' + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/behaviors"); + if (destinationNode == null) { + destinationNode = destination.CreateElement("behaviors"); + destination.SelectSingleNode("/configuration/system.serviceModel").AppendChild(destinationNode); + } - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/behaviors/endpointBehaviors"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/behaviors/endpointBehaviors"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/behaviors"); + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/behaviors/endpointBehaviors"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/behaviors/endpointBehaviors"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/behaviors"); - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/behaviors/serviceBehaviors"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/behaviors/serviceBehaviors"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/behaviors"); - #endregion + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/behaviors/serviceBehaviors"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/behaviors/serviceBehaviors"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/behaviors"); + #endregion - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/services"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/services"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel"); + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/services"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/services"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel"); - #region Merge 'system.serviceModel/bindings/*' - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings"); - if (destinationNode == null) { - destinationNode = destination.CreateElement("bindings"); - destination.SelectSingleNode("/configuration/system.serviceModel").AppendChild(destinationNode); + #region Merge 'system.serviceModel/bindings/*' + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings"); + if (destinationNode == null) { + destinationNode = destination.CreateElement("bindings"); + destination.SelectSingleNode("/configuration/system.serviceModel").AppendChild(destinationNode); + } + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/basicHttpBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/basicHttpBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/basicHttpContextBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/basicHttpContextBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/customBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/customBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/mexHttpBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/mexHttpBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/mexHttpsBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/mexHttpsBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/mexNamedPipeBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/mexNamedPipeBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/mexTcpBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/mexTcpBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/msmqIntegrationBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/msmqIntegrationBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/netMsmqBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/netMsmqBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/netNamedPipeBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/netNamedPipeBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/netPeerTcpBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/netPeerTcpBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/netTcpBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/netTcpBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/netTcpContextBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/netTcpContextBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/webHttpBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/webHttpBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/ws2007FederationHttpBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/ws2007FederationHttpBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/ws2007HttpBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/ws2007HttpBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/wsDualHttpBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/wsDualHttpBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/wsFederationHttpBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/wsFederationHttpBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/wsHttpBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/wsHttpBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/wsHttpContextBinding"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/wsHttpContextBinding"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); + #endregion + + sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/client"); + destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/client"); + Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel"); + + sourceNode = source.SelectSingleNode("/configuration/configSections/sectionGroup[@name='applicationSettings']"); + destinationNode = destination.SelectSingleNode("/configuration/configSections/sectionGroup[@name='applicationSettings']"); + Merge(sourceNode, destinationNode, destination, "/configuration/configSections"); + + sourceNode = source.SelectSingleNode("/configuration/configSections/sectionGroup[@name='userSettings']"); + destinationNode = destination.SelectSingleNode("/configuration/configSections/sectionGroup[@name='userSettings']"); + Merge(sourceNode, destinationNode, destination, "/configuration/configSections"); + + sourceNode = source.SelectSingleNode("/configuration/applicationSettings"); + destinationNode = destination.SelectSingleNode("/configuration/applicationSettings"); + Merge(sourceNode, destinationNode, destination, "/configuration"); + + sourceNode = source.SelectSingleNode("/configuration/userSettings"); + destinationNode = destination.SelectSingleNode("/configuration/userSettings"); + Merge(sourceNode, destinationNode, destination, "/configuration"); + + sourceNode = source.SelectSingleNode("/configuration/connectionStrings"); + destinationNode = destination.SelectSingleNode("/configuration/connectionStrings"); + Merge(sourceNode, destinationNode, destination, "/configuration"); + + sourceNode = source.SelectSingleNode("/configuration/system.data/DbProviderFactories"); + destinationNode = destination.SelectSingleNode("/configuration/system.data/DbProviderFactories"); + Merge(sourceNode, destinationNode, destination, "/configuration"); + + sourceNode = source.SelectSingleNode("/configuration/system.diagnostics"); + destinationNode = destination.SelectSingleNode("/configuration/system.diagnostics"); + Merge(sourceNode, destinationNode, destination, "/configuration"); + + sourceNode = source.SelectSingleNode("/configuration/oracle.manageddataaccess.client/version/dataSources"); + destinationNode = destination.SelectSingleNode("/configuration/oracle.manageddataaccess.client/version/dataSources"); + Merge(sourceNode, destinationNode, destination, "/configuration"); + + sourceNode = source.SelectSingleNode("/configuration/oracle.manageddataaccess.client/version/settings"); + destinationNode = destination.SelectSingleNode("/configuration/oracle.manageddataaccess.client/version/settings"); + Merge(sourceNode, destinationNode, destination, "/configuration"); + + sourceNode = source.SelectSingleNode("/configuration/oracle.manageddataaccess.client/version/LDAPsettings"); + destinationNode = destination.SelectSingleNode("/configuration/oracle.manageddataaccess.client/version/LDAPsettings"); + Merge(sourceNode, destinationNode, destination, "/configuration"); + destination.Save(targetConfigPath); } - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/basicHttpBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/basicHttpBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/basicHttpContextBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/basicHttpContextBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/customBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/customBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/mexHttpBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/mexHttpBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/mexHttpsBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/mexHttpsBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/mexNamedPipeBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/mexNamedPipeBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/mexTcpBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/mexTcpBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/msmqIntegrationBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/msmqIntegrationBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/netMsmqBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/netMsmqBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/netNamedPipeBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/netNamedPipeBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/netPeerTcpBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/netPeerTcpBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/netTcpBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/netTcpBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/netTcpContextBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/netTcpContextBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/webHttpBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/webHttpBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/ws2007FederationHttpBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/ws2007FederationHttpBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/ws2007HttpBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/ws2007HttpBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/wsDualHttpBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/wsDualHttpBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/wsFederationHttpBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/wsFederationHttpBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/wsHttpBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/wsHttpBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/bindings/wsHttpContextBinding"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/bindings/wsHttpContextBinding"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel/bindings"); - #endregion - - sourceNode = source.SelectSingleNode("/configuration/system.serviceModel/client"); - destinationNode = destination.SelectSingleNode("/configuration/system.serviceModel/client"); - Merge(sourceNode, destinationNode, destination, "/configuration/system.serviceModel"); - - sourceNode = source.SelectSingleNode("/configuration/configSections/sectionGroup[@name='applicationSettings']"); - destinationNode = destination.SelectSingleNode("/configuration/configSections/sectionGroup[@name='applicationSettings']"); - Merge(sourceNode, destinationNode, destination, "/configuration/configSections"); - - sourceNode = source.SelectSingleNode("/configuration/configSections/sectionGroup[@name='userSettings']"); - destinationNode = destination.SelectSingleNode("/configuration/configSections/sectionGroup[@name='userSettings']"); - Merge(sourceNode, destinationNode, destination, "/configuration/configSections"); - - sourceNode = source.SelectSingleNode("/configuration/applicationSettings"); - destinationNode = destination.SelectSingleNode("/configuration/applicationSettings"); - Merge(sourceNode, destinationNode, destination, "/configuration"); - - sourceNode = source.SelectSingleNode("/configuration/userSettings"); - destinationNode = destination.SelectSingleNode("/configuration/userSettings"); - Merge(sourceNode, destinationNode, destination, "/configuration"); - - sourceNode = source.SelectSingleNode("/configuration/connectionStrings"); - destinationNode = destination.SelectSingleNode("/configuration/connectionStrings"); - Merge(sourceNode, destinationNode, destination, "/configuration"); - - sourceNode = source.SelectSingleNode("/configuration/system.data/DbProviderFactories"); - destinationNode = destination.SelectSingleNode("/configuration/system.data/DbProviderFactories"); - Merge(sourceNode, destinationNode, destination, "/configuration"); - - sourceNode = source.SelectSingleNode("/configuration/system.diagnostics"); - destinationNode = destination.SelectSingleNode("/configuration/system.diagnostics"); - Merge(sourceNode, destinationNode, destination, "/configuration"); - - sourceNode = source.SelectSingleNode("/configuration/oracle.manageddataaccess.client/version/dataSources"); - destinationNode = destination.SelectSingleNode("/configuration/oracle.manageddataaccess.client/version/dataSources"); - Merge(sourceNode, destinationNode, destination, "/configuration"); - - sourceNode = source.SelectSingleNode("/configuration/oracle.manageddataaccess.client/version/settings"); - destinationNode = destination.SelectSingleNode("/configuration/oracle.manageddataaccess.client/version/settings"); - Merge(sourceNode, destinationNode, destination, "/configuration"); - - sourceNode = source.SelectSingleNode("/configuration/oracle.manageddataaccess.client/version/LDAPsettings"); - destinationNode = destination.SelectSingleNode("/configuration/oracle.manageddataaccess.client/version/LDAPsettings"); - Merge(sourceNode, destinationNode, destination, "/configuration"); - - destination.Save(DestinationFilePath); Log.LogMessage("ConfigMerger: Merge successfully finished!"); return true; } - private static void Merge(XmlNode source, XmlNode destination, XmlDocument document, string root) { + private void Merge(XmlNode source, XmlNode destination, XmlDocument document, string root) { try { if (source != null) { if (destination == null) { @@ -207,7 +214,7 @@ private static void Merge(XmlNode source, XmlNode destination, XmlDocument docum } } - private static string BuildXPathString(XmlNode node) { + private string BuildXPathString(XmlNode node) { StringBuilder builder = new StringBuilder(); builder.Append(node.Name); if (node.Attributes.Count > 0) { diff --git a/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs b/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs index 52ad75652d..daa4bfde2e 100644 --- a/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs +++ b/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs @@ -1,4 +1,5 @@ -using System.IO; +using System; +using System.IO; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; @@ -9,7 +10,7 @@ public class UpdateVersion : Task { public string ProjectDir { get; set; } public override bool Execute() { - string commitCount = ThisAssembly.Git.Commits; + string version = GetVersion(); string assemblyInfoFramePath = Path.Combine(ProjectDir, "Properties", "AssemblyInfo.cs.frame"); string assemblyInfoPath = Path.Combine(ProjectDir, "Properties", "AssemblyInfo.cs"); @@ -17,7 +18,7 @@ public override bool Execute() { if (File.Exists(assemblyInfoFramePath)) { Log.LogMessage($"Updating {assemblyInfoPath}"); var assemblyInfoFrameContent = File.ReadAllText(assemblyInfoFramePath); - File.WriteAllText(assemblyInfoPath, assemblyInfoFrameContent.Replace("$WCREV$", commitCount)); + File.WriteAllText(assemblyInfoPath, assemblyInfoFrameContent.Replace("$WCREV$", version)); } @@ -27,10 +28,14 @@ public override bool Execute() { if (File.Exists(pluginFramePath)) { Log.LogMessage($"Updating {pluginPath}"); var pluginFrameContent = File.ReadAllText(pluginFramePath); - File.WriteAllText(pluginPath, pluginFrameContent.Replace("$WCREV$", commitCount)); + File.WriteAllText(pluginPath, pluginFrameContent.Replace("$WCREV$", version)); } return true; } + + public string GetVersion() { + return ThisAssembly.Git.Commits; + } } } From fac55ccb8783613761085e2ec94c25cba7d24b5f Mon Sep 17 00:00:00 2001 From: Holzinger Florian Date: Wed, 6 Apr 2022 17:19:49 +0200 Subject: [PATCH 09/39] Removed old PostBuildEvent / MergeConfigs commands --- ...HeuristicLab.Clients.Hive.Slave-3.3.csproj | 26 +++---------------- HeuristicLab/3.3/HeuristicLab-3.3.csproj | 24 +++-------------- 2 files changed, 7 insertions(+), 43 deletions(-) diff --git a/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj b/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj index 2c4d91f191..6f84df278d 100644 --- a/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj @@ -180,28 +180,7 @@ - - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set OutDir=$(OutDir) - set TargetDir=$(TargetDir) - set Platform=$(PlatformName) - set Configuration=$(ConfigurationName) - - call "$(SolutionDir)MergeConfigs.cmd" - - -export OutDir=$(OutDir) -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) -export TargetDir=$(TargetDir) - -$SolutionDir/MergeConfigs.sh - - + + + + \ No newline at end of file diff --git a/HeuristicLab/3.3/HeuristicLab-3.3.csproj b/HeuristicLab/3.3/HeuristicLab-3.3.csproj index 6794caa7d9..99645d78a1 100644 --- a/HeuristicLab/3.3/HeuristicLab-3.3.csproj +++ b/HeuristicLab/3.3/HeuristicLab-3.3.csproj @@ -199,27 +199,9 @@ --> - - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) - set ProjectDir=$(ProjectDir) - set SolutionDir=$(SolutionDir) - set OutDir=$(OutDir) - set TargetDir=$(TargetDir) - set Platform=$(PlatformName) - set Configuration=$(ConfigurationName) - - call "$(SolutionDir)MergeConfigs.cmd" - - -export OutDir=$(OutDir) -export ProjectDir=$(ProjectDir) -export SolutionDir=$(SolutionDir) -export TargetDir=$(TargetDir) - -$SolutionDir/MergeConfigs.sh - - + + + \ No newline at end of file From 22b27a38e0a467a44bc1869b1b23aa184ab39f66 Mon Sep 17 00:00:00 2001 From: Holzinger Florian Date: Wed, 6 Apr 2022 17:20:48 +0200 Subject: [PATCH 10/39] Removed obsolete ConfigMerger/MergeConfigs --- ConfigMerger.exe | Bin 13312 -> 0 bytes MergeConfigs.cmd | 19 ------------------- MergeConfigs.sh | 11 ----------- 3 files changed, 30 deletions(-) delete mode 100644 ConfigMerger.exe delete mode 100644 MergeConfigs.cmd delete mode 100755 MergeConfigs.sh diff --git a/ConfigMerger.exe b/ConfigMerger.exe deleted file mode 100644 index 751a2ddf793b8bcbae2c4165024515f3be6c1cfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13312 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 F{2%efhY Date: Thu, 7 Apr 2022 13:27:51 +0200 Subject: [PATCH 11/39] Adapted custom build task to fallback to current datetime if no git installation is available --- build/bin/HeuristicLab.Build.deps.json | 9 ------ build/bin/HeuristicLab.Build.dll | Bin 14848 -> 14848 bytes .../HeuristicLab.Build.csproj | 1 - .../HeuristicLab.Build/UpdateVersion.cs | 26 +++++++++++++++++- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/build/bin/HeuristicLab.Build.deps.json b/build/bin/HeuristicLab.Build.deps.json index eeffb22e30..3df64778c4 100644 --- a/build/bin/HeuristicLab.Build.deps.json +++ b/build/bin/HeuristicLab.Build.deps.json @@ -9,7 +9,6 @@ ".NETStandard,Version=v2.0/": { "HeuristicLab.Build/1.0.0": { "dependencies": { - "GitInfo": "2.2.0", "Microsoft.Build.Utilities.Core": "17.1.0", "NETStandard.Library": "2.0.3" }, @@ -17,7 +16,6 @@ "HeuristicLab.Build.dll": {} } }, - "GitInfo/2.2.0": {}, "Microsoft.Build.Framework/17.1.0": { "dependencies": { "Microsoft.Win32.Registry": "4.3.0", @@ -307,13 +305,6 @@ "serviceable": false, "sha512": "" }, - "GitInfo/2.2.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-SKTmjt40sYqoDB3S7HFVUToUN/vl6Zrt+PuSHdjbQDlcBx0JAZBdS7BXVbVKyy+0iaaF3FBd4ZxspIlKQCC9Lw==", - "path": "gitinfo/2.2.0", - "hashPath": "gitinfo.2.2.0.nupkg.sha512" - }, "Microsoft.Build.Framework/17.1.0": { "type": "package", "serviceable": true, diff --git a/build/bin/HeuristicLab.Build.dll b/build/bin/HeuristicLab.Build.dll index 2adae7f3c72fd27843e4a74504eab383d912878f..586157d877664c39962ed91f5e964fbaeee9977c 100644 GIT binary patch literal 14848 zcmeHOeQ;dWbw77M-hRkhd$qQOV}#e(mW3s+3~iD&GocM> zYxj5VdvD)cX)T)>i{y{K)jRK=bI(2J+;h)8_r4Dee)Q86B%%<`OP7egfh!-~63z{# zQJq-va)SOW_S(vCh<&fE964Dq(`7@SFx1I(PA!#mD?P5IjY=t9D5d*`vgt`ZuVoq= z+wboC%+WwhtOgD&5qD`PEHud}gT+=wma1t$&<$!HB6WD%v{2?Id zd<1FiVP@q&@9LmT!Z8fFLtGdmnr27LJf?{jfYvcgG%~YpE<8;X_0>m#@AcssOFLr$ z|I$VP)XBa&b_0_~8dhZt)5rmnwvC~{9o>S{cXVU8GKN;v!N|7KG)|Va4X5wuCfemg zW$_{QD-O0TKwU1|@g0VXTPCzv6Ly4hTxl3WnFQ+gL#Z4~qnnN;2X|Z-YS!b3b0g z?P2w~8-jk>9#-XMiyYZuBUj~ix)Dpp>~4IMYv%68Yt_cw4G*iTV(Hax>T|D( z`el1qeeOT1;r6il+$&;!*&bG(`?EFN9#)@wY1}W{!|HQCTEp#O^|@Ob{IWf)KKD~K z+#Xh+d&vU7Y!9o?{RcJN9#)^bsnIXn!|HQ?zJ}Yws@%R55HjAa;r6g9_x%aqEdDwW zJMZzF_ptihT?_r(9#-W(2Zm~fc)Et$!|HRtQN!(F^|_lD`7QCV`rMToZV#)^{Zb9L zht=oqPWmnJu=?Du)Np%PJ#H*d*Yk3Pb*u%~?d#vabm{GeXh$Tf-@x>@oP~Ix2~PJG z;^tJmos#i&J!s5Zif3{DBNm@?Sic*b?ZNWSApI0&)MJ4TF1{FyD_zfUWeAI3L!{$+ z3J06@6;QJvoCwJXi8>2j`&qQm)2Px{0yMVY8Pjh>!NQ6xQXvW_Lw3tlI21^R+n`o) zLrj4tUST^LL&C<^FXLAf#Wq>G1CpH1Hwl`4?yh_6j0} zeGYG=u&YSgO5%!7aBEP%iIqT1eCfqNL!|3F+}@@x)!RW{pcrqsCbcTdAA<|Unx)2@ zpq*dS9F<0%Uvr)D14&pG)vie9?(Q7#Mr~AX_k6(|Y1_z*N;Ih$ zIv5lkcNp=u%>amATjMzviw$uct$szx&`eD+TT?U{N=9d^YEH%A zlo-bk&z*n86_Jvpwws~1p-C8j$~tcW5^viI*oKXKd_lD9vm7607m!AZ>DzHNUI(YX z10{!G8*SbSioTPL3Z)5?IXW7NR$~Ld z>QI)3kyW6IR_!@7fX>hu@NKYU)vlsG&dfM~io;9J$6|cL_A9ZOc=Do%>BDnZo)9VT z=g=*}&Ys6h=0mPWI+SH@!#H1wUJ2S)h5jP&L|CCjkm1k7@$f==0nHWK5*Q0A^j;tn zQs`+3KPusA3Ez^i1u#zE4E`P3eowH3uRwxAfdE5+TReppN_blNKBO%X3~vuFRusBT zyo2)L5W`nP{{hNi;QPS@eM>w8iXm&)D#ycd`d*0TA6A%iZG_=tL56pTR>e?2YWBH2$5=P>h82wVeKr;iLuQnw9BeUUM(H7m*)n4^ zjbx2>6oO?j`XsWjD+O5$*4=@yaN+-g5}+F~OM>)qgieUg0}A3i#XK=O8WuC1H<*0}>vP@Ti0ZK!v6Nm(aImS*6bfZ>FEqp2&9kA*~nv^gazM`y|Yg z5bGmHDJI?xkKxI|o#8Sqrbm@?@HxwQg0dK&rzj*ILix9p-$D7SC_O>L!A0~8{aAUD zzD(x@bGC>VQTs~xWm+cg48MZfM=`EX;d#=x=_M)cC3=Vc0hA$ef!?K01uxJGpuYvm zFT+2ho5YjKFKDGW6#OM9-Kb?dFOn+TZWL$5K3Ka`NeUtUM_DS~r}t<%%F)P5!L?a> zot8v4i`OA}o9GgK%1+TE-VOGOH>HF(sT{gP42UC0JO>1O@~F^Y$$;1tSp>L2Vb~EI z2G4huVYK=a^zKc1NjW46;JZLwq9w8uk~?XqNYmZa7Fg-P9IX%BME8P{K{9(-WGF?y z3%Hz~16)O42W+RG0&b=-cy`btz+S@KraL7)3)n5C^*E4a4oI0}lA=10=>ZC>{3QUm*Q+HR2MTzvOmNrrV zORqjTUMN9SA!q2Oe!{X%&m6J}#e!AP%uKItXk@FvRU5BNOlZa~Lq9DwW-Um9Bkrpd z3@zVdVZj}*fC9N?Xg1_{fW=p3%V2Xo_E~bhsvgtSCdZ3YBL&Of!XBaBc&4nK){T2T ze)!Ep+{WyMyEMZ@EX=MPD4o!aNtFXdEnb$ZS1+9?OjHcX=LxYpDv1ZRqIyP_Ot0Rx z0MVAO3RZa^#eXvmJF9fb(Nem;C!-Vn(nD&^8x-liIc^)Fj@;n0v)iS|9nmTz< zQ}dcZBY0r%6m7prhjIn{0{2b8$$Pb885DM?FCWRt>BqU=OG&cYhjMK-DalF?bF(K* zW;Z&yl(7tV!*y6+L7gb+oS{sYMN2i8kZYR8^U-cs9XPb(bY@SpstMk3n&b?W?0t_hffb`ojVpDbHbyqwbQy`)o#PEdg+Xpl5Q_(`~((mp&* zCRx}`8Gst)QJ0ZF>c9H-I#tja-k%oHBkhS}t1$N*;HW#hEonH`M50 zt2}!*z&?zQ^yeg6n$T|0DcH>(8iZ}!&mwJr?HZj#ORm$wgPYV;9a{gj&_*A-7Efk)25%fwmzIy-;bYyDeC_u*@!yH*dz>Ke%%mtMHKx%t(*AECzm&eJeLtc=o(P@A_Aw!J-qAfFxH56@qxO?3A@8ju+g zTk)DTVn)~JEznAEvxPOswq=Iac^hzB>lFw5nym@`L}6lGwe=69@4WKX9r$?*Hd}XH zozoA_SFrh&&Y4B$EznNG)#I04L>`~7j-N(kZ=z28w$g5xz&k7dUhFa{cHSb-Z_lqo zcOMor6?@Ce=$^mToICyj24LQ%AKP)c&d=NQ^DCWm`em=pJjh{$3y5^yYt!@T zBzDZ*$+_&IE2YS}8ee^9c*DneqOSQ@xZAoqM^MXLPN1!G)ozd*(t7q$&)n^7@9<*a z4RRL4!}rYg0MW6zCDh)z=H*bU2$Mb}_hA_ve6MO}+1;pRJ$&cN(TF>j-VY|d00|SY zOh;P|q8!VZzQUG_)v@9tRA#WnQe~X-qm4X%9Gj}F=bLR4KfbB=rppH0Y_n_mribUi zhH9IvjC}hs2F$p^=IB~m!2#)?Nmsn_y4D8l!x;BqjAt2gs8>4bYMvui;A+?HClJN_ zJWMO`;;A2lz{$oy{b|q(azNAa7J;8s*%6zT(ZTU1p8*B$#uKG( zykzH;B!V~_(=q_~xfSTaV?;~rIOQ7*ex~I_W_u5`bKfQr$!ygCB%gqO4i65J6X3Sf z9j%y~mr{q23hhvHt)zvk=`h~h9i)D`i&o>M)-beGoPN~Nk(ymkEmN?Ie}njOFz>~0 z573VzG-UN-g!|yPxbq6{ zjsJT6C--d?z0bCMZRE%U-&#$fG+vwr(kH)$|6B6H&8Gxu2<3lk!ZPIpnJ(>G(Nou;38!|%l@-Xdm;MWv#Cq3t^dJ+=<~N9KbL$X zzCEBM;^`1Ni{Aj`!@9v>8zrJbeosPl1AhiF5?FfJP|N%EQuR&7$Vq8u#|%&wPz@lP)veX{2rmeIR?6tBJvb98vi#%)`+j=E3p&CxvtYj0(I z)ZeGkaefCoYQJ8ssj**i)+6cT_l(N^kNV!!!jpA)Gv)j^W%u@My7?AzZQbtJ%Klh$ z`ai*w_O+Ah`uYJYhpjs%=q?yBOSWUiGzi#L+L;rr!PE$PUeArifr6vzdyqd2LnAnF?Kq|k@*zK$+Zl33QBsjnk zndy1^TLh=OmF0S(=R*%6fCX&wc1^P-jY%H9>$HDcu%^HV(3wJ8UN0xHLh#093O#aG z71UquJwyhN!Yb03>mbNn#Yz?JVQy`Ef+UiZxj%WuO-3B0Z0r(i6JJyeEoxJMIM`*9Z|r^8)R?~p_1 zwUxPDKQP9R@~+O0e*N~i*!zM!Jk7gSuQyjGkNeSy@79E~4|e6u^rq)a{x>W3`^?=$ h8WCDM0$v*)hu@H6*#4ifKi>EoV$c7Z@u7O){{TPHa4P@+ literal 14848 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 tY;U^0 - diff --git a/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs b/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs index daa4bfde2e..b790eb627c 100644 --- a/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs +++ b/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs @@ -1,5 +1,7 @@ using System; +using System.Diagnostics; using System.IO; +using System.Runtime.InteropServices; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; @@ -35,7 +37,29 @@ public override bool Execute() { } public string GetVersion() { - return ThisAssembly.Git.Commits; + string version = DateTime.Now.ToString("yyyyMMddHHmmss"); + + if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { + using (Process process = new Process()) { + process.StartInfo.FileName = "cmd.exe"; + process.StartInfo.WorkingDirectory = new DirectoryInfo(ProjectDir).FullName; + process.StartInfo.Arguments = $"/c git rev-list --count HEAD"; + process.StartInfo.UseShellExecute = false; + process.StartInfo.RedirectStandardOutput = true; + process.Start(); + + version = process.StandardOutput.ReadToEnd().Replace("\n", ""); + } + + } else if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { + + } else if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { + + } else { + + } + + return version; } } } From d79ebff86aec2a72285407e31c5ab17bee42cc85 Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Thu, 7 Apr 2022 13:43:13 +0200 Subject: [PATCH 12/39] Rely on "git" and not on "cmd.exe" to be platform independent --- build/bin/HeuristicLab.Build.dll | Bin 14848 -> 14848 bytes .../HeuristicLab.Build/UpdateVersion.cs | 20 +++++++----------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/build/bin/HeuristicLab.Build.dll b/build/bin/HeuristicLab.Build.dll index 586157d877664c39962ed91f5e964fbaeee9977c..ef3af63655a5e3ee5ead1838b70e1c751887cb21 100644 GIT binary patch delta 1998 zcmY+Fe@v4{7{|ZQ`{QTGM#q&pU=27m0}(x%>q?FQ$*geh{7ZqX7XV?OjoCTIKf@V6}gLX#1 z%W{%E&Ganig3CxXiVWBjfsrIzQGzXy!!Cv~lH(H4JPuZ=B9PCShk(L>Q&wXH!j({n z)P$L!X@G`o?EV@_yk<`6ICe@PCsXc6k7Le~4ZII|JAw0@BZ15Hp`gEQbBAnuo;Ni) zoxOGSxb6lxJo2j7)mCwSi}hUVp(8(|h?O3HCUI`#XSr3JQV_nV^Q<@toYR_2fec;p zA+0o1(8=QolxdrFfu~xAA#haDr?^w`j^cD?BEHx6a^GJ_M(F1V0(MQ3FrVY3D3*v3 zj^-lC8Rl@9s~6KKi=~F-apSlUXwXJ<2QE=BJMF4=%v@1zg@N~#vs>jh^t}4$;ua3iRK{x-~MqGwq==4mLVm7K)Jq; zLsxmgsSERI3+dQcFs{1vcPRmH&6H|aRt2xahIhu5?Jf^!LuXt);Q?*vR%$$^9g#xS z56|>Lo_dcw5ga8f!|-k4`K{%ZPw)vl8tjHVHRS>@@CK7GgAa>rV@HKad^ct9Da=F^ zFrBp!;^~?qm59C-ne-U-~QVS1XO1}!;O!`Z1DV69exJ{2(!QEPTO+(lwUZy7c34`!aFV&G7uVK2D8)pj& zv;w@%&MbbfbkQuh@F6oBeat+ZU=|`g%2^4B8`;{M2j+^9EDipJE0C!;U+g{_dqw|m7OvVmANz=?7g0p{&9oCqutn8dRbc}dv zq~BC2g}Y6pX6jPn|6Z@vn(oP}Z3~rnv3PZ0)3zg))VjVk*x?Vfp}I9Bi?L6#TF7!vJ!+kudez#S?TLMtecfeG*bF~H z{N}d4neBDPMEKU-O@}HDoy4W9ADoHA9?Z_CIg=7>j#PizR)=OwYjW_dN%b3UayU#k z(jo`BNSZ44@fSgJIBnLN;@jSX`9IzRt*+B}ZGHSaY-@aP@BaJE)*kPHm*S=)95*?3TlMc3AKkdNar^O)Mjk%k l{u9Yzyd-`viU&n@@D?wDil-@4{5j-@Ufqv)K3e*t4{b$0*& delta 2113 zcmY+Fdu&rx9LK-E`|7%3*U~Y8Io%kt&W*7RkPRGcJX0Q7vCc7HY;F~+Y#m(@kc5_q zhA2MDRWlO!1ETQ}(O{zyG!g&6#7AP#7)B%}V2r`HiBrJm_Z&Kjr@5c=`~J@F{O+&k zo_kLwl}SCd+xq_18N0K4u8~98m%4nBwLk~hdVq|Xtqe}c028R|BET(frBUa0OSQb{ z?v%9ba>WSRBUOO7jkD+FBF3De^tTMQfdE2tfx@DRlFS7$6uOb3Ff@-0H4_sGT3iNV zxP{^>coXy4Cr>gmv4B?IVT8PZGkg<0iB^S$SH_ZORq&!Kj?zRMMLIwA>O}kHp~dWG zcoR$5C6*G&vJwm>uOkvol!f@R$Xn;}Ca$Hx8PwhoT1HD38MFdcodwjEhL->5vjevF z8LTYm)FR;A!2jT5?ixW`5Yq{H4T$4U-3T@VacZ{s$4$kRGJ`j0 z^(b!CH#n@>W~tj8(A;mT(eKP8GZb5jJFN9~+QE~S8tBzLta*%7tz1)Bzi?eW&IvSX zTdChnrA&C~S%(1;WHmRFkqR~Ok%F(SQ8k)ZW0s$)H?OMfQ9kK-Ixib-KV?d*_t9*Q zF!j<9*mj~>hQ!1jHJ8!R4A*{&JZT&vlw87CcVOS7AV547mT)8<_Kf)$?mIE$IG3>Oh`R%=EfGSkxyubj7g z_#s(k51|BmoHUnRCCVbohq4cr?4o^_^C<0CXk`&G{WyqkoDsZ)L!u(f<#mo8w~t|p zq*vL;IlPC@b|2niAxCw(qd138>FJPBoX2D4D2~v7hMo)dkEoFm=T}rpr+I;%Hjb)7 z|3CIF5kO=U_&gm zz9YIW_jt*$|Gc zRAIfT+?|vA#1|e+#gd7kXe{|ayf5ayHsy^%mA@-K*q_+q-aYjbuac|dgPXUy4P`aC zuCh;q*A@3+0R5;(3|o1jWfuBSfenZw#ole2)ie?K{P&aJZ<;4do-cp(mUTPco1RO} zs+KuL9*-{&Hzp1khL102AZ}HN&&Q8-Aaj6UTZ5flfr**t=@&zrN8FDZ&Nj{az_%`rl=3$)S={4Te5(ary^Qz$qUNhVMvT>S!`7hWm;k}EG{rbi0-6QSiTz}L4 zrg7)|yi?`Ae#>azhg0r*_t{JTtlY}^<8809E3%cPJnF}qp2_*pCsGh F`4_O%j>iB1 diff --git a/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs b/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs index b790eb627c..4c63be4d79 100644 --- a/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs +++ b/build/source/HeuristicLab.Build/HeuristicLab.Build/UpdateVersion.cs @@ -39,25 +39,21 @@ public override bool Execute() { public string GetVersion() { string version = DateTime.Now.ToString("yyyyMMddHHmmss"); - if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { + try { using (Process process = new Process()) { - process.StartInfo.FileName = "cmd.exe"; + process.StartInfo.FileName = "git"; process.StartInfo.WorkingDirectory = new DirectoryInfo(ProjectDir).FullName; - process.StartInfo.Arguments = $"/c git rev-list --count HEAD"; + process.StartInfo.Arguments = $"rev-list --count HEAD"; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.Start(); - version = process.StandardOutput.ReadToEnd().Replace("\n", ""); + string ret = process.StandardOutput.ReadToEnd().Replace("\n", ""); + if (int.TryParse(ret, out _)) { + version = ret; + } } - - } else if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { - - } else if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { - - } else { - - } + } catch (Exception ex) { Log.LogMessage(ex.ToString()); } return version; } From ed3b58bc93256a6f7028f4c888e0c3fb941b2bd1 Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 8 Apr 2022 10:14:37 +0200 Subject: [PATCH 13/39] Cleaned up ExactOptimization project files Changed outputPath to SolutionDir Set CopyLocal (Private) of referenced projects to false Removed PostBuildEvent --- ...sticLab.ExactOptimization.Views-3.3.csproj | 47 +++++++++---------- .../HeuristicLab.ExactOptimization-3.3.csproj | 44 ++++++++--------- 2 files changed, 42 insertions(+), 49 deletions(-) diff --git a/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj b/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj index ec0ca70694..b138dbe1ec 100644 --- a/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj +++ b/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj @@ -20,7 +20,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -31,7 +31,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -39,7 +39,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -47,7 +47,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -103,93 +103,90 @@ {C38691AE-ECB4-489A-A05D-B035554E0168} HeuristicLab.CodeEditor-3.4 - True + False {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} HeuristicLab.Common.Resources-3.3 - True + False {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} HeuristicLab.Common-3.3 - True + False {E226881D-315F-423D-B419-A766FE0D8685} HeuristicLab.Core.Views-3.3 - True + False {C36BD924-A541-4A00-AFA8-41701378DDC5} HeuristicLab.Core-3.3 - True + False {72104A0B-90E7-42F3-9ABE-9BBBADD4B943} HeuristicLab.Data.Views-3.3 - True + False {bbab9df5-5ef3-4ba8-ade9-b36e82114937} HeuristicLab.Data-3.3 - True + False {AB687BBE-1BFE-476B-906D-44237135431D} HeuristicLab.MainForm.WindowsForms-3.3 - True + False {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} HeuristicLab.MainForm-3.3 - True + False {fa3b9270-48b7-4c77-9fea-2a6ede82e909} HeuristicLab.ExactOptimization-3.3 - True + False {662b4b15-8f4d-4ae5-b3eb-d91c215f5af2} HeuristicLab.Optimization.Views-3.3 - True + False {14AB8D24-25BC-400C-A846-4627AA945192} HeuristicLab.Optimization-3.3 - True + False {94186A6A-5176-4402-AE83-886557B53CCA} HeuristicLab.PluginInfrastructure-3.3 - True + False {6F023B90-2091-40A9-8AC0-B0338DFF8E5F} HeuristicLab.Problems.Programmable.Views-3.3 - True + False {EE07BFF8-B23D-41F5-8AD7-AC9598D7A2C9} HeuristicLab.Problems.Programmable-3.3 - True + False {0C2917C8-7AA8-4E18-800A-C4D064F992ED} HeuristicLab.Scripting.Views-3.3 - True + False {21977CC3-1757-4B3B-87BD-FF817AAA900F} HeuristicLab.Scripting-3.3 - True + False - - - copy /y "$(TargetPath)" "$(SolutionDir)\bin" - + + $(SolutionDir)..\bin + false - - - + + + + + + PreserveNewest + + + \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/DependencyResolutionException.cs b/build/source/HeuristicLab.Build/ProtoGen/DependencyResolutionException.cs new file mode 100644 index 0000000000..3323616d48 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/DependencyResolutionException.cs @@ -0,0 +1,55 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; + +namespace Google.ProtocolBuffers.ProtoGen +{ + /// + /// Exception thrown when dependencies within a descriptor set can't be resolved. + /// + public sealed class DependencyResolutionException : Exception + { + public DependencyResolutionException(string message) : base(message) + { + } + + public DependencyResolutionException(string format, params object[] args) + : base(string.Format(format, args)) + { + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/DescriptorUtil.cs b/build/source/HeuristicLab.Build/ProtoGen/DescriptorUtil.cs new file mode 100644 index 0000000000..ad9aaf3f25 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/DescriptorUtil.cs @@ -0,0 +1,106 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using Google.ProtocolBuffers.DescriptorProtos; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen +{ + /// + /// Utility class for determining namespaces etc. + /// + internal static class DescriptorUtil + { + internal static string GetFullUmbrellaClassName(IDescriptor descriptor) + { + CSharpFileOptions options = descriptor.File.CSharpOptions; + string result = options.Namespace; + if (result != "") + { + result += '.'; + } + result += GetQualifiedUmbrellaClassName(options); + return "global::" + result; + } + + /// + /// Evaluates the options and returns the qualified name of the umbrella class + /// relative to the descriptor type's namespace. Basically concatenates the + /// UmbrellaNamespace + UmbrellaClassname fields. + /// + internal static string GetQualifiedUmbrellaClassName(CSharpFileOptions options) + { + string fullName = options.UmbrellaClassname; + if (!options.NestClasses && options.UmbrellaNamespace != "") + { + fullName = String.Format("{0}.{1}", options.UmbrellaNamespace, options.UmbrellaClassname); + } + return fullName; + } + + internal static string GetMappedTypeName(MappedType type) + { + switch (type) + { + case MappedType.Int32: + return "int"; + case MappedType.Int64: + return "long"; + case MappedType.UInt32: + return "uint"; + case MappedType.UInt64: + return "ulong"; + case MappedType.Single: + return "float"; + case MappedType.Double: + return "double"; + case MappedType.Boolean: + return "bool"; + case MappedType.String: + return "string"; + case MappedType.ByteString: + return "pb::ByteString"; + case MappedType.Enum: + return null; + case MappedType.Message: + return null; + default: + throw new ArgumentOutOfRangeException("Unknown mapped type " + type); + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/EnumFieldGenerator.cs b/build/source/HeuristicLab.Build/ProtoGen/EnumFieldGenerator.cs new file mode 100644 index 0000000000..ea971daf4b --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/EnumFieldGenerator.cs @@ -0,0 +1,148 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen +{ + internal class EnumFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator + { + internal EnumFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal) + : base(descriptor, fieldOrdinal) + { + } + + public void GenerateMembers(TextGenerator writer) + { + writer.WriteLine("private bool has{0};", PropertyName); + writer.WriteLine("private {0} {1}_ = {2};", TypeName, Name, DefaultValue); + AddDeprecatedFlag(writer); + writer.WriteLine("public bool Has{0} {{", PropertyName); + writer.WriteLine(" get {{ return has{0}; }}", PropertyName); + writer.WriteLine("}"); + AddPublicMemberAttributes(writer); + writer.WriteLine("public {0} {1} {{", TypeName, PropertyName); + writer.WriteLine(" get {{ return {0}_; }}", Name); + writer.WriteLine("}"); + } + + public void GenerateBuilderMembers(TextGenerator writer) + { + AddDeprecatedFlag(writer); + writer.WriteLine("public bool Has{0} {{", PropertyName); + writer.WriteLine(" get {{ return result.has{0}; }}", PropertyName); + writer.WriteLine("}"); + AddPublicMemberAttributes(writer); + writer.WriteLine("public {0} {1} {{", TypeName, PropertyName); + writer.WriteLine(" get {{ return result.{0}; }}", PropertyName); + writer.WriteLine(" set {{ Set{0}(value); }}", PropertyName); + writer.WriteLine("}"); + AddPublicMemberAttributes(writer); + writer.WriteLine("public Builder Set{0}({1} value) {{", PropertyName, TypeName); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.has{0} = true;", PropertyName); + writer.WriteLine(" result.{0}_ = value;", Name); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public Builder Clear{0}() {{", PropertyName); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.has{0} = false;", PropertyName); + writer.WriteLine(" result.{0}_ = {1};", Name, DefaultValue); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + } + + public void GenerateMergingCode(TextGenerator writer) + { + writer.WriteLine("if (other.Has{0}) {{", PropertyName); + writer.WriteLine(" {0} = other.{0};", PropertyName); + writer.WriteLine("}"); + } + + public void GenerateBuildingCode(TextGenerator writer) + { + // Nothing to do here for enum types + } + + public void GenerateParsingCode(TextGenerator writer) + { + writer.WriteLine("object unknown;"); + writer.WriteLine("if(input.ReadEnum(ref result.{0}_, out unknown)) {{", Name); + writer.WriteLine(" result.has{0} = true;", PropertyName); + writer.WriteLine("} else if(unknown is int) {"); + if (!UseLiteRuntime) + { + writer.WriteLine(" if (unknownFields == null) {"); // First unknown field - create builder now + writer.WriteLine(" unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);"); + writer.WriteLine(" }"); + writer.WriteLine(" unknownFields.MergeVarintField({0}, (ulong)(int)unknown);", Number); + } + writer.WriteLine("}"); + } + + public void GenerateSerializationCode(TextGenerator writer) + { + writer.WriteLine("if (has{0}) {{", PropertyName); + writer.WriteLine(" output.WriteEnum({0}, field_names[{2}], (int) {1}, {1});", Number, PropertyName, + FieldOrdinal); + writer.WriteLine("}"); + } + + public void GenerateSerializedSizeCode(TextGenerator writer) + { + writer.WriteLine("if (has{0}) {{", PropertyName); + writer.WriteLine(" size += pb::CodedOutputStream.ComputeEnumSize({0}, (int) {1});", Number, PropertyName); + writer.WriteLine("}"); + } + + public override void WriteHash(TextGenerator writer) + { + writer.WriteLine("if (has{0}) hash ^= {1}_.GetHashCode();", PropertyName, Name); + } + + public override void WriteEquals(TextGenerator writer) + { + writer.WriteLine("if (has{0} != other.has{0} || (has{0} && !{1}_.Equals(other.{1}_))) return false;", + PropertyName, Name); + } + + public override void WriteToString(TextGenerator writer) + { + writer.WriteLine("PrintField(\"{0}\", has{1}, {2}_, writer);", Descriptor.Name, PropertyName, Name); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/EnumGenerator.cs b/build/source/HeuristicLab.Build/ProtoGen/EnumGenerator.cs new file mode 100644 index 0000000000..70580c4180 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/EnumGenerator.cs @@ -0,0 +1,64 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen +{ + internal class EnumGenerator : SourceGeneratorBase, ISourceGenerator + { + internal EnumGenerator(EnumDescriptor descriptor) : base(descriptor) + { + } + + // TODO(jonskeet): Write out enum descriptors? Can be retrieved from file... + public void Generate(TextGenerator writer) + { + writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); + writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", + GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); + writer.WriteLine("{0} enum {1} {{", ClassAccessLevel, Descriptor.Name); + writer.Indent(); + foreach (EnumValueDescriptor value in Descriptor.Values) + { + writer.WriteLine("{0} = {1},", value.Name, value.Number); + } + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine(); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/ExtensionGenerator.cs b/build/source/HeuristicLab.Build/ProtoGen/ExtensionGenerator.cs new file mode 100644 index 0000000000..e52bdaa6ea --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/ExtensionGenerator.cs @@ -0,0 +1,183 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen +{ + internal class ExtensionGenerator : FieldGeneratorBase, ISourceGenerator + { + private readonly string extends; + private readonly string scope; + private readonly string type; + private readonly string name; + + internal ExtensionGenerator(FieldDescriptor descriptor) + : base(descriptor, 0) + { + if (Descriptor.ExtensionScope != null) + { + scope = GetClassName(Descriptor.ExtensionScope); + } + else + { + scope = DescriptorUtil.GetFullUmbrellaClassName(Descriptor.File); + } + switch (Descriptor.MappedType) + { + case MappedType.Message: + type = GetClassName(Descriptor.MessageType); + break; + case MappedType.Enum: + type = GetClassName(Descriptor.EnumType); + break; + default: + type = DescriptorUtil.GetMappedTypeName(Descriptor.MappedType); + break; + } + extends = GetClassName(Descriptor.ContainingType); + name = Descriptor.CSharpOptions.PropertyName; + } + + public void Generate(TextGenerator writer) + { + if (Descriptor.File.CSharpOptions.ClsCompliance && GetFieldConstantName(Descriptor).StartsWith("_")) + { + writer.WriteLine("[global::System.CLSCompliant(false)]"); + } + + writer.WriteLine("public const int {0} = {1};", GetFieldConstantName(Descriptor), Descriptor.FieldNumber); + + if (UseLiteRuntime) + { + if (Descriptor.MappedType == MappedType.Message && Descriptor.MessageType.Options.MessageSetWireFormat) + { + throw new ArgumentException( + "option message_set_wire_format = true; is not supported in Lite runtime extensions."); + } + if (!Descriptor.IsCLSCompliant && Descriptor.File.CSharpOptions.ClsCompliance) + { + writer.WriteLine("[global::System.CLSCompliant(false)]"); + } + writer.WriteLine("{0} static pb::{4}<{1}, {2}> {3};", ClassAccessLevel, extends, type, name, + Descriptor.IsRepeated ? "GeneratedRepeatExtensionLite" : "GeneratedExtensionLite"); + } + else if (Descriptor.IsRepeated) + { + if (!Descriptor.IsCLSCompliant && Descriptor.File.CSharpOptions.ClsCompliance) + { + writer.WriteLine("[global::System.CLSCompliant(false)]"); + } + writer.WriteLine("{0} static pb::GeneratedExtensionBase> {2};", ClassAccessLevel, type, + name); + } + else + { + if (!Descriptor.IsCLSCompliant && Descriptor.File.CSharpOptions.ClsCompliance) + { + writer.WriteLine("[global::System.CLSCompliant(false)]"); + } + writer.WriteLine("{0} static pb::GeneratedExtensionBase<{1}> {2};", ClassAccessLevel, type, name); + } + } + + internal void GenerateStaticVariableInitializers(TextGenerator writer) + { + if (UseLiteRuntime) + { + writer.WriteLine("{0}.{1} = ", scope, name); + writer.Indent(); + writer.WriteLine("new pb::{0}<{1}, {2}>(", + Descriptor.IsRepeated ? "GeneratedRepeatExtensionLite" : "GeneratedExtensionLite", + extends, type); + writer.Indent(); + writer.WriteLine("\"{0}\",", Descriptor.FullName); + writer.WriteLine("{0}.DefaultInstance,", extends); + if (!Descriptor.IsRepeated) + { + writer.WriteLine("{0},", + Descriptor.HasDefaultValue + ? DefaultValue + : IsNullableType ? "null" : "default(" + type + ")"); + } + writer.WriteLine("{0},", + (Descriptor.MappedType == MappedType.Message) ? type + ".DefaultInstance" : "null"); + writer.WriteLine("{0},", + (Descriptor.MappedType == MappedType.Enum) ? "new EnumLiteMap<" + type + ">()" : "null"); + writer.WriteLine("{0}.{1}FieldNumber,", scope, name); + writer.Write("pbd::FieldType.{0}", Descriptor.FieldType); + if (Descriptor.IsRepeated) + { + writer.WriteLine(","); + writer.Write(Descriptor.IsPacked ? "true" : "false"); + } + writer.Outdent(); + writer.WriteLine(");"); + writer.Outdent(); + } + else if (Descriptor.IsRepeated) + { + writer.WriteLine( + "{0}.{1} = pb::GeneratedRepeatExtension<{2}>.CreateInstance({0}.Descriptor.Extensions[{3}]);", scope, + name, type, Descriptor.Index); + } + else + { + writer.WriteLine( + "{0}.{1} = pb::GeneratedSingleExtension<{2}>.CreateInstance({0}.Descriptor.Extensions[{3}]);", scope, + name, type, Descriptor.Index); + } + } + + internal void GenerateExtensionRegistrationCode(TextGenerator writer) + { + writer.WriteLine("registry.Add({0}.{1});", scope, name); + } + + public override void WriteHash(TextGenerator writer) + { + } + + public override void WriteEquals(TextGenerator writer) + { + } + + public override void WriteToString(TextGenerator writer) + { + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/FieldGeneratorBase.cs b/build/source/HeuristicLab.Build/ProtoGen/FieldGeneratorBase.cs new file mode 100644 index 0000000000..19aba70457 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/FieldGeneratorBase.cs @@ -0,0 +1,389 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Globalization; +using System.Text; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen +{ + internal abstract class FieldGeneratorBase : SourceGeneratorBase + { + private readonly int _fieldOrdinal; + + protected FieldGeneratorBase(FieldDescriptor descriptor, int fieldOrdinal) + : base(descriptor) + { + _fieldOrdinal = fieldOrdinal; + } + + public abstract void WriteHash(TextGenerator writer); + public abstract void WriteEquals(TextGenerator writer); + public abstract void WriteToString(TextGenerator writer); + + public int FieldOrdinal + { + get { return _fieldOrdinal; } + } + + private static bool AllPrintableAscii(string text) + { + foreach (char c in text) + { + if (c < 0x20 || c > 0x7e) + { + return false; + } + } + return true; + } + + /// + /// This returns true if the field has a non-default default value. For instance this returns + /// false for numerics with a default of zero '0', or booleans with a default of false. + /// + protected bool HasDefaultValue + { + get + { + switch (Descriptor.FieldType) + { + case FieldType.Float: + case FieldType.Double: + case FieldType.Int32: + case FieldType.Int64: + case FieldType.SInt32: + case FieldType.SInt64: + case FieldType.SFixed32: + case FieldType.SFixed64: + case FieldType.UInt32: + case FieldType.UInt64: + case FieldType.Fixed32: + case FieldType.Fixed64: + { + IConvertible value = (IConvertible) Descriptor.DefaultValue; + return value.ToString(CultureInfo.InvariantCulture) != "0"; + } + case FieldType.Bool: + return ((bool) Descriptor.DefaultValue) == true; + default: + return true; + } + } + } + + /// Copy exists in ExtensionGenerator.cs + protected string DefaultValue + { + get + { + string suffix = ""; + switch (Descriptor.FieldType) + { + case FieldType.Float: + suffix = "F"; + break; + case FieldType.Double: + suffix = "D"; + break; + case FieldType.Int64: + suffix = "L"; + break; + case FieldType.UInt64: + suffix = "UL"; + break; + } + switch (Descriptor.FieldType) + { + case FieldType.Float: + case FieldType.Double: + case FieldType.Int32: + case FieldType.Int64: + case FieldType.SInt32: + case FieldType.SInt64: + case FieldType.SFixed32: + case FieldType.SFixed64: + case FieldType.UInt32: + case FieldType.UInt64: + case FieldType.Fixed32: + case FieldType.Fixed64: + { + // The simple Object.ToString converts using the current culture. + // We want to always use the invariant culture so it's predictable. + IConvertible value = (IConvertible) Descriptor.DefaultValue; + //a few things that must be handled explicitly + if (Descriptor.FieldType == FieldType.Double && value is double) + { + if (double.IsNaN((double) value)) + { + return "double.NaN"; + } + if (double.IsPositiveInfinity((double) value)) + { + return "double.PositiveInfinity"; + } + if (double.IsNegativeInfinity((double) value)) + { + return "double.NegativeInfinity"; + } + } + else if (Descriptor.FieldType == FieldType.Float && value is float) + { + if (float.IsNaN((float) value)) + { + return "float.NaN"; + } + if (float.IsPositiveInfinity((float) value)) + { + return "float.PositiveInfinity"; + } + if (float.IsNegativeInfinity((float) value)) + { + return "float.NegativeInfinity"; + } + } + return value.ToString(CultureInfo.InvariantCulture) + suffix; + } + case FieldType.Bool: + return (bool) Descriptor.DefaultValue ? "true" : "false"; + + case FieldType.Bytes: + if (!Descriptor.HasDefaultValue) + { + return "pb::ByteString.Empty"; + } + if (UseLiteRuntime && Descriptor.DefaultValue is ByteString) + { + string temp = (((ByteString) Descriptor.DefaultValue).ToBase64()); + return String.Format("pb::ByteString.FromBase64(\"{0}\")", temp); + } + return string.Format("(pb::ByteString) {0}.Descriptor.Fields[{1}].DefaultValue", + GetClassName(Descriptor.ContainingType), Descriptor.Index); + case FieldType.String: + if (AllPrintableAscii(Descriptor.Proto.DefaultValue)) + { + // All chars are ASCII and printable. In this case we only + // need to escape quotes and backslashes. + return "\"" + Descriptor.Proto.DefaultValue + .Replace("\\", "\\\\") + .Replace("'", "\\'") + .Replace("\"", "\\\"") + + "\""; + } + if (UseLiteRuntime && Descriptor.DefaultValue is String) + { + string temp = Convert.ToBase64String( + Encoding.UTF8.GetBytes((String) Descriptor.DefaultValue)); + return String.Format("pb::ByteString.FromBase64(\"{0}\").ToStringUtf8()", temp); + } + return string.Format("(string) {0}.Descriptor.Fields[{1}].DefaultValue", + GetClassName(Descriptor.ContainingType), Descriptor.Index); + case FieldType.Enum: + return TypeName + "." + ((EnumValueDescriptor) Descriptor.DefaultValue).Name; + case FieldType.Message: + case FieldType.Group: + return TypeName + ".DefaultInstance"; + default: + throw new InvalidOperationException("Invalid field descriptor type"); + } + } + } + + protected string PropertyName + { + get { return Descriptor.CSharpOptions.PropertyName; } + } + + protected string Name + { + get { return NameHelpers.UnderscoresToCamelCase(GetFieldName(Descriptor)); } + } + + protected int Number + { + get { return Descriptor.FieldNumber; } + } + + protected void AddNullCheck(TextGenerator writer) + { + AddNullCheck(writer, "value"); + } + + protected void AddNullCheck(TextGenerator writer, string name) + { + if (IsNullableType) + { + writer.WriteLine(" pb::ThrowHelper.ThrowIfNull({0}, \"{0}\");", name); + } + } + + protected void AddPublicMemberAttributes(TextGenerator writer) + { + AddDeprecatedFlag(writer); + AddClsComplianceCheck(writer); + } + + protected void AddClsComplianceCheck(TextGenerator writer) + { + if (!Descriptor.IsCLSCompliant && Descriptor.File.CSharpOptions.ClsCompliance) + { + writer.WriteLine("[global::System.CLSCompliant(false)]"); + } + } + + protected bool IsObsolete { get { return Descriptor.Options.Deprecated; } } + + /// + /// Writes [global::System.ObsoleteAttribute()] if the member is obsolete + /// + protected void AddDeprecatedFlag(TextGenerator writer) + { + if (IsObsolete) + { + writer.WriteLine("[global::System.ObsoleteAttribute()]"); + } + } + + /// + /// For encodings with fixed sizes, returns that size in bytes. Otherwise + /// returns -1. TODO(jonskeet): Make this less ugly. + /// + protected int FixedSize + { + get + { + switch (Descriptor.FieldType) + { + case FieldType.UInt32: + case FieldType.UInt64: + case FieldType.Int32: + case FieldType.Int64: + case FieldType.SInt32: + case FieldType.SInt64: + case FieldType.Enum: + case FieldType.Bytes: + case FieldType.String: + case FieldType.Message: + case FieldType.Group: + return -1; + case FieldType.Float: + return WireFormat.FloatSize; + case FieldType.SFixed32: + return WireFormat.SFixed32Size; + case FieldType.Fixed32: + return WireFormat.Fixed32Size; + case FieldType.Double: + return WireFormat.DoubleSize; + case FieldType.SFixed64: + return WireFormat.SFixed64Size; + case FieldType.Fixed64: + return WireFormat.Fixed64Size; + case FieldType.Bool: + return WireFormat.BoolSize; + default: + throw new InvalidOperationException("Invalid field descriptor type"); + } + } + } + + protected bool IsNullableType + { + get + { + switch (Descriptor.FieldType) + { + case FieldType.Float: + case FieldType.Double: + case FieldType.Int32: + case FieldType.Int64: + case FieldType.SInt32: + case FieldType.SInt64: + case FieldType.SFixed32: + case FieldType.SFixed64: + case FieldType.UInt32: + case FieldType.UInt64: + case FieldType.Fixed32: + case FieldType.Fixed64: + case FieldType.Bool: + case FieldType.Enum: + return false; + case FieldType.Bytes: + case FieldType.String: + case FieldType.Message: + case FieldType.Group: + return true; + default: + throw new InvalidOperationException("Invalid field descriptor type"); + } + } + } + + protected string TypeName + { + get + { + switch (Descriptor.FieldType) + { + case FieldType.Enum: + return GetClassName(Descriptor.EnumType); + case FieldType.Message: + case FieldType.Group: + return GetClassName(Descriptor.MessageType); + default: + return DescriptorUtil.GetMappedTypeName(Descriptor.MappedType); + } + } + } + + protected string MessageOrGroup + { + get { return Descriptor.FieldType == FieldType.Group ? "Group" : "Message"; } + } + + /// + /// Returns the type name as used in CodedInputStream method names: SFixed32, UInt32 etc. + /// + protected string CapitalizedTypeName + { + get + { + // Our enum names match perfectly. How serendipitous. + return Descriptor.FieldType.ToString(); + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/Generator.cs b/build/source/HeuristicLab.Build/ProtoGen/Generator.cs new file mode 100644 index 0000000000..cd22fb9dd2 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/Generator.cs @@ -0,0 +1,248 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System.Collections.Generic; +using System.IO; +using System.Text; +using Google.ProtocolBuffers.Collections; +using Google.ProtocolBuffers.DescriptorProtos; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen +{ + /// + /// Code generator for protocol buffers. Only C# is supported at the moment. + /// + public sealed class Generator + { + private readonly GeneratorOptions options; + + private Generator(GeneratorOptions options) + { + options.Validate(); + this.options = options; + } + + /// + /// Returns a generator configured with the specified options. + /// + public static Generator CreateGenerator(GeneratorOptions options) + { + return new Generator(options); + } + + public void Generate() + { + List descriptorProtos = new List(); + foreach (string inputFile in options.InputFiles) + { + ExtensionRegistry extensionRegistry = ExtensionRegistry.CreateInstance(); + CSharpOptions.RegisterAllExtensions(extensionRegistry); + using (Stream inputStream = File.OpenRead(inputFile)) + { + descriptorProtos.Add(FileDescriptorSet.ParseFrom(inputStream, extensionRegistry)); + } + } + + IList descriptors = ConvertDescriptors(options.FileOptions, descriptorProtos.ToArray()); + + // Combine with options from command line + foreach (FileDescriptor descriptor in descriptors) + { + descriptor.ConfigureWithDefaultOptions(options.FileOptions); + } + + foreach (FileDescriptor descriptor in descriptors) + { + // Optionally exclude descriptors in google.protobuf + if (descriptor.CSharpOptions.IgnoreGoogleProtobuf && descriptor.Package == "google.protobuf") + { + continue; + } + Generate(descriptor); + } + } + + /// + /// Generates code for a particular file. All dependencies must + /// already have been resolved. + /// + private void Generate(FileDescriptor descriptor) + { + UmbrellaClassGenerator ucg = new UmbrellaClassGenerator(descriptor); + using (TextWriter textWriter = File.CreateText(GetOutputFile(descriptor))) + { + TextGenerator writer = new TextGenerator(textWriter, options.LineBreak); + ucg.Generate(writer); + } + } + + private string GetOutputFile(FileDescriptor descriptor) + { + CSharpFileOptions fileOptions = descriptor.CSharpOptions; + + string filename = descriptor.CSharpOptions.UmbrellaClassname + descriptor.CSharpOptions.FileExtension; + + string outputDirectory = descriptor.CSharpOptions.OutputDirectory; + if (fileOptions.ExpandNamespaceDirectories) + { + string package = fileOptions.Namespace; + if (!string.IsNullOrEmpty(package)) + { + string[] bits = package.Split('.'); + foreach (string bit in bits) + { + outputDirectory = Path.Combine(outputDirectory, bit); + } + } + } + + // As the directory can be explicitly specified in options, we need to make sure it exists + Directory.CreateDirectory(outputDirectory); + return Path.Combine(outputDirectory, filename); + } + + /// + /// Resolves any dependencies and converts FileDescriptorProtos into FileDescriptors. + /// The list returned is in the same order as the protos are listed in the descriptor set. + /// Note: this method is internal rather than private to allow testing. + /// + /// Not all dependencies could be resolved. + public static IList ConvertDescriptors(CSharpFileOptions options, + params FileDescriptorSet[] descriptorProtos) + { + // Simple strategy: Keep going through the list of protos to convert, only doing ones where + // we've already converted all the dependencies, until we get to a stalemate + List fileList = new List(); + foreach (FileDescriptorSet set in descriptorProtos) + { + fileList.AddRange(set.FileList); + } + + FileDescriptor[] converted = new FileDescriptor[fileList.Count]; + + Dictionary convertedMap = new Dictionary(); + + int totalConverted = 0; + + bool madeProgress = true; + while (madeProgress && totalConverted < converted.Length) + { + madeProgress = false; + for (int i = 0; i < converted.Length; i++) + { + if (converted[i] != null) + { + // Already done this one + continue; + } + FileDescriptorProto candidate = fileList[i]; + FileDescriptor[] dependencies = new FileDescriptor[candidate.DependencyList.Count]; + + + CSharpFileOptions.Builder builder = options.ToBuilder(); + if (candidate.Options.HasExtension(CSharpOptions.CSharpFileOptions)) + { + builder.MergeFrom( + candidate.Options.GetExtension(CSharpOptions.CSharpFileOptions)); + } + CSharpFileOptions localOptions = builder.Build(); + + bool foundAllDependencies = true; + for (int j = 0; j < dependencies.Length; j++) + { + if (!convertedMap.TryGetValue(candidate.DependencyList[j], out dependencies[j])) + { + // We can auto-magically resolve these since we already have their description + // This way if the file is only referencing options it does not need to be built with the + // --include_imports definition. + if (localOptions.IgnoreGoogleProtobuf && + (candidate.DependencyList[j] == "google/protobuf/csharp_options.proto")) + { + dependencies[j] = CSharpOptions.Descriptor; + continue; + } + if (localOptions.IgnoreGoogleProtobuf && + (candidate.DependencyList[j] == "google/protobuf/descriptor.proto")) + { + dependencies[j] = DescriptorProtoFile.Descriptor; + continue; + } + foundAllDependencies = false; + break; + } + } + if (!foundAllDependencies) + { + continue; + } + madeProgress = true; + totalConverted++; + converted[i] = FileDescriptor.BuildFrom(candidate, dependencies); + convertedMap[candidate.Name] = converted[i]; + } + } + if (!madeProgress) + { + StringBuilder remaining = new StringBuilder(); + for (int i = 0; i < converted.Length; i++) + { + if (converted[i] == null) + { + if (remaining.Length != 0) + { + remaining.Append(", "); + } + FileDescriptorProto failure = fileList[i]; + remaining.Append(failure.Name); + remaining.Append(":"); + foreach (string dependency in failure.DependencyList) + { + if (!convertedMap.ContainsKey(dependency)) + { + remaining.Append(" "); + remaining.Append(dependency); + } + } + remaining.Append(";"); + } + } + throw new DependencyResolutionException("Unable to resolve all dependencies: " + remaining); + } + return Lists.AsReadOnly(converted); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/GeneratorOptions.cs b/build/source/HeuristicLab.Build/ProtoGen/GeneratorOptions.cs new file mode 100644 index 0000000000..7c5dec28eb --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/GeneratorOptions.cs @@ -0,0 +1,330 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.RegularExpressions; +using Google.ProtocolBuffers.DescriptorProtos; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen +{ + /// + /// All the configuration required for the generator - where to generate + /// output files, the location of input files etc. While this isn't immutable + /// in practice, the contents shouldn't be changed after being passed to + /// the generator. + /// + public sealed class GeneratorOptions + { + private static Dictionary LineBreaks = + new Dictionary(StringComparer.InvariantCultureIgnoreCase) + { + {"Windows", "\r\n"}, + {"Unix", "\n"}, + {"Default", Environment.NewLine} + }; + + public IList InputFiles { get; set; } + + public GeneratorOptions() + { + LineBreak = Environment.NewLine; + } + + /// + /// Attempts to validate the options, but doesn't throw an exception if they're invalid. + /// Instead, when this method returns false, the output variable will contain a collection + /// of reasons for the validation failure. + /// + /// Variable to receive a list of reasons in case of validation failure. + /// true if the options are valid; false otherwise + public bool TryValidate(out IList reasons) + { + List tmpReasons = new List(); + + ParseArguments(tmpReasons); + + // Output directory validation + if (string.IsNullOrEmpty(FileOptions.OutputDirectory)) + { + tmpReasons.Add("No output directory specified"); + } + else + { + if (!Directory.Exists(FileOptions.OutputDirectory)) + { + tmpReasons.Add("Specified output directory (" + FileOptions.OutputDirectory + " doesn't exist."); + } + } + + // Input file validation (just in terms of presence) + if (InputFiles == null || InputFiles.Count == 0) + { + tmpReasons.Add("No input files specified"); + } + else + { + foreach (string input in InputFiles) + { + FileInfo fi = new FileInfo(input); + if (!fi.Exists) + { + tmpReasons.Add("Input file " + input + " doesn't exist."); + } + } + } + + if (tmpReasons.Count != 0) + { + reasons = tmpReasons; + return false; + } + + reasons = null; + return true; + } + + /// + /// Validates that all the options have been set and are valid, + /// throwing an exception if they haven't. + /// + /// The options are invalid. + public void Validate() + { + IList reasons; + if (!TryValidate(out reasons)) + { + throw new InvalidOptionsException(reasons); + } + } + + // Raw arguments, used to provide defaults for proto file options + public IList Arguments { get; set; } + + [Obsolete("Please use GeneratorOptions.FileOptions.OutputDirectory instead")] + public string OutputDirectory + { + get { return FileOptions.OutputDirectory; } + set + { + CSharpFileOptions.Builder bld = FileOptions.ToBuilder(); + bld.OutputDirectory = value; + FileOptions = bld.Build(); + } + } + + private static readonly Regex ArgMatch = new Regex(@"^[-/](?[\w_]+?)[:=](?.*)$"); + private CSharpFileOptions fileOptions; + + public CSharpFileOptions FileOptions + { + get { return fileOptions ?? (fileOptions = CSharpFileOptions.DefaultInstance); } + set { fileOptions = value; } + } + + public string LineBreak { get; set; } + + private void ParseArguments(IList tmpReasons) + { + bool doHelp = Arguments.Count == 0; + + InputFiles = new List(); + CSharpFileOptions.Builder builder = FileOptions.ToBuilder(); + Dictionary fields = + new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach (FieldDescriptor fld in builder.DescriptorForType.Fields) + { + fields.Add(fld.Name, fld); + } + + foreach (string argument in Arguments) + { + if (StringComparer.OrdinalIgnoreCase.Equals("-help", argument) || + StringComparer.OrdinalIgnoreCase.Equals("/help", argument) || + StringComparer.OrdinalIgnoreCase.Equals("-?", argument) || + StringComparer.OrdinalIgnoreCase.Equals("/?", argument)) + { + doHelp = true; + break; + } + + Match m = ArgMatch.Match(argument); + if (m.Success) + { + FieldDescriptor fld; + string name = m.Groups["name"].Value; + string value = m.Groups["value"].Value; + + if (fields.TryGetValue(name, out fld)) + { + object obj; + if (TryCoerceType(value, fld, out obj, tmpReasons)) + { + builder[fld] = obj; + } + } + else if (name == "line_break") + { + string tmp; + if (LineBreaks.TryGetValue(value, out tmp)) + { + LineBreak = tmp; + } + else + { + tmpReasons.Add("Invalid value for 'line_break': " + value + "."); + } + } + else if (!File.Exists(argument)) + { + doHelp = true; + tmpReasons.Add("Unknown argument '" + name + "'."); + } + else + { + InputFiles.Add(argument); + } + } + else + { + InputFiles.Add(argument); + } + } + + if (doHelp || InputFiles.Count == 0) + { + tmpReasons.Add("Arguments:"); + foreach (KeyValuePair field in fields) + { + tmpReasons.Add(String.Format("-{0}=[{1}]", field.Key, field.Value.FieldType)); + } + tmpReasons.Add("-line_break=[" + string.Join("|", new List(LineBreaks.Keys).ToArray()) + "]"); + tmpReasons.Add("followed by one or more file paths."); + } + else + { + FileOptions = builder.Build(); + } + } + + private static bool TryCoerceType(string text, FieldDescriptor field, out object value, IList tmpReasons) + { + value = null; + + switch (field.FieldType) + { + case FieldType.Int32: + case FieldType.SInt32: + case FieldType.SFixed32: + value = Int32.Parse(text); + break; + + case FieldType.Int64: + case FieldType.SInt64: + case FieldType.SFixed64: + value = Int64.Parse(text); + break; + + case FieldType.UInt32: + case FieldType.Fixed32: + value = UInt32.Parse(text); + break; + + case FieldType.UInt64: + case FieldType.Fixed64: + value = UInt64.Parse(text); + break; + + case FieldType.Float: + value = float.Parse(text); + break; + + case FieldType.Double: + value = Double.Parse(text); + break; + + case FieldType.Bool: + value = Boolean.Parse(text); + break; + + case FieldType.String: + value = text; + break; + + case FieldType.Enum: + { + EnumDescriptor enumType = field.EnumType; + + int number; + if (int.TryParse(text, out number)) + { + value = enumType.FindValueByNumber(number); + if (value == null) + { + tmpReasons.Add( + "Enum type \"" + enumType.FullName + + "\" has no value with number " + number + "."); + return false; + } + } + else + { + value = enumType.FindValueByName(text); + if (value == null) + { + tmpReasons.Add( + "Enum type \"" + enumType.FullName + + "\" has no value named \"" + text + "\"."); + return false; + } + } + + break; + } + + case FieldType.Bytes: + case FieldType.Message: + case FieldType.Group: + tmpReasons.Add("Unhandled field type " + field.FieldType.ToString() + "."); + return false; + } + + return true; + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/Helpers.cs b/build/source/HeuristicLab.Build/ProtoGen/Helpers.cs new file mode 100644 index 0000000000..3ec346e05b --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/Helpers.cs @@ -0,0 +1,45 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +namespace Google.ProtocolBuffers.ProtoGen +{ + /// + /// Helpers to resolve class names etc. + /// + internal static class Helpers + { + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/IFieldSourceGenerator.cs b/build/source/HeuristicLab.Build/ProtoGen/IFieldSourceGenerator.cs new file mode 100644 index 0000000000..ea19223494 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/IFieldSourceGenerator.cs @@ -0,0 +1,53 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +namespace Google.ProtocolBuffers.ProtoGen +{ + internal interface IFieldSourceGenerator + { + void GenerateMembers(TextGenerator writer); + void GenerateBuilderMembers(TextGenerator writer); + void GenerateMergingCode(TextGenerator writer); + void GenerateBuildingCode(TextGenerator writer); + void GenerateParsingCode(TextGenerator writer); + void GenerateSerializationCode(TextGenerator writer); + void GenerateSerializedSizeCode(TextGenerator writer); + + void WriteHash(TextGenerator writer); + void WriteEquals(TextGenerator writer); + void WriteToString(TextGenerator writer); + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/ISourceGenerator.cs b/build/source/HeuristicLab.Build/ProtoGen/ISourceGenerator.cs new file mode 100644 index 0000000000..73c61373cf --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/ISourceGenerator.cs @@ -0,0 +1,43 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +namespace Google.ProtocolBuffers.ProtoGen +{ + internal interface ISourceGenerator + { + void Generate(TextGenerator writer); + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/InvalidOptionsException.cs b/build/source/HeuristicLab.Build/ProtoGen/InvalidOptionsException.cs new file mode 100644 index 0000000000..0bef2fc861 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/InvalidOptionsException.cs @@ -0,0 +1,77 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using System.Text; +using Google.ProtocolBuffers.Collections; + +namespace Google.ProtocolBuffers.ProtoGen +{ + /// + /// Exception thrown to indicate that the options passed were invalid. + /// + public sealed class InvalidOptionsException : Exception + { + private readonly IList reasons; + + /// + /// An immutable list of reasons why the options were invalid. + /// + public IList Reasons + { + get { return reasons; } + } + + public InvalidOptionsException(IList reasons) + : base(BuildMessage(reasons)) + { + this.reasons = Lists.AsReadOnly(reasons); + } + + private static string BuildMessage(IEnumerable reasons) + { + StringBuilder builder = new StringBuilder("Invalid options:"); + builder.AppendLine(); + foreach (string reason in reasons) + { + builder.Append(" "); + builder.AppendLine(reason); + } + return builder.ToString(); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/MessageFieldGenerator.cs b/build/source/HeuristicLab.Build/ProtoGen/MessageFieldGenerator.cs new file mode 100644 index 0000000000..1e91fddea9 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/MessageFieldGenerator.cs @@ -0,0 +1,174 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen +{ + internal class MessageFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator + { + internal MessageFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal) + : base(descriptor, fieldOrdinal) + { + } + + public void GenerateMembers(TextGenerator writer) + { + writer.WriteLine("private bool has{0};", PropertyName); + writer.WriteLine("private {0} {1}_;", TypeName, Name); + AddDeprecatedFlag(writer); + writer.WriteLine("public bool Has{0} {{", PropertyName); + writer.WriteLine(" get {{ return has{0}; }}", PropertyName); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public {0} {1} {{", TypeName, PropertyName); + writer.WriteLine(" get {{ return {0}_ ?? {1}; }}", Name, DefaultValue); + writer.WriteLine("}"); + } + + public void GenerateBuilderMembers(TextGenerator writer) + { + AddDeprecatedFlag(writer); + writer.WriteLine("public bool Has{0} {{", PropertyName); + writer.WriteLine(" get {{ return result.has{0}; }}", PropertyName); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public {0} {1} {{", TypeName, PropertyName); + writer.WriteLine(" get {{ return result.{0}; }}", PropertyName); + writer.WriteLine(" set {{ Set{0}(value); }}", PropertyName); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public Builder Set{0}({1} value) {{", PropertyName, TypeName); + AddNullCheck(writer); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.has{0} = true;", PropertyName); + writer.WriteLine(" result.{0}_ = value;", Name); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public Builder Set{0}({1}.Builder builderForValue) {{", PropertyName, TypeName); + AddNullCheck(writer, "builderForValue"); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.has{0} = true;", PropertyName); + writer.WriteLine(" result.{0}_ = builderForValue.Build();", Name); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public Builder Merge{0}({1} value) {{", PropertyName, TypeName); + AddNullCheck(writer); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" if (result.has{0} &&", PropertyName); + writer.WriteLine(" result.{0}_ != {1}) {{", Name, DefaultValue); + writer.WriteLine(" result.{0}_ = {1}.CreateBuilder(result.{0}_).MergeFrom(value).BuildPartial();", Name, + TypeName); + writer.WriteLine(" } else {"); + writer.WriteLine(" result.{0}_ = value;", Name); + writer.WriteLine(" }"); + writer.WriteLine(" result.has{0} = true;", PropertyName); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public Builder Clear{0}() {{", PropertyName); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.has{0} = false;", PropertyName); + writer.WriteLine(" result.{0}_ = null;", Name); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + } + + public void GenerateMergingCode(TextGenerator writer) + { + writer.WriteLine("if (other.Has{0}) {{", PropertyName); + writer.WriteLine(" Merge{0}(other.{0});", PropertyName); + writer.WriteLine("}"); + } + + public void GenerateBuildingCode(TextGenerator writer) + { + // Nothing to do for singular fields + } + + public void GenerateParsingCode(TextGenerator writer) + { + writer.WriteLine("{0}.Builder subBuilder = {0}.CreateBuilder();", TypeName); + writer.WriteLine("if (result.has{0}) {{", PropertyName); + writer.WriteLine(" subBuilder.MergeFrom({0});", PropertyName); + writer.WriteLine("}"); + if (Descriptor.FieldType == FieldType.Group) + { + writer.WriteLine("input.ReadGroup({0}, subBuilder, extensionRegistry);", Number); + } + else + { + writer.WriteLine("input.ReadMessage(subBuilder, extensionRegistry);"); + } + writer.WriteLine("{0} = subBuilder.BuildPartial();", PropertyName); + } + + public void GenerateSerializationCode(TextGenerator writer) + { + writer.WriteLine("if (has{0}) {{", PropertyName); + writer.WriteLine(" output.Write{0}({1}, field_names[{3}], {2});", MessageOrGroup, Number, PropertyName, + FieldOrdinal); + writer.WriteLine("}"); + } + + public void GenerateSerializedSizeCode(TextGenerator writer) + { + writer.WriteLine("if (has{0}) {{", PropertyName); + writer.WriteLine(" size += pb::CodedOutputStream.Compute{0}Size({1}, {2});", + MessageOrGroup, Number, PropertyName); + writer.WriteLine("}"); + } + + public override void WriteHash(TextGenerator writer) + { + writer.WriteLine("if (has{0}) hash ^= {1}_.GetHashCode();", PropertyName, Name); + } + + public override void WriteEquals(TextGenerator writer) + { + writer.WriteLine("if (has{0} != other.has{0} || (has{0} && !{1}_.Equals(other.{1}_))) return false;", + PropertyName, Name); + } + + public override void WriteToString(TextGenerator writer) + { + writer.WriteLine("PrintField(\"{2}\", has{0}, {1}_, writer);", PropertyName, Name, + Descriptor.FieldType == FieldType.Group ? Descriptor.MessageType.Name : Descriptor.Name); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/MessageGenerator.cs b/build/source/HeuristicLab.Build/ProtoGen/MessageGenerator.cs new file mode 100644 index 0000000000..487281bce1 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/MessageGenerator.cs @@ -0,0 +1,891 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using Google.ProtocolBuffers.DescriptorProtos; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen +{ + internal class MessageGenerator : SourceGeneratorBase, ISourceGenerator + { + private string[] _fieldNames; + + internal MessageGenerator(MessageDescriptor descriptor) : base(descriptor) + { + } + + private string ClassName + { + get { return Descriptor.Name; } + } + + private string FullClassName + { + get { return GetClassName(Descriptor); } + } + + /// + /// Get an identifier that uniquely identifies this type within the file. + /// This is used to declare static variables related to this type at the + /// outermost file scope. + /// + private static string GetUniqueFileScopeIdentifier(IDescriptor descriptor) + { + return "static_" + descriptor.FullName.Replace(".", "_"); + } + + internal void GenerateStaticVariables(TextGenerator writer) + { + // Because descriptor.proto (Google.ProtocolBuffers.DescriptorProtos) is + // used in the construction of descriptors, we have a tricky bootstrapping + // problem. To help control static initialization order, we make sure all + // descriptors and other static data that depends on them are members of + // the proto-descriptor class. This way, they will be initialized in + // a deterministic order. + + string identifier = GetUniqueFileScopeIdentifier(Descriptor); + + if (!UseLiteRuntime) + { + // The descriptor for this type. + string access = Descriptor.File.CSharpOptions.NestClasses ? "private" : "internal"; + writer.WriteLine("{0} static pbd::MessageDescriptor internal__{1}__Descriptor;", access, identifier); + writer.WriteLine( + "{0} static pb::FieldAccess.FieldAccessorTable<{1}, {1}.Builder> internal__{2}__FieldAccessorTable;", + access, FullClassName, identifier); + } + // Generate static members for all nested types. + foreach (MessageDescriptor nestedMessage in Descriptor.NestedTypes) + { + new MessageGenerator(nestedMessage).GenerateStaticVariables(writer); + } + } + + internal void GenerateStaticVariableInitializers(TextGenerator writer) + { + string identifier = GetUniqueFileScopeIdentifier(Descriptor); + + if (!UseLiteRuntime) + { + writer.Write("internal__{0}__Descriptor = ", identifier); + if (Descriptor.ContainingType == null) + { + writer.WriteLine("Descriptor.MessageTypes[{0}];", Descriptor.Index); + } + else + { + writer.WriteLine("internal__{0}__Descriptor.NestedTypes[{1}];", + GetUniqueFileScopeIdentifier(Descriptor.ContainingType), Descriptor.Index); + } + + writer.WriteLine("internal__{0}__FieldAccessorTable = ", identifier); + writer.WriteLine( + " new pb::FieldAccess.FieldAccessorTable<{1}, {1}.Builder>(internal__{0}__Descriptor,", + identifier, FullClassName); + writer.Print(" new string[] { "); + foreach (FieldDescriptor field in Descriptor.Fields) + { + writer.Write("\"{0}\", ", field.CSharpOptions.PropertyName); + } + writer.WriteLine("});"); + } + + // Generate static member initializers for all nested types. + foreach (MessageDescriptor nestedMessage in Descriptor.NestedTypes) + { + new MessageGenerator(nestedMessage).GenerateStaticVariableInitializers(writer); + } + + foreach (FieldDescriptor extension in Descriptor.Extensions) + { + new ExtensionGenerator(extension).GenerateStaticVariableInitializers(writer); + } + } + + public string[] FieldNames + { + get + { + if (_fieldNames == null) + { + List names = new List(); + foreach (FieldDescriptor fieldDescriptor in Descriptor.Fields) + { + names.Add(fieldDescriptor.Name); + } + //if you change this, the search must also change in GenerateBuilderParsingMethods + names.Sort(StringComparer.Ordinal); + _fieldNames = names.ToArray(); + } + return _fieldNames; + } + } + + internal int FieldOrdinal(FieldDescriptor field) + { + return Array.BinarySearch(FieldNames, field.Name, StringComparer.Ordinal); + } + + private IFieldSourceGenerator CreateFieldGenerator(FieldDescriptor fieldDescriptor) + { + return SourceGenerators.CreateFieldGenerator(fieldDescriptor, FieldOrdinal(fieldDescriptor)); + } + + public void Generate(TextGenerator writer) + { + if (Descriptor.File.CSharpOptions.AddSerializable) + { + writer.WriteLine("[global::System.SerializableAttribute()]"); + } + writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); + writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); + writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", + GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); + writer.WriteLine("{0} sealed partial class {1} : pb::{2}Message{3}<{1}, {1}.Builder> {{", + ClassAccessLevel, ClassName, + Descriptor.Proto.ExtensionRangeCount > 0 ? "Extendable" : "Generated", + RuntimeSuffix); + writer.Indent(); + if (Descriptor.File.CSharpOptions.GeneratePrivateCtor) + { + writer.WriteLine("private {0}() {{ }}", ClassName); + } + // Must call MakeReadOnly() to make sure all lists are made read-only + writer.WriteLine("private static readonly {0} defaultInstance = new {0}().MakeReadOnly();", ClassName); + + if (OptimizeSpeed) + { + writer.WriteLine("private static readonly string[] _{0}FieldNames = new string[] {{ {2}{1}{2} }};", + NameHelpers.UnderscoresToCamelCase(ClassName), String.Join("\", \"", FieldNames), + FieldNames.Length > 0 ? "\"" : ""); + List tags = new List(); + foreach (string name in FieldNames) + { + tags.Add(WireFormat.MakeTag(Descriptor.FindFieldByName(name)).ToString()); + } + + writer.WriteLine("private static readonly uint[] _{0}FieldTags = new uint[] {{ {1} }};", + NameHelpers.UnderscoresToCamelCase(ClassName), String.Join(", ", tags.ToArray())); + } + writer.WriteLine("public static {0} DefaultInstance {{", ClassName); + writer.WriteLine(" get { return defaultInstance; }"); + writer.WriteLine("}"); + writer.WriteLine(); + writer.WriteLine("public override {0} DefaultInstanceForType {{", ClassName); + writer.WriteLine(" get { return DefaultInstance; }"); + writer.WriteLine("}"); + writer.WriteLine(); + writer.WriteLine("protected override {0} ThisMessage {{", ClassName); + writer.WriteLine(" get { return this; }"); + writer.WriteLine("}"); + writer.WriteLine(); + if (!UseLiteRuntime) + { + writer.WriteLine("public static pbd::MessageDescriptor Descriptor {"); + writer.WriteLine(" get {{ return {0}.internal__{1}__Descriptor; }}", + DescriptorUtil.GetFullUmbrellaClassName(Descriptor), + GetUniqueFileScopeIdentifier(Descriptor)); + writer.WriteLine("}"); + writer.WriteLine(); + writer.WriteLine( + "protected override pb::FieldAccess.FieldAccessorTable<{0}, {0}.Builder> InternalFieldAccessors {{", + ClassName); + writer.WriteLine(" get {{ return {0}.internal__{1}__FieldAccessorTable; }}", + DescriptorUtil.GetFullUmbrellaClassName(Descriptor), + GetUniqueFileScopeIdentifier(Descriptor)); + writer.WriteLine("}"); + writer.WriteLine(); + } + + // Extensions don't need to go in an extra nested type + WriteChildren(writer, null, Descriptor.Extensions); + + if (Descriptor.EnumTypes.Count + Descriptor.NestedTypes.Count > 0) + { + writer.WriteLine("#region Nested types"); + writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); + writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); + writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", + GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); + writer.WriteLine("public static class Types {"); + writer.Indent(); + WriteChildren(writer, null, Descriptor.EnumTypes); + WriteChildren(writer, null, Descriptor.NestedTypes); + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine("#endregion"); + writer.WriteLine(); + } + + foreach (FieldDescriptor fieldDescriptor in Descriptor.Fields) + { + if (Descriptor.File.CSharpOptions.ClsCompliance && GetFieldConstantName(fieldDescriptor).StartsWith("_")) + { + writer.WriteLine("[global::System.CLSCompliant(false)]"); + } + + // Rats: we lose the debug comment here :( + writer.WriteLine("public const int {0} = {1};", GetFieldConstantName(fieldDescriptor), + fieldDescriptor.FieldNumber); + CreateFieldGenerator(fieldDescriptor).GenerateMembers(writer); + writer.WriteLine(); + } + + if (OptimizeSpeed) + { + GenerateIsInitialized(writer); + GenerateMessageSerializationMethods(writer); + } + if (UseLiteRuntime) + { + GenerateLiteRuntimeMethods(writer); + } + + GenerateParseFromMethods(writer); + GenerateBuilder(writer); + + // Force the static initialization code for the file to run, since it may + // initialize static variables declared in this class. + writer.WriteLine("static {0}() {{", ClassName); + // We call object.ReferenceEquals() just to make it a valid statement on its own. + // Another option would be GetType(), but that causes problems in DescriptorProtoFile, + // where the bootstrapping is somewhat recursive - type initializers call + // each other, effectively. We temporarily see Descriptor as null. + writer.WriteLine(" object.ReferenceEquals({0}.Descriptor, null);", + DescriptorUtil.GetFullUmbrellaClassName(Descriptor)); + writer.WriteLine("}"); + + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine(); + } + + private void GenerateLiteRuntimeMethods(TextGenerator writer) + { + bool callbase = Descriptor.Proto.ExtensionRangeCount > 0; + writer.WriteLine("#region Lite runtime methods"); + writer.WriteLine("public override int GetHashCode() {"); + writer.Indent(); + writer.WriteLine("int hash = GetType().GetHashCode();"); + foreach (FieldDescriptor fieldDescriptor in Descriptor.Fields) + { + CreateFieldGenerator(fieldDescriptor).WriteHash(writer); + } + if (callbase) + { + writer.WriteLine("hash ^= base.GetHashCode();"); + } + writer.WriteLine("return hash;"); + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine(); + + writer.WriteLine("public override bool Equals(object obj) {"); + writer.Indent(); + writer.WriteLine("{0} other = obj as {0};", ClassName); + writer.WriteLine("if (other == null) return false;"); + foreach (FieldDescriptor fieldDescriptor in Descriptor.Fields) + { + CreateFieldGenerator(fieldDescriptor).WriteEquals(writer); + } + if (callbase) + { + writer.WriteLine("if (!base.Equals(other)) return false;"); + } + writer.WriteLine("return true;"); + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine(); + + writer.WriteLine("public override void PrintTo(global::System.IO.TextWriter writer) {"); + writer.Indent(); + List sorted = new List(Descriptor.Fields); + sorted.Sort( + new Comparison( + delegate(FieldDescriptor a, FieldDescriptor b) { return a.FieldNumber.CompareTo(b.FieldNumber); })); + foreach (FieldDescriptor fieldDescriptor in sorted) + { + CreateFieldGenerator(fieldDescriptor).WriteToString(writer); + } + if (callbase) + { + writer.WriteLine("base.PrintTo(writer);"); + } + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine("#endregion"); + writer.WriteLine(); + } + + private void GenerateMessageSerializationMethods(TextGenerator writer) + { + List sortedFields = new List(Descriptor.Fields); + sortedFields.Sort((f1, f2) => f1.FieldNumber.CompareTo(f2.FieldNumber)); + + List sortedExtensions = + new List(Descriptor.Proto.ExtensionRangeList); + sortedExtensions.Sort((r1, r2) => (r1.Start.CompareTo(r2.Start))); + + writer.WriteLine("public override void WriteTo(pb::ICodedOutputStream output) {"); + writer.Indent(); + // Make sure we've computed the serialized length, so that packed fields are generated correctly. + writer.WriteLine("int size = SerializedSize;"); + writer.WriteLine("string[] field_names = _{0}FieldNames;", NameHelpers.UnderscoresToCamelCase(ClassName)); + if (Descriptor.Proto.ExtensionRangeList.Count > 0) + { + writer.WriteLine( + "pb::ExtendableMessage{1}<{0}, {0}.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);", + ClassName, RuntimeSuffix); + } + + // Merge the fields and the extension ranges, both sorted by field number. + for (int i = 0, j = 0; i < Descriptor.Fields.Count || j < sortedExtensions.Count;) + { + if (i == Descriptor.Fields.Count) + { + GenerateSerializeOneExtensionRange(writer, sortedExtensions[j++]); + } + else if (j == sortedExtensions.Count) + { + GenerateSerializeOneField(writer, sortedFields[i++]); + } + else if (sortedFields[i].FieldNumber < sortedExtensions[j].Start) + { + GenerateSerializeOneField(writer, sortedFields[i++]); + } + else + { + GenerateSerializeOneExtensionRange(writer, sortedExtensions[j++]); + } + } + + if (!UseLiteRuntime) + { + if (Descriptor.Proto.Options.MessageSetWireFormat) + { + writer.WriteLine("UnknownFields.WriteAsMessageSetTo(output);"); + } + else + { + writer.WriteLine("UnknownFields.WriteTo(output);"); + } + } + + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine(); + writer.WriteLine("private int memoizedSerializedSize = -1;"); + writer.WriteLine("public override int SerializedSize {"); + writer.Indent(); + writer.WriteLine("get {"); + writer.Indent(); + writer.WriteLine("int size = memoizedSerializedSize;"); + writer.WriteLine("if (size != -1) return size;"); + writer.WriteLine(); + writer.WriteLine("size = 0;"); + foreach (FieldDescriptor field in Descriptor.Fields) + { + CreateFieldGenerator(field).GenerateSerializedSizeCode(writer); + } + if (Descriptor.Proto.ExtensionRangeCount > 0) + { + writer.WriteLine("size += ExtensionsSerializedSize;"); + } + + if (!UseLiteRuntime) + { + if (Descriptor.Options.MessageSetWireFormat) + { + writer.WriteLine("size += UnknownFields.SerializedSizeAsMessageSet;"); + } + else + { + writer.WriteLine("size += UnknownFields.SerializedSize;"); + } + } + writer.WriteLine("memoizedSerializedSize = size;"); + writer.WriteLine("return size;"); + writer.Outdent(); + writer.WriteLine("}"); + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine(); + } + + private void GenerateSerializeOneField(TextGenerator writer, FieldDescriptor fieldDescriptor) + { + CreateFieldGenerator(fieldDescriptor).GenerateSerializationCode(writer); + } + + private static void GenerateSerializeOneExtensionRange(TextGenerator writer, + DescriptorProto.Types.ExtensionRange extensionRange) + { + writer.WriteLine("extensionWriter.WriteUntil({0}, output);", extensionRange.End); + } + + private void GenerateParseFromMethods(TextGenerator writer) + { + // Note: These are separate from GenerateMessageSerializationMethods() + // because they need to be generated even for messages that are optimized + // for code size. + + writer.WriteLine("public static {0} ParseFrom(pb::ByteString data) {{", ClassName); + writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();"); + writer.WriteLine("}"); + writer.WriteLine( + "public static {0} ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {{", + ClassName); + writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();"); + writer.WriteLine("}"); + writer.WriteLine("public static {0} ParseFrom(byte[] data) {{", ClassName); + writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();"); + writer.WriteLine("}"); + writer.WriteLine("public static {0} ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {{", + ClassName); + writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();"); + writer.WriteLine("}"); + writer.WriteLine("public static {0} ParseFrom(global::System.IO.Stream input) {{", ClassName); + writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();"); + writer.WriteLine("}"); + writer.WriteLine( + "public static {0} ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {{", + ClassName); + writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();"); + writer.WriteLine("}"); + writer.WriteLine("public static {0} ParseDelimitedFrom(global::System.IO.Stream input) {{", ClassName); + writer.WriteLine(" return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();"); + writer.WriteLine("}"); + writer.WriteLine( + "public static {0} ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {{", + ClassName); + writer.WriteLine(" return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();"); + writer.WriteLine("}"); + writer.WriteLine("public static {0} ParseFrom(pb::ICodedInputStream input) {{", ClassName); + writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();"); + writer.WriteLine("}"); + writer.WriteLine( + "public static {0} ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {{", + ClassName); + writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();"); + writer.WriteLine("}"); + } + + /// + /// Returns whether or not the specified message type has any required fields. + /// If it doesn't, calls to check for initialization can be optimised. + /// TODO(jonskeet): Move this into MessageDescriptor? + /// + private static bool HasRequiredFields(MessageDescriptor descriptor, + Dictionary alreadySeen) + { + if (alreadySeen.ContainsKey(descriptor)) + { + // The type is already in cache. This means that either: + // a. The type has no required fields. + // b. We are in the midst of checking if the type has required fields, + // somewhere up the stack. In this case, we know that if the type + // has any required fields, they'll be found when we return to it, + // and the whole call to HasRequiredFields() will return true. + // Therefore, we don't have to check if this type has required fields + // here. + return false; + } + alreadySeen[descriptor] = descriptor; // Value is irrelevant + + // If the type has extensions, an extension with message type could contain + // required fields, so we have to be conservative and assume such an + // extension exists. + if (descriptor.Extensions.Count > 0) + { + return true; + } + + foreach (FieldDescriptor field in descriptor.Fields) + { + if (field.IsRequired) + { + return true; + } + // Message or group + if (field.MappedType == MappedType.Message) + { + if (HasRequiredFields(field.MessageType, alreadySeen)) + { + return true; + } + } + } + return false; + } + + private void GenerateBuilder(TextGenerator writer) + { + writer.WriteLine("private {0} MakeReadOnly() {{", ClassName); + writer.Indent(); + foreach (FieldDescriptor field in Descriptor.Fields) + { + CreateFieldGenerator(field).GenerateBuildingCode(writer); + } + writer.WriteLine("return this;"); + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine(); + + writer.WriteLine("public static Builder CreateBuilder() { return new Builder(); }"); + writer.WriteLine("public override Builder ToBuilder() { return CreateBuilder(this); }"); + writer.WriteLine("public override Builder CreateBuilderForType() { return new Builder(); }"); + writer.WriteLine("public static Builder CreateBuilder({0} prototype) {{", ClassName); + writer.WriteLine(" return new Builder(prototype);"); + writer.WriteLine("}"); + writer.WriteLine(); + if (Descriptor.File.CSharpOptions.AddSerializable) + { + writer.WriteLine("[global::System.SerializableAttribute()]"); + } + writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); + writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); + writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", + GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); + writer.WriteLine("{0} sealed partial class Builder : pb::{2}Builder{3}<{1}, Builder> {{", + ClassAccessLevel, ClassName, + Descriptor.Proto.ExtensionRangeCount > 0 ? "Extendable" : "Generated", RuntimeSuffix); + writer.Indent(); + writer.WriteLine("protected override Builder ThisBuilder {"); + writer.WriteLine(" get { return this; }"); + writer.WriteLine("}"); + GenerateCommonBuilderMethods(writer); + if (OptimizeSpeed) + { + GenerateBuilderParsingMethods(writer); + } + foreach (FieldDescriptor field in Descriptor.Fields) + { + writer.WriteLine(); + // No field comment :( + CreateFieldGenerator(field).GenerateBuilderMembers(writer); + } + writer.Outdent(); + writer.WriteLine("}"); + } + + private void GenerateCommonBuilderMethods(TextGenerator writer) + { + //default constructor + writer.WriteLine("public Builder() {"); + //Durring static initialization of message, DefaultInstance is expected to return null. + writer.WriteLine(" result = DefaultInstance;"); + writer.WriteLine(" resultIsReadOnly = true;"); + writer.WriteLine("}"); + //clone constructor + writer.WriteLine("internal Builder({0} cloneFrom) {{", ClassName); + writer.WriteLine(" result = cloneFrom;"); + writer.WriteLine(" resultIsReadOnly = true;"); + writer.WriteLine("}"); + writer.WriteLine(); + writer.WriteLine("private bool resultIsReadOnly;"); + writer.WriteLine("private {0} result;", ClassName); + writer.WriteLine(); + writer.WriteLine("private {0} PrepareBuilder() {{", ClassName); + writer.WriteLine(" if (resultIsReadOnly) {"); + writer.WriteLine(" {0} original = result;", ClassName); + writer.WriteLine(" result = new {0}();", ClassName); + writer.WriteLine(" resultIsReadOnly = false;"); + writer.WriteLine(" MergeFrom(original);"); + writer.WriteLine(" }"); + writer.WriteLine(" return result;"); + writer.WriteLine("}"); + writer.WriteLine(); + writer.WriteLine("public override bool IsInitialized {"); + writer.WriteLine(" get { return result.IsInitialized; }"); + writer.WriteLine("}"); + writer.WriteLine(); + writer.WriteLine("protected override {0} MessageBeingBuilt {{", ClassName); + writer.WriteLine(" get { return PrepareBuilder(); }"); + writer.WriteLine("}"); + writer.WriteLine(); + //Not actually expecting that DefaultInstance would ever be null here; however, we will ensure it does not break + writer.WriteLine("public override Builder Clear() {"); + writer.WriteLine(" result = DefaultInstance;", ClassName); + writer.WriteLine(" resultIsReadOnly = true;"); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + writer.WriteLine(); + writer.WriteLine("public override Builder Clone() {"); + writer.WriteLine(" if (resultIsReadOnly) {"); + writer.WriteLine(" return new Builder(result);"); + writer.WriteLine(" } else {"); + writer.WriteLine(" return new Builder().MergeFrom(result);"); + writer.WriteLine(" }"); + writer.WriteLine("}"); + writer.WriteLine(); + if (!UseLiteRuntime) + { + writer.WriteLine("public override pbd::MessageDescriptor DescriptorForType {"); + writer.WriteLine(" get {{ return {0}.Descriptor; }}", FullClassName); + writer.WriteLine("}"); + writer.WriteLine(); + } + writer.WriteLine("public override {0} DefaultInstanceForType {{", ClassName); + writer.WriteLine(" get {{ return {0}.DefaultInstance; }}", FullClassName); + writer.WriteLine("}"); + writer.WriteLine(); + + writer.WriteLine("public override {0} BuildPartial() {{", ClassName); + writer.Indent(); + writer.WriteLine("if (resultIsReadOnly) {"); + writer.WriteLine(" return result;"); + writer.WriteLine("}"); + writer.WriteLine("resultIsReadOnly = true;"); + writer.WriteLine("return result.MakeReadOnly();"); + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine(); + + if (OptimizeSpeed) + { + writer.WriteLine("public override Builder MergeFrom(pb::IMessage{0} other) {{", RuntimeSuffix); + writer.WriteLine(" if (other is {0}) {{", ClassName); + writer.WriteLine(" return MergeFrom(({0}) other);", ClassName); + writer.WriteLine(" } else {"); + writer.WriteLine(" base.MergeFrom(other);"); + writer.WriteLine(" return this;"); + writer.WriteLine(" }"); + writer.WriteLine("}"); + writer.WriteLine(); + writer.WriteLine("public override Builder MergeFrom({0} other) {{", ClassName); + // Optimization: If other is the default instance, we know none of its + // fields are set so we can skip the merge. + writer.Indent(); + writer.WriteLine("if (other == {0}.DefaultInstance) return this;", FullClassName); + writer.WriteLine("PrepareBuilder();"); + foreach (FieldDescriptor field in Descriptor.Fields) + { + CreateFieldGenerator(field).GenerateMergingCode(writer); + } + // if message type has extensions + if (Descriptor.Proto.ExtensionRangeCount > 0) + { + writer.WriteLine(" this.MergeExtensionFields(other);"); + } + if (!UseLiteRuntime) + { + writer.WriteLine("this.MergeUnknownFields(other.UnknownFields);"); + } + writer.WriteLine("return this;"); + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine(); + } + } + + private void GenerateBuilderParsingMethods(TextGenerator writer) + { + List sortedFields = new List(Descriptor.Fields); + sortedFields.Sort((f1, f2) => f1.FieldNumber.CompareTo(f2.FieldNumber)); + + writer.WriteLine("public override Builder MergeFrom(pb::ICodedInputStream input) {"); + writer.WriteLine(" return MergeFrom(input, pb::ExtensionRegistry.Empty);"); + writer.WriteLine("}"); + writer.WriteLine(); + writer.WriteLine( + "public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {"); + writer.Indent(); + writer.WriteLine("PrepareBuilder();"); + if (!UseLiteRuntime) + { + writer.WriteLine("pb::UnknownFieldSet.Builder unknownFields = null;"); + } + writer.WriteLine("uint tag;"); + writer.WriteLine("string field_name;"); + writer.WriteLine("while (input.ReadTag(out tag, out field_name)) {"); + writer.Indent(); + writer.WriteLine("if(tag == 0 && field_name != null) {"); + writer.Indent(); + //if you change from StringComparer.Ordinal, the array sort in FieldNames { get; } must also change + writer.WriteLine( + "int field_ordinal = global::System.Array.BinarySearch(_{0}FieldNames, field_name, global::System.StringComparer.Ordinal);", + NameHelpers.UnderscoresToCamelCase(ClassName)); + writer.WriteLine("if(field_ordinal >= 0)"); + writer.WriteLine(" tag = _{0}FieldTags[field_ordinal];", NameHelpers.UnderscoresToCamelCase(ClassName)); + writer.WriteLine("else {"); + if (!UseLiteRuntime) + { + writer.WriteLine(" if (unknownFields == null) {"); // First unknown field - create builder now + writer.WriteLine(" unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);"); + writer.WriteLine(" }"); + } + writer.WriteLine(" ParseUnknownField(input, {0}extensionRegistry, tag, field_name);", + UseLiteRuntime ? "" : "unknownFields, "); + writer.WriteLine(" continue;"); + writer.WriteLine("}"); + writer.Outdent(); + writer.WriteLine("}"); + + writer.WriteLine("switch (tag) {"); + writer.Indent(); + writer.WriteLine("case 0: {"); // 0 signals EOF / limit reached + writer.WriteLine(" throw pb::InvalidProtocolBufferException.InvalidTag();"); + writer.WriteLine("}"); + writer.WriteLine("default: {"); + writer.WriteLine(" if (pb::WireFormat.IsEndGroupTag(tag)) {"); + if (!UseLiteRuntime) + { + writer.WriteLine(" if (unknownFields != null) {"); + writer.WriteLine(" this.UnknownFields = unknownFields.Build();"); + writer.WriteLine(" }"); + } + writer.WriteLine(" return this;"); // it's an endgroup tag + writer.WriteLine(" }"); + if (!UseLiteRuntime) + { + writer.WriteLine(" if (unknownFields == null) {"); // First unknown field - create builder now + writer.WriteLine(" unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);"); + writer.WriteLine(" }"); + } + writer.WriteLine(" ParseUnknownField(input, {0}extensionRegistry, tag, field_name);", + UseLiteRuntime ? "" : "unknownFields, "); + writer.WriteLine(" break;"); + writer.WriteLine("}"); + foreach (FieldDescriptor field in sortedFields) + { + WireFormat.WireType wt = WireFormat.GetWireType(field.FieldType); + uint tag = WireFormat.MakeTag(field.FieldNumber, wt); + + if (field.IsRepeated && + (wt == WireFormat.WireType.Varint || wt == WireFormat.WireType.Fixed32 || + wt == WireFormat.WireType.Fixed64)) + { + writer.WriteLine("case {0}:", + WireFormat.MakeTag(field.FieldNumber, WireFormat.WireType.LengthDelimited)); + } + + writer.WriteLine("case {0}: {{", tag); + writer.Indent(); + CreateFieldGenerator(field).GenerateParsingCode(writer); + writer.WriteLine("break;"); + writer.Outdent(); + writer.WriteLine("}"); + } + writer.Outdent(); + writer.WriteLine("}"); + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine(); + if (!UseLiteRuntime) + { + writer.WriteLine("if (unknownFields != null) {"); + writer.WriteLine(" this.UnknownFields = unknownFields.Build();"); + writer.WriteLine("}"); + } + writer.WriteLine("return this;"); + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine(); + } + + private void GenerateIsInitialized(TextGenerator writer) + { + writer.WriteLine("public override bool IsInitialized {"); + writer.Indent(); + writer.WriteLine("get {"); + writer.Indent(); + + // Check that all required fields in this message are set. + // TODO(kenton): We can optimize this when we switch to putting all the + // "has" fields into a single bitfield. + foreach (FieldDescriptor field in Descriptor.Fields) + { + if (field.IsRequired) + { + writer.WriteLine("if (!has{0}) return false;", field.CSharpOptions.PropertyName); + } + } + + // Now check that all embedded messages are initialized. + foreach (FieldDescriptor field in Descriptor.Fields) + { + if (field.FieldType != FieldType.Message || + !HasRequiredFields(field.MessageType, new Dictionary())) + { + continue; + } + string propertyName = NameHelpers.UnderscoresToPascalCase(GetFieldName(field)); + if (field.IsRepeated) + { + writer.WriteLine("foreach ({0} element in {1}List) {{", GetClassName(field.MessageType), + propertyName); + writer.WriteLine(" if (!element.IsInitialized) return false;"); + writer.WriteLine("}"); + } + else if (field.IsOptional) + { + writer.WriteLine("if (Has{0}) {{", propertyName); + writer.WriteLine(" if (!{0}.IsInitialized) return false;", propertyName); + writer.WriteLine("}"); + } + else + { + writer.WriteLine("if (!{0}.IsInitialized) return false;", propertyName); + } + } + + if (Descriptor.Proto.ExtensionRangeCount > 0) + { + writer.WriteLine("if (!ExtensionsAreInitialized) return false;"); + } + writer.WriteLine("return true;"); + writer.Outdent(); + writer.WriteLine("}"); + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine(); + } + + internal void GenerateExtensionRegistrationCode(TextGenerator writer) + { + foreach (FieldDescriptor extension in Descriptor.Extensions) + { + new ExtensionGenerator(extension).GenerateExtensionRegistrationCode(writer); + } + foreach (MessageDescriptor nestedMessage in Descriptor.NestedTypes) + { + new MessageGenerator(nestedMessage).GenerateExtensionRegistrationCode(writer); + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/PrimitiveFieldGenerator.cs b/build/source/HeuristicLab.Build/ProtoGen/PrimitiveFieldGenerator.cs new file mode 100644 index 0000000000..1f9489ca09 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/PrimitiveFieldGenerator.cs @@ -0,0 +1,140 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen +{ + // TODO(jonskeet): Refactor this. There's loads of common code here. + internal class PrimitiveFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator + { + internal PrimitiveFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal) + : base(descriptor, fieldOrdinal) + { + } + + public void GenerateMembers(TextGenerator writer) + { + writer.WriteLine("private bool has{0};", PropertyName); + writer.WriteLine("private {0} {1}_{2};", TypeName, Name, HasDefaultValue ? " = " + DefaultValue : ""); + AddDeprecatedFlag(writer); + writer.WriteLine("public bool Has{0} {{", PropertyName); + writer.WriteLine(" get {{ return has{0}; }}", PropertyName); + writer.WriteLine("}"); + AddPublicMemberAttributes(writer); + writer.WriteLine("public {0} {1} {{", TypeName, PropertyName); + writer.WriteLine(" get {{ return {0}_; }}", Name); + writer.WriteLine("}"); + } + + public void GenerateBuilderMembers(TextGenerator writer) + { + AddDeprecatedFlag(writer); + writer.WriteLine("public bool Has{0} {{", PropertyName); + writer.WriteLine(" get {{ return result.has{0}; }}", PropertyName); + writer.WriteLine("}"); + AddPublicMemberAttributes(writer); + writer.WriteLine("public {0} {1} {{", TypeName, PropertyName); + writer.WriteLine(" get {{ return result.{0}; }}", PropertyName); + writer.WriteLine(" set {{ Set{0}(value); }}", PropertyName); + writer.WriteLine("}"); + AddPublicMemberAttributes(writer); + writer.WriteLine("public Builder Set{0}({1} value) {{", PropertyName, TypeName); + AddNullCheck(writer); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.has{0} = true;", PropertyName); + writer.WriteLine(" result.{0}_ = value;", Name); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public Builder Clear{0}() {{", PropertyName); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.has{0} = false;", PropertyName); + writer.WriteLine(" result.{0}_ = {1};", Name, DefaultValue); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + } + + public void GenerateMergingCode(TextGenerator writer) + { + writer.WriteLine("if (other.Has{0}) {{", PropertyName); + writer.WriteLine(" {0} = other.{0};", PropertyName); + writer.WriteLine("}"); + } + + public void GenerateBuildingCode(TextGenerator writer) + { + // Nothing to do here for primitive types + } + + public void GenerateParsingCode(TextGenerator writer) + { + writer.WriteLine("result.has{0} = input.Read{1}(ref result.{2}_);", PropertyName, CapitalizedTypeName, Name); + } + + public void GenerateSerializationCode(TextGenerator writer) + { + writer.WriteLine("if (has{0}) {{", PropertyName); + writer.WriteLine(" output.Write{0}({1}, field_names[{3}], {2});", CapitalizedTypeName, Number, PropertyName, + FieldOrdinal); + writer.WriteLine("}"); + } + + public void GenerateSerializedSizeCode(TextGenerator writer) + { + writer.WriteLine("if (has{0}) {{", PropertyName); + writer.WriteLine(" size += pb::CodedOutputStream.Compute{0}Size({1}, {2});", + CapitalizedTypeName, Number, PropertyName); + writer.WriteLine("}"); + } + + public override void WriteHash(TextGenerator writer) + { + writer.WriteLine("if (has{0}) hash ^= {1}_.GetHashCode();", PropertyName, Name); + } + + public override void WriteEquals(TextGenerator writer) + { + writer.WriteLine("if (has{0} != other.has{0} || (has{0} && !{1}_.Equals(other.{1}_))) return false;", + PropertyName, Name); + } + + public override void WriteToString(TextGenerator writer) + { + writer.WriteLine("PrintField(\"{0}\", has{1}, {2}_, writer);", Descriptor.Name, PropertyName, Name); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/Program.cs b/build/source/HeuristicLab.Build/ProtoGen/Program.cs new file mode 100644 index 0000000000..a5b61cc82d --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/Program.cs @@ -0,0 +1,78 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using Google.ProtocolBuffers.DescriptorProtos; + +namespace Google.ProtocolBuffers.ProtoGen +{ + /// + /// Entry point for the Protocol Buffers generator. + /// + internal class Program + { + internal static int Main(string[] args) + { + try + { + // Hack to make sure everything's initialized + DescriptorProtoFile.Descriptor.ToString(); + GeneratorOptions options = new GeneratorOptions {Arguments = args}; + + IList validationFailures; + if (!options.TryValidate(out validationFailures)) + { + // We've already got the message-building logic in the exception... + InvalidOptionsException exception = new InvalidOptionsException(validationFailures); + Console.WriteLine(exception.Message); + return 1; + } + + Generator generator = Generator.CreateGenerator(options); + generator.Generate(); + return 0; + } + catch (Exception e) + { + Console.Error.WriteLine("Error: {0}", e.Message); + Console.Error.WriteLine(); + Console.Error.WriteLine("Detailed exception information: {0}", e); + return 1; + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/ProgramPreprocess.cs b/build/source/HeuristicLab.Build/ProtoGen/ProgramPreprocess.cs new file mode 100644 index 0000000000..c44d17f01e --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/ProgramPreprocess.cs @@ -0,0 +1,256 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; + +namespace Google.ProtocolBuffers.ProtoGen +{ + /// + /// Preprocesses any input files with an extension of '.proto' by running protoc.exe. If arguments + /// are supplied with '--' prefix they are provided to protoc.exe, otherwise they are assumed to + /// be used for ProtoGen.exe which is run on the resulting output proto buffer. If the option + /// --descriptor_set_out= is specified the proto buffer file is kept, otherwise it will be removed + /// after code generation. + /// + public class ProgramPreprocess + { + private const string ProtocExecutable = "protoc.exe"; + private const string ProtocDirectoryArg = "--protoc_dir="; + + private static int Main(string[] args) + { + try + { + return Environment.ExitCode = Run(args); + } + catch (Exception ex) + { + Console.Error.WriteLine(ex); + return Environment.ExitCode = 2; + } + } + + public static int Run(params string[] args) + { + bool deleteFile = false; + string tempFile = null; + int result; + bool doHelp = args.Length == 0; + try + { + List protocArgs = new List(); + List protoGenArgs = new List(); + + string protocFile = GuessProtocFile(args); + + foreach (string arg in args) + { + doHelp |= StringComparer.OrdinalIgnoreCase.Equals(arg, "/?"); + doHelp |= StringComparer.OrdinalIgnoreCase.Equals(arg, "/help"); + doHelp |= StringComparer.OrdinalIgnoreCase.Equals(arg, "-?"); + doHelp |= StringComparer.OrdinalIgnoreCase.Equals(arg, "-help"); + + if (arg.StartsWith("--descriptor_set_out=")) + { + tempFile = arg.Substring("--descriptor_set_out=".Length); + protoGenArgs.Add(tempFile); + } + } + + if (doHelp) + { + Console.WriteLine(); + Console.WriteLine("PROTOC.exe: Use any of the following options that begin with '--':"); + Console.WriteLine(); + try + { + RunProtoc(protocFile, "--help"); + } + catch (Exception ex) + { + Console.Error.WriteLine(ex.Message); + } + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine( + "PROTOGEN.exe: The following options are used to specify defaults for code generation."); + Console.WriteLine(); + Program.Main(new string[0]); + Console.WriteLine(); + Console.WriteLine("The following option enables PROTOGEN.exe to find PROTOC.exe"); + Console.WriteLine("{0}", ProtocDirectoryArg); + return 0; + } + + foreach (string arg in args) + { + if (arg.StartsWith(ProtocDirectoryArg)) + { + // Handled earlier + continue; + } + if (arg.StartsWith("--")) + { + protocArgs.Add(arg); + } + else if (File.Exists(arg) && + StringComparer.OrdinalIgnoreCase.Equals(".proto", Path.GetExtension(arg))) + { + if (tempFile == null) + { + deleteFile = true; + tempFile = Path.GetTempFileName(); + protocArgs.Add(String.Format("--descriptor_set_out={0}", tempFile)); + protoGenArgs.Add(tempFile); + } + protocArgs.Add(arg); + } + else + { + protoGenArgs.Add(arg); + } + } + + if (tempFile != null) + { + result = RunProtoc(protocFile, protocArgs.ToArray()); + if (result != 0) + { + return result; + } + } + + result = Program.Main(protoGenArgs.ToArray()); + } + finally + { + if (deleteFile && tempFile != null && File.Exists(tempFile)) + { + File.Delete(tempFile); + } + } + return result; + } + + /// + /// Tries to work out where protoc is based on command line arguments, the current + /// directory, the directory containing protogen, and the path. + /// + /// The path to protoc.exe, or null if it can't be found. + private static string GuessProtocFile(params string[] args) + { + // Why oh why is this not in System.IO.Path or Environment...? + List searchPath = new List(); + foreach (string arg in args) + { + if (arg.StartsWith("--protoc_dir=")) + { + searchPath.Add(arg.Substring(ProtocDirectoryArg.Length)); + } + } + searchPath.Add(Environment.CurrentDirectory); + searchPath.Add(AppDomain.CurrentDomain.BaseDirectory); + searchPath.AddRange((Environment.GetEnvironmentVariable("PATH") ?? String.Empty).Split(Path.PathSeparator)); + + foreach (string path in searchPath) + { + string exeFile = Path.Combine(path, ProtocExecutable); + if (File.Exists(exeFile)) + { + return exeFile; + } + } + return null; + } + + private static int RunProtoc(string exeFile, params string[] args) + { + if (exeFile == null) + { + throw new FileNotFoundException( + "Unable to locate " + ProtocExecutable + + " make sure it is in the PATH, cwd, or exe dir, or use --protoc_dir=..."); + } + + ProcessStartInfo psi = new ProcessStartInfo(exeFile); + psi.Arguments = EscapeArguments(args); + psi.RedirectStandardError = true; + psi.RedirectStandardInput = false; + psi.RedirectStandardOutput = true; + psi.ErrorDialog = false; + psi.CreateNoWindow = true; + psi.UseShellExecute = false; + psi.WorkingDirectory = Environment.CurrentDirectory; + + Process process = Process.Start(psi); + if (process == null) + { + return 1; + } + + process.WaitForExit(); + + string tmp = process.StandardOutput.ReadToEnd(); + if (tmp.Trim().Length > 0) + { + Console.Out.WriteLine(tmp); + } + tmp = process.StandardError.ReadToEnd(); + if (tmp.Trim().Length > 0) + { + Console.Error.WriteLine(tmp); + } + return process.ExitCode; + } + + /// + /// Quotes all arguments that contain whitespace, or begin with a quote and returns a single + /// argument string for use with Process.Start(). + /// + /// http://csharptest.net/?p=529 + /// A list of strings for arguments, may not contain null, '\0', '\r', or '\n' + /// The combined list of escaped/quoted strings + /// Raised when one of the arguments is null + /// Raised if an argument contains '\0', '\r', or '\n' + public static string EscapeArguments(params string[] args) + { + StringBuilder arguments = new StringBuilder(); + Regex invalidChar = new Regex("[\x00\x0a\x0d]");// these can not be escaped + Regex needsQuotes = new Regex(@"\s|""");// contains whitespace or two quote characters + Regex escapeQuote = new Regex(@"(\\*)(""|$)");// one or more '\' followed with a quote or end of string + for (int carg = 0; args != null && carg < args.Length; carg++) + { + if (args[carg] == null) + { + throw new ArgumentNullException("args[" + carg + "]"); + } + if (invalidChar.IsMatch(args[carg])) + { + throw new ArgumentOutOfRangeException("args[" + carg + "]"); + } + if (args[carg] == String.Empty) + { + arguments.Append("\"\""); + } + else if (!needsQuotes.IsMatch(args[carg])) { arguments.Append(args[carg]); } + else + { + arguments.Append('"'); + arguments.Append(escapeQuote.Replace(args[carg], + m => + m.Groups[1].Value + m.Groups[1].Value + + (m.Groups[2].Value == "\"" ? "\\\"" : "") + )); + arguments.Append('"'); + } + if (carg + 1 < args.Length) + { + arguments.Append(' '); + } + } + return arguments.ToString(); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/ProtoGen-2.4.1.473.csproj b/build/source/HeuristicLab.Build/ProtoGen/ProtoGen-2.4.1.473.csproj new file mode 100644 index 0000000000..e8d02fab8e --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/ProtoGen-2.4.1.473.csproj @@ -0,0 +1,15 @@ + + + netstandard2.0 + $(SolutionDir)..\bin + false + + + + + + + PreserveNewest + + + \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/RepeatedEnumFieldGenerator.cs b/build/source/HeuristicLab.Build/ProtoGen/RepeatedEnumFieldGenerator.cs new file mode 100644 index 0000000000..76d0eb81b2 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/RepeatedEnumFieldGenerator.cs @@ -0,0 +1,212 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen +{ + internal class RepeatedEnumFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator + { + internal RepeatedEnumFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal) + : base(descriptor, fieldOrdinal) + { + } + + public void GenerateMembers(TextGenerator writer) + { + if (Descriptor.IsPacked && OptimizeSpeed) + { + writer.WriteLine("private int {0}MemoizedSerializedSize;", Name); + } + writer.WriteLine("private pbc::PopsicleList<{0}> {1}_ = new pbc::PopsicleList<{0}>();", TypeName, Name); + AddDeprecatedFlag(writer); + writer.WriteLine("public scg::IList<{0}> {1}List {{", TypeName, PropertyName); + writer.WriteLine(" get {{ return pbc::Lists.AsReadOnly({0}_); }}", Name); + writer.WriteLine("}"); + + // TODO(jonskeet): Redundant API calls? Possibly - include for portability though. Maybe create an option. + AddDeprecatedFlag(writer); + writer.WriteLine("public int {0}Count {{", PropertyName); + writer.WriteLine(" get {{ return {0}_.Count; }}", Name); + writer.WriteLine("}"); + + AddDeprecatedFlag(writer); + writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName); + writer.WriteLine(" return {0}_[index];", Name); + writer.WriteLine("}"); + } + + public void GenerateBuilderMembers(TextGenerator writer) + { + // Note: We can return the original list here, because we make it unmodifiable when we build + // We return it via IPopsicleList so that collection initializers work more pleasantly. + AddDeprecatedFlag(writer); + writer.WriteLine("public pbc::IPopsicleList<{0}> {1}List {{", TypeName, PropertyName); + writer.WriteLine(" get {{ return PrepareBuilder().{0}_; }}", Name); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public int {0}Count {{", PropertyName); + writer.WriteLine(" get {{ return result.{0}Count; }}", PropertyName); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName); + writer.WriteLine(" return result.Get{0}(index);", PropertyName); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public Builder Set{0}(int index, {1} value) {{", PropertyName, TypeName); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.{0}_[index] = value;", Name); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public Builder Add{0}({1} value) {{", PropertyName, TypeName); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.{0}_.Add(value);", Name, TypeName); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public Builder AddRange{0}(scg::IEnumerable<{1}> values) {{", PropertyName, TypeName); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.{0}_.Add(values);", Name); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public Builder Clear{0}() {{", PropertyName); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.{0}_.Clear();", Name); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + } + + public void GenerateMergingCode(TextGenerator writer) + { + writer.WriteLine("if (other.{0}_.Count != 0) {{", Name); + writer.WriteLine(" result.{0}_.Add(other.{0}_);", Name); + writer.WriteLine("}"); + } + + public void GenerateBuildingCode(TextGenerator writer) + { + writer.WriteLine("{0}_.MakeReadOnly();", Name); + } + + public void GenerateParsingCode(TextGenerator writer) + { + writer.WriteLine("scg::ICollection unknownItems;"); + writer.WriteLine("input.ReadEnumArray<{0}>(tag, field_name, result.{1}_, out unknownItems);", TypeName, Name); + if (!UseLiteRuntime) + { + writer.WriteLine("if (unknownItems != null) {"); + writer.WriteLine(" if (unknownFields == null) {"); + writer.WriteLine(" unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);"); + writer.WriteLine(" }"); + writer.WriteLine(" foreach (object rawValue in unknownItems)"); + writer.WriteLine(" if (rawValue is int)"); + writer.WriteLine(" unknownFields.MergeVarintField({0}, (ulong)(int)rawValue);", Number); + writer.WriteLine("}"); + } + } + + public void GenerateSerializationCode(TextGenerator writer) + { + writer.WriteLine("if ({0}_.Count > 0) {{", Name); + writer.Indent(); + if (Descriptor.IsPacked) + { + writer.WriteLine( + "output.WritePackedEnumArray({0}, field_names[{2}], {1}MemoizedSerializedSize, {1}_);", Number, Name, + FieldOrdinal, Descriptor.FieldType); + } + else + { + writer.WriteLine("output.WriteEnumArray({0}, field_names[{2}], {1}_);", Number, Name, FieldOrdinal, + Descriptor.FieldType); + } + writer.Outdent(); + writer.WriteLine("}"); + } + + public void GenerateSerializedSizeCode(TextGenerator writer) + { + writer.WriteLine("{"); + writer.Indent(); + writer.WriteLine("int dataSize = 0;"); + writer.WriteLine("if ({0}_.Count > 0) {{", Name); + writer.Indent(); + writer.WriteLine("foreach ({0} element in {1}_) {{", TypeName, Name); + writer.WriteLine(" dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);"); + writer.WriteLine("}"); + writer.WriteLine("size += dataSize;"); + int tagSize = CodedOutputStream.ComputeTagSize(Descriptor.FieldNumber); + if (Descriptor.IsPacked) + { + writer.WriteLine("size += {0};", tagSize); + writer.WriteLine("size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);"); + } + else + { + writer.WriteLine("size += {0} * {1}_.Count;", tagSize, Name); + } + writer.Outdent(); + writer.WriteLine("}"); + // cache the data size for packed fields. + if (Descriptor.IsPacked) + { + writer.WriteLine("{0}MemoizedSerializedSize = dataSize;", Name); + } + writer.Outdent(); + writer.WriteLine("}"); + } + + public override void WriteHash(TextGenerator writer) + { + writer.WriteLine("foreach({0} i in {1}_)", TypeName, Name); + writer.WriteLine(" hash ^= i.GetHashCode();"); + } + + public override void WriteEquals(TextGenerator writer) + { + writer.WriteLine("if({0}_.Count != other.{0}_.Count) return false;", Name); + writer.WriteLine("for(int ix=0; ix < {0}_.Count; ix++)", Name); + writer.WriteLine(" if(!{0}_[ix].Equals(other.{0}_[ix])) return false;", Name); + } + + public override void WriteToString(TextGenerator writer) + { + writer.WriteLine("PrintField(\"{0}\", {1}_, writer);", Descriptor.Name, Name); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/RepeatedMessageFieldGenerator.cs b/build/source/HeuristicLab.Build/ProtoGen/RepeatedMessageFieldGenerator.cs new file mode 100644 index 0000000000..76f76b0ed8 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/RepeatedMessageFieldGenerator.cs @@ -0,0 +1,184 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen +{ + internal class RepeatedMessageFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator + { + internal RepeatedMessageFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal) + : base(descriptor, fieldOrdinal) + { + } + + public void GenerateMembers(TextGenerator writer) + { + writer.WriteLine("private pbc::PopsicleList<{0}> {1}_ = new pbc::PopsicleList<{0}>();", TypeName, Name); + AddDeprecatedFlag(writer); + writer.WriteLine("public scg::IList<{0}> {1}List {{", TypeName, PropertyName); + writer.WriteLine(" get {{ return {0}_; }}", Name); + writer.WriteLine("}"); + + // TODO(jonskeet): Redundant API calls? Possibly - include for portability though. Maybe create an option. + AddDeprecatedFlag(writer); + writer.WriteLine("public int {0}Count {{", PropertyName); + writer.WriteLine(" get {{ return {0}_.Count; }}", Name); + writer.WriteLine("}"); + + AddDeprecatedFlag(writer); + writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName); + writer.WriteLine(" return {0}_[index];", Name); + writer.WriteLine("}"); + } + + public void GenerateBuilderMembers(TextGenerator writer) + { + // Note: We can return the original list here, because we make it unmodifiable when we build + // We return it via IPopsicleList so that collection initializers work more pleasantly. + AddDeprecatedFlag(writer); + writer.WriteLine("public pbc::IPopsicleList<{0}> {1}List {{", TypeName, PropertyName); + writer.WriteLine(" get {{ return PrepareBuilder().{0}_; }}", Name); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public int {0}Count {{", PropertyName); + writer.WriteLine(" get {{ return result.{0}Count; }}", PropertyName); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName); + writer.WriteLine(" return result.Get{0}(index);", PropertyName); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public Builder Set{0}(int index, {1} value) {{", PropertyName, TypeName); + AddNullCheck(writer); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.{0}_[index] = value;", Name); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + // Extra overload for builder (just on messages) + AddDeprecatedFlag(writer); + writer.WriteLine("public Builder Set{0}(int index, {1}.Builder builderForValue) {{", PropertyName, TypeName); + AddNullCheck(writer, "builderForValue"); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.{0}_[index] = builderForValue.Build();", Name); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public Builder Add{0}({1} value) {{", PropertyName, TypeName); + AddNullCheck(writer); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.{0}_.Add(value);", Name, TypeName); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + // Extra overload for builder (just on messages) + AddDeprecatedFlag(writer); + writer.WriteLine("public Builder Add{0}({1}.Builder builderForValue) {{", PropertyName, TypeName); + AddNullCheck(writer, "builderForValue"); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.{0}_.Add(builderForValue.Build());", Name); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public Builder AddRange{0}(scg::IEnumerable<{1}> values) {{", PropertyName, TypeName); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.{0}_.Add(values);", Name); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public Builder Clear{0}() {{", PropertyName); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.{0}_.Clear();", Name); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + } + + public void GenerateMergingCode(TextGenerator writer) + { + writer.WriteLine("if (other.{0}_.Count != 0) {{", Name); + writer.WriteLine(" result.{0}_.Add(other.{0}_);", Name); + writer.WriteLine("}"); + } + + public void GenerateBuildingCode(TextGenerator writer) + { + writer.WriteLine("{0}_.MakeReadOnly();", Name); + } + + public void GenerateParsingCode(TextGenerator writer) + { + writer.WriteLine( + "input.Read{0}Array(tag, field_name, result.{1}_, {2}.DefaultInstance, extensionRegistry);", + MessageOrGroup, Name, TypeName); + } + + public void GenerateSerializationCode(TextGenerator writer) + { + writer.WriteLine("if ({0}_.Count > 0) {{", Name); + writer.Indent(); + writer.WriteLine("output.Write{0}Array({1}, field_names[{3}], {2}_);", MessageOrGroup, Number, Name, + FieldOrdinal, Descriptor.FieldType); + writer.Outdent(); + writer.WriteLine("}"); + } + + public void GenerateSerializedSizeCode(TextGenerator writer) + { + writer.WriteLine("foreach ({0} element in {1}List) {{", TypeName, PropertyName); + writer.WriteLine(" size += pb::CodedOutputStream.Compute{0}Size({1}, element);", MessageOrGroup, Number); + writer.WriteLine("}"); + } + + public override void WriteHash(TextGenerator writer) + { + writer.WriteLine("foreach({0} i in {1}_)", TypeName, Name); + writer.WriteLine(" hash ^= i.GetHashCode();"); + } + + public override void WriteEquals(TextGenerator writer) + { + writer.WriteLine("if({0}_.Count != other.{0}_.Count) return false;", Name); + writer.WriteLine("for(int ix=0; ix < {0}_.Count; ix++)", Name); + writer.WriteLine(" if(!{0}_[ix].Equals(other.{0}_[ix])) return false;", Name); + } + + public override void WriteToString(TextGenerator writer) + { + writer.WriteLine("PrintField(\"{0}\", {1}_, writer);", + Descriptor.FieldType == FieldType.Group ? Descriptor.MessageType.Name : Descriptor.Name, + Name); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/RepeatedPrimitiveFieldGenerator.cs b/build/source/HeuristicLab.Build/ProtoGen/RepeatedPrimitiveFieldGenerator.cs new file mode 100644 index 0000000000..f5887e597e --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/RepeatedPrimitiveFieldGenerator.cs @@ -0,0 +1,207 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen +{ + internal class RepeatedPrimitiveFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator + { + internal RepeatedPrimitiveFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal) + : base(descriptor, fieldOrdinal) + { + } + + public void GenerateMembers(TextGenerator writer) + { + if (Descriptor.IsPacked && OptimizeSpeed) + { + writer.WriteLine("private int {0}MemoizedSerializedSize;", Name); + } + writer.WriteLine("private pbc::PopsicleList<{0}> {1}_ = new pbc::PopsicleList<{0}>();", TypeName, Name); + AddPublicMemberAttributes(writer); + writer.WriteLine("public scg::IList<{0}> {1}List {{", TypeName, PropertyName); + writer.WriteLine(" get {{ return pbc::Lists.AsReadOnly({0}_); }}", Name); + writer.WriteLine("}"); + + // TODO(jonskeet): Redundant API calls? Possibly - include for portability though. Maybe create an option. + AddDeprecatedFlag(writer); + writer.WriteLine("public int {0}Count {{", PropertyName); + writer.WriteLine(" get {{ return {0}_.Count; }}", Name); + writer.WriteLine("}"); + + AddPublicMemberAttributes(writer); + writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName); + writer.WriteLine(" return {0}_[index];", Name); + writer.WriteLine("}"); + } + + public void GenerateBuilderMembers(TextGenerator writer) + { + // Note: We can return the original list here, because we make it unmodifiable when we build + // We return it via IPopsicleList so that collection initializers work more pleasantly. + AddPublicMemberAttributes(writer); + writer.WriteLine("public pbc::IPopsicleList<{0}> {1}List {{", TypeName, PropertyName); + writer.WriteLine(" get {{ return PrepareBuilder().{0}_; }}", Name); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public int {0}Count {{", PropertyName); + writer.WriteLine(" get {{ return result.{0}Count; }}", PropertyName); + writer.WriteLine("}"); + AddPublicMemberAttributes(writer); + writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName); + writer.WriteLine(" return result.Get{0}(index);", PropertyName); + writer.WriteLine("}"); + AddPublicMemberAttributes(writer); + writer.WriteLine("public Builder Set{0}(int index, {1} value) {{", PropertyName, TypeName); + AddNullCheck(writer); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.{0}_[index] = value;", Name); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + AddPublicMemberAttributes(writer); + writer.WriteLine("public Builder Add{0}({1} value) {{", PropertyName, TypeName); + AddNullCheck(writer); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.{0}_.Add(value);", Name, TypeName); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + AddPublicMemberAttributes(writer); + writer.WriteLine("public Builder AddRange{0}(scg::IEnumerable<{1}> values) {{", PropertyName, TypeName); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.{0}_.Add(values);", Name); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + AddDeprecatedFlag(writer); + writer.WriteLine("public Builder Clear{0}() {{", PropertyName); + writer.WriteLine(" PrepareBuilder();"); + writer.WriteLine(" result.{0}_.Clear();", Name); + writer.WriteLine(" return this;"); + writer.WriteLine("}"); + } + + public void GenerateMergingCode(TextGenerator writer) + { + writer.WriteLine("if (other.{0}_.Count != 0) {{", Name); + writer.WriteLine(" result.{0}_.Add(other.{0}_);", Name); + writer.WriteLine("}"); + } + + public void GenerateBuildingCode(TextGenerator writer) + { + writer.WriteLine("{0}_.MakeReadOnly();", Name); + } + + public void GenerateParsingCode(TextGenerator writer) + { + writer.WriteLine("input.Read{0}Array(tag, field_name, result.{1}_);", CapitalizedTypeName, Name, + Descriptor.FieldType); + } + + public void GenerateSerializationCode(TextGenerator writer) + { + writer.WriteLine("if ({0}_.Count > 0) {{", Name); + writer.Indent(); + if (Descriptor.IsPacked) + { + writer.WriteLine("output.WritePacked{0}Array({1}, field_names[{3}], {2}MemoizedSerializedSize, {2}_);", + CapitalizedTypeName, Number, Name, FieldOrdinal, Descriptor.FieldType); + } + else + { + writer.WriteLine("output.Write{0}Array({1}, field_names[{3}], {2}_);", CapitalizedTypeName, Number, Name, + FieldOrdinal, Descriptor.FieldType); + } + writer.Outdent(); + writer.WriteLine("}"); + } + + public void GenerateSerializedSizeCode(TextGenerator writer) + { + writer.WriteLine("{"); + writer.Indent(); + writer.WriteLine("int dataSize = 0;"); + if (FixedSize == -1) + { + writer.WriteLine("foreach ({0} element in {1}List) {{", TypeName, PropertyName); + writer.WriteLine(" dataSize += pb::CodedOutputStream.Compute{0}SizeNoTag(element);", + CapitalizedTypeName, Number); + writer.WriteLine("}"); + } + else + { + writer.WriteLine("dataSize = {0} * {1}_.Count;", FixedSize, Name); + } + writer.WriteLine("size += dataSize;"); + int tagSize = CodedOutputStream.ComputeTagSize(Descriptor.FieldNumber); + if (Descriptor.IsPacked) + { + writer.WriteLine("if ({0}_.Count != 0) {{", Name); + writer.WriteLine(" size += {0} + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);", tagSize); + writer.WriteLine("}"); + } + else + { + writer.WriteLine("size += {0} * {1}_.Count;", tagSize, Name); + } + // cache the data size for packed fields. + if (Descriptor.IsPacked) + { + writer.WriteLine("{0}MemoizedSerializedSize = dataSize;", Name); + } + writer.Outdent(); + writer.WriteLine("}"); + } + + public override void WriteHash(TextGenerator writer) + { + writer.WriteLine("foreach({0} i in {1}_)", TypeName, Name); + writer.WriteLine(" hash ^= i.GetHashCode();"); + } + + public override void WriteEquals(TextGenerator writer) + { + writer.WriteLine("if({0}_.Count != other.{0}_.Count) return false;", Name); + writer.WriteLine("for(int ix=0; ix < {0}_.Count; ix++)", Name); + writer.WriteLine(" if(!{0}_[ix].Equals(other.{0}_[ix])) return false;", Name); + } + + public override void WriteToString(TextGenerator writer) + { + writer.WriteLine("PrintField(\"{0}\", {1}_, writer);", Descriptor.Name, Name); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/ServiceGenerator.cs b/build/source/HeuristicLab.Build/ProtoGen/ServiceGenerator.cs new file mode 100644 index 0000000000..a5e196de81 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/ServiceGenerator.cs @@ -0,0 +1,194 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen +{ + internal class GenericServiceGenerator : SourceGeneratorBase, ISourceGenerator + { + private enum RequestOrResponse + { + Request, + Response + } + + internal GenericServiceGenerator(ServiceDescriptor descriptor) + : base(descriptor) + { + } + + public void Generate(TextGenerator writer) + { + writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); + writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); + writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", + GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); + writer.WriteLine("{0} abstract class {1} : pb::IService {{", ClassAccessLevel, Descriptor.Name); + writer.Indent(); + + foreach (MethodDescriptor method in Descriptor.Methods) + { + writer.WriteLine("{0} abstract void {1}(", ClassAccessLevel, + NameHelpers.UnderscoresToPascalCase(method.Name)); + writer.WriteLine(" pb::IRpcController controller,"); + writer.WriteLine(" {0} request,", GetClassName(method.InputType)); + writer.WriteLine(" global::System.Action<{0}> done);", GetClassName(method.OutputType)); + } + + // Generate Descriptor and DescriptorForType. + writer.WriteLine(); + writer.WriteLine("{0} static pbd::ServiceDescriptor Descriptor {{", ClassAccessLevel); + writer.WriteLine(" get {{ return {0}.Descriptor.Services[{1}]; }}", + DescriptorUtil.GetQualifiedUmbrellaClassName(Descriptor.File.CSharpOptions), + Descriptor.Index); + writer.WriteLine("}"); + writer.WriteLine("public pbd::ServiceDescriptor DescriptorForType {"); + writer.WriteLine(" get { return Descriptor; }"); + writer.WriteLine("}"); + + GenerateCallMethod(writer); + GenerateGetPrototype(RequestOrResponse.Request, writer); + GenerateGetPrototype(RequestOrResponse.Response, writer); + GenerateStub(writer); + + writer.Outdent(); + writer.WriteLine("}"); + } + + private void GenerateCallMethod(TextGenerator writer) + { + writer.WriteLine(); + writer.WriteLine("public void CallMethod("); + writer.WriteLine(" pbd::MethodDescriptor method,"); + writer.WriteLine(" pb::IRpcController controller,"); + writer.WriteLine(" pb::IMessage request,"); + writer.WriteLine(" global::System.Action done) {"); + writer.Indent(); + writer.WriteLine("if (method.Service != Descriptor) {"); + writer.WriteLine(" throw new global::System.ArgumentException("); + writer.WriteLine(" \"Service.CallMethod() given method descriptor for wrong service type.\");"); + writer.WriteLine("}"); + writer.WriteLine("switch(method.Index) {"); + writer.Indent(); + foreach (MethodDescriptor method in Descriptor.Methods) + { + writer.WriteLine("case {0}:", method.Index); + writer.WriteLine(" this.{0}(controller, ({1}) request,", + NameHelpers.UnderscoresToPascalCase(method.Name), GetClassName(method.InputType)); + writer.WriteLine(" pb::RpcUtil.SpecializeCallback<{0}>(", GetClassName(method.OutputType)); + writer.WriteLine(" done));"); + writer.WriteLine(" return;"); + } + writer.WriteLine("default:"); + writer.WriteLine(" throw new global::System.InvalidOperationException(\"Can't get here.\");"); + writer.Outdent(); + writer.WriteLine("}"); + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine(); + } + + private void GenerateGetPrototype(RequestOrResponse which, TextGenerator writer) + { + writer.WriteLine("public pb::IMessage Get{0}Prototype(pbd::MethodDescriptor method) {{", which); + writer.Indent(); + writer.WriteLine("if (method.Service != Descriptor) {"); + writer.WriteLine(" throw new global::System.ArgumentException("); + writer.WriteLine(" \"Service.Get{0}Prototype() given method descriptor for wrong service type.\");", + which); + writer.WriteLine("}"); + writer.WriteLine("switch(method.Index) {"); + writer.Indent(); + + foreach (MethodDescriptor method in Descriptor.Methods) + { + writer.WriteLine("case {0}:", method.Index); + writer.WriteLine(" return {0}.DefaultInstance;", + GetClassName(which == RequestOrResponse.Request ? method.InputType : method.OutputType)); + } + writer.WriteLine("default:"); + writer.WriteLine(" throw new global::System.InvalidOperationException(\"Can't get here.\");"); + writer.Outdent(); + writer.WriteLine("}"); + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine(); + } + + private void GenerateStub(TextGenerator writer) + { + writer.WriteLine("public static Stub CreateStub(pb::IRpcChannel channel) {"); + writer.WriteLine(" return new Stub(channel);"); + writer.WriteLine("}"); + writer.WriteLine(); + writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); + writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); + writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", + GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); + writer.WriteLine("{0} class Stub : {1} {{", ClassAccessLevel, GetClassName(Descriptor)); + writer.Indent(); + writer.WriteLine("internal Stub(pb::IRpcChannel channel) {"); + writer.WriteLine(" this.channel = channel;"); + writer.WriteLine("}"); + writer.WriteLine(); + writer.WriteLine("private readonly pb::IRpcChannel channel;"); + writer.WriteLine(); + writer.WriteLine("public pb::IRpcChannel Channel {"); + writer.WriteLine(" get { return channel; }"); + writer.WriteLine("}"); + + foreach (MethodDescriptor method in Descriptor.Methods) + { + writer.WriteLine(); + writer.WriteLine("{0} override void {1}(", ClassAccessLevel, + NameHelpers.UnderscoresToPascalCase(method.Name)); + writer.WriteLine(" pb::IRpcController controller,"); + writer.WriteLine(" {0} request,", GetClassName(method.InputType)); + writer.WriteLine(" global::System.Action<{0}> done) {{", GetClassName(method.OutputType)); + writer.Indent(); + writer.WriteLine("channel.CallMethod(Descriptor.Methods[{0}],", method.Index); + writer.WriteLine(" controller, request, {0}.DefaultInstance,", GetClassName(method.OutputType)); + writer.WriteLine(" pb::RpcUtil.GeneralizeCallback<{0}, {0}.Builder>(done, {0}.DefaultInstance));", + GetClassName(method.OutputType)); + writer.Outdent(); + writer.WriteLine("}"); + } + writer.Outdent(); + writer.WriteLine("}"); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/ServiceInterfaceGenerator.cs b/build/source/HeuristicLab.Build/ProtoGen/ServiceInterfaceGenerator.cs new file mode 100644 index 0000000000..ec8c6a44fd --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/ServiceInterfaceGenerator.cs @@ -0,0 +1,308 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using Google.ProtocolBuffers.DescriptorProtos; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen +{ + internal class ServiceGenerator : SourceGeneratorBase, ISourceGenerator + { + private readonly CSharpServiceType svcType; + private ISourceGenerator _generator; + + internal ServiceGenerator(ServiceDescriptor descriptor) + : base(descriptor) + { + svcType = descriptor.File.CSharpOptions.ServiceGeneratorType; + switch (svcType) + { + case CSharpServiceType.NONE: + _generator = new NoServicesGenerator(descriptor); + break; + case CSharpServiceType.GENERIC: + _generator = new GenericServiceGenerator(descriptor); + break; + case CSharpServiceType.INTERFACE: + _generator = new ServiceInterfaceGenerator(descriptor); + break; + case CSharpServiceType.IRPCDISPATCH: + _generator = new RpcServiceGenerator(descriptor); + break; + default: + throw new ApplicationException("Unknown ServiceGeneratorType = " + svcType.ToString()); + } + } + + public void Generate(TextGenerator writer) + { + _generator.Generate(writer); + } + + private class NoServicesGenerator : SourceGeneratorBase, ISourceGenerator + { + public NoServicesGenerator(ServiceDescriptor descriptor) + : base(descriptor) + { + } + + public virtual void Generate(TextGenerator writer) + { + writer.WriteLine("/*"); + writer.WriteLine("* Service generation is now disabled by default, use the following option to enable:"); + writer.WriteLine("* option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;"); + writer.WriteLine("*/"); + } + } + + private class ServiceInterfaceGenerator : SourceGeneratorBase, ISourceGenerator + { + public ServiceInterfaceGenerator(ServiceDescriptor descriptor) + : base(descriptor) + { + } + + public virtual void Generate(TextGenerator writer) + { + CSharpServiceOptions options = Descriptor.Options.GetExtension(CSharpOptions.CsharpServiceOptions); + if (options != null && options.HasInterfaceId) + { + writer.WriteLine("[global::System.Runtime.InteropServices.GuidAttribute(\"{0}\")]", + new Guid(options.InterfaceId)); + } + writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); + writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", + GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); + writer.WriteLine("{0} partial interface I{1} {{", ClassAccessLevel, Descriptor.Name); + writer.Indent(); + + foreach (MethodDescriptor method in Descriptor.Methods) + { + CSharpMethodOptions mth = method.Options.GetExtension(CSharpOptions.CsharpMethodOptions); + if (mth.HasDispatchId) + { + writer.WriteLine("[global::System.Runtime.InteropServices.DispId({0})]", mth.DispatchId); + } + writer.WriteLine("{0} {1}({2} {3});", GetClassName(method.OutputType), + NameHelpers.UnderscoresToPascalCase(method.Name), GetClassName(method.InputType), + NameHelpers.UnderscoresToCamelCase(method.InputType.Name)); + } + + writer.Outdent(); + writer.WriteLine("}"); + } + } + + private class RpcServiceGenerator : ServiceInterfaceGenerator + { + public RpcServiceGenerator(ServiceDescriptor descriptor) + : base(descriptor) + { + } + + public override void Generate(TextGenerator writer) + { + base.Generate(writer); + + writer.WriteLine(); + + // CLIENT Proxy + { + if (Descriptor.File.CSharpOptions.ClsCompliance) + { + writer.WriteLine("[global::System.CLSCompliant(false)]"); + } + writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); + writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); + writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", + GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); + writer.WriteLine("{0} partial class {1} : I{1}, pb::IRpcDispatch, global::System.IDisposable {{", + ClassAccessLevel, Descriptor.Name); + writer.Indent(); + writer.WriteLine("private readonly bool dispose;"); + writer.WriteLine("private readonly pb::IRpcDispatch dispatch;"); + + writer.WriteLine("public {0}(pb::IRpcDispatch dispatch) : this(dispatch, true) {{", Descriptor.Name); + writer.WriteLine("}"); + writer.WriteLine("public {0}(pb::IRpcDispatch dispatch, bool dispose) {{", Descriptor.Name); + writer.WriteLine(" pb::ThrowHelper.ThrowIfNull(this.dispatch = dispatch, \"dispatch\");"); + writer.WriteLine(" this.dispose = dispose && dispatch is global::System.IDisposable;"); + writer.WriteLine("}"); + writer.WriteLine(); + + writer.WriteLine("public void Dispose() {"); + writer.WriteLine(" if (dispose) ((global::System.IDisposable)dispatch).Dispose();"); + writer.WriteLine("}"); + writer.WriteLine(); + writer.WriteLine( + "TMessage pb::IRpcDispatch.CallMethod(string method, pb::IMessageLite request, pb::IBuilderLite response) {"); + writer.WriteLine(" return dispatch.CallMethod(method, request, response);"); + writer.WriteLine("}"); + writer.WriteLine(); + + foreach (MethodDescriptor method in Descriptor.Methods) + { + writer.WriteLine("public {0} {1}({2} {3}) {{", GetClassName(method.OutputType), + NameHelpers.UnderscoresToPascalCase(method.Name), + GetClassName(method.InputType), + NameHelpers.UnderscoresToCamelCase(method.InputType.Name)); + writer.WriteLine(" return dispatch.CallMethod(\"{0}\", {1}, {2}.CreateBuilder());", + method.Name, + NameHelpers.UnderscoresToCamelCase(method.InputType.Name), + GetClassName(method.OutputType) + ); + writer.WriteLine("}"); + writer.WriteLine(); + } + } + // SERVER - DISPATCH + { + if (Descriptor.File.CSharpOptions.ClsCompliance) + { + writer.WriteLine("[global::System.CLSCompliant(false)]"); + } + writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); + writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); + writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", + GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); + writer.WriteLine("public partial class Dispatch : pb::IRpcDispatch, global::System.IDisposable {"); + writer.Indent(); + writer.WriteLine("private readonly bool dispose;"); + writer.WriteLine("private readonly I{0} implementation;", Descriptor.Name); + + writer.WriteLine("public Dispatch(I{0} implementation) : this(implementation, true) {{", + Descriptor.Name); + writer.WriteLine("}"); + writer.WriteLine("public Dispatch(I{0} implementation, bool dispose) {{", Descriptor.Name); + writer.WriteLine(" pb::ThrowHelper.ThrowIfNull(this.implementation = implementation, \"implementation\");"); + writer.WriteLine(" this.dispose = dispose && implementation is global::System.IDisposable;"); + writer.WriteLine("}"); + writer.WriteLine(); + + writer.WriteLine("public void Dispose() {"); + writer.WriteLine(" if (dispose) ((global::System.IDisposable)implementation).Dispose();"); + writer.WriteLine("}"); + writer.WriteLine(); + + writer.WriteLine( + "public TMessage CallMethod(string methodName, pb::IMessageLite request, pb::IBuilderLite response)"); + writer.WriteLine(" where TMessage : pb::IMessageLite"); + writer.WriteLine(" where TBuilder : pb::IBuilderLite {"); + writer.Indent(); + writer.WriteLine("switch(methodName) {"); + writer.Indent(); + + foreach (MethodDescriptor method in Descriptor.Methods) + { + writer.WriteLine( + "case \"{0}\": return response.MergeFrom(implementation.{1}(({2})request)).Build();", + method.Name, NameHelpers.UnderscoresToPascalCase(method.Name), + GetClassName(method.InputType)); + } + writer.WriteLine("default: throw pb::ThrowHelper.CreateMissingMethod(typeof(I{0}), methodName);", Descriptor.Name); + writer.Outdent(); + writer.WriteLine("}"); //end switch + writer.Outdent(); + writer.WriteLine("}"); //end invoke + writer.Outdent(); + writer.WriteLine("}"); //end server + } + // SERVER - STUB + { + if (Descriptor.File.CSharpOptions.ClsCompliance) + { + writer.WriteLine("[global::System.CLSCompliant(false)]"); + } + writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); + writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); + writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", + GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); + writer.WriteLine( + "public partial class ServerStub : pb::IRpcServerStub, global::System.IDisposable {"); + writer.Indent(); + writer.WriteLine("private readonly bool dispose;"); + writer.WriteLine("private readonly pb::IRpcDispatch implementation;", Descriptor.Name); + + writer.WriteLine("public ServerStub(I{0} implementation) : this(implementation, true) {{", + Descriptor.Name); + writer.WriteLine("}"); + writer.WriteLine( + "public ServerStub(I{0} implementation, bool dispose) : this(new Dispatch(implementation, dispose), dispose) {{", + Descriptor.Name); + writer.WriteLine("}"); + + writer.WriteLine("public ServerStub(pb::IRpcDispatch implementation) : this(implementation, true) {"); + writer.WriteLine("}"); + writer.WriteLine("public ServerStub(pb::IRpcDispatch implementation, bool dispose) {"); + writer.WriteLine(" pb::ThrowHelper.ThrowIfNull(this.implementation = implementation, \"implementation\");"); + writer.WriteLine(" this.dispose = dispose && implementation is global::System.IDisposable;"); + writer.WriteLine("}"); + writer.WriteLine(); + + writer.WriteLine("public void Dispose() {"); + writer.WriteLine(" if (dispose) ((global::System.IDisposable)implementation).Dispose();"); + writer.WriteLine("}"); + writer.WriteLine(); + + writer.WriteLine( + "public pb::IMessageLite CallMethod(string methodName, pb::ICodedInputStream input, pb::ExtensionRegistry registry) {{", + Descriptor.Name); + writer.Indent(); + writer.WriteLine("switch(methodName) {"); + writer.Indent(); + + foreach (MethodDescriptor method in Descriptor.Methods) + { + writer.WriteLine( + "case \"{0}\": return implementation.CallMethod(methodName, {1}.ParseFrom(input, registry), {2}.CreateBuilder());", + method.Name, GetClassName(method.InputType), GetClassName(method.OutputType)); + } + writer.WriteLine("default: throw pb::ThrowHelper.CreateMissingMethod(typeof(I{0}), methodName);", Descriptor.Name); + writer.Outdent(); + writer.WriteLine("}"); //end switch + writer.Outdent(); + writer.WriteLine("}"); //end invoke + writer.Outdent(); + writer.WriteLine("}"); //end server + } + + writer.Outdent(); + writer.WriteLine("}"); + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/SourceGeneratorBase.cs b/build/source/HeuristicLab.Build/ProtoGen/SourceGeneratorBase.cs new file mode 100644 index 0000000000..b7b5eef856 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/SourceGeneratorBase.cs @@ -0,0 +1,157 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System.Collections.Generic; +using Google.ProtocolBuffers.DescriptorProtos; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen +{ + internal abstract class SourceGeneratorBase where T : IDescriptor + { + private readonly T descriptor; + + protected readonly bool OptimizeSpeed; + protected readonly bool OptimizeSize; + protected readonly bool UseLiteRuntime; + protected readonly string RuntimeSuffix; + + protected SourceGeneratorBase(T descriptor) + { + this.descriptor = descriptor; + + OptimizeSize = descriptor.File.Options.OptimizeFor == + FileOptions.Types.OptimizeMode.CODE_SIZE; + OptimizeSpeed = descriptor.File.Options.OptimizeFor == + FileOptions.Types.OptimizeMode.SPEED; + UseLiteRuntime = descriptor.File.Options.OptimizeFor == + FileOptions.Types.OptimizeMode.LITE_RUNTIME; + //Lite runtime uses OptimizeSpeed code branches + OptimizeSpeed |= UseLiteRuntime; + RuntimeSuffix = UseLiteRuntime ? "Lite" : ""; + } + + protected T Descriptor + { + get { return descriptor; } + } + + internal static string GetClassName(IDescriptor descriptor) + { + return ToCSharpName(descriptor.FullName, descriptor.File); + } + + // Groups are hacky: The name of the field is just the lower-cased name + // of the group type. In C#, though, we would like to retain the original + // capitalization of the type name. + internal static string GetFieldName(FieldDescriptor descriptor) + { + if (descriptor.FieldType == FieldType.Group) + { + return descriptor.MessageType.Name; + } + else + { + return descriptor.Name; + } + } + + internal static string GetFieldConstantName(FieldDescriptor field) + { + return field.CSharpOptions.PropertyName + "FieldNumber"; + } + + private static string ToCSharpName(string name, FileDescriptor file) + { + string result = file.CSharpOptions.Namespace; + if (file.CSharpOptions.NestClasses) + { + if (result != "") + { + result += "."; + } + result += file.CSharpOptions.UmbrellaClassname; + } + if (result != "") + { + result += '.'; + } + string classname; + if (file.Package == "") + { + classname = name; + } + else + { + // Strip the proto package from full_name since we've replaced it with + // the C# namespace. + classname = name.Substring(file.Package.Length + 1); + } + result += classname.Replace(".", ".Types."); + return "global::" + result; + } + + protected string ClassAccessLevel + { + get { return descriptor.File.CSharpOptions.PublicClasses ? "public" : "internal"; } + } + + protected void WriteChildren(TextGenerator writer, string region, IEnumerable children) + where TChild : IDescriptor + { + // Copy the set of children; makes access easier + List copy = new List(children); + if (copy.Count == 0) + { + return; + } + + if (region != null) + { + writer.WriteLine("#region {0}", region); + } + foreach (TChild child in children) + { + SourceGenerators.CreateGenerator(child).Generate(writer); + } + if (region != null) + { + writer.WriteLine("#endregion"); + writer.WriteLine(); + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/SourceGenerators.cs b/build/source/HeuristicLab.Build/ProtoGen/SourceGenerators.cs new file mode 100644 index 0000000000..bedebeed63 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/SourceGenerators.cs @@ -0,0 +1,87 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen +{ + public delegate TResult Func(T arg); + + internal static class SourceGenerators + { + private static readonly Dictionary> GeneratorFactories = + new Dictionary> + { + {typeof (FileDescriptor), descriptor => new UmbrellaClassGenerator((FileDescriptor) descriptor)}, + {typeof (EnumDescriptor), descriptor => new EnumGenerator((EnumDescriptor) descriptor)}, + {typeof (ServiceDescriptor), descriptor => new ServiceGenerator((ServiceDescriptor) descriptor)}, + {typeof (MessageDescriptor), descriptor => new MessageGenerator((MessageDescriptor) descriptor)}, + // For other fields, we have IFieldSourceGenerators. + {typeof (FieldDescriptor), descriptor => new ExtensionGenerator((FieldDescriptor) descriptor)} + }; + + public static IFieldSourceGenerator CreateFieldGenerator(FieldDescriptor field, int fieldOrdinal) + { + switch (field.MappedType) + { + case MappedType.Message: + return field.IsRepeated + ? (IFieldSourceGenerator) new RepeatedMessageFieldGenerator(field, fieldOrdinal) + : new MessageFieldGenerator(field, fieldOrdinal); + case MappedType.Enum: + return field.IsRepeated + ? (IFieldSourceGenerator) new RepeatedEnumFieldGenerator(field, fieldOrdinal) + : new EnumFieldGenerator(field, fieldOrdinal); + default: + return field.IsRepeated + ? (IFieldSourceGenerator) new RepeatedPrimitiveFieldGenerator(field, fieldOrdinal) + : new PrimitiveFieldGenerator(field, fieldOrdinal); + } + } + + public static ISourceGenerator CreateGenerator(T descriptor) where T : IDescriptor + { + Func factory; + if (!GeneratorFactories.TryGetValue(typeof (T), out factory)) + { + throw new ArgumentException("No generator registered for " + typeof (T).Name); + } + return factory(descriptor); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/UmbrellaClassGenerator.cs b/build/source/HeuristicLab.Build/ProtoGen/UmbrellaClassGenerator.cs new file mode 100644 index 0000000000..6dd95d9add --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtoGen/UmbrellaClassGenerator.cs @@ -0,0 +1,294 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; +using System.Collections; +using System.Collections.Generic; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.ProtoGen +{ + /// + /// Generator for the class describing the .proto file in general, + /// containing things like the message descriptor. + /// + internal sealed class UmbrellaClassGenerator : SourceGeneratorBase, ISourceGenerator + { + internal UmbrellaClassGenerator(FileDescriptor descriptor) + : base(descriptor) + { + } + + // Recursively searches the given message to see if it contains any extensions. + private static bool UsesExtensions(IMessage message) + { + // We conservatively assume that unknown fields are extensions. + if (message.UnknownFields.FieldDictionary.Count > 0) + { + return true; + } + + foreach (KeyValuePair keyValue in message.AllFields) + { + FieldDescriptor field = keyValue.Key; + if (field.IsExtension) + { + return true; + } + if (field.MappedType == MappedType.Message) + { + if (field.IsRepeated) + { + foreach (IMessage subMessage in (IEnumerable) keyValue.Value) + { + if (UsesExtensions(subMessage)) + { + return true; + } + } + } + else + { + if (UsesExtensions((IMessage) keyValue.Value)) + { + return true; + } + } + } + } + return false; + } + + public void Generate(TextGenerator writer) + { + WriteIntroduction(writer); + WriteExtensionRegistration(writer); + WriteChildren(writer, "Extensions", Descriptor.Extensions); + writer.WriteLine("#region Static variables"); + foreach (MessageDescriptor message in Descriptor.MessageTypes) + { + new MessageGenerator(message).GenerateStaticVariables(writer); + } + writer.WriteLine("#endregion"); + if (!UseLiteRuntime) + { + WriteDescriptor(writer); + } + else + { + WriteLiteExtensions(writer); + } + // The class declaration either gets closed before or after the children are written. + if (!Descriptor.CSharpOptions.NestClasses) + { + writer.Outdent(); + writer.WriteLine("}"); + + // Close the namespace around the umbrella class if defined + if (!Descriptor.CSharpOptions.NestClasses && Descriptor.CSharpOptions.UmbrellaNamespace != "") + { + writer.Outdent(); + writer.WriteLine("}"); + } + } + WriteChildren(writer, "Enums", Descriptor.EnumTypes); + WriteChildren(writer, "Messages", Descriptor.MessageTypes); + WriteChildren(writer, "Services", Descriptor.Services); + if (Descriptor.CSharpOptions.NestClasses) + { + writer.Outdent(); + writer.WriteLine("}"); + } + if (Descriptor.CSharpOptions.Namespace != "") + { + writer.Outdent(); + writer.WriteLine("}"); + } + writer.WriteLine(); + writer.WriteLine("#endregion Designer generated code"); + } + + private void WriteIntroduction(TextGenerator writer) + { + writer.WriteLine("// Generated by {0}. DO NOT EDIT!", this.GetType().Assembly.FullName); + writer.WriteLine("#pragma warning disable 1591, 0612"); + writer.WriteLine("#region Designer generated code"); + + writer.WriteLine(); + writer.WriteLine("using pb = global::Google.ProtocolBuffers;"); + writer.WriteLine("using pbc = global::Google.ProtocolBuffers.Collections;"); + writer.WriteLine("using pbd = global::Google.ProtocolBuffers.Descriptors;"); + writer.WriteLine("using scg = global::System.Collections.Generic;"); + + if (Descriptor.CSharpOptions.Namespace != "") + { + writer.WriteLine("namespace {0} {{", Descriptor.CSharpOptions.Namespace); + writer.Indent(); + writer.WriteLine(); + } + // Add the namespace around the umbrella class if defined + if (!Descriptor.CSharpOptions.NestClasses && Descriptor.CSharpOptions.UmbrellaNamespace != "") + { + writer.WriteLine("namespace {0} {{", Descriptor.CSharpOptions.UmbrellaNamespace); + writer.Indent(); + writer.WriteLine(); + } + + if (Descriptor.CSharpOptions.CodeContracts) + { + writer.WriteLine("[global::System.Diagnostics.Contracts.ContractVerificationAttribute(false)]"); + } + writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); + writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); + writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", + GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); + writer.WriteLine("{0} static partial class {1} {{", ClassAccessLevel, + Descriptor.CSharpOptions.UmbrellaClassname); + writer.WriteLine(); + writer.Indent(); + } + + private void WriteExtensionRegistration(TextGenerator writer) + { + writer.WriteLine("#region Extension registration"); + writer.WriteLine("public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {"); + writer.Indent(); + foreach (FieldDescriptor extension in Descriptor.Extensions) + { + new ExtensionGenerator(extension).GenerateExtensionRegistrationCode(writer); + } + foreach (MessageDescriptor message in Descriptor.MessageTypes) + { + new MessageGenerator(message).GenerateExtensionRegistrationCode(writer); + } + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine("#endregion"); + } + + private void WriteDescriptor(TextGenerator writer) + { + writer.WriteLine("#region Descriptor"); + + writer.WriteLine("public static pbd::FileDescriptor Descriptor {"); + writer.WriteLine(" get { return descriptor; }"); + writer.WriteLine("}"); + writer.WriteLine("private static pbd::FileDescriptor descriptor;"); + writer.WriteLine(); + writer.WriteLine("static {0}() {{", Descriptor.CSharpOptions.UmbrellaClassname); + writer.Indent(); + writer.WriteLine("byte[] descriptorData = global::System.Convert.FromBase64String("); + writer.Indent(); + writer.Indent(); + + // TODO(jonskeet): Consider a C#-escaping format here instead of just Base64. + byte[] bytes = Descriptor.Proto.ToByteArray(); + string base64 = Convert.ToBase64String(bytes); + + while (base64.Length > 60) + { + writer.WriteLine("\"{0}\" + ", base64.Substring(0, 60)); + base64 = base64.Substring(60); + } + writer.WriteLine("\"{0}\");", base64); + writer.Outdent(); + writer.Outdent(); + writer.WriteLine( + "pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {"); + writer.Indent(); + writer.WriteLine("descriptor = root;"); + foreach (MessageDescriptor message in Descriptor.MessageTypes) + { + new MessageGenerator(message).GenerateStaticVariableInitializers(writer); + } + foreach (FieldDescriptor extension in Descriptor.Extensions) + { + new ExtensionGenerator(extension).GenerateStaticVariableInitializers(writer); + } + + if (UsesExtensions(Descriptor.Proto)) + { + // Must construct an ExtensionRegistry containing all possible extensions + // and return it. + writer.WriteLine("pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();"); + writer.WriteLine("RegisterAllExtensions(registry);"); + foreach (FileDescriptor dependency in Descriptor.Dependencies) + { + writer.WriteLine("{0}.RegisterAllExtensions(registry);", + DescriptorUtil.GetFullUmbrellaClassName(dependency)); + } + writer.WriteLine("return registry;"); + } + else + { + writer.WriteLine("return null;"); + } + writer.Outdent(); + writer.WriteLine("};"); + + // ----------------------------------------------------------------- + // Invoke internalBuildGeneratedFileFrom() to build the file. + writer.WriteLine("pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,"); + writer.WriteLine(" new pbd::FileDescriptor[] {"); + foreach (FileDescriptor dependency in Descriptor.Dependencies) + { + writer.WriteLine(" {0}.Descriptor, ", DescriptorUtil.GetFullUmbrellaClassName(dependency)); + } + writer.WriteLine(" }, assigner);"); + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine("#endregion"); + writer.WriteLine(); + } + + private void WriteLiteExtensions(TextGenerator writer) + { + writer.WriteLine("#region Extensions"); + writer.WriteLine("internal static readonly object Descriptor;"); + writer.WriteLine("static {0}() {{", Descriptor.CSharpOptions.UmbrellaClassname); + writer.Indent(); + writer.WriteLine("Descriptor = null;"); + + foreach (MessageDescriptor message in Descriptor.MessageTypes) + { + new MessageGenerator(message).GenerateStaticVariableInitializers(writer); + } + foreach (FieldDescriptor extension in Descriptor.Extensions) + { + new ExtensionGenerator(extension).GenerateStaticVariableInitializers(writer); + } + writer.Outdent(); + writer.WriteLine("}"); + writer.WriteLine("#endregion"); + writer.WriteLine(); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtoGen/protoc.exe b/build/source/HeuristicLab.Build/ProtoGen/protoc.exe new file mode 100644 index 0000000000000000000000000000000000000000..2d8d4a5d75d8526003bdc5188887d4462462517e GIT binary patch literal 1766414 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 n!T?v$YP-%*+``=5`O@iV9@1g*FI zvVt$wV2_WtwyZ}Y&XVmmz~ou}L|W3g3a+ejDFY&Va-qOh>I}h>{lLne%^B7f7Cb9d zrDm992tE!FWknR8a582V+GnPLd+K<5lEnkS5z4be_`(2i#_<^Pt4jUKZyQ&h1L4Vh z<(B1`pH?5MLwmA2Vwc|ojZZcJwjg>3B!u{{0x6HpLEb%xk{Be;pqYlAvs)jf^L|}> zO^vIL7kH}vNUCw9;cw4F)vpOcJ9AaZ5RhU`>_xD~ZQFY4RcveX^ltA}N8gslI-=r4 z;-s+!%8;7R{fTpXv=4gbLwga?eyq`YPY_W`vNG3-VFiN3g+$u|FkRYvg6PNnEWJ*b zK8&TS0rOS3qy!cE^^REtI`XRb{Mci}t8RazjP%bAz2IKeGWUckVoP*KysAgGuu`1> z1H-nS3%r-r9wM&+Z#1hmd?M@nK%@5dWtYs*ExIozQEvuJ^`+ki-Iv~IXY}dXxX*L- zr-d4qDw)c*MzmzyageH}NW%cD)1erJj_L&+xal{Q22%N+b*C8eQ zFueRrc@J*I2k9aq#y3fCu79F5?OgwX{KG_sWd8T~h8q|k!-|KPiglkw^vL0KZWCs@K z#&LjPJM`p&AWi8@d}XYXNv6A{jgLii^yGs0N<|*INZMbv_r{bLBRR)=tS;0o{hDS}9mvam5QKs}L z*9OGMFB$NM$}e&vT?8F9o)h0^ASm^H2H;nPXFSI>0e|j?1pM;keF#k!y}U2^HB0eJ z@;=-Sh~gJ(rt+Y)GIo9EXvHt)eQ>11BSc{IAWvRVW`MPDo<7d6t({0mkJj)H z`L5i}uPZSRu{fs`f&uE79l2y{2agVFwC*pb>mowxJ)w8EpYoyid7CA7egIS)~2 z)yeRS;?r6Dv74$Pa&=06xF|J8l@4Je9%GBJ`(V1SWSIkSg~+e+udo*#h%MCnm{;an zLz&A-i4a-T2AyT(l`id-x#mh~odzLN%+hbv7DcjNNFW(>C(w}$yx9jv2wo*nq66KC z_g27+MbRTcOP?ID`*~n;QapIA;MWKy$L6{7OkiS~S6I|}SE3Ko3=gJskKkM((uyNE zzd=l;fJFz_#&aw2#Pb+jeGSTXL@}~WG>}UG0ozor*7NWK=_-UfXYd75tZI7q@U&r) zj3LK%dOF*XPZ)Co<{FwemfBhl|TlvFFph4j{{7X z_A)5_x{UC_1!ojT2FBbM9uny*bCWO|h2_oHz_XEJd{LgBWdfy~qa+vQm zc)uo?9O-%Y>A>_fVDbLAgUwhVue*w6d z&cUsD{W;E@#V0ztcJY^prZ)yvJXhH^bjXscom{5Nu>dAnB8C{@)+nzGmP%Q5nJty< zxs(R2!89=GoK^Y9APh_rZ%Hs5&#cojWLRDCm$E1SRrX7rr_6N#n%`&>W@kL7Tl`yx z>{(1y>O7Zev8l9TmNWEAnS4}LE-NOJSslcR8OCc%>EXp^0bN`KRWW_GE%W8Gwa}vl z(VGrumwEG_KC0OuM~;}Tk==y2xCz_4Nk*o!l-zM4EhX}jJHE1%w8Tqm?qGZo=ZT0o ziY*i&9t&$j zZ}}b~9quL^^OZS;h`Y!+lAOUXT_Sc;WNdCe3)Vuw#%3)sbuXg>9IVsX5!L(;ucCBN zft^^%D!&E7HzClJd)vef+{e2}<3ls>UCJDO7Zw7<<%<*g0fVwWrZU=pD&$aBvX_PJ z7{DtP0Z9@qSBe~&IfueXt4cZl?I-~vMbTpU%laandPT$^}7^ zEjSv%XR=0c!k`VD;V!XX`9ma6Mh*OBadtgVQ4V+XCS+F{LFcX z9}azOA-{0THM}GL2EV2&e$7_=nm~R%0AHzPALxg506e)7kh=I4doa$gLN|FcMfhbz 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%0D0-}DuHtO9s05y&GzA85Yt~I4k zpC!|xxV1ocBM_De;^vz=d91W=bY*cA^?eZMLP+j@M_zzyB`*LEf9taiC_Ra#=@HRn z8sOn@v6NQoEK1+S(&GU0wK<)A;mYZQAH}{HKHwjJ18^ER-YVX$kT(FEbI=MpI`_^9 zs-1KdMvuX!mk7ecl0PMR7WUeFZ4&d0}W*BccfY+>bBomKN zC{t;_l@ZsKfCI5L>R0+RGO0dwridIRaWm%&X`7=$wq@HsiuWWCmZK!@FJ{UYj*7bH z2Ym4YU|3OZuX8wC@{!7f4L&X8Ml)7Y3u;H{zMZIVsEzte zqV8H7bwE(t_qyk8YiZ`DnAxe;!;5#KoZa_o#q!iVt+X`za0YaDg_v zgC!-2i}gov63cgX`Pmo8am_>dyo#2x+v(VGf8E_LiI<;9{HXhxBUIg~-Q({bbk$9T zl67B<(|#6F z3KEnFGc%1#tc90K4ey`EdvRZ8Y81)a#x84B8Y*JuSVM$wvwO1!DwUxUC?`>z@1Cj- z(Q8c{=_#Rxml6d-P=jL)#0>{$z@;nF3(|g~UDv|Pd##oE1LY&qbmFDd7}jvL{{hZ1 z3JqBkpnOu%>&{v-*BF_F(DIC|f>;wHSfCW{1W7^*wYJSHitb#B$;MZ08PT#3Eyh*h zpP1PNrYn!)8uQ9sxE@t&bzOo*%+6TkWOiEEW<_A$lJF8FT+J+E_~FPTIm%d#@ zP9Uibm_%Qn@F3?ZGkZA$gENa_hx06QaDt-$h35TfP=$>ZU9vQ}j7>HJf(7ZB1xhiK zG?qo6{bEJ?B_?jlkz_Ft`4QyBlv+lXL;H;7iDN$<%8$~?NRj`GJyF-xA3$@h>Zj?2d-5Py?B0JMRDK!a^y{SSrPlh462?fXfU8RPR0mu^wcH0bi0AifV zKkCFjAeA~mOWjJ?44VU!WtdOq_okYlhoxc;21{fBso>mKIzy^QmQ;ok<;iSo&McvQ zA|m!}Yzr+nwvoGM72ma>(hJdT4cC>!`R;4H zQ{vl!R9o~{#)8;Hm*@|FpIhv2fcB}=@*>+I+j}R(X!_Ruao-ZF5(RX2I-{*&~m+Up+Ak7>d5LcTrfE& ztWGAT8v%>=$1NuhmeS7Y+Z~%w`clAr6}~$lL4T$Yh^#KQ{`CZu+-O&99OO_1IW&T5 zFS0Mm%)T2xbQ+%<`NGi{GA$8qw8jAbxW$yU(n6)fbZQ;x&lWEB^v7L#zLaLrqHJ=f zvh-WE`}6J93HtLnfiC{I@jfDW9S!8ujleq;Fz}~kZT{pDQyu(a=0w+Z0b_}&2VjZ$ zbCHyGydeWv`V7E){5dL7fBxvt{tfyS^Hl4>4h$a!*?^?Ov13%(dwhryy`+4a$u zU`hlR_uywFAhpUUrkP!=-!wABB##K6>a>50S^l-av&<%U8VaUc{9BiuRZ!`C2C#o0 z%+5;8>EarQW3%nwwjD^>SXE^6H|(0W1Bsn(86k*n7W+3VmNmF|FrTnX3~sM>i6Zyr z+<;_&sZMRjXUebX_OAi_CD}8G$le|XY~}Vq`>NibA7?Q!HaD=ZC%F_gn)OtE57$Pl zyb@v*SWSbG!;2GWphcoUW_Y9t)KW%bG5gRT5$A`?hRTApq4Hn14b{&Rv7xe%$A;?R z3v8$d%NbY)U$p((&NERV)K)gSApE6Ho(Zwhbp%A&=!7w1{}#qzcbR{VVvNT|_n8>2 zJvO?n0`er8XeYGqir!Iduvs*73t8kz8<;8OI0KcSBvy!5o|c1Dj*(kLR+Zeb6MT7b z{#?fZMi{yOEBs+&(2Htw<1PF_X#tn8^uu#(u>e*jV! ze@;4E@yC<#!xCnUb<0xI1vJ%dY5fr(JMWIooTI)YbIRS)>``QnH{;IP08uUy0k>G@ zQ%~hn%A7@kB$6x1Hz_HIwjn+xn2DinjNIjBokh`&S$Ie!IRktH2Z5aZ6Z?03Zt3$5 zt~0>=NNXQ{zG>}aj*@^Enp6C9>R@*7I(aq`i+yEqvf`Ptd#j5F!M2~!HKrG#TS??d z_O}|qx;S@RJK>y^b+hGua!TyaZvGVr|2$r(&xL=pT$5|SH{>7ljyvM<4*71DTRc8I z0sn0OlAJ$oGfH$6N@T)6*gEX>MG5?n{UERaTPkgr8420oQ$^T-Sd#ud>2Qq6~6IEvg2F&6(G*L0*VlF zbtQXZ9}qjYrjflUO7|??+C>;;HFAbh#GgDlHr3pe%tRTNL(5^vk)y~c&$R4m(W?D; z;RZB-n&JU`#82HNdcbA{q1dVX)U!Y;NW&K`RelRG{bkeQpiJol@TmP3aw4h+0LpJ6 zKhJs0rMv{fV)=6`Fq_zbpp$_0+|>{fKLgCM6^iB0{l&-fg%bLq#Qd=eU%U<&EPr=^ zpIQ?2W>+lYN12;B(Wv=U@uRVT`6SVT-ia-L_XA#+L`o~qIyUYnLiNMYP⁡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

^M-dX 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

?KEmciCU4A_lmjtt(|1ww8r4ZHVH{LAUbkVx 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�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 a6XyAw;Qvkwybx+%)Yjg#x3dLPjQ<1lbTo+o literal 0 HcmV?d00001 diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/AbstractBuilder.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/AbstractBuilder.cs new file mode 100644 index 0000000000..5005717a3f --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/AbstractBuilder.cs @@ -0,0 +1,253 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections; +using System.Collections.Generic; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + ///

+ /// Implementation of the non-generic IMessage interface as far as possible. + /// + public abstract partial class AbstractBuilder : AbstractBuilderLite, + IBuilder + where TMessage : AbstractMessage + where TBuilder : AbstractBuilder + { + #region Unimplemented members of IBuilder + + public abstract UnknownFieldSet UnknownFields { get; set; } + public abstract IDictionary AllFields { get; } + public abstract object this[FieldDescriptor field] { get; set; } + public abstract MessageDescriptor DescriptorForType { get; } + public abstract int GetRepeatedFieldCount(FieldDescriptor field); + public abstract object this[FieldDescriptor field, int index] { get; set; } + public abstract bool HasField(FieldDescriptor field); + public abstract IBuilder CreateBuilderForField(FieldDescriptor field); + public abstract TBuilder ClearField(FieldDescriptor field); + public abstract TBuilder AddRepeatedField(FieldDescriptor field, object value); + + #endregion + + public TBuilder SetUnknownFields(UnknownFieldSet fields) + { + UnknownFields = fields; + return ThisBuilder; + } + + public override TBuilder Clear() + { + foreach (FieldDescriptor field in AllFields.Keys) + { + ClearField(field); + } + return ThisBuilder; + } + + public override sealed TBuilder MergeFrom(IMessageLite other) + { + if (other is IMessage) + { + return MergeFrom((IMessage) other); + } + throw new ArgumentException("MergeFrom(Message) can only merge messages of the same type."); + } + + /// + /// Merge the specified other message into the message being + /// built. Merging occurs as follows. For each field: + /// For singular primitive fields, if the field is set in , + /// then 's value overwrites the value in this message. + /// For singular message fields, if the field is set in , + /// it is merged into the corresponding sub-message of this message using the same + /// merging rules. + /// For repeated fields, the elements in are concatenated + /// with the elements in this message. + /// + /// + /// + public abstract TBuilder MergeFrom(TMessage other); + + public virtual TBuilder MergeFrom(IMessage other) + { + if (other.DescriptorForType != DescriptorForType) + { + throw new ArgumentException("MergeFrom(IMessage) can only merge messages of the same type."); + } + + // Note: We don't attempt to verify that other's fields have valid + // types. Doing so would be a losing battle. We'd have to verify + // all sub-messages as well, and we'd have to make copies of all of + // them to insure that they don't change after verification (since + // the Message interface itself cannot enforce immutability of + // implementations). + // TODO(jonskeet): Provide a function somewhere called MakeDeepCopy() + // which allows people to make secure deep copies of messages. + foreach (KeyValuePair entry in other.AllFields) + { + FieldDescriptor field = entry.Key; + if (field.IsRepeated) + { + // Concatenate repeated fields + foreach (object element in (IEnumerable) entry.Value) + { + AddRepeatedField(field, element); + } + } + else if (field.MappedType == MappedType.Message) + { + // Merge singular messages + IMessageLite existingValue = (IMessageLite) this[field]; + if (existingValue == existingValue.WeakDefaultInstanceForType) + { + this[field] = entry.Value; + } + else + { + this[field] = existingValue.WeakCreateBuilderForType() + .WeakMergeFrom(existingValue) + .WeakMergeFrom((IMessageLite) entry.Value) + .WeakBuild(); + } + } + else + { + // Overwrite simple values + this[field] = entry.Value; + } + } + + //Fix for unknown fields not merging, see java's AbstractMessage.Builder line 236 + MergeUnknownFields(other.UnknownFields); + + return ThisBuilder; + } + + public override TBuilder MergeFrom(ICodedInputStream input, ExtensionRegistry extensionRegistry) + { + UnknownFieldSet.Builder unknownFields = UnknownFieldSet.CreateBuilder(UnknownFields); + unknownFields.MergeFrom(input, extensionRegistry, this); + UnknownFields = unknownFields.Build(); + return ThisBuilder; + } + + public virtual TBuilder MergeUnknownFields(UnknownFieldSet unknownFields) + { + UnknownFields = UnknownFieldSet.CreateBuilder(UnknownFields) + .MergeFrom(unknownFields) + .Build(); + return ThisBuilder; + } + + public virtual IBuilder SetField(FieldDescriptor field, object value) + { + this[field] = value; + return ThisBuilder; + } + + public virtual IBuilder SetRepeatedField(FieldDescriptor field, int index, object value) + { + this[field, index] = value; + return ThisBuilder; + } + + #region Explicit Implementations + + IMessage IBuilder.WeakBuild() + { + return Build(); + } + + IBuilder IBuilder.WeakAddRepeatedField(FieldDescriptor field, object value) + { + return AddRepeatedField(field, value); + } + + IBuilder IBuilder.WeakClear() + { + return Clear(); + } + + IBuilder IBuilder.WeakMergeFrom(IMessage message) + { + return MergeFrom(message); + } + + IBuilder IBuilder.WeakMergeFrom(ICodedInputStream input) + { + return MergeFrom(input); + } + + IBuilder IBuilder.WeakMergeFrom(ICodedInputStream input, ExtensionRegistry registry) + { + return MergeFrom(input, registry); + } + + IBuilder IBuilder.WeakMergeFrom(ByteString data) + { + return MergeFrom(data); + } + + IBuilder IBuilder.WeakMergeFrom(ByteString data, ExtensionRegistry registry) + { + return MergeFrom(data, registry); + } + + IMessage IBuilder.WeakBuildPartial() + { + return BuildPartial(); + } + + IBuilder IBuilder.WeakClone() + { + return Clone(); + } + + IMessage IBuilder.WeakDefaultInstanceForType + { + get { return DefaultInstanceForType; } + } + + IBuilder IBuilder.WeakClearField(FieldDescriptor field) + { + return ClearField(field); + } + + #endregion + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/AbstractBuilderLite.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/AbstractBuilderLite.cs new file mode 100644 index 0000000000..d1a79426ff --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/AbstractBuilderLite.cs @@ -0,0 +1,264 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.IO; + +namespace Google.ProtocolBuffers +{ + /// + /// Implementation of the non-generic IMessage interface as far as possible. + /// + public abstract partial class AbstractBuilderLite : IBuilderLite + where TMessage : AbstractMessageLite + where TBuilder : AbstractBuilderLite + { + protected abstract TBuilder ThisBuilder { get; } + + public abstract bool IsInitialized { get; } + + public abstract TBuilder Clear(); + + public abstract TBuilder Clone(); + + public abstract TMessage Build(); + + public abstract TMessage BuildPartial(); + + public abstract TBuilder MergeFrom(IMessageLite other); + + public abstract TBuilder MergeFrom(ICodedInputStream input, ExtensionRegistry extensionRegistry); + + public abstract TMessage DefaultInstanceForType { get; } + + #region IBuilderLite Members + + public virtual TBuilder MergeFrom(ICodedInputStream input) + { + return MergeFrom(input, ExtensionRegistry.CreateInstance()); + } + + public TBuilder MergeDelimitedFrom(Stream input) + { + return MergeDelimitedFrom(input, ExtensionRegistry.CreateInstance()); + } + + public TBuilder MergeDelimitedFrom(Stream input, ExtensionRegistry extensionRegistry) + { + int size = (int) CodedInputStream.ReadRawVarint32(input); + Stream limitedStream = new LimitedInputStream(input, size); + return MergeFrom(limitedStream, extensionRegistry); + } + + public TBuilder MergeFrom(ByteString data) + { + return MergeFrom(data, ExtensionRegistry.CreateInstance()); + } + + public TBuilder MergeFrom(ByteString data, ExtensionRegistry extensionRegistry) + { + CodedInputStream input = data.CreateCodedInput(); + MergeFrom(input, extensionRegistry); + input.CheckLastTagWas(0); + return ThisBuilder; + } + + public TBuilder MergeFrom(byte[] data) + { + CodedInputStream input = CodedInputStream.CreateInstance(data); + MergeFrom(input); + input.CheckLastTagWas(0); + return ThisBuilder; + } + + public TBuilder MergeFrom(byte[] data, ExtensionRegistry extensionRegistry) + { + CodedInputStream input = CodedInputStream.CreateInstance(data); + MergeFrom(input, extensionRegistry); + input.CheckLastTagWas(0); + return ThisBuilder; + } + + public TBuilder MergeFrom(Stream input) + { + CodedInputStream codedInput = CodedInputStream.CreateInstance(input); + MergeFrom(codedInput); + codedInput.CheckLastTagWas(0); + return ThisBuilder; + } + + public TBuilder MergeFrom(Stream input, ExtensionRegistry extensionRegistry) + { + CodedInputStream codedInput = CodedInputStream.CreateInstance(input); + MergeFrom(codedInput, extensionRegistry); + codedInput.CheckLastTagWas(0); + return ThisBuilder; + } + + #endregion + + #region Explicit definitions + + IBuilderLite IBuilderLite.WeakClear() + { + return Clear(); + } + + IBuilderLite IBuilderLite.WeakMergeFrom(IMessageLite message) + { + return MergeFrom(message); + } + + IBuilderLite IBuilderLite.WeakMergeFrom(ByteString data) + { + return MergeFrom(data); + } + + IBuilderLite IBuilderLite.WeakMergeFrom(ByteString data, ExtensionRegistry registry) + { + return MergeFrom(data, registry); + } + + IBuilderLite IBuilderLite.WeakMergeFrom(ICodedInputStream input) + { + return MergeFrom(input); + } + + IBuilderLite IBuilderLite.WeakMergeFrom(ICodedInputStream input, ExtensionRegistry registry) + { + return MergeFrom(input, registry); + } + + IMessageLite IBuilderLite.WeakBuild() + { + return Build(); + } + + IMessageLite IBuilderLite.WeakBuildPartial() + { + return BuildPartial(); + } + + IBuilderLite IBuilderLite.WeakClone() + { + return Clone(); + } + + IMessageLite IBuilderLite.WeakDefaultInstanceForType + { + get { return DefaultInstanceForType; } + } + + #endregion + + #region LimitedInputStream + + /// + /// Stream implementation which proxies another stream, only allowing a certain amount + /// of data to be read. Note that this is only used to read delimited streams, so it + /// doesn't attempt to implement everything. + /// + private class LimitedInputStream : Stream + { + private readonly Stream proxied; + private int bytesLeft; + + internal LimitedInputStream(Stream proxied, int size) + { + this.proxied = proxied; + bytesLeft = size; + } + + public override bool CanRead + { + get { return true; } + } + + public override bool CanSeek + { + get { return false; } + } + + public override bool CanWrite + { + get { return false; } + } + + public override void Flush() + { + } + + public override long Length + { + get { throw new NotSupportedException(); } + } + + public override long Position + { + get { throw new NotSupportedException(); } + set { throw new NotSupportedException(); } + } + + public override int Read(byte[] buffer, int offset, int count) + { + if (bytesLeft > 0) + { + int bytesRead = proxied.Read(buffer, offset, Math.Min(bytesLeft, count)); + bytesLeft -= bytesRead; + return bytesRead; + } + return 0; + } + + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException(); + } + + public override void SetLength(long value) + { + throw new NotSupportedException(); + } + + public override void Write(byte[] buffer, int offset, int count) + { + throw new NotSupportedException(); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/AbstractMessage.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/AbstractMessage.cs new file mode 100644 index 0000000000..fae307d5c3 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/AbstractMessage.cs @@ -0,0 +1,291 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text; +using Google.ProtocolBuffers.Collections; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + /// + /// Implementation of the non-generic IMessage interface as far as possible. + /// + public abstract partial class AbstractMessage : AbstractMessageLite, + IMessage + where TMessage : AbstractMessage + where TBuilder : AbstractBuilder + { + /// + /// The serialized size if it's already been computed, or null + /// if we haven't computed it yet. + /// + private int? memoizedSize = null; + + #region Unimplemented members of IMessage + + public abstract MessageDescriptor DescriptorForType { get; } + public abstract IDictionary AllFields { get; } + public abstract bool HasField(FieldDescriptor field); + public abstract object this[FieldDescriptor field] { get; } + public abstract int GetRepeatedFieldCount(FieldDescriptor field); + public abstract object this[FieldDescriptor field, int index] { get; } + public abstract UnknownFieldSet UnknownFields { get; } + + #endregion + + /// + /// Returns true iff all required fields in the message and all embedded + /// messages are set. + /// + public override bool IsInitialized + { + get + { + // Check that all required fields are present. + foreach (FieldDescriptor field in DescriptorForType.Fields) + { + if (field.IsRequired && !HasField(field)) + { + return false; + } + } + + // Check that embedded messages are initialized. + foreach (KeyValuePair entry in AllFields) + { + FieldDescriptor field = entry.Key; + if (field.MappedType == MappedType.Message) + { + if (field.IsRepeated) + { + // We know it's an IList, but not the exact type - so + // IEnumerable is the best we can do. (C# generics aren't covariant yet.) + foreach (IMessageLite element in (IEnumerable) entry.Value) + { + if (!element.IsInitialized) + { + return false; + } + } + } + else + { + if (!((IMessageLite) entry.Value).IsInitialized) + { + return false; + } + } + } + } + return true; + } + } + + public override sealed string ToString() + { + return TextFormat.PrintToString(this); + } + + public override sealed void PrintTo(TextWriter writer) + { + TextFormat.Print(this, writer); + } + + /// + /// Serializes the message and writes it to the given output stream. + /// This does not flush or close the stream. + /// + /// + /// Protocol Buffers are not self-delimiting. Therefore, if you write + /// any more data to the stream after the message, you must somehow ensure + /// that the parser on the receiving end does not interpret this as being + /// part of the protocol message. One way of doing this is by writing the size + /// of the message before the data, then making sure you limit the input to + /// that size when receiving the data. Alternatively, use WriteDelimitedTo(Stream). + /// + public override void WriteTo(ICodedOutputStream output) + { + foreach (KeyValuePair entry in AllFields) + { + FieldDescriptor field = entry.Key; + if (field.IsRepeated) + { + // We know it's an IList, but not the exact type - so + // IEnumerable is the best we can do. (C# generics aren't covariant yet.) + IEnumerable valueList = (IEnumerable) entry.Value; + if (field.IsPacked) + { + output.WritePackedArray(field.FieldType, field.FieldNumber, field.Name, valueList); + } + else + { + output.WriteArray(field.FieldType, field.FieldNumber, field.Name, valueList); + } + } + else + { + output.WriteField(field.FieldType, field.FieldNumber, field.Name, entry.Value); + } + } + + UnknownFieldSet unknownFields = UnknownFields; + if (DescriptorForType.Options.MessageSetWireFormat) + { + unknownFields.WriteAsMessageSetTo(output); + } + else + { + unknownFields.WriteTo(output); + } + } + + /// + /// Returns the number of bytes required to encode this message. + /// The result is only computed on the first call and memoized after that. + /// + public override int SerializedSize + { + get + { + if (memoizedSize != null) + { + return memoizedSize.Value; + } + + int size = 0; + foreach (KeyValuePair entry in AllFields) + { + FieldDescriptor field = entry.Key; + if (field.IsRepeated) + { + IEnumerable valueList = (IEnumerable) entry.Value; + if (field.IsPacked) + { + int dataSize = 0; + foreach (object element in valueList) + { + dataSize += CodedOutputStream.ComputeFieldSizeNoTag(field.FieldType, element); + } + size += dataSize; + size += CodedOutputStream.ComputeTagSize(field.FieldNumber); + size += CodedOutputStream.ComputeRawVarint32Size((uint) dataSize); + } + else + { + foreach (object element in valueList) + { + size += CodedOutputStream.ComputeFieldSize(field.FieldType, field.FieldNumber, element); + } + } + } + else + { + size += CodedOutputStream.ComputeFieldSize(field.FieldType, field.FieldNumber, entry.Value); + } + } + + UnknownFieldSet unknownFields = UnknownFields; + if (DescriptorForType.Options.MessageSetWireFormat) + { + size += unknownFields.SerializedSizeAsMessageSet; + } + else + { + size += unknownFields.SerializedSize; + } + + memoizedSize = size; + return size; + } + } + + /// + /// Compares the specified object with this message for equality. + /// Returns true iff the given object is a message of the same type + /// (as defined by DescriptorForType) and has identical values + /// for all its fields. + /// + public override bool Equals(object other) + { + if (other == this) + { + return true; + } + IMessage otherMessage = other as IMessage; + if (otherMessage == null || otherMessage.DescriptorForType != DescriptorForType) + { + return false; + } + return Dictionaries.Equals(AllFields, otherMessage.AllFields) && + UnknownFields.Equals(otherMessage.UnknownFields); + } + + /// + /// Returns the hash code value for this message. + /// TODO(jonskeet): Specify the hash algorithm, but better than the Java one! + /// + public override int GetHashCode() + { + int hash = 41; + hash = (19*hash) + DescriptorForType.GetHashCode(); + hash = (53*hash) + Dictionaries.GetHashCode(AllFields); + hash = (29*hash) + UnknownFields.GetHashCode(); + return hash; + } + + #region Explicit Members + + IBuilder IMessage.WeakCreateBuilderForType() + { + return CreateBuilderForType(); + } + + IBuilder IMessage.WeakToBuilder() + { + return ToBuilder(); + } + + IMessage IMessage.WeakDefaultInstanceForType + { + get { return DefaultInstanceForType; } + } + + #endregion + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/AbstractMessageLite.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/AbstractMessageLite.cs new file mode 100644 index 0000000000..22376e5b3e --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/AbstractMessageLite.cs @@ -0,0 +1,140 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System.IO; + +namespace Google.ProtocolBuffers +{ + /// + /// Implementation of the non-generic IMessage interface as far as possible. + /// + public abstract partial class AbstractMessageLite : IMessageLite + where TMessage : AbstractMessageLite + where TBuilder : AbstractBuilderLite + { + public abstract TBuilder CreateBuilderForType(); + + public abstract TBuilder ToBuilder(); + + public abstract TMessage DefaultInstanceForType { get; } + + public abstract bool IsInitialized { get; } + + public abstract void WriteTo(ICodedOutputStream output); + + public abstract int SerializedSize { get; } + + //public override bool Equals(object other) { + //} + + //public override int GetHashCode() { + //} + + public abstract void PrintTo(TextWriter writer); + + #region IMessageLite Members + + /// + /// Serializes the message to a ByteString. This is a trivial wrapper + /// around WriteTo(ICodedOutputStream). + /// + public ByteString ToByteString() + { + ByteString.CodedBuilder output = new ByteString.CodedBuilder(SerializedSize); + WriteTo(output.CodedOutput); + return output.Build(); + } + + /// + /// Serializes the message to a byte array. This is a trivial wrapper + /// around WriteTo(ICodedOutputStream). + /// + public byte[] ToByteArray() + { + byte[] result = new byte[SerializedSize]; + CodedOutputStream output = CodedOutputStream.CreateInstance(result); + WriteTo(output); + output.CheckNoSpaceLeft(); + return result; + } + + /// + /// Serializes the message and writes it to the given stream. + /// This is just a wrapper around WriteTo(CodedOutputStream). This + /// does not flush or close the stream. + /// + /// + public void WriteTo(Stream output) + { + CodedOutputStream codedOutput = CodedOutputStream.CreateInstance(output); + WriteTo(codedOutput); + codedOutput.Flush(); + } + + /// + /// Like WriteTo(Stream) but writes the size of the message as a varint before + /// writing the data. This allows more data to be written to the stream after the + /// message without the need to delimit the message data yourself. Use + /// IBuilder.MergeDelimitedFrom(Stream) or the static method + /// YourMessageType.ParseDelimitedFrom(Stream) to parse messages written by this method. + /// + /// + public void WriteDelimitedTo(Stream output) + { + CodedOutputStream codedOutput = CodedOutputStream.CreateInstance(output); + codedOutput.WriteRawVarint32((uint) SerializedSize); + WriteTo(codedOutput); + codedOutput.Flush(); + } + + IBuilderLite IMessageLite.WeakCreateBuilderForType() + { + return CreateBuilderForType(); + } + + IBuilderLite IMessageLite.WeakToBuilder() + { + return ToBuilder(); + } + + IMessageLite IMessageLite.WeakDefaultInstanceForType + { + get { return DefaultInstanceForType; } + } + + #endregion + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/ByteArray.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/ByteArray.cs new file mode 100644 index 0000000000..fc09dc5d91 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/ByteArray.cs @@ -0,0 +1,92 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; + +namespace Google.ProtocolBuffers +{ + /// + /// Provides a utility routine to copy small arrays much more quickly than Buffer.BlockCopy + /// + internal static class ByteArray + { + /// + /// The threshold above which you should use Buffer.BlockCopy rather than ByteArray.Copy + /// + private const int CopyThreshold = 12; + + /// + /// Determines which copy routine to use based on the number of bytes to be copied. + /// + public static void Copy(byte[] src, int srcOffset, byte[] dst, int dstOffset, int count) + { + if (count > CopyThreshold) + { + Buffer.BlockCopy(src, srcOffset, dst, dstOffset, count); + } + else + { + ByteCopy(src, srcOffset, dst, dstOffset, count); + } + } + + /// + /// Copy the bytes provided with a for loop, faster when there are only a few bytes to copy + /// + public static void ByteCopy(byte[] src, int srcOffset, byte[] dst, int dstOffset, int count) + { + int stop = srcOffset + count; + for (int i = srcOffset; i < stop; i++) + { + dst[dstOffset++] = src[i]; + } + } + + /// + /// Reverses the order of bytes in the array + /// + public static void Reverse(byte[] bytes) + { + byte temp; + for (int first = 0, last = bytes.Length - 1; first < last; first++, last--) + { + temp = bytes[first]; + bytes[first] = bytes[last]; + bytes[last] = temp; + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/ByteString.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/ByteString.cs new file mode 100644 index 0000000000..c5d3b8c491 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/ByteString.cs @@ -0,0 +1,279 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace Google.ProtocolBuffers +{ + /// + /// Immutable array of bytes. + /// TODO(jonskeet): Implement the common collection interfaces? + /// + public sealed class ByteString : IEnumerable, IEquatable + { + private static readonly ByteString empty = new ByteString(new byte[0]); + + private readonly byte[] bytes; + + /// + /// Internal use only. Ensure that the provided array is not mutated and belongs to this instance. + /// + internal static ByteString AttachBytes(byte[] bytes) + { + return new ByteString(bytes); + } + + /// + /// Constructs a new ByteString from the given byte array. The array is + /// *not* copied, and must not be modified after this constructor is called. + /// + private ByteString(byte[] bytes) + { + this.bytes = bytes; + } + + /// + /// Returns an empty ByteString. + /// + public static ByteString Empty + { + get { return empty; } + } + + /// + /// Returns the length of this ByteString in bytes. + /// + public int Length + { + get { return bytes.Length; } + } + + public bool IsEmpty + { + get { return Length == 0; } + } + + public byte[] ToByteArray() + { + return (byte[]) bytes.Clone(); + } + + public string ToBase64() + { + return Convert.ToBase64String(bytes); + } + + /// + /// Constructs a ByteString from the Base64 Encoded String. + /// + public static ByteString FromBase64(string bytes) + { + return new ByteString(Convert.FromBase64String(bytes)); + } + + /// + /// Constructs a ByteString from the given array. The contents + /// are copied, so further modifications to the array will not + /// be reflected in the returned ByteString. + /// + public static ByteString CopyFrom(byte[] bytes) + { + return new ByteString((byte[]) bytes.Clone()); + } + + /// + /// Constructs a ByteString from a portion of a byte array. + /// + public static ByteString CopyFrom(byte[] bytes, int offset, int count) + { + byte[] portion = new byte[count]; + ByteArray.Copy(bytes, offset, portion, 0, count); + return new ByteString(portion); + } + + /// + /// Creates a new ByteString by encoding the specified text with + /// the given encoding. + /// + public static ByteString CopyFrom(string text, Encoding encoding) + { + return new ByteString(encoding.GetBytes(text)); + } + + /// + /// Creates a new ByteString by encoding the specified text in UTF-8. + /// + public static ByteString CopyFromUtf8(string text) + { + return CopyFrom(text, Encoding.UTF8); + } + + /// + /// Retuns the byte at the given index. + /// + public byte this[int index] + { + get { return bytes[index]; } + } + + public string ToString(Encoding encoding) + { + return encoding.GetString(bytes, 0, bytes.Length); + } + + public string ToStringUtf8() + { + return ToString(Encoding.UTF8); + } + + public IEnumerator GetEnumerator() + { + return ((IEnumerable) bytes).GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + /// + /// Creates a CodedInputStream from this ByteString's data. + /// + public CodedInputStream CreateCodedInput() + { + // We trust CodedInputStream not to reveal the provided byte array or modify it + return CodedInputStream.CreateInstance(bytes); + } + + // TODO(jonskeet): CopyTo if it turns out to be required + + public override bool Equals(object obj) + { + ByteString other = obj as ByteString; + if (obj == null) + { + return false; + } + return Equals(other); + } + + public override int GetHashCode() + { + int ret = 23; + foreach (byte b in bytes) + { + ret = (ret << 8) | b; + } + return ret; + } + + public bool Equals(ByteString other) + { + if (other.bytes.Length != bytes.Length) + { + return false; + } + for (int i = 0; i < bytes.Length; i++) + { + if (other.bytes[i] != bytes[i]) + { + return false; + } + } + return true; + } + + /// + /// Builder for ByteStrings which allows them to be created without extra + /// copying being involved. This has to be a nested type in order to have access + /// to the private ByteString constructor. + /// + internal sealed class CodedBuilder + { + private readonly CodedOutputStream output; + private readonly byte[] buffer; + + internal CodedBuilder(int size) + { + buffer = new byte[size]; + output = CodedOutputStream.CreateInstance(buffer); + } + + internal ByteString Build() + { + output.CheckNoSpaceLeft(); + + // We can be confident that the CodedOutputStream will not modify the + // underlying bytes anymore because it already wrote all of them. So, + // no need to make a copy. + return new ByteString(buffer); + } + + internal CodedOutputStream CodedOutput + { + get { return output; } + } + } + + /// + /// Used internally by CodedOutputStream to avoid creating a copy for the write + /// + internal void WriteRawBytesTo(CodedOutputStream outputStream) + { + outputStream.WriteRawBytes(bytes, 0, bytes.Length); + } + + /// + /// Copies the entire byte array to the destination array provided at the offset specified. + /// + public void CopyTo(byte[] array, int position) + { + ByteArray.Copy(bytes, 0, array, position, bytes.Length); + } + + /// + /// Writes the entire byte array to the provided stream + /// + public void WriteTo(Stream outputStream) + { + outputStream.Write(bytes, 0, bytes.Length); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/CodedInputStream.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/CodedInputStream.cs new file mode 100644 index 0000000000..3aa50a484f --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/CodedInputStream.cs @@ -0,0 +1,1846 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + /// + /// Readings and decodes protocol message fields. + /// + /// + /// This class contains two kinds of methods: methods that read specific + /// protocol message constructs and field types (e.g. ReadTag and + /// ReadInt32) and methods that read low-level values (e.g. + /// ReadRawVarint32 and ReadRawBytes). If you are reading encoded protocol + /// messages, you should use the former methods, but if you are reading some + /// other format of your own design, use the latter. The names of the former + /// methods are taken from the protocol buffer type names, not .NET types. + /// (Hence ReadFloat instead of ReadSingle, and ReadBool instead of ReadBoolean.) + /// + /// TODO(jonskeet): Consider whether recursion and size limits shouldn't be readonly, + /// set at construction time. + /// + public sealed class CodedInputStream : ICodedInputStream + { + private readonly byte[] buffer; + private int bufferSize; + private int bufferSizeAfterLimit = 0; + private int bufferPos = 0; + private readonly Stream input; + private uint lastTag = 0; + + private uint nextTag = 0; + private bool hasNextTag = false; + + internal const int DefaultRecursionLimit = 64; + internal const int DefaultSizeLimit = 64 << 20; // 64MB + public const int BufferSize = 4096; + + /// + /// The total number of bytes read before the current buffer. The + /// total bytes read up to the current position can be computed as + /// totalBytesRetired + bufferPos. + /// + private int totalBytesRetired = 0; + + /// + /// The absolute position of the end of the current message. + /// + private int currentLimit = int.MaxValue; + + /// + /// + /// + private int recursionDepth = 0; + + private int recursionLimit = DefaultRecursionLimit; + + /// + /// + /// + private int sizeLimit = DefaultSizeLimit; + + #region Construction + + /// + /// Creates a new CodedInputStream reading data from the given + /// stream. + /// + public static CodedInputStream CreateInstance(Stream input) + { + return new CodedInputStream(input); + } + + /// + /// Creates a new CodedInputStream reading data from the given + /// byte array. + /// + public static CodedInputStream CreateInstance(byte[] buf) + { + return new CodedInputStream(buf, 0, buf.Length); + } + + /// + /// Creates a new CodedInputStream that reads from the given + /// byte array slice. + /// + public static CodedInputStream CreateInstance(byte[] buf, int offset, int length) + { + return new CodedInputStream(buf, offset, length); + } + + private CodedInputStream(byte[] buffer, int offset, int length) + { + this.buffer = buffer; + this.bufferPos = offset; + this.bufferSize = offset + length; + this.input = null; + } + + private CodedInputStream(Stream input) + { + this.buffer = new byte[BufferSize]; + this.bufferSize = 0; + this.input = input; + } + + #endregion + + void ICodedInputStream.ReadMessageStart() { } + void ICodedInputStream.ReadMessageEnd() { } + + #region Validation + + /// + /// Verifies that the last call to ReadTag() returned the given tag value. + /// This is used to verify that a nested group ended with the correct + /// end tag. + /// + /// The last + /// tag read was not the one specified + [CLSCompliant(false)] + public void CheckLastTagWas(uint value) + { + if (lastTag != value) + { + throw InvalidProtocolBufferException.InvalidEndTag(); + } + } + + #endregion + + #region Reading of tags etc + + /// + /// Attempt to peek at the next field tag. + /// + [CLSCompliant(false)] + public bool PeekNextTag(out uint fieldTag, out string fieldName) + { + if (hasNextTag) + { + fieldName = null; + fieldTag = nextTag; + return true; + } + + uint savedLast = lastTag; + hasNextTag = ReadTag(out nextTag, out fieldName); + lastTag = savedLast; + fieldTag = nextTag; + return hasNextTag; + } + + /// + /// Attempt to read a field tag, returning false if we have reached the end + /// of the input data. + /// + /// The 'tag' of the field (id * 8 + wire-format) + /// Not Supported - For protobuffer streams, this parameter is always null + /// true if the next fieldTag was read + [CLSCompliant(false)] + public bool ReadTag(out uint fieldTag, out string fieldName) + { + fieldName = null; + + if (hasNextTag) + { + fieldTag = nextTag; + lastTag = fieldTag; + hasNextTag = false; + return true; + } + + if (IsAtEnd) + { + fieldTag = 0; + lastTag = fieldTag; + return false; + } + + fieldTag = ReadRawVarint32(); + lastTag = fieldTag; + if (lastTag == 0) + { + // If we actually read zero, that's not a valid tag. + throw InvalidProtocolBufferException.InvalidTag(); + } + return true; + } + + /// + /// Read a double field from the stream. + /// + public bool ReadDouble(ref double value) + { +#if SILVERLIGHT || COMPACT_FRAMEWORK_35 + if (BitConverter.IsLittleEndian && 8 <= bufferSize - bufferPos) + { + value = BitConverter.ToDouble(buffer, bufferPos); + bufferPos += 8; + } + else + { + byte[] rawBytes = ReadRawBytes(8); + if (!BitConverter.IsLittleEndian) + ByteArray.Reverse(rawBytes); + value = BitConverter.ToDouble(rawBytes, 0); + } +#else + value = BitConverter.Int64BitsToDouble((long) ReadRawLittleEndian64()); +#endif + return true; + } + + /// + /// Read a float field from the stream. + /// + public bool ReadFloat(ref float value) + { + if (BitConverter.IsLittleEndian && 4 <= bufferSize - bufferPos) + { + value = BitConverter.ToSingle(buffer, bufferPos); + bufferPos += 4; + } + else + { + byte[] rawBytes = ReadRawBytes(4); + if (!BitConverter.IsLittleEndian) + { + ByteArray.Reverse(rawBytes); + } + value = BitConverter.ToSingle(rawBytes, 0); + } + return true; + } + + /// + /// Read a uint64 field from the stream. + /// + [CLSCompliant(false)] + public bool ReadUInt64(ref ulong value) + { + value = ReadRawVarint64(); + return true; + } + + /// + /// Read an int64 field from the stream. + /// + public bool ReadInt64(ref long value) + { + value = (long) ReadRawVarint64(); + return true; + } + + /// + /// Read an int32 field from the stream. + /// + public bool ReadInt32(ref int value) + { + value = (int) ReadRawVarint32(); + return true; + } + + /// + /// Read a fixed64 field from the stream. + /// + [CLSCompliant(false)] + public bool ReadFixed64(ref ulong value) + { + value = ReadRawLittleEndian64(); + return true; + } + + /// + /// Read a fixed32 field from the stream. + /// + [CLSCompliant(false)] + public bool ReadFixed32(ref uint value) + { + value = ReadRawLittleEndian32(); + return true; + } + + /// + /// Read a bool field from the stream. + /// + public bool ReadBool(ref bool value) + { + value = ReadRawVarint32() != 0; + return true; + } + + /// + /// Reads a string field from the stream. + /// + public bool ReadString(ref string value) + { + int size = (int) ReadRawVarint32(); + // No need to read any data for an empty string. + if (size == 0) + { + value = ""; + return true; + } + if (size <= bufferSize - bufferPos) + { + // Fast path: We already have the bytes in a contiguous buffer, so + // just copy directly from it. + String result = Encoding.UTF8.GetString(buffer, bufferPos, size); + bufferPos += size; + value = result; + return true; + } + // Slow path: Build a byte array first then copy it. + value = Encoding.UTF8.GetString(ReadRawBytes(size), 0, size); + return true; + } + + /// + /// Reads a group field value from the stream. + /// + public void ReadGroup(int fieldNumber, IBuilderLite builder, + ExtensionRegistry extensionRegistry) + { + if (recursionDepth >= recursionLimit) + { + throw InvalidProtocolBufferException.RecursionLimitExceeded(); + } + ++recursionDepth; + builder.WeakMergeFrom(this, extensionRegistry); + CheckLastTagWas(WireFormat.MakeTag(fieldNumber, WireFormat.WireType.EndGroup)); + --recursionDepth; + } + + /// + /// Reads a group field value from the stream and merges it into the given + /// UnknownFieldSet. + /// + [Obsolete] + public void ReadUnknownGroup(int fieldNumber, IBuilderLite builder) + { + if (recursionDepth >= recursionLimit) + { + throw InvalidProtocolBufferException.RecursionLimitExceeded(); + } + ++recursionDepth; + builder.WeakMergeFrom(this); + CheckLastTagWas(WireFormat.MakeTag(fieldNumber, WireFormat.WireType.EndGroup)); + --recursionDepth; + } + + /// + /// Reads an embedded message field value from the stream. + /// + public void ReadMessage(IBuilderLite builder, ExtensionRegistry extensionRegistry) + { + int length = (int) ReadRawVarint32(); + if (recursionDepth >= recursionLimit) + { + throw InvalidProtocolBufferException.RecursionLimitExceeded(); + } + int oldLimit = PushLimit(length); + ++recursionDepth; + builder.WeakMergeFrom(this, extensionRegistry); + CheckLastTagWas(0); + --recursionDepth; + PopLimit(oldLimit); + } + + /// + /// Reads a bytes field value from the stream. + /// + public bool ReadBytes(ref ByteString value) + { + int size = (int) ReadRawVarint32(); + if (size < bufferSize - bufferPos && size > 0) + { + // Fast path: We already have the bytes in a contiguous buffer, so + // just copy directly from it. + ByteString result = ByteString.CopyFrom(buffer, bufferPos, size); + bufferPos += size; + value = result; + return true; + } + else + { + // Slow path: Build a byte array and attach it to a new ByteString. + value = ByteString.AttachBytes(ReadRawBytes(size)); + return true; + } + } + + /// + /// Reads a uint32 field value from the stream. + /// + [CLSCompliant(false)] + public bool ReadUInt32(ref uint value) + { + value = ReadRawVarint32(); + return true; + } + + /// + /// Reads an enum field value from the stream. The caller is responsible + /// for converting the numeric value to an actual enum. + /// + public bool ReadEnum(ref IEnumLite value, out object unknown, IEnumLiteMap mapping) + { + int rawValue = (int) ReadRawVarint32(); + + value = mapping.FindValueByNumber(rawValue); + if (value != null) + { + unknown = null; + return true; + } + unknown = rawValue; + return false; + } + + /// + /// Reads an enum field value from the stream. If the enum is valid for type T, + /// then the ref value is set and it returns true. Otherwise the unkown output + /// value is set and this method returns false. + /// + [CLSCompliant(false)] + public bool ReadEnum(ref T value, out object unknown) + where T : struct, IComparable, IFormattable, IConvertible + { + int number = (int) ReadRawVarint32(); + if (Enum.IsDefined(typeof (T), number)) + { + unknown = null; + value = (T) (object) number; + return true; + } + unknown = number; + return false; + } + + /// + /// Reads an sfixed32 field value from the stream. + /// + public bool ReadSFixed32(ref int value) + { + value = (int) ReadRawLittleEndian32(); + return true; + } + + /// + /// Reads an sfixed64 field value from the stream. + /// + public bool ReadSFixed64(ref long value) + { + value = (long) ReadRawLittleEndian64(); + return true; + } + + /// + /// Reads an sint32 field value from the stream. + /// + public bool ReadSInt32(ref int value) + { + value = DecodeZigZag32(ReadRawVarint32()); + return true; + } + + /// + /// Reads an sint64 field value from the stream. + /// + public bool ReadSInt64(ref long value) + { + value = DecodeZigZag64(ReadRawVarint64()); + return true; + } + + private bool BeginArray(uint fieldTag, out bool isPacked, out int oldLimit) + { + isPacked = WireFormat.GetTagWireType(fieldTag) == WireFormat.WireType.LengthDelimited; + + if (isPacked) + { + int length = (int) (ReadRawVarint32() & int.MaxValue); + if (length > 0) + { + oldLimit = PushLimit(length); + return true; + } + oldLimit = -1; + return false; //packed but empty + } + + oldLimit = -1; + return true; + } + + /// + /// Returns true if the next tag is also part of the same unpacked array. + /// + private bool ContinueArray(uint currentTag) + { + string ignore; + uint next; + if (PeekNextTag(out next, out ignore)) + { + if (next == currentTag) + { + hasNextTag = false; + return true; + } + } + return false; + } + + /// + /// Returns true if the next tag is also part of the same array, which may or may not be packed. + /// + private bool ContinueArray(uint currentTag, bool packed, int oldLimit) + { + if (packed) + { + if (ReachedLimit) + { + PopLimit(oldLimit); + return false; + } + return true; + } + + string ignore; + uint next; + if (PeekNextTag(out next, out ignore)) + { + if (next == currentTag) + { + hasNextTag = false; + return true; + } + } + return false; + } + + [CLSCompliant(false)] + public void ReadPrimitiveArray(FieldType fieldType, uint fieldTag, string fieldName, ICollection list) + { + WireFormat.WireType normal = WireFormat.GetWireType(fieldType); + WireFormat.WireType wformat = WireFormat.GetTagWireType(fieldTag); + + // 2.3 allows packed form even if the field is not declared packed. + if (normal != wformat && wformat == WireFormat.WireType.LengthDelimited) + { + int length = (int) (ReadRawVarint32() & int.MaxValue); + int limit = PushLimit(length); + while (!ReachedLimit) + { + Object value = null; + if (ReadPrimitiveField(fieldType, ref value)) + { + list.Add(value); + } + } + PopLimit(limit); + } + else + { + Object value = null; + do + { + if (ReadPrimitiveField(fieldType, ref value)) + { + list.Add(value); + } + } while (ContinueArray(fieldTag)); + } + } + + [CLSCompliant(false)] + public void ReadStringArray(uint fieldTag, string fieldName, ICollection list) + { + string tmp = null; + do + { + ReadString(ref tmp); + list.Add(tmp); + } while (ContinueArray(fieldTag)); + } + + [CLSCompliant(false)] + public void ReadBytesArray(uint fieldTag, string fieldName, ICollection list) + { + ByteString tmp = null; + do + { + ReadBytes(ref tmp); + list.Add(tmp); + } while (ContinueArray(fieldTag)); + } + + [CLSCompliant(false)] + public void ReadBoolArray(uint fieldTag, string fieldName, ICollection list) + { + bool isPacked; + int holdLimit; + if (BeginArray(fieldTag, out isPacked, out holdLimit)) + { + bool tmp = false; + do + { + ReadBool(ref tmp); + list.Add(tmp); + } while (ContinueArray(fieldTag, isPacked, holdLimit)); + } + } + + [CLSCompliant(false)] + public void ReadInt32Array(uint fieldTag, string fieldName, ICollection list) + { + bool isPacked; + int holdLimit; + if (BeginArray(fieldTag, out isPacked, out holdLimit)) + { + int tmp = 0; + do + { + ReadInt32(ref tmp); + list.Add(tmp); + } while (ContinueArray(fieldTag, isPacked, holdLimit)); + } + } + + [CLSCompliant(false)] + public void ReadSInt32Array(uint fieldTag, string fieldName, ICollection list) + { + bool isPacked; + int holdLimit; + if (BeginArray(fieldTag, out isPacked, out holdLimit)) + { + int tmp = 0; + do + { + ReadSInt32(ref tmp); + list.Add(tmp); + } while (ContinueArray(fieldTag, isPacked, holdLimit)); + } + } + + [CLSCompliant(false)] + public void ReadUInt32Array(uint fieldTag, string fieldName, ICollection list) + { + bool isPacked; + int holdLimit; + if (BeginArray(fieldTag, out isPacked, out holdLimit)) + { + uint tmp = 0; + do + { + ReadUInt32(ref tmp); + list.Add(tmp); + } while (ContinueArray(fieldTag, isPacked, holdLimit)); + } + } + + [CLSCompliant(false)] + public void ReadFixed32Array(uint fieldTag, string fieldName, ICollection list) + { + bool isPacked; + int holdLimit; + if (BeginArray(fieldTag, out isPacked, out holdLimit)) + { + uint tmp = 0; + do + { + ReadFixed32(ref tmp); + list.Add(tmp); + } while (ContinueArray(fieldTag, isPacked, holdLimit)); + } + } + + [CLSCompliant(false)] + public void ReadSFixed32Array(uint fieldTag, string fieldName, ICollection list) + { + bool isPacked; + int holdLimit; + if (BeginArray(fieldTag, out isPacked, out holdLimit)) + { + int tmp = 0; + do + { + ReadSFixed32(ref tmp); + list.Add(tmp); + } while (ContinueArray(fieldTag, isPacked, holdLimit)); + } + } + + [CLSCompliant(false)] + public void ReadInt64Array(uint fieldTag, string fieldName, ICollection list) + { + bool isPacked; + int holdLimit; + if (BeginArray(fieldTag, out isPacked, out holdLimit)) + { + long tmp = 0; + do + { + ReadInt64(ref tmp); + list.Add(tmp); + } while (ContinueArray(fieldTag, isPacked, holdLimit)); + } + } + + [CLSCompliant(false)] + public void ReadSInt64Array(uint fieldTag, string fieldName, ICollection list) + { + bool isPacked; + int holdLimit; + if (BeginArray(fieldTag, out isPacked, out holdLimit)) + { + long tmp = 0; + do + { + ReadSInt64(ref tmp); + list.Add(tmp); + } while (ContinueArray(fieldTag, isPacked, holdLimit)); + } + } + + [CLSCompliant(false)] + public void ReadUInt64Array(uint fieldTag, string fieldName, ICollection list) + { + bool isPacked; + int holdLimit; + if (BeginArray(fieldTag, out isPacked, out holdLimit)) + { + ulong tmp = 0; + do + { + ReadUInt64(ref tmp); + list.Add(tmp); + } while (ContinueArray(fieldTag, isPacked, holdLimit)); + } + } + + [CLSCompliant(false)] + public void ReadFixed64Array(uint fieldTag, string fieldName, ICollection list) + { + bool isPacked; + int holdLimit; + if (BeginArray(fieldTag, out isPacked, out holdLimit)) + { + ulong tmp = 0; + do + { + ReadFixed64(ref tmp); + list.Add(tmp); + } while (ContinueArray(fieldTag, isPacked, holdLimit)); + } + } + + [CLSCompliant(false)] + public void ReadSFixed64Array(uint fieldTag, string fieldName, ICollection list) + { + bool isPacked; + int holdLimit; + if (BeginArray(fieldTag, out isPacked, out holdLimit)) + { + long tmp = 0; + do + { + ReadSFixed64(ref tmp); + list.Add(tmp); + } while (ContinueArray(fieldTag, isPacked, holdLimit)); + } + } + + [CLSCompliant(false)] + public void ReadDoubleArray(uint fieldTag, string fieldName, ICollection list) + { + bool isPacked; + int holdLimit; + if (BeginArray(fieldTag, out isPacked, out holdLimit)) + { + double tmp = 0; + do + { + ReadDouble(ref tmp); + list.Add(tmp); + } while (ContinueArray(fieldTag, isPacked, holdLimit)); + } + } + + [CLSCompliant(false)] + public void ReadFloatArray(uint fieldTag, string fieldName, ICollection list) + { + bool isPacked; + int holdLimit; + if (BeginArray(fieldTag, out isPacked, out holdLimit)) + { + float tmp = 0; + do + { + ReadFloat(ref tmp); + list.Add(tmp); + } while (ContinueArray(fieldTag, isPacked, holdLimit)); + } + } + + [CLSCompliant(false)] + public void ReadEnumArray(uint fieldTag, string fieldName, ICollection list, + out ICollection unknown, IEnumLiteMap mapping) + { + unknown = null; + object unkval; + IEnumLite value = null; + WireFormat.WireType wformat = WireFormat.GetTagWireType(fieldTag); + + // 2.3 allows packed form even if the field is not declared packed. + if (wformat == WireFormat.WireType.LengthDelimited) + { + int length = (int) (ReadRawVarint32() & int.MaxValue); + int limit = PushLimit(length); + while (!ReachedLimit) + { + if (ReadEnum(ref value, out unkval, mapping)) + { + list.Add(value); + } + else + { + if (unknown == null) + { + unknown = new List(); + } + unknown.Add(unkval); + } + } + PopLimit(limit); + } + else + { + do + { + if (ReadEnum(ref value, out unkval, mapping)) + { + list.Add(value); + } + else + { + if (unknown == null) + { + unknown = new List(); + } + unknown.Add(unkval); + } + } while (ContinueArray(fieldTag)); + } + } + + [CLSCompliant(false)] + public void ReadEnumArray(uint fieldTag, string fieldName, ICollection list, + out ICollection unknown) + where T : struct, IComparable, IFormattable, IConvertible + { + unknown = null; + object unkval; + T value = default(T); + WireFormat.WireType wformat = WireFormat.GetTagWireType(fieldTag); + + // 2.3 allows packed form even if the field is not declared packed. + if (wformat == WireFormat.WireType.LengthDelimited) + { + int length = (int) (ReadRawVarint32() & int.MaxValue); + int limit = PushLimit(length); + while (!ReachedLimit) + { + if (ReadEnum(ref value, out unkval)) + { + list.Add(value); + } + else + { + if (unknown == null) + { + unknown = new List(); + } + unknown.Add(unkval); + } + } + PopLimit(limit); + } + else + { + do + { + if (ReadEnum(ref value, out unkval)) + { + list.Add(value); + } + else + { + if (unknown == null) + { + unknown = new List(); + } + unknown.Add(unkval); + } + } while (ContinueArray(fieldTag)); + } + } + + [CLSCompliant(false)] + public void ReadMessageArray(uint fieldTag, string fieldName, ICollection list, T messageType, + ExtensionRegistry registry) where T : IMessageLite + { + do + { + IBuilderLite builder = messageType.WeakCreateBuilderForType(); + ReadMessage(builder, registry); + list.Add((T) builder.WeakBuildPartial()); + } while (ContinueArray(fieldTag)); + } + + [CLSCompliant(false)] + public void ReadGroupArray(uint fieldTag, string fieldName, ICollection list, T messageType, + ExtensionRegistry registry) where T : IMessageLite + { + do + { + IBuilderLite builder = messageType.WeakCreateBuilderForType(); + ReadGroup(WireFormat.GetTagFieldNumber(fieldTag), builder, registry); + list.Add((T) builder.WeakBuildPartial()); + } while (ContinueArray(fieldTag)); + } + + /// + /// Reads a field of any primitive type. Enums, groups and embedded + /// messages are not handled by this method. + /// + public bool ReadPrimitiveField(FieldType fieldType, ref object value) + { + switch (fieldType) + { + case FieldType.Double: + { + double tmp = 0; + if (ReadDouble(ref tmp)) + { + value = tmp; + return true; + } + return false; + } + case FieldType.Float: + { + float tmp = 0; + if (ReadFloat(ref tmp)) + { + value = tmp; + return true; + } + return false; + } + case FieldType.Int64: + { + long tmp = 0; + if (ReadInt64(ref tmp)) + { + value = tmp; + return true; + } + return false; + } + case FieldType.UInt64: + { + ulong tmp = 0; + if (ReadUInt64(ref tmp)) + { + value = tmp; + return true; + } + return false; + } + case FieldType.Int32: + { + int tmp = 0; + if (ReadInt32(ref tmp)) + { + value = tmp; + return true; + } + return false; + } + case FieldType.Fixed64: + { + ulong tmp = 0; + if (ReadFixed64(ref tmp)) + { + value = tmp; + return true; + } + return false; + } + case FieldType.Fixed32: + { + uint tmp = 0; + if (ReadFixed32(ref tmp)) + { + value = tmp; + return true; + } + return false; + } + case FieldType.Bool: + { + bool tmp = false; + if (ReadBool(ref tmp)) + { + value = tmp; + return true; + } + return false; + } + case FieldType.String: + { + string tmp = null; + if (ReadString(ref tmp)) + { + value = tmp; + return true; + } + return false; + } + case FieldType.Bytes: + { + ByteString tmp = null; + if (ReadBytes(ref tmp)) + { + value = tmp; + return true; + } + return false; + } + case FieldType.UInt32: + { + uint tmp = 0; + if (ReadUInt32(ref tmp)) + { + value = tmp; + return true; + } + return false; + } + case FieldType.SFixed32: + { + int tmp = 0; + if (ReadSFixed32(ref tmp)) + { + value = tmp; + return true; + } + return false; + } + case FieldType.SFixed64: + { + long tmp = 0; + if (ReadSFixed64(ref tmp)) + { + value = tmp; + return true; + } + return false; + } + case FieldType.SInt32: + { + int tmp = 0; + if (ReadSInt32(ref tmp)) + { + value = tmp; + return true; + } + return false; + } + case FieldType.SInt64: + { + long tmp = 0; + if (ReadSInt64(ref tmp)) + { + value = tmp; + return true; + } + return false; + } + case FieldType.Group: + throw new ArgumentException("ReadPrimitiveField() cannot handle nested groups."); + case FieldType.Message: + throw new ArgumentException("ReadPrimitiveField() cannot handle embedded messages."); + // We don't handle enums because we don't know what to do if the + // value is not recognized. + case FieldType.Enum: + throw new ArgumentException("ReadPrimitiveField() cannot handle enums."); + default: + throw new ArgumentOutOfRangeException("Invalid field type " + fieldType); + } + } + + #endregion + + #region Underlying reading primitives + + /// + /// Same code as ReadRawVarint32, but read each byte individually, checking for + /// buffer overflow. + /// + private uint SlowReadRawVarint32() + { + int tmp = ReadRawByte(); + if (tmp < 128) + { + return (uint) tmp; + } + int result = tmp & 0x7f; + if ((tmp = ReadRawByte()) < 128) + { + result |= tmp << 7; + } + else + { + result |= (tmp & 0x7f) << 7; + if ((tmp = ReadRawByte()) < 128) + { + result |= tmp << 14; + } + else + { + result |= (tmp & 0x7f) << 14; + if ((tmp = ReadRawByte()) < 128) + { + result |= tmp << 21; + } + else + { + result |= (tmp & 0x7f) << 21; + result |= (tmp = ReadRawByte()) << 28; + if (tmp >= 128) + { + // Discard upper 32 bits. + for (int i = 0; i < 5; i++) + { + if (ReadRawByte() < 128) + { + return (uint) result; + } + } + throw InvalidProtocolBufferException.MalformedVarint(); + } + } + } + } + return (uint) result; + } + + /// + /// Read a raw Varint from the stream. If larger than 32 bits, discard the upper bits. + /// This method is optimised for the case where we've got lots of data in the buffer. + /// That means we can check the size just once, then just read directly from the buffer + /// without constant rechecking of the buffer length. + /// + [CLSCompliant(false)] + public uint ReadRawVarint32() + { + if (bufferPos + 5 > bufferSize) + { + return SlowReadRawVarint32(); + } + + int tmp = buffer[bufferPos++]; + if (tmp < 128) + { + return (uint) tmp; + } + int result = tmp & 0x7f; + if ((tmp = buffer[bufferPos++]) < 128) + { + result |= tmp << 7; + } + else + { + result |= (tmp & 0x7f) << 7; + if ((tmp = buffer[bufferPos++]) < 128) + { + result |= tmp << 14; + } + else + { + result |= (tmp & 0x7f) << 14; + if ((tmp = buffer[bufferPos++]) < 128) + { + result |= tmp << 21; + } + else + { + result |= (tmp & 0x7f) << 21; + result |= (tmp = buffer[bufferPos++]) << 28; + if (tmp >= 128) + { + // Discard upper 32 bits. + // Note that this has to use ReadRawByte() as we only ensure we've + // got at least 5 bytes at the start of the method. This lets us + // use the fast path in more cases, and we rarely hit this section of code. + for (int i = 0; i < 5; i++) + { + if (ReadRawByte() < 128) + { + return (uint) result; + } + } + throw InvalidProtocolBufferException.MalformedVarint(); + } + } + } + } + return (uint) result; + } + + /// + /// Reads a varint from the input one byte at a time, so that it does not + /// read any bytes after the end of the varint. If you simply wrapped the + /// stream in a CodedInputStream and used ReadRawVarint32(Stream)} + /// then you would probably end up reading past the end of the varint since + /// CodedInputStream buffers its input. + /// + /// + /// + [CLSCompliant(false)] + public static uint ReadRawVarint32(Stream input) + { + int result = 0; + int offset = 0; + for (; offset < 32; offset += 7) + { + int b = input.ReadByte(); + if (b == -1) + { + throw InvalidProtocolBufferException.TruncatedMessage(); + } + result |= (b & 0x7f) << offset; + if ((b & 0x80) == 0) + { + return (uint) result; + } + } + // Keep reading up to 64 bits. + for (; offset < 64; offset += 7) + { + int b = input.ReadByte(); + if (b == -1) + { + throw InvalidProtocolBufferException.TruncatedMessage(); + } + if ((b & 0x80) == 0) + { + return (uint) result; + } + } + throw InvalidProtocolBufferException.MalformedVarint(); + } + + /// + /// Read a raw varint from the stream. + /// + [CLSCompliant(false)] + public ulong ReadRawVarint64() + { + int shift = 0; + ulong result = 0; + while (shift < 64) + { + byte b = ReadRawByte(); + result |= (ulong) (b & 0x7F) << shift; + if ((b & 0x80) == 0) + { + return result; + } + shift += 7; + } + throw InvalidProtocolBufferException.MalformedVarint(); + } + + /// + /// Read a 32-bit little-endian integer from the stream. + /// + [CLSCompliant(false)] + public uint ReadRawLittleEndian32() + { + uint b1 = ReadRawByte(); + uint b2 = ReadRawByte(); + uint b3 = ReadRawByte(); + uint b4 = ReadRawByte(); + return b1 | (b2 << 8) | (b3 << 16) | (b4 << 24); + } + + /// + /// Read a 64-bit little-endian integer from the stream. + /// + [CLSCompliant(false)] + public ulong ReadRawLittleEndian64() + { + ulong b1 = ReadRawByte(); + ulong b2 = ReadRawByte(); + ulong b3 = ReadRawByte(); + ulong b4 = ReadRawByte(); + ulong b5 = ReadRawByte(); + ulong b6 = ReadRawByte(); + ulong b7 = ReadRawByte(); + ulong b8 = ReadRawByte(); + return b1 | (b2 << 8) | (b3 << 16) | (b4 << 24) + | (b5 << 32) | (b6 << 40) | (b7 << 48) | (b8 << 56); + } + + #endregion + + /// + /// Decode a 32-bit value with ZigZag encoding. + /// + /// + /// ZigZag encodes signed integers into values that can be efficiently + /// encoded with varint. (Otherwise, negative values must be + /// sign-extended to 64 bits to be varint encoded, thus always taking + /// 10 bytes on the wire.) + /// + [CLSCompliant(false)] + public static int DecodeZigZag32(uint n) + { + return (int) (n >> 1) ^ -(int) (n & 1); + } + + /// + /// Decode a 32-bit value with ZigZag encoding. + /// + /// + /// ZigZag encodes signed integers into values that can be efficiently + /// encoded with varint. (Otherwise, negative values must be + /// sign-extended to 64 bits to be varint encoded, thus always taking + /// 10 bytes on the wire.) + /// + [CLSCompliant(false)] + public static long DecodeZigZag64(ulong n) + { + return (long) (n >> 1) ^ -(long) (n & 1); + } + + /// + /// Set the maximum message recursion depth. + /// + /// + /// In order to prevent malicious + /// messages from causing stack overflows, CodedInputStream limits + /// how deeply messages may be nested. The default limit is 64. + /// + public int SetRecursionLimit(int limit) + { + if (limit < 0) + { + throw new ArgumentOutOfRangeException("Recursion limit cannot be negative: " + limit); + } + int oldLimit = recursionLimit; + recursionLimit = limit; + return oldLimit; + } + + /// + /// Set the maximum message size. + /// + /// + /// In order to prevent malicious messages from exhausting memory or + /// causing integer overflows, CodedInputStream limits how large a message may be. + /// The default limit is 64MB. You should set this limit as small + /// as you can without harming your app's functionality. Note that + /// size limits only apply when reading from an InputStream, not + /// when constructed around a raw byte array (nor with ByteString.NewCodedInput). + /// If you want to read several messages from a single CodedInputStream, you + /// can call ResetSizeCounter() after each message to avoid hitting the + /// size limit. + /// + public int SetSizeLimit(int limit) + { + if (limit < 0) + { + throw new ArgumentOutOfRangeException("Size limit cannot be negative: " + limit); + } + int oldLimit = sizeLimit; + sizeLimit = limit; + return oldLimit; + } + + #region Internal reading and buffer management + + /// + /// Resets the current size counter to zero (see SetSizeLimit). + /// + public void ResetSizeCounter() + { + totalBytesRetired = 0; + } + + /// + /// Sets currentLimit to (current position) + byteLimit. This is called + /// when descending into a length-delimited embedded message. The previous + /// limit is returned. + /// + /// The old limit. + public int PushLimit(int byteLimit) + { + if (byteLimit < 0) + { + throw InvalidProtocolBufferException.NegativeSize(); + } + byteLimit += totalBytesRetired + bufferPos; + int oldLimit = currentLimit; + if (byteLimit > oldLimit) + { + throw InvalidProtocolBufferException.TruncatedMessage(); + } + currentLimit = byteLimit; + + RecomputeBufferSizeAfterLimit(); + + return oldLimit; + } + + private void RecomputeBufferSizeAfterLimit() + { + bufferSize += bufferSizeAfterLimit; + int bufferEnd = totalBytesRetired + bufferSize; + if (bufferEnd > currentLimit) + { + // Limit is in current buffer. + bufferSizeAfterLimit = bufferEnd - currentLimit; + bufferSize -= bufferSizeAfterLimit; + } + else + { + bufferSizeAfterLimit = 0; + } + } + + /// + /// Discards the current limit, returning the previous limit. + /// + public void PopLimit(int oldLimit) + { + currentLimit = oldLimit; + RecomputeBufferSizeAfterLimit(); + } + + /// + /// Returns whether or not all the data before the limit has been read. + /// + /// + public bool ReachedLimit + { + get + { + if (currentLimit == int.MaxValue) + { + return false; + } + int currentAbsolutePosition = totalBytesRetired + bufferPos; + return currentAbsolutePosition >= currentLimit; + } + } + + /// + /// Returns true if the stream has reached the end of the input. This is the + /// case if either the end of the underlying input source has been reached or + /// the stream has reached a limit created using PushLimit. + /// + public bool IsAtEnd + { + get { return bufferPos == bufferSize && !RefillBuffer(false); } + } + + /// + /// Called when buffer is empty to read more bytes from the + /// input. If is true, RefillBuffer() gurantees that + /// either there will be at least one byte in the buffer when it returns + /// or it will throw an exception. If is false, + /// RefillBuffer() returns false if no more bytes were available. + /// + /// + /// + private bool RefillBuffer(bool mustSucceed) + { + if (bufferPos < bufferSize) + { + throw new InvalidOperationException("RefillBuffer() called when buffer wasn't empty."); + } + + if (totalBytesRetired + bufferSize == currentLimit) + { + // Oops, we hit a limit. + if (mustSucceed) + { + throw InvalidProtocolBufferException.TruncatedMessage(); + } + else + { + return false; + } + } + + totalBytesRetired += bufferSize; + + bufferPos = 0; + bufferSize = (input == null) ? 0 : input.Read(buffer, 0, buffer.Length); + if (bufferSize < 0) + { + throw new InvalidOperationException("Stream.Read returned a negative count"); + } + if (bufferSize == 0) + { + if (mustSucceed) + { + throw InvalidProtocolBufferException.TruncatedMessage(); + } + else + { + return false; + } + } + else + { + RecomputeBufferSizeAfterLimit(); + int totalBytesRead = + totalBytesRetired + bufferSize + bufferSizeAfterLimit; + if (totalBytesRead > sizeLimit || totalBytesRead < 0) + { + throw InvalidProtocolBufferException.SizeLimitExceeded(); + } + return true; + } + } + + /// + /// Read one byte from the input. + /// + /// + /// the end of the stream or the current limit was reached + /// + public byte ReadRawByte() + { + if (bufferPos == bufferSize) + { + RefillBuffer(true); + } + return buffer[bufferPos++]; + } + + /// + /// Read a fixed size of bytes from the input. + /// + /// + /// the end of the stream or the current limit was reached + /// + public byte[] ReadRawBytes(int size) + { + if (size < 0) + { + throw InvalidProtocolBufferException.NegativeSize(); + } + + if (totalBytesRetired + bufferPos + size > currentLimit) + { + // Read to the end of the stream anyway. + SkipRawBytes(currentLimit - totalBytesRetired - bufferPos); + // Then fail. + throw InvalidProtocolBufferException.TruncatedMessage(); + } + + if (size <= bufferSize - bufferPos) + { + // We have all the bytes we need already. + byte[] bytes = new byte[size]; + ByteArray.Copy(buffer, bufferPos, bytes, 0, size); + bufferPos += size; + return bytes; + } + else if (size < BufferSize) + { + // Reading more bytes than are in the buffer, but not an excessive number + // of bytes. We can safely allocate the resulting array ahead of time. + + // First copy what we have. + byte[] bytes = new byte[size]; + int pos = bufferSize - bufferPos; + ByteArray.Copy(buffer, bufferPos, bytes, 0, pos); + bufferPos = bufferSize; + + // We want to use RefillBuffer() and then copy from the buffer into our + // byte array rather than reading directly into our byte array because + // the input may be unbuffered. + RefillBuffer(true); + + while (size - pos > bufferSize) + { + Buffer.BlockCopy(buffer, 0, bytes, pos, bufferSize); + pos += bufferSize; + bufferPos = bufferSize; + RefillBuffer(true); + } + + ByteArray.Copy(buffer, 0, bytes, pos, size - pos); + bufferPos = size - pos; + + return bytes; + } + else + { + // The size is very large. For security reasons, we can't allocate the + // entire byte array yet. The size comes directly from the input, so a + // maliciously-crafted message could provide a bogus very large size in + // order to trick the app into allocating a lot of memory. We avoid this + // by allocating and reading only a small chunk at a time, so that the + // malicious message must actually *be* extremely large to cause + // problems. Meanwhile, we limit the allowed size of a message elsewhere. + + // Remember the buffer markers since we'll have to copy the bytes out of + // it later. + int originalBufferPos = bufferPos; + int originalBufferSize = bufferSize; + + // Mark the current buffer consumed. + totalBytesRetired += bufferSize; + bufferPos = 0; + bufferSize = 0; + + // Read all the rest of the bytes we need. + int sizeLeft = size - (originalBufferSize - originalBufferPos); + List chunks = new List(); + + while (sizeLeft > 0) + { + byte[] chunk = new byte[Math.Min(sizeLeft, BufferSize)]; + int pos = 0; + while (pos < chunk.Length) + { + int n = (input == null) ? -1 : input.Read(chunk, pos, chunk.Length - pos); + if (n <= 0) + { + throw InvalidProtocolBufferException.TruncatedMessage(); + } + totalBytesRetired += n; + pos += n; + } + sizeLeft -= chunk.Length; + chunks.Add(chunk); + } + + // OK, got everything. Now concatenate it all into one buffer. + byte[] bytes = new byte[size]; + + // Start by copying the leftover bytes from this.buffer. + int newPos = originalBufferSize - originalBufferPos; + ByteArray.Copy(buffer, originalBufferPos, bytes, 0, newPos); + + // And now all the chunks. + foreach (byte[] chunk in chunks) + { + Buffer.BlockCopy(chunk, 0, bytes, newPos, chunk.Length); + newPos += chunk.Length; + } + + // Done. + return bytes; + } + } + + /// + /// Reads and discards a single field, given its tag value. + /// + /// false if the tag is an end-group tag, in which case + /// nothing is skipped. Otherwise, returns true. + [CLSCompliant(false)] + public bool SkipField() + { + uint tag = lastTag; + switch (WireFormat.GetTagWireType(tag)) + { + case WireFormat.WireType.Varint: + ReadRawVarint64(); + return true; + case WireFormat.WireType.Fixed64: + ReadRawLittleEndian64(); + return true; + case WireFormat.WireType.LengthDelimited: + SkipRawBytes((int) ReadRawVarint32()); + return true; + case WireFormat.WireType.StartGroup: + SkipMessage(); + CheckLastTagWas( + WireFormat.MakeTag(WireFormat.GetTagFieldNumber(tag), + WireFormat.WireType.EndGroup)); + return true; + case WireFormat.WireType.EndGroup: + return false; + case WireFormat.WireType.Fixed32: + ReadRawLittleEndian32(); + return true; + default: + throw InvalidProtocolBufferException.InvalidWireType(); + } + } + + /// + /// Reads and discards an entire message. This will read either until EOF + /// or until an endgroup tag, whichever comes first. + /// + public void SkipMessage() + { + uint tag; + string name; + while (ReadTag(out tag, out name)) + { + if (!SkipField()) + { + return; + } + } + } + + /// + /// Reads and discards bytes. + /// + /// the end of the stream + /// or the current limit was reached + public void SkipRawBytes(int size) + { + if (size < 0) + { + throw InvalidProtocolBufferException.NegativeSize(); + } + + if (totalBytesRetired + bufferPos + size > currentLimit) + { + // Read to the end of the stream anyway. + SkipRawBytes(currentLimit - totalBytesRetired - bufferPos); + // Then fail. + throw InvalidProtocolBufferException.TruncatedMessage(); + } + + if (size <= bufferSize - bufferPos) + { + // We have all the bytes we need already. + bufferPos += size; + } + else + { + // Skipping more bytes than are in the buffer. First skip what we have. + int pos = bufferSize - bufferPos; + totalBytesRetired += pos; + bufferPos = 0; + bufferSize = 0; + + // Then skip directly from the InputStream for the rest. + if (pos < size) + { + if (input == null) + { + throw InvalidProtocolBufferException.TruncatedMessage(); + } + SkipImpl(size - pos); + totalBytesRetired += size - pos; + } + } + } + + /// + /// Abstraction of skipping to cope with streams which can't really skip. + /// + private void SkipImpl(int amountToSkip) + { + if (input.CanSeek) + { + long previousPosition = input.Position; + input.Position += amountToSkip; + if (input.Position != previousPosition + amountToSkip) + { + throw InvalidProtocolBufferException.TruncatedMessage(); + } + } + else + { + byte[] skipBuffer = new byte[1024]; + while (amountToSkip > 0) + { + int bytesRead = input.Read(skipBuffer, 0, skipBuffer.Length); + if (bytesRead <= 0) + { + throw InvalidProtocolBufferException.TruncatedMessage(); + } + amountToSkip -= bytesRead; + } + } + } + + #endregion + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/CodedOutputStream.ComputeSize.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/CodedOutputStream.ComputeSize.cs new file mode 100644 index 0000000000..7b341ff44d --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/CodedOutputStream.ComputeSize.cs @@ -0,0 +1,653 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Globalization; +using System.Text; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + // This part of CodedOutputStream provides all the static entry points that are used + // by generated code and internally to compute the size of messages prior to being + // written to an instance of CodedOutputStream. + public sealed partial class CodedOutputStream + { + private const int LittleEndian64Size = 8; + private const int LittleEndian32Size = 4; + + /// + /// Compute the number of bytes that would be needed to encode a + /// double field, including the tag. + /// + public static int ComputeDoubleSize(int fieldNumber, double value) + { + return ComputeTagSize(fieldNumber) + LittleEndian64Size; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// float field, including the tag. + /// + public static int ComputeFloatSize(int fieldNumber, float value) + { + return ComputeTagSize(fieldNumber) + LittleEndian32Size; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// uint64 field, including the tag. + /// + [CLSCompliant(false)] + public static int ComputeUInt64Size(int fieldNumber, ulong value) + { + return ComputeTagSize(fieldNumber) + ComputeRawVarint64Size(value); + } + + /// + /// Compute the number of bytes that would be needed to encode an + /// int64 field, including the tag. + /// + public static int ComputeInt64Size(int fieldNumber, long value) + { + return ComputeTagSize(fieldNumber) + ComputeRawVarint64Size((ulong) value); + } + + /// + /// Compute the number of bytes that would be needed to encode an + /// int32 field, including the tag. + /// + public static int ComputeInt32Size(int fieldNumber, int value) + { + if (value >= 0) + { + return ComputeTagSize(fieldNumber) + ComputeRawVarint32Size((uint) value); + } + else + { + // Must sign-extend. + return ComputeTagSize(fieldNumber) + 10; + } + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// fixed64 field, including the tag. + /// + [CLSCompliant(false)] + public static int ComputeFixed64Size(int fieldNumber, ulong value) + { + return ComputeTagSize(fieldNumber) + LittleEndian64Size; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// fixed32 field, including the tag. + /// + [CLSCompliant(false)] + public static int ComputeFixed32Size(int fieldNumber, uint value) + { + return ComputeTagSize(fieldNumber) + LittleEndian32Size; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// bool field, including the tag. + /// + public static int ComputeBoolSize(int fieldNumber, bool value) + { + return ComputeTagSize(fieldNumber) + 1; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// string field, including the tag. + /// + public static int ComputeStringSize(int fieldNumber, String value) + { + int byteArraySize = Encoding.UTF8.GetByteCount(value); + return ComputeTagSize(fieldNumber) + + ComputeRawVarint32Size((uint) byteArraySize) + + byteArraySize; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// group field, including the tag. + /// + public static int ComputeGroupSize(int fieldNumber, IMessageLite value) + { + return ComputeTagSize(fieldNumber)*2 + value.SerializedSize; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// group field represented by an UnknownFieldSet, including the tag. + /// + [Obsolete] + public static int ComputeUnknownGroupSize(int fieldNumber, + IMessageLite value) + { + return ComputeTagSize(fieldNumber)*2 + value.SerializedSize; + } + + /// + /// Compute the number of bytes that would be needed to encode an + /// embedded message field, including the tag. + /// + public static int ComputeMessageSize(int fieldNumber, IMessageLite value) + { + int size = value.SerializedSize; + return ComputeTagSize(fieldNumber) + ComputeRawVarint32Size((uint) size) + size; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// bytes field, including the tag. + /// + public static int ComputeBytesSize(int fieldNumber, ByteString value) + { + return ComputeTagSize(fieldNumber) + + ComputeRawVarint32Size((uint) value.Length) + + value.Length; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// uint32 field, including the tag. + /// + [CLSCompliant(false)] + public static int ComputeUInt32Size(int fieldNumber, uint value) + { + return ComputeTagSize(fieldNumber) + ComputeRawVarint32Size(value); + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// enum field, including the tag. The caller is responsible for + /// converting the enum value to its numeric value. + /// + public static int ComputeEnumSize(int fieldNumber, int value) + { + return ComputeTagSize(fieldNumber) + ComputeEnumSizeNoTag(value); + } + + /// + /// Compute the number of bytes that would be needed to encode an + /// sfixed32 field, including the tag. + /// + public static int ComputeSFixed32Size(int fieldNumber, int value) + { + return ComputeTagSize(fieldNumber) + LittleEndian32Size; + } + + /// + /// Compute the number of bytes that would be needed to encode an + /// sfixed64 field, including the tag. + /// + public static int ComputeSFixed64Size(int fieldNumber, long value) + { + return ComputeTagSize(fieldNumber) + LittleEndian64Size; + } + + /// + /// Compute the number of bytes that would be needed to encode an + /// sint32 field, including the tag. + /// + public static int ComputeSInt32Size(int fieldNumber, int value) + { + return ComputeTagSize(fieldNumber) + ComputeRawVarint32Size(EncodeZigZag32(value)); + } + + /// + /// Compute the number of bytes that would be needed to encode an + /// sint64 field, including the tag. + /// + public static int ComputeSInt64Size(int fieldNumber, long value) + { + return ComputeTagSize(fieldNumber) + ComputeRawVarint64Size(EncodeZigZag64(value)); + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// double field, including the tag. + /// + public static int ComputeDoubleSizeNoTag(double value) + { + return LittleEndian64Size; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// float field, including the tag. + /// + public static int ComputeFloatSizeNoTag(float value) + { + return LittleEndian32Size; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// uint64 field, including the tag. + /// + [CLSCompliant(false)] + public static int ComputeUInt64SizeNoTag(ulong value) + { + return ComputeRawVarint64Size(value); + } + + /// + /// Compute the number of bytes that would be needed to encode an + /// int64 field, including the tag. + /// + public static int ComputeInt64SizeNoTag(long value) + { + return ComputeRawVarint64Size((ulong) value); + } + + /// + /// Compute the number of bytes that would be needed to encode an + /// int32 field, including the tag. + /// + public static int ComputeInt32SizeNoTag(int value) + { + if (value >= 0) + { + return ComputeRawVarint32Size((uint) value); + } + else + { + // Must sign-extend. + return 10; + } + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// fixed64 field, including the tag. + /// + [CLSCompliant(false)] + public static int ComputeFixed64SizeNoTag(ulong value) + { + return LittleEndian64Size; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// fixed32 field, including the tag. + /// + [CLSCompliant(false)] + public static int ComputeFixed32SizeNoTag(uint value) + { + return LittleEndian32Size; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// bool field, including the tag. + /// + public static int ComputeBoolSizeNoTag(bool value) + { + return 1; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// string field, including the tag. + /// + public static int ComputeStringSizeNoTag(String value) + { + int byteArraySize = Encoding.UTF8.GetByteCount(value); + return ComputeRawVarint32Size((uint) byteArraySize) + + byteArraySize; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// group field, including the tag. + /// + public static int ComputeGroupSizeNoTag(IMessageLite value) + { + return value.SerializedSize; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// group field represented by an UnknownFieldSet, including the tag. + /// + [Obsolete] + public static int ComputeUnknownGroupSizeNoTag(IMessageLite value) + { + return value.SerializedSize; + } + + /// + /// Compute the number of bytes that would be needed to encode an + /// embedded message field, including the tag. + /// + public static int ComputeMessageSizeNoTag(IMessageLite value) + { + int size = value.SerializedSize; + return ComputeRawVarint32Size((uint) size) + size; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// bytes field, including the tag. + /// + public static int ComputeBytesSizeNoTag(ByteString value) + { + return ComputeRawVarint32Size((uint) value.Length) + + value.Length; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// uint32 field, including the tag. + /// + [CLSCompliant(false)] + public static int ComputeUInt32SizeNoTag(uint value) + { + return ComputeRawVarint32Size(value); + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// enum field, including the tag. The caller is responsible for + /// converting the enum value to its numeric value. + /// + public static int ComputeEnumSizeNoTag(int value) + { + return ComputeInt32SizeNoTag(value); + } + + /// + /// Compute the number of bytes that would be needed to encode an + /// sfixed32 field, including the tag. + /// + public static int ComputeSFixed32SizeNoTag(int value) + { + return LittleEndian32Size; + } + + /// + /// Compute the number of bytes that would be needed to encode an + /// sfixed64 field, including the tag. + /// + public static int ComputeSFixed64SizeNoTag(long value) + { + return LittleEndian64Size; + } + + /// + /// Compute the number of bytes that would be needed to encode an + /// sint32 field, including the tag. + /// + public static int ComputeSInt32SizeNoTag(int value) + { + return ComputeRawVarint32Size(EncodeZigZag32(value)); + } + + /// + /// Compute the number of bytes that would be needed to encode an + /// sint64 field, including the tag. + /// + public static int ComputeSInt64SizeNoTag(long value) + { + return ComputeRawVarint64Size(EncodeZigZag64(value)); + } + + /* + * Compute the number of bytes that would be needed to encode a + * MessageSet extension to the stream. For historical reasons, + * the wire format differs from normal fields. + */ + + /// + /// Compute the number of bytes that would be needed to encode a + /// MessageSet extension to the stream. For historical reasons, + /// the wire format differs from normal fields. + /// + public static int ComputeMessageSetExtensionSize(int fieldNumber, IMessageLite value) + { + return ComputeTagSize(WireFormat.MessageSetField.Item)*2 + + ComputeUInt32Size(WireFormat.MessageSetField.TypeID, (uint) fieldNumber) + + ComputeMessageSize(WireFormat.MessageSetField.Message, value); + } + + /// + /// Compute the number of bytes that would be needed to encode an + /// unparsed MessageSet extension field to the stream. For + /// historical reasons, the wire format differs from normal fields. + /// + public static int ComputeRawMessageSetExtensionSize(int fieldNumber, ByteString value) + { + return ComputeTagSize(WireFormat.MessageSetField.Item)*2 + + ComputeUInt32Size(WireFormat.MessageSetField.TypeID, (uint) fieldNumber) + + ComputeBytesSize(WireFormat.MessageSetField.Message, value); + } + + /// + /// Compute the number of bytes that would be needed to encode a varint. + /// + [CLSCompliant(false)] + public static int ComputeRawVarint32Size(uint value) + { + if ((value & (0xffffffff << 7)) == 0) + { + return 1; + } + if ((value & (0xffffffff << 14)) == 0) + { + return 2; + } + if ((value & (0xffffffff << 21)) == 0) + { + return 3; + } + if ((value & (0xffffffff << 28)) == 0) + { + return 4; + } + return 5; + } + + /// + /// Compute the number of bytes that would be needed to encode a varint. + /// + [CLSCompliant(false)] + public static int ComputeRawVarint64Size(ulong value) + { + if ((value & (0xffffffffffffffffL << 7)) == 0) + { + return 1; + } + if ((value & (0xffffffffffffffffL << 14)) == 0) + { + return 2; + } + if ((value & (0xffffffffffffffffL << 21)) == 0) + { + return 3; + } + if ((value & (0xffffffffffffffffL << 28)) == 0) + { + return 4; + } + if ((value & (0xffffffffffffffffL << 35)) == 0) + { + return 5; + } + if ((value & (0xffffffffffffffffL << 42)) == 0) + { + return 6; + } + if ((value & (0xffffffffffffffffL << 49)) == 0) + { + return 7; + } + if ((value & (0xffffffffffffffffL << 56)) == 0) + { + return 8; + } + if ((value & (0xffffffffffffffffL << 63)) == 0) + { + return 9; + } + return 10; + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// field of arbitrary type, including the tag, to the stream. + /// + public static int ComputeFieldSize(FieldType fieldType, int fieldNumber, Object value) + { + switch (fieldType) + { + case FieldType.Double: + return ComputeDoubleSize(fieldNumber, (double) value); + case FieldType.Float: + return ComputeFloatSize(fieldNumber, (float) value); + case FieldType.Int64: + return ComputeInt64Size(fieldNumber, (long) value); + case FieldType.UInt64: + return ComputeUInt64Size(fieldNumber, (ulong) value); + case FieldType.Int32: + return ComputeInt32Size(fieldNumber, (int) value); + case FieldType.Fixed64: + return ComputeFixed64Size(fieldNumber, (ulong) value); + case FieldType.Fixed32: + return ComputeFixed32Size(fieldNumber, (uint) value); + case FieldType.Bool: + return ComputeBoolSize(fieldNumber, (bool) value); + case FieldType.String: + return ComputeStringSize(fieldNumber, (string) value); + case FieldType.Group: + return ComputeGroupSize(fieldNumber, (IMessageLite) value); + case FieldType.Message: + return ComputeMessageSize(fieldNumber, (IMessageLite) value); + case FieldType.Bytes: + return ComputeBytesSize(fieldNumber, (ByteString) value); + case FieldType.UInt32: + return ComputeUInt32Size(fieldNumber, (uint) value); + case FieldType.SFixed32: + return ComputeSFixed32Size(fieldNumber, (int) value); + case FieldType.SFixed64: + return ComputeSFixed64Size(fieldNumber, (long) value); + case FieldType.SInt32: + return ComputeSInt32Size(fieldNumber, (int) value); + case FieldType.SInt64: + return ComputeSInt64Size(fieldNumber, (long) value); + case FieldType.Enum: + if (value is Enum) + { + return ComputeEnumSize(fieldNumber, ((IConvertible) value).ToInt32(CultureInfo.InvariantCulture)); + } + else + { + return ComputeEnumSize(fieldNumber, ((IEnumLite) value).Number); + } + default: + throw new ArgumentOutOfRangeException("Invalid field type " + fieldType); + } + } + + /// + /// Compute the number of bytes that would be needed to encode a + /// field of arbitrary type, excluding the tag, to the stream. + /// + public static int ComputeFieldSizeNoTag(FieldType fieldType, Object value) + { + switch (fieldType) + { + case FieldType.Double: + return ComputeDoubleSizeNoTag((double) value); + case FieldType.Float: + return ComputeFloatSizeNoTag((float) value); + case FieldType.Int64: + return ComputeInt64SizeNoTag((long) value); + case FieldType.UInt64: + return ComputeUInt64SizeNoTag((ulong) value); + case FieldType.Int32: + return ComputeInt32SizeNoTag((int) value); + case FieldType.Fixed64: + return ComputeFixed64SizeNoTag((ulong) value); + case FieldType.Fixed32: + return ComputeFixed32SizeNoTag((uint) value); + case FieldType.Bool: + return ComputeBoolSizeNoTag((bool) value); + case FieldType.String: + return ComputeStringSizeNoTag((string) value); + case FieldType.Group: + return ComputeGroupSizeNoTag((IMessageLite) value); + case FieldType.Message: + return ComputeMessageSizeNoTag((IMessageLite) value); + case FieldType.Bytes: + return ComputeBytesSizeNoTag((ByteString) value); + case FieldType.UInt32: + return ComputeUInt32SizeNoTag((uint) value); + case FieldType.SFixed32: + return ComputeSFixed32SizeNoTag((int) value); + case FieldType.SFixed64: + return ComputeSFixed64SizeNoTag((long) value); + case FieldType.SInt32: + return ComputeSInt32SizeNoTag((int) value); + case FieldType.SInt64: + return ComputeSInt64SizeNoTag((long) value); + case FieldType.Enum: + if (value is Enum) + { + return ComputeEnumSizeNoTag(((IConvertible) value).ToInt32(CultureInfo.InvariantCulture)); + } + else + { + return ComputeEnumSizeNoTag(((IEnumLite) value).Number); + } + default: + throw new ArgumentOutOfRangeException("Invalid field type " + fieldType); + } + } + + /// + /// Compute the number of bytes that would be needed to encode a tag. + /// + public static int ComputeTagSize(int fieldNumber) + { + return ComputeRawVarint32Size(WireFormat.MakeTag(fieldNumber, 0)); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/CodedOutputStream.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/CodedOutputStream.cs new file mode 100644 index 0000000000..96652a1186 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/CodedOutputStream.cs @@ -0,0 +1,1346 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text; +using Google.ProtocolBuffers.Collections; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + /// + /// Encodes and writes protocol message fields. + /// + /// + /// This class contains two kinds of methods: methods that write specific + /// protocol message constructs and field types (e.g. WriteTag and + /// WriteInt32) and methods that write low-level values (e.g. + /// WriteRawVarint32 and WriteRawBytes). If you are writing encoded protocol + /// messages, you should use the former methods, but if you are writing some + /// other format of your own design, use the latter. The names of the former + /// methods are taken from the protocol buffer type names, not .NET types. + /// (Hence WriteFloat instead of WriteSingle, and WriteBool instead of WriteBoolean.) + /// + public sealed partial class CodedOutputStream : ICodedOutputStream + { + /// + /// The buffer size used by CreateInstance(Stream). + /// + public static readonly int DefaultBufferSize = 4096; + + private readonly byte[] buffer; + private readonly int limit; + private int position; + private readonly Stream output; + + #region Construction + + private CodedOutputStream(byte[] buffer, int offset, int length) + { + this.output = null; + this.buffer = buffer; + this.position = offset; + this.limit = offset + length; + } + + private CodedOutputStream(Stream output, byte[] buffer) + { + this.output = output; + this.buffer = buffer; + this.position = 0; + this.limit = buffer.Length; + } + + /// + /// Creates a new CodedOutputStream which write to the given stream. + /// + public static CodedOutputStream CreateInstance(Stream output) + { + return CreateInstance(output, DefaultBufferSize); + } + + /// + /// Creates a new CodedOutputStream which write to the given stream and uses + /// the specified buffer size. + /// + public static CodedOutputStream CreateInstance(Stream output, int bufferSize) + { + return new CodedOutputStream(output, new byte[bufferSize]); + } + + /// + /// Creates a new CodedOutputStream that writes directly to the given + /// byte array. If more bytes are written than fit in the array, + /// OutOfSpaceException will be thrown. + /// + public static CodedOutputStream CreateInstance(byte[] flatArray) + { + return CreateInstance(flatArray, 0, flatArray.Length); + } + + /// + /// Creates a new CodedOutputStream that writes directly to the given + /// byte array slice. If more bytes are written than fit in the array, + /// OutOfSpaceException will be thrown. + /// + public static CodedOutputStream CreateInstance(byte[] flatArray, int offset, int length) + { + return new CodedOutputStream(flatArray, offset, length); + } + + #endregion + + void ICodedOutputStream.WriteMessageStart() { } + void ICodedOutputStream.WriteMessageEnd() { Flush(); } + + #region Writing of unknown fields + + [Obsolete] + public void WriteUnknownGroup(int fieldNumber, IMessageLite value) + { + WriteTag(fieldNumber, WireFormat.WireType.StartGroup); + value.WriteTo(this); + WriteTag(fieldNumber, WireFormat.WireType.EndGroup); + } + + public void WriteUnknownBytes(int fieldNumber, ByteString value) + { + WriteBytes(fieldNumber, null /*not used*/, value); + } + + [CLSCompliant(false)] + public void WriteUnknownField(int fieldNumber, WireFormat.WireType wireType, ulong value) + { + if (wireType == WireFormat.WireType.Varint) + { + WriteUInt64(fieldNumber, null /*not used*/, value); + } + else if (wireType == WireFormat.WireType.Fixed32) + { + WriteFixed32(fieldNumber, null /*not used*/, (uint) value); + } + else if (wireType == WireFormat.WireType.Fixed64) + { + WriteFixed64(fieldNumber, null /*not used*/, value); + } + else + { + throw InvalidProtocolBufferException.InvalidWireType(); + } + } + + #endregion + + #region Writing of tags and fields + + public void WriteField(FieldType fieldType, int fieldNumber, string fieldName, object value) + { + switch (fieldType) + { + case FieldType.String: + WriteString(fieldNumber, fieldName, (string) value); + break; + case FieldType.Message: + WriteMessage(fieldNumber, fieldName, (IMessageLite) value); + break; + case FieldType.Group: + WriteGroup(fieldNumber, fieldName, (IMessageLite) value); + break; + case FieldType.Bytes: + WriteBytes(fieldNumber, fieldName, (ByteString) value); + break; + case FieldType.Bool: + WriteBool(fieldNumber, fieldName, (bool) value); + break; + case FieldType.Enum: + if (value is Enum) + { + WriteEnum(fieldNumber, fieldName, (int) value, null /*not used*/); + } + else + { + WriteEnum(fieldNumber, fieldName, ((IEnumLite) value).Number, null /*not used*/); + } + break; + case FieldType.Int32: + WriteInt32(fieldNumber, fieldName, (int) value); + break; + case FieldType.Int64: + WriteInt64(fieldNumber, fieldName, (long) value); + break; + case FieldType.UInt32: + WriteUInt32(fieldNumber, fieldName, (uint) value); + break; + case FieldType.UInt64: + WriteUInt64(fieldNumber, fieldName, (ulong) value); + break; + case FieldType.SInt32: + WriteSInt32(fieldNumber, fieldName, (int) value); + break; + case FieldType.SInt64: + WriteSInt64(fieldNumber, fieldName, (long) value); + break; + case FieldType.Fixed32: + WriteFixed32(fieldNumber, fieldName, (uint) value); + break; + case FieldType.Fixed64: + WriteFixed64(fieldNumber, fieldName, (ulong) value); + break; + case FieldType.SFixed32: + WriteSFixed32(fieldNumber, fieldName, (int) value); + break; + case FieldType.SFixed64: + WriteSFixed64(fieldNumber, fieldName, (long) value); + break; + case FieldType.Double: + WriteDouble(fieldNumber, fieldName, (double) value); + break; + case FieldType.Float: + WriteFloat(fieldNumber, fieldName, (float) value); + break; + } + } + + /// + /// Writes a double field value, including tag, to the stream. + /// + public void WriteDouble(int fieldNumber, string fieldName, double value) + { + WriteTag(fieldNumber, WireFormat.WireType.Fixed64); + WriteDoubleNoTag(value); + } + + /// + /// Writes a float field value, including tag, to the stream. + /// + public void WriteFloat(int fieldNumber, string fieldName, float value) + { + WriteTag(fieldNumber, WireFormat.WireType.Fixed32); + WriteFloatNoTag(value); + } + + /// + /// Writes a uint64 field value, including tag, to the stream. + /// + [CLSCompliant(false)] + public void WriteUInt64(int fieldNumber, string fieldName, ulong value) + { + WriteTag(fieldNumber, WireFormat.WireType.Varint); + WriteRawVarint64(value); + } + + /// + /// Writes an int64 field value, including tag, to the stream. + /// + public void WriteInt64(int fieldNumber, string fieldName, long value) + { + WriteTag(fieldNumber, WireFormat.WireType.Varint); + WriteRawVarint64((ulong) value); + } + + /// + /// Writes an int32 field value, including tag, to the stream. + /// + public void WriteInt32(int fieldNumber, string fieldName, int value) + { + WriteTag(fieldNumber, WireFormat.WireType.Varint); + if (value >= 0) + { + WriteRawVarint32((uint) value); + } + else + { + // Must sign-extend. + WriteRawVarint64((ulong) value); + } + } + + /// + /// Writes a fixed64 field value, including tag, to the stream. + /// + [CLSCompliant(false)] + public void WriteFixed64(int fieldNumber, string fieldName, ulong value) + { + WriteTag(fieldNumber, WireFormat.WireType.Fixed64); + WriteRawLittleEndian64(value); + } + + /// + /// Writes a fixed32 field value, including tag, to the stream. + /// + [CLSCompliant(false)] + public void WriteFixed32(int fieldNumber, string fieldName, uint value) + { + WriteTag(fieldNumber, WireFormat.WireType.Fixed32); + WriteRawLittleEndian32(value); + } + + /// + /// Writes a bool field value, including tag, to the stream. + /// + public void WriteBool(int fieldNumber, string fieldName, bool value) + { + WriteTag(fieldNumber, WireFormat.WireType.Varint); + WriteRawByte(value ? (byte) 1 : (byte) 0); + } + + /// + /// Writes a string field value, including tag, to the stream. + /// + public void WriteString(int fieldNumber, string fieldName, string value) + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + // Optimise the case where we have enough space to write + // the string directly to the buffer, which should be common. + int length = Encoding.UTF8.GetByteCount(value); + WriteRawVarint32((uint) length); + if (limit - position >= length) + { + Encoding.UTF8.GetBytes(value, 0, value.Length, buffer, position); + position += length; + } + else + { + byte[] bytes = Encoding.UTF8.GetBytes(value); + WriteRawBytes(bytes); + } + } + + /// + /// Writes a group field value, including tag, to the stream. + /// + public void WriteGroup(int fieldNumber, string fieldName, IMessageLite value) + { + WriteTag(fieldNumber, WireFormat.WireType.StartGroup); + value.WriteTo(this); + WriteTag(fieldNumber, WireFormat.WireType.EndGroup); + } + + public void WriteMessage(int fieldNumber, string fieldName, IMessageLite value) + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) value.SerializedSize); + value.WriteTo(this); + } + + public void WriteBytes(int fieldNumber, string fieldName, ByteString value) + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) value.Length); + value.WriteRawBytesTo(this); + } + + [CLSCompliant(false)] + public void WriteUInt32(int fieldNumber, string fieldName, uint value) + { + WriteTag(fieldNumber, WireFormat.WireType.Varint); + WriteRawVarint32(value); + } + + public void WriteEnum(int fieldNumber, string fieldName, int value, object rawValue) + { + WriteTag(fieldNumber, WireFormat.WireType.Varint); + WriteInt32NoTag(value); + } + + public void WriteSFixed32(int fieldNumber, string fieldName, int value) + { + WriteTag(fieldNumber, WireFormat.WireType.Fixed32); + WriteRawLittleEndian32((uint) value); + } + + public void WriteSFixed64(int fieldNumber, string fieldName, long value) + { + WriteTag(fieldNumber, WireFormat.WireType.Fixed64); + WriteRawLittleEndian64((ulong) value); + } + + public void WriteSInt32(int fieldNumber, string fieldName, int value) + { + WriteTag(fieldNumber, WireFormat.WireType.Varint); + WriteRawVarint32(EncodeZigZag32(value)); + } + + public void WriteSInt64(int fieldNumber, string fieldName, long value) + { + WriteTag(fieldNumber, WireFormat.WireType.Varint); + WriteRawVarint64(EncodeZigZag64(value)); + } + + public void WriteMessageSetExtension(int fieldNumber, string fieldName, IMessageLite value) + { + WriteTag(WireFormat.MessageSetField.Item, WireFormat.WireType.StartGroup); + WriteUInt32(WireFormat.MessageSetField.TypeID, "type_id", (uint) fieldNumber); + WriteMessage(WireFormat.MessageSetField.Message, "message", value); + WriteTag(WireFormat.MessageSetField.Item, WireFormat.WireType.EndGroup); + } + + public void WriteMessageSetExtension(int fieldNumber, string fieldName, ByteString value) + { + WriteTag(WireFormat.MessageSetField.Item, WireFormat.WireType.StartGroup); + WriteUInt32(WireFormat.MessageSetField.TypeID, "type_id", (uint) fieldNumber); + WriteBytes(WireFormat.MessageSetField.Message, "message", value); + WriteTag(WireFormat.MessageSetField.Item, WireFormat.WireType.EndGroup); + } + + #endregion + + #region Writing of values without tags + + public void WriteFieldNoTag(FieldType fieldType, object value) + { + switch (fieldType) + { + case FieldType.String: + WriteStringNoTag((string) value); + break; + case FieldType.Message: + WriteMessageNoTag((IMessageLite) value); + break; + case FieldType.Group: + WriteGroupNoTag((IMessageLite) value); + break; + case FieldType.Bytes: + WriteBytesNoTag((ByteString) value); + break; + case FieldType.Bool: + WriteBoolNoTag((bool) value); + break; + case FieldType.Enum: + if (value is Enum) + { + WriteEnumNoTag((int) value); + } + else + { + WriteEnumNoTag(((IEnumLite) value).Number); + } + break; + case FieldType.Int32: + WriteInt32NoTag((int) value); + break; + case FieldType.Int64: + WriteInt64NoTag((long) value); + break; + case FieldType.UInt32: + WriteUInt32NoTag((uint) value); + break; + case FieldType.UInt64: + WriteUInt64NoTag((ulong) value); + break; + case FieldType.SInt32: + WriteSInt32NoTag((int) value); + break; + case FieldType.SInt64: + WriteSInt64NoTag((long) value); + break; + case FieldType.Fixed32: + WriteFixed32NoTag((uint) value); + break; + case FieldType.Fixed64: + WriteFixed64NoTag((ulong) value); + break; + case FieldType.SFixed32: + WriteSFixed32NoTag((int) value); + break; + case FieldType.SFixed64: + WriteSFixed64NoTag((long) value); + break; + case FieldType.Double: + WriteDoubleNoTag((double) value); + break; + case FieldType.Float: + WriteFloatNoTag((float) value); + break; + } + } + + /// + /// Writes a double field value, including tag, to the stream. + /// + public void WriteDoubleNoTag(double value) + { +#if SILVERLIGHT || COMPACT_FRAMEWORK_35 + byte[] rawBytes = BitConverter.GetBytes(value); + if (!BitConverter.IsLittleEndian) + ByteArray.Reverse(rawBytes); + + if (limit - position >= 8) + { + buffer[position++] = rawBytes[0]; + buffer[position++] = rawBytes[1]; + buffer[position++] = rawBytes[2]; + buffer[position++] = rawBytes[3]; + buffer[position++] = rawBytes[4]; + buffer[position++] = rawBytes[5]; + buffer[position++] = rawBytes[6]; + buffer[position++] = rawBytes[7]; + } + else + WriteRawBytes(rawBytes, 0, 8); +#else + WriteRawLittleEndian64((ulong) BitConverter.DoubleToInt64Bits(value)); +#endif + } + + /// + /// Writes a float field value, without a tag, to the stream. + /// + public void WriteFloatNoTag(float value) + { + byte[] rawBytes = BitConverter.GetBytes(value); + if (!BitConverter.IsLittleEndian) + { + ByteArray.Reverse(rawBytes); + } + + if (limit - position >= 4) + { + buffer[position++] = rawBytes[0]; + buffer[position++] = rawBytes[1]; + buffer[position++] = rawBytes[2]; + buffer[position++] = rawBytes[3]; + } + else + { + WriteRawBytes(rawBytes, 0, 4); + } + } + + /// + /// Writes a uint64 field value, without a tag, to the stream. + /// + [CLSCompliant(false)] + public void WriteUInt64NoTag(ulong value) + { + WriteRawVarint64(value); + } + + /// + /// Writes an int64 field value, without a tag, to the stream. + /// + public void WriteInt64NoTag(long value) + { + WriteRawVarint64((ulong) value); + } + + /// + /// Writes an int32 field value, without a tag, to the stream. + /// + public void WriteInt32NoTag(int value) + { + if (value >= 0) + { + WriteRawVarint32((uint) value); + } + else + { + // Must sign-extend. + WriteRawVarint64((ulong) value); + } + } + + /// + /// Writes a fixed64 field value, without a tag, to the stream. + /// + [CLSCompliant(false)] + public void WriteFixed64NoTag(ulong value) + { + WriteRawLittleEndian64(value); + } + + /// + /// Writes a fixed32 field value, without a tag, to the stream. + /// + [CLSCompliant(false)] + public void WriteFixed32NoTag(uint value) + { + WriteRawLittleEndian32(value); + } + + /// + /// Writes a bool field value, without a tag, to the stream. + /// + public void WriteBoolNoTag(bool value) + { + WriteRawByte(value ? (byte) 1 : (byte) 0); + } + + /// + /// Writes a string field value, without a tag, to the stream. + /// + public void WriteStringNoTag(string value) + { + // Optimise the case where we have enough space to write + // the string directly to the buffer, which should be common. + int length = Encoding.UTF8.GetByteCount(value); + WriteRawVarint32((uint) length); + if (limit - position >= length) + { + Encoding.UTF8.GetBytes(value, 0, value.Length, buffer, position); + position += length; + } + else + { + byte[] bytes = Encoding.UTF8.GetBytes(value); + WriteRawBytes(bytes); + } + } + + /// + /// Writes a group field value, without a tag, to the stream. + /// + public void WriteGroupNoTag(IMessageLite value) + { + value.WriteTo(this); + } + + public void WriteMessageNoTag(IMessageLite value) + { + WriteRawVarint32((uint) value.SerializedSize); + value.WriteTo(this); + } + + public void WriteBytesNoTag(ByteString value) + { + WriteRawVarint32((uint) value.Length); + value.WriteRawBytesTo(this); + } + + [CLSCompliant(false)] + public void WriteUInt32NoTag(uint value) + { + WriteRawVarint32(value); + } + + public void WriteEnumNoTag(int value) + { + WriteInt32NoTag(value); + } + + public void WriteSFixed32NoTag(int value) + { + WriteRawLittleEndian32((uint) value); + } + + public void WriteSFixed64NoTag(long value) + { + WriteRawLittleEndian64((ulong) value); + } + + public void WriteSInt32NoTag(int value) + { + WriteRawVarint32(EncodeZigZag32(value)); + } + + public void WriteSInt64NoTag(long value) + { + WriteRawVarint64(EncodeZigZag64(value)); + } + + #endregion + + #region Write array members + + public void WriteArray(FieldType fieldType, int fieldNumber, string fieldName, IEnumerable list) + { + foreach (object element in list) + { + WriteField(fieldType, fieldNumber, fieldName, element); + } + } + + public void WriteGroupArray(int fieldNumber, string fieldName, IEnumerable list) + where T : IMessageLite + { + foreach (IMessageLite value in list) + { + WriteGroup(fieldNumber, fieldName, value); + } + } + + public void WriteMessageArray(int fieldNumber, string fieldName, IEnumerable list) + where T : IMessageLite + { + foreach (IMessageLite value in list) + { + WriteMessage(fieldNumber, fieldName, value); + } + } + + public void WriteStringArray(int fieldNumber, string fieldName, IEnumerable list) + { + foreach (var value in list) + { + WriteString(fieldNumber, fieldName, value); + } + } + + public void WriteBytesArray(int fieldNumber, string fieldName, IEnumerable list) + { + foreach (var value in list) + { + WriteBytes(fieldNumber, fieldName, value); + } + } + + public void WriteBoolArray(int fieldNumber, string fieldName, IEnumerable list) + { + foreach (var value in list) + { + WriteBool(fieldNumber, fieldName, value); + } + } + + public void WriteInt32Array(int fieldNumber, string fieldName, IEnumerable list) + { + foreach (var value in list) + { + WriteInt32(fieldNumber, fieldName, value); + } + } + + public void WriteSInt32Array(int fieldNumber, string fieldName, IEnumerable list) + { + foreach (var value in list) + { + WriteSInt32(fieldNumber, fieldName, value); + } + } + + public void WriteUInt32Array(int fieldNumber, string fieldName, IEnumerable list) + { + foreach (var value in list) + { + WriteUInt32(fieldNumber, fieldName, value); + } + } + + public void WriteFixed32Array(int fieldNumber, string fieldName, IEnumerable list) + { + foreach (var value in list) + { + WriteFixed32(fieldNumber, fieldName, value); + } + } + + public void WriteSFixed32Array(int fieldNumber, string fieldName, IEnumerable list) + { + foreach (var value in list) + { + WriteSFixed32(fieldNumber, fieldName, value); + } + } + + public void WriteInt64Array(int fieldNumber, string fieldName, IEnumerable list) + { + foreach (var value in list) + { + WriteInt64(fieldNumber, fieldName, value); + } + } + + public void WriteSInt64Array(int fieldNumber, string fieldName, IEnumerable list) + { + foreach (var value in list) + { + WriteSInt64(fieldNumber, fieldName, value); + } + } + + public void WriteUInt64Array(int fieldNumber, string fieldName, IEnumerable list) + { + foreach (var value in list) + { + WriteUInt64(fieldNumber, fieldName, value); + } + } + + public void WriteFixed64Array(int fieldNumber, string fieldName, IEnumerable list) + { + foreach (var value in list) + { + WriteFixed64(fieldNumber, fieldName, value); + } + } + + public void WriteSFixed64Array(int fieldNumber, string fieldName, IEnumerable list) + { + foreach (var value in list) + { + WriteSFixed64(fieldNumber, fieldName, value); + } + } + + public void WriteDoubleArray(int fieldNumber, string fieldName, IEnumerable list) + { + foreach (var value in list) + { + WriteDouble(fieldNumber, fieldName, value); + } + } + + public void WriteFloatArray(int fieldNumber, string fieldName, IEnumerable list) + { + foreach (var value in list) + { + WriteFloat(fieldNumber, fieldName, value); + } + } + + [CLSCompliant(false)] + public void WriteEnumArray(int fieldNumber, string fieldName, IEnumerable list) + where T : struct, IComparable, IFormattable, IConvertible + { + if (list is ICastArray) + { + foreach (int value in ((ICastArray) list).CastArray()) + { + WriteEnum(fieldNumber, fieldName, value, null /*unused*/); + } + } + else + { + foreach (object value in list) + { + WriteEnum(fieldNumber, fieldName, (int) value, null /*unused*/); + } + } + } + + #endregion + + #region Write packed array members + + public void WritePackedArray(FieldType fieldType, int fieldNumber, string fieldName, IEnumerable list) + { + int calculatedSize = 0; + foreach (object element in list) + { + calculatedSize += ComputeFieldSizeNoTag(fieldType, element); + } + + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + + foreach (object element in list) + { + WriteFieldNoTag(fieldType, element); + } + } + + public void WritePackedGroupArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list) + where T : IMessageLite + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + foreach (IMessageLite value in list) + { + WriteGroupNoTag(value); + } + } + + public void WritePackedMessageArray(int fieldNumber, string fieldName, int calculatedSize, + IEnumerable list) + where T : IMessageLite + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + foreach (IMessageLite value in list) + { + WriteMessageNoTag(value); + } + } + + public void WritePackedStringArray(int fieldNumber, string fieldName, int calculatedSize, + IEnumerable list) + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + foreach (var value in list) + { + WriteStringNoTag(value); + } + } + + public void WritePackedBytesArray(int fieldNumber, string fieldName, int calculatedSize, + IEnumerable list) + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + foreach (var value in list) + { + WriteBytesNoTag(value); + } + } + + public void WritePackedBoolArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list) + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + foreach (var value in list) + { + WriteBoolNoTag(value); + } + } + + public void WritePackedInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list) + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + foreach (var value in list) + { + WriteInt32NoTag(value); + } + } + + public void WritePackedSInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list) + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + foreach (var value in list) + { + WriteSInt32NoTag(value); + } + } + + public void WritePackedUInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list) + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + foreach (var value in list) + { + WriteUInt32NoTag(value); + } + } + + public void WritePackedFixed32Array(int fieldNumber, string fieldName, int calculatedSize, + IEnumerable list) + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + foreach (var value in list) + { + WriteFixed32NoTag(value); + } + } + + public void WritePackedSFixed32Array(int fieldNumber, string fieldName, int calculatedSize, + IEnumerable list) + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + foreach (var value in list) + { + WriteSFixed32NoTag(value); + } + } + + public void WritePackedInt64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list) + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + foreach (var value in list) + { + WriteInt64NoTag(value); + } + } + + public void WritePackedSInt64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list) + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + foreach (var value in list) + { + WriteSInt64NoTag(value); + } + } + + public void WritePackedUInt64Array(int fieldNumber, string fieldName, int calculatedSize, + IEnumerable list) + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + foreach (var value in list) + { + WriteUInt64NoTag(value); + } + } + + public void WritePackedFixed64Array(int fieldNumber, string fieldName, int calculatedSize, + IEnumerable list) + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + foreach (var value in list) + { + WriteFixed64NoTag(value); + } + } + + public void WritePackedSFixed64Array(int fieldNumber, string fieldName, int calculatedSize, + IEnumerable list) + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + foreach (var value in list) + { + WriteSFixed64NoTag(value); + } + } + + public void WritePackedDoubleArray(int fieldNumber, string fieldName, int calculatedSize, + IEnumerable list) + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + foreach (var value in list) + { + WriteDoubleNoTag(value); + } + } + + public void WritePackedFloatArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list) + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + foreach (var value in list) + { + WriteFloatNoTag(value); + } + } + + [CLSCompliant(false)] + public void WritePackedEnumArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list) + where T : struct, IComparable, IFormattable, IConvertible + { + WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited); + WriteRawVarint32((uint) calculatedSize); + if (list is ICastArray) + { + foreach (int value in ((ICastArray) list).CastArray()) + { + WriteEnumNoTag(value); + } + } + else + { + foreach (object value in list) + { + WriteEnumNoTag((int) value); + } + } + } + + #endregion + + #region Underlying writing primitives + + /// + /// Encodes and writes a tag. + /// + [CLSCompliant(false)] + public void WriteTag(int fieldNumber, WireFormat.WireType type) + { + WriteRawVarint32(WireFormat.MakeTag(fieldNumber, type)); + } + + /// + /// Writes a 32 bit value as a varint. The fast route is taken when + /// there's enough buffer space left to whizz through without checking + /// for each byte; otherwise, we resort to calling WriteRawByte each time. + /// + [CLSCompliant(false)] + public void WriteRawVarint32(uint value) + { + while (value > 127 && position < limit) + { + buffer[position++] = (byte) ((value & 0x7F) | 0x80); + value >>= 7; + } + while (value > 127) + { + WriteRawByte((byte) ((value & 0x7F) | 0x80)); + value >>= 7; + } + if (position < limit) + { + buffer[position++] = (byte) value; + } + else + { + WriteRawByte((byte) value); + } + } + + [CLSCompliant(false)] + public void WriteRawVarint64(ulong value) + { + while (value > 127 && position < limit) + { + buffer[position++] = (byte) ((value & 0x7F) | 0x80); + value >>= 7; + } + while (value > 127) + { + WriteRawByte((byte) ((value & 0x7F) | 0x80)); + value >>= 7; + } + if (position < limit) + { + buffer[position++] = (byte) value; + } + else + { + WriteRawByte((byte) value); + } + } + + [CLSCompliant(false)] + public void WriteRawLittleEndian32(uint value) + { + if (position + 4 > limit) + { + WriteRawByte((byte) value); + WriteRawByte((byte) (value >> 8)); + WriteRawByte((byte) (value >> 16)); + WriteRawByte((byte) (value >> 24)); + } + else + { + buffer[position++] = ((byte) value); + buffer[position++] = ((byte) (value >> 8)); + buffer[position++] = ((byte) (value >> 16)); + buffer[position++] = ((byte) (value >> 24)); + } + } + + [CLSCompliant(false)] + public void WriteRawLittleEndian64(ulong value) + { + if (position + 8 > limit) + { + WriteRawByte((byte) value); + WriteRawByte((byte) (value >> 8)); + WriteRawByte((byte) (value >> 16)); + WriteRawByte((byte) (value >> 24)); + WriteRawByte((byte) (value >> 32)); + WriteRawByte((byte) (value >> 40)); + WriteRawByte((byte) (value >> 48)); + WriteRawByte((byte) (value >> 56)); + } + else + { + buffer[position++] = ((byte) value); + buffer[position++] = ((byte) (value >> 8)); + buffer[position++] = ((byte) (value >> 16)); + buffer[position++] = ((byte) (value >> 24)); + buffer[position++] = ((byte) (value >> 32)); + buffer[position++] = ((byte) (value >> 40)); + buffer[position++] = ((byte) (value >> 48)); + buffer[position++] = ((byte) (value >> 56)); + } + } + + public void WriteRawByte(byte value) + { + if (position == limit) + { + RefreshBuffer(); + } + + buffer[position++] = value; + } + + [CLSCompliant(false)] + public void WriteRawByte(uint value) + { + WriteRawByte((byte) value); + } + + /// + /// Writes out an array of bytes. + /// + public void WriteRawBytes(byte[] value) + { + WriteRawBytes(value, 0, value.Length); + } + + /// + /// Writes out part of an array of bytes. + /// + public void WriteRawBytes(byte[] value, int offset, int length) + { + if (limit - position >= length) + { + ByteArray.Copy(value, offset, buffer, position, length); + // We have room in the current buffer. + position += length; + } + else + { + // Write extends past current buffer. Fill the rest of this buffer and + // flush. + int bytesWritten = limit - position; + ByteArray.Copy(value, offset, buffer, position, bytesWritten); + offset += bytesWritten; + length -= bytesWritten; + position = limit; + RefreshBuffer(); + + // Now deal with the rest. + // Since we have an output stream, this is our buffer + // and buffer offset == 0 + if (length <= limit) + { + // Fits in new buffer. + ByteArray.Copy(value, offset, buffer, 0, length); + position = length; + } + else + { + // Write is very big. Let's do it all at once. + output.Write(value, offset, length); + } + } + } + + #endregion + + /// + /// Encode a 32-bit value with ZigZag encoding. + /// + /// + /// ZigZag encodes signed integers into values that can be efficiently + /// encoded with varint. (Otherwise, negative values must be + /// sign-extended to 64 bits to be varint encoded, thus always taking + /// 10 bytes on the wire.) + /// + [CLSCompliant(false)] + public static uint EncodeZigZag32(int n) + { + // Note: the right-shift must be arithmetic + return (uint) ((n << 1) ^ (n >> 31)); + } + + /// + /// Encode a 64-bit value with ZigZag encoding. + /// + /// + /// ZigZag encodes signed integers into values that can be efficiently + /// encoded with varint. (Otherwise, negative values must be + /// sign-extended to 64 bits to be varint encoded, thus always taking + /// 10 bytes on the wire.) + /// + [CLSCompliant(false)] + public static ulong EncodeZigZag64(long n) + { + return (ulong) ((n << 1) ^ (n >> 63)); + } + + private void RefreshBuffer() + { + if (output == null) + { + // We're writing to a single buffer. + throw new OutOfSpaceException(); + } + + // Since we have an output stream, this is our buffer + // and buffer offset == 0 + output.Write(buffer, 0, position); + position = 0; + } + + /// + /// Indicates that a CodedOutputStream wrapping a flat byte array + /// ran out of space. + /// + public sealed class OutOfSpaceException : IOException + { + internal OutOfSpaceException() + : base("CodedOutputStream was writing to a flat byte array and ran out of space.") + { + } + } + + public void Flush() + { + if (output != null) + { + RefreshBuffer(); + } + } + + /// + /// Verifies that SpaceLeft returns zero. It's common to create a byte array + /// that is exactly big enough to hold a message, then write to it with + /// a CodedOutputStream. Calling CheckNoSpaceLeft after writing verifies that + /// the message was actually as big as expected, which can help bugs. + /// + public void CheckNoSpaceLeft() + { + if (SpaceLeft != 0) + { + throw new InvalidOperationException("Did not write as much data as expected."); + } + } + + /// + /// If writing to a flat array, returns the space left in the array. Otherwise, + /// throws an InvalidOperationException. + /// + public int SpaceLeft + { + get + { + if (output == null) + { + return limit - position; + } + else + { + throw new InvalidOperationException( + "SpaceLeft can only be called on CodedOutputStreams that are " + + "writing to a flat array."); + } + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Collections/Dictionaries.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Collections/Dictionaries.cs new file mode 100644 index 0000000000..6d369c045d --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Collections/Dictionaries.cs @@ -0,0 +1,122 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Google.ProtocolBuffers.Collections +{ + /// + /// Utility class for dictionaries. + /// + public static class Dictionaries + { + /// + /// Compares two dictionaries for equality. Each value is compared with equality using Equals + /// for non-IEnumerable implementations, and using EnumerableEquals otherwise. + /// TODO(jonskeet): This is clearly pretty slow, and involves lots of boxing/unboxing... + /// + public static bool Equals(IDictionary left, IDictionary right) + { + if (left.Count != right.Count) + { + return false; + } + foreach (KeyValuePair leftEntry in left) + { + TValue rightValue; + if (!right.TryGetValue(leftEntry.Key, out rightValue)) + { + return false; + } + + IEnumerable leftEnumerable = leftEntry.Value as IEnumerable; + IEnumerable rightEnumerable = rightValue as IEnumerable; + if (leftEnumerable == null || rightEnumerable == null) + { + if (!Equals(leftEntry.Value, rightValue)) + { + return false; + } + } + else + { + if (!Enumerables.Equals(leftEnumerable, rightEnumerable)) + { + return false; + } + } + } + return true; + } + + public static IDictionary AsReadOnly(IDictionary dictionary) + { + return dictionary.IsReadOnly ? dictionary : new ReadOnlyDictionary(dictionary); + } + + /// + /// Creates a hashcode for a dictionary by XORing the hashcodes of all the fields + /// and values. (By XORing, we avoid ordering issues.) + /// TODO(jonskeet): Currently XORs other stuff too, and assumes non-null values. + /// + public static int GetHashCode(IDictionary dictionary) + { + int ret = 31; + foreach (KeyValuePair entry in dictionary) + { + int hash = entry.Key.GetHashCode() ^ GetDeepHashCode(entry.Value); + ret ^= hash; + } + return ret; + } + + /// + /// Determines the hash of a value by either taking it directly or hashing all the elements + /// for IEnumerable implementations. + /// + private static int GetDeepHashCode(object value) + { + IEnumerable iterable = value as IEnumerable; + if (iterable == null) + { + return value.GetHashCode(); + } + int hash = 29; + foreach (object element in iterable) + { + hash = hash*37 + element.GetHashCode(); + } + return hash; + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Collections/Enumerables.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Collections/Enumerables.cs new file mode 100644 index 0000000000..c632c885dd --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Collections/Enumerables.cs @@ -0,0 +1,74 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; +using System.Collections; + +namespace Google.ProtocolBuffers.Collections +{ + /// + /// Utility class for IEnumerable (and potentially the generic version in the future). + /// + public static class Enumerables + { + public static bool Equals(IEnumerable left, IEnumerable right) + { + IEnumerator leftEnumerator = left.GetEnumerator(); + try + { + foreach (object rightObject in right) + { + if (!leftEnumerator.MoveNext()) + { + return false; + } + if (!Equals(leftEnumerator.Current, rightObject)) + { + return false; + } + } + if (leftEnumerator.MoveNext()) + { + return false; + } + } + finally + { + IDisposable leftEnumeratorDisposable = leftEnumerator as IDisposable; + if (leftEnumeratorDisposable != null) + { + leftEnumeratorDisposable.Dispose(); + } + } + return true; + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Collections/IPopsicleList.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Collections/IPopsicleList.cs new file mode 100644 index 0000000000..3d74e7aad0 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Collections/IPopsicleList.cs @@ -0,0 +1,58 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System.Collections.Generic; + +namespace Google.ProtocolBuffers.Collections +{ + /// + /// A list which has an Add method which accepts an IEnumerable[T]. + /// This allows whole collections to be added easily using collection initializers. + /// It causes a potential overload confusion if T : IEnumerable[T], but in + /// practice that won't happen in protocol buffers. + /// + /// This is only currently implemented by PopsicleList, and it's likely + /// to stay that way - hence the name. More genuinely descriptive names are + /// horribly ugly. (At least, the ones the author could think of...) + /// The element type of the list + public interface IPopsicleList : IList + { + void Add(IEnumerable collection); + } + + /// + /// Used to efficiently cast the elements of enumerations + /// + internal interface ICastArray + { + IEnumerable CastArray(); + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Collections/Lists.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Collections/Lists.cs new file mode 100644 index 0000000000..126cd525ae --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Collections/Lists.cs @@ -0,0 +1,110 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System.Collections.Generic; +using System.Collections.ObjectModel; + +namespace Google.ProtocolBuffers.Collections +{ + /// + /// Utility non-generic class for calling into Lists{T} using type inference. + /// + public static class Lists + { + /// + /// Returns a read-only view of the specified list. + /// + public static IList AsReadOnly(IList list) + { + return Lists.AsReadOnly(list); + } + + public static bool Equals(IList left, IList right) + { + if (left == right) + { + return true; + } + if (left == null || right == null) + { + return false; + } + if (left.Count != right.Count) + { + return false; + } + IEqualityComparer comparer = EqualityComparer.Default; + for (int i = 0; i < left.Count; i++) + { + if (!comparer.Equals(left[i], right[i])) + { + return false; + } + } + return true; + } + + public static int GetHashCode(IList list) + { + int hash = 31; + foreach (T element in list) + { + hash = hash*29 + element.GetHashCode(); + } + return hash; + } + } + + /// + /// Utility class for dealing with lists. + /// + public static class Lists + { + private static readonly ReadOnlyCollection empty = new ReadOnlyCollection(new T[0]); + + /// + /// Returns an immutable empty list. + /// + public static ReadOnlyCollection Empty + { + get { return empty; } + } + + /// + /// Returns either the original reference if it's already read-only, + /// or a new ReadOnlyCollection wrapping the original list. + /// + public static IList AsReadOnly(IList list) + { + return list.IsReadOnly ? list : new ReadOnlyCollection(list); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Collections/PopsicleList.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Collections/PopsicleList.cs new file mode 100644 index 0000000000..24e43d4e3d --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Collections/PopsicleList.cs @@ -0,0 +1,208 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Google.ProtocolBuffers.Collections +{ + /// + /// Proxies calls to a , but allows the list + /// to be made read-only (with the method), + /// after which any modifying methods throw . + /// + public sealed class PopsicleList : IPopsicleList, ICastArray + { + private static readonly bool CheckForNull = default(T) == null; + private static readonly T[] EmptySet = new T[0]; + + private List items; + private bool readOnly; + + /// + /// Makes this list read-only ("freezes the popsicle"). From this + /// point on, mutating methods (Clear, Add etc) will throw a + /// NotSupportedException. There is no way of "defrosting" the list afterwards. + /// + public void MakeReadOnly() + { + readOnly = true; + } + + public int IndexOf(T item) + { + return items == null ? -1 : items.IndexOf(item); + } + + public void Insert(int index, T item) + { + ValidateModification(); + if (CheckForNull) + { + ThrowHelper.ThrowIfNull(item); + } + items.Insert(index, item); + } + + public void RemoveAt(int index) + { + ValidateModification(); + items.RemoveAt(index); + } + + public T this[int index] + { + get + { + if (items == null) + { + throw new ArgumentOutOfRangeException(); + } + return items[index]; + } + set + { + ValidateModification(); + if (CheckForNull) + { + ThrowHelper.ThrowIfNull(value); + } + items[index] = value; + } + } + + public void Add(T item) + { + ValidateModification(); + if (CheckForNull) + { + ThrowHelper.ThrowIfNull(item); + } + items.Add(item); + } + + public void Clear() + { + ValidateModification(); + items.Clear(); + } + + public bool Contains(T item) + { + return items == null ? false : items.Contains(item); + } + + public void CopyTo(T[] array, int arrayIndex) + { + if (items != null) + { + items.CopyTo(array, arrayIndex); + } + } + + public int Count + { + get { return items == null ? 0 : items.Count; } + } + + public bool IsReadOnly + { + get { return readOnly; } + } + + public bool Remove(T item) + { + ValidateModification(); + return items.Remove(item); + } + + public IEnumerator GetEnumerator() + { + IEnumerable tenum = (IEnumerable)items ?? EmptySet; + return tenum.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public void Add(IEnumerable collection) + { + ValidateModification(); + ThrowHelper.ThrowIfNull(collection); + + if (!CheckForNull || collection is PopsicleList) + { + items.AddRange(collection); + } + else + { + // Assumption, it's ok to enumerate collections more than once. + if (collection is ICollection) + { + ThrowHelper.ThrowIfAnyNull(collection); + items.AddRange(collection); + } + else + { + foreach (T item in collection) + { + ThrowHelper.ThrowIfNull(item); + items.Add(item); + } + } + } + } + + private void ValidateModification() + { + if (readOnly) + { + throw new NotSupportedException("List is read-only"); + } + if (items == null) + { + items = new List(); + } + } + + IEnumerable ICastArray.CastArray() + { + if (items == null) + { + return PopsicleList.EmptySet; + } + return (TItemType[]) (object) items.ToArray(); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Collections/ReadOnlyDictionary.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Collections/ReadOnlyDictionary.cs new file mode 100644 index 0000000000..e7f1797681 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Collections/ReadOnlyDictionary.cs @@ -0,0 +1,146 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Google.ProtocolBuffers.Collections +{ + /// + /// Read-only wrapper around another dictionary. + /// + public sealed class ReadOnlyDictionary : IDictionary + { + private readonly IDictionary wrapped; + + public ReadOnlyDictionary(IDictionary wrapped) + { + this.wrapped = wrapped; + } + + public void Add(TKey key, TValue value) + { + throw new InvalidOperationException(); + } + + public bool ContainsKey(TKey key) + { + return wrapped.ContainsKey(key); + } + + public ICollection Keys + { + get { return wrapped.Keys; } + } + + public bool Remove(TKey key) + { + throw new InvalidOperationException(); + } + + public bool TryGetValue(TKey key, out TValue value) + { + return wrapped.TryGetValue(key, out value); + } + + public ICollection Values + { + get { return wrapped.Values; } + } + + public TValue this[TKey key] + { + get { return wrapped[key]; } + set { throw new InvalidOperationException(); } + } + + public void Add(KeyValuePair item) + { + throw new InvalidOperationException(); + } + + public void Clear() + { + throw new InvalidOperationException(); + } + + public bool Contains(KeyValuePair item) + { + return wrapped.Contains(item); + } + + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + wrapped.CopyTo(array, arrayIndex); + } + + public int Count + { + get { return wrapped.Count; } + } + + public bool IsReadOnly + { + get { return true; } + } + + public bool Remove(KeyValuePair item) + { + throw new InvalidOperationException(); + } + + public IEnumerator> GetEnumerator() + { + return wrapped.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return ((IEnumerable) wrapped).GetEnumerator(); + } + + public override bool Equals(object obj) + { + return wrapped.Equals(obj); + } + + public override int GetHashCode() + { + return wrapped.GetHashCode(); + } + + public override string ToString() + { + return wrapped.ToString(); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/CustomSerialization.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/CustomSerialization.cs new file mode 100644 index 0000000000..cba1329df6 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/CustomSerialization.cs @@ -0,0 +1,188 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Runtime.Serialization; + +/* + * This entire source file is not supported on the Silverlight platform + */ +#if !SILVERLIGHT +namespace Google.ProtocolBuffers +{ + /* + * Specialized handing of *all* message types. Messages are serialized into a byte[] and stored + * into the SerializationInfo, and are then reconstituted by an IObjectReference class after + * deserialization. IDeserializationCallback is supported on both the Builder and Message. + */ + [Serializable] + partial class AbstractMessageLite : ISerializable + { + void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) + { + info.SetType(typeof(SerializationSurrogate)); + info.AddValue("message", ToByteArray()); + info.AddValue("initialized", IsInitialized); + } + + [Serializable] + private sealed class SerializationSurrogate : IObjectReference, ISerializable + { + static readonly TBuilder TemplateInstance = (TBuilder)Activator.CreateInstance(typeof(TBuilder)); + private readonly byte[] _message; + private readonly bool _initialized; + + private SerializationSurrogate(SerializationInfo info, StreamingContext context) + { + _message = (byte[])info.GetValue("message", typeof(byte[])); + _initialized = info.GetBoolean("initialized"); + } + + object IObjectReference.GetRealObject(StreamingContext context) + { + ExtensionRegistry registry = context.Context as ExtensionRegistry; + TBuilder builder = TemplateInstance.DefaultInstanceForType.CreateBuilderForType(); + builder.MergeFrom(_message, registry ?? ExtensionRegistry.Empty); + + IDeserializationCallback callback = builder as IDeserializationCallback; + if(callback != null) + { + callback.OnDeserialization(context); + } + + TMessage message = _initialized ? builder.Build() : builder.BuildPartial(); + callback = message as IDeserializationCallback; + if (callback != null) + { + callback.OnDeserialization(context); + } + + return message; + } + + void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) + { + info.AddValue("message", _message); + } + } + } + + [Serializable] + partial class AbstractBuilderLite : ISerializable + { + void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) + { + info.SetType(typeof(SerializationSurrogate)); + info.AddValue("message", Clone().BuildPartial().ToByteArray()); + } + + [Serializable] + private sealed class SerializationSurrogate : IObjectReference, ISerializable + { + static readonly TBuilder TemplateInstance = (TBuilder)Activator.CreateInstance(typeof(TBuilder)); + private readonly byte[] _message; + + private SerializationSurrogate(SerializationInfo info, StreamingContext context) + { + _message = (byte[])info.GetValue("message", typeof(byte[])); + } + + object IObjectReference.GetRealObject(StreamingContext context) + { + ExtensionRegistry registry = context.Context as ExtensionRegistry; + TBuilder builder = TemplateInstance.DefaultInstanceForType.CreateBuilderForType(); + builder.MergeFrom(_message, registry ?? ExtensionRegistry.Empty); + + IDeserializationCallback callback = builder as IDeserializationCallback; + if(callback != null) + { + callback.OnDeserialization(context); + } + + return builder; + } + + void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) + { + info.AddValue("message", _message); + } + } + } + + /* + * Spread some attribute love around, keeping this all here so we don't use conditional compliation + * in every one of these classes. If we introduce a new platform that also does not support this + * we can control it all from this source file. + */ + + [Serializable] + partial class GeneratedMessageLite { } + + [Serializable] + partial class ExtendableMessageLite { } + + [Serializable] + partial class AbstractMessage { } + + [Serializable] + partial class GeneratedMessage { } + + [Serializable] + partial class ExtendableMessage { } + + [Serializable] + partial class GeneratedBuilderLite { } + + [Serializable] + partial class ExtendableBuilderLite { } + + [Serializable] + partial class AbstractBuilder { } + + [Serializable] + partial class GeneratedBuilder { } + + [Serializable] + partial class ExtendableBuilder { } + + [Serializable] + partial class DynamicMessage + { + [Serializable] + partial class Builder { } + } +} +#endif \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Delegates.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Delegates.cs new file mode 100644 index 0000000000..78b1a9d282 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Delegates.cs @@ -0,0 +1,60 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System.IO; + +namespace Google.ProtocolBuffers +{ + /// + /// Delegate to return a stream when asked, used by MessageStreamIterator. + /// + public delegate Stream StreamProvider(); + + // These delegate declarations mirror the ones in .NET 3.5 for the sake of familiarity. + internal delegate TResult Func(); + + internal delegate TResult Func(T arg); + + internal delegate TResult Func(T1 arg1, T2 arg2); + + internal delegate TResult Func(T1 arg1, T2 arg2, T3 arg3); + + internal delegate TResult Func(T1 arg1, T2 arg2, T3 arg3, T4 arg4); + + internal delegate void Action(); + + internal delegate void Action(T1 arg1, T2 arg2); +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs new file mode 100644 index 0000000000..d116de3b2b --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs @@ -0,0 +1,1842 @@ +// Generated by ProtoGen, Version=2.3.0.277, Culture=neutral, PublicKeyToken=17b3b1f090c3ea48. DO NOT EDIT! +#pragma warning disable 1591, 0612 +#region Designer generated code + +using pb = global::Google.ProtocolBuffers; +using pbc = global::Google.ProtocolBuffers.Collections; +using pbd = global::Google.ProtocolBuffers.Descriptors; +using scg = global::System.Collections.Generic; +namespace Google.ProtocolBuffers.DescriptorProtos { + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public static partial class CSharpOptions { + + #region Extension registration + public static void RegisterAllExtensions(pb::ExtensionRegistry registry) { + registry.Add(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CSharpFileOptions); + registry.Add(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CSharpFieldOptions); + registry.Add(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CsharpServiceOptions); + registry.Add(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CsharpMethodOptions); + } + #endregion + #region Extensions + public const int CSharpFileOptionsFieldNumber = 1000; + public static pb::GeneratedExtensionBase CSharpFileOptions; + public const int CSharpFieldOptionsFieldNumber = 1000; + public static pb::GeneratedExtensionBase CSharpFieldOptions; + public const int CsharpServiceOptionsFieldNumber = 1000; + public static pb::GeneratedExtensionBase CsharpServiceOptions; + public const int CsharpMethodOptionsFieldNumber = 1000; + public static pb::GeneratedExtensionBase CsharpMethodOptions; + #endregion + + #region Static variables + internal static pbd::MessageDescriptor internal__static_google_protobuf_CSharpFileOptions__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_CSharpFileOptions__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_CSharpFieldOptions__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_CSharpFieldOptions__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_CSharpServiceOptions__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_CSharpServiceOptions__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_CSharpMethodOptions__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_CSharpMethodOptions__FieldAccessorTable; + #endregion + #region Descriptor + public static pbd::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbd::FileDescriptor descriptor; + + static CSharpOptions() { + byte[] descriptorData = global::System.Convert.FromBase64String( + "CiRnb29nbGUvcHJvdG9idWYvY3NoYXJwX29wdGlvbnMucHJvdG8SD2dvb2ds" + + "ZS5wcm90b2J1ZhogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8i" + + "/AMKEUNTaGFycEZpbGVPcHRpb25zEhEKCW5hbWVzcGFjZRgBIAEoCRIaChJ1" + + "bWJyZWxsYV9jbGFzc25hbWUYAiABKAkSHAoOcHVibGljX2NsYXNzZXMYAyAB" + + "KAg6BHRydWUSFgoObXVsdGlwbGVfZmlsZXMYBCABKAgSFAoMbmVzdF9jbGFz" + + "c2VzGAUgASgIEhYKDmNvZGVfY29udHJhY3RzGAYgASgIEiQKHGV4cGFuZF9u" + + "YW1lc3BhY2VfZGlyZWN0b3JpZXMYByABKAgSHAoOY2xzX2NvbXBsaWFuY2UY" + + "CCABKAg6BHRydWUSHwoQYWRkX3NlcmlhbGl6YWJsZRgJIAEoCDoFZmFsc2US" + + "IwoVZ2VuZXJhdGVfcHJpdmF0ZV9jdG9yGAogASgIOgR0cnVlEhwKDmZpbGVf" + + "ZXh0ZW5zaW9uGN0BIAEoCToDLmNzEhsKEnVtYnJlbGxhX25hbWVzcGFjZRje" + + "ASABKAkSHAoQb3V0cHV0X2RpcmVjdG9yeRjfASABKAk6AS4SJgoWaWdub3Jl" + + "X2dvb2dsZV9wcm90b2J1ZhjgASABKAg6BWZhbHNlEkkKFnNlcnZpY2VfZ2Vu" + + "ZXJhdG9yX3R5cGUY4QEgASgOMiIuZ29vZ2xlLnByb3RvYnVmLkNTaGFycFNl" + + "cnZpY2VUeXBlOgROT05FIisKEkNTaGFycEZpZWxkT3B0aW9ucxIVCg1wcm9w" + + "ZXJ0eV9uYW1lGAEgASgJIiwKFENTaGFycFNlcnZpY2VPcHRpb25zEhQKDGlu" + + "dGVyZmFjZV9pZBgBIAEoCSIqChNDU2hhcnBNZXRob2RPcHRpb25zEhMKC2Rp" + + "c3BhdGNoX2lkGAEgASgFKksKEUNTaGFycFNlcnZpY2VUeXBlEggKBE5PTkUQ" + + "ABILCgdHRU5FUklDEAESDQoJSU5URVJGQUNFEAISEAoMSVJQQ0RJU1BBVENI" + + "EAM6XgoTY3NoYXJwX2ZpbGVfb3B0aW9ucxIcLmdvb2dsZS5wcm90b2J1Zi5G" + + "aWxlT3B0aW9ucxjoByABKAsyIi5nb29nbGUucHJvdG9idWYuQ1NoYXJwRmls" + + "ZU9wdGlvbnM6YQoUY3NoYXJwX2ZpZWxkX29wdGlvbnMSHS5nb29nbGUucHJv" + + "dG9idWYuRmllbGRPcHRpb25zGOgHIAEoCzIjLmdvb2dsZS5wcm90b2J1Zi5D" + + "U2hhcnBGaWVsZE9wdGlvbnM6ZwoWY3NoYXJwX3NlcnZpY2Vfb3B0aW9ucxIf" + + "Lmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucxjoByABKAsyJS5nb29n" + + "bGUucHJvdG9idWYuQ1NoYXJwU2VydmljZU9wdGlvbnM6ZAoVY3NoYXJwX21l" + + "dGhvZF9vcHRpb25zEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMY" + + "6AcgASgLMiQuZ29vZ2xlLnByb3RvYnVmLkNTaGFycE1ldGhvZE9wdGlvbnM="); + pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) { + descriptor = root; + internal__static_google_protobuf_CSharpFileOptions__Descriptor = Descriptor.MessageTypes[0]; + internal__static_google_protobuf_CSharpFileOptions__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_CSharpFileOptions__Descriptor, + new string[] { "Namespace", "UmbrellaClassname", "PublicClasses", "MultipleFiles", "NestClasses", "CodeContracts", "ExpandNamespaceDirectories", "ClsCompliance", "AddSerializable", "GeneratePrivateCtor", "FileExtension", "UmbrellaNamespace", "OutputDirectory", "IgnoreGoogleProtobuf", "ServiceGeneratorType", }); + internal__static_google_protobuf_CSharpFieldOptions__Descriptor = Descriptor.MessageTypes[1]; + internal__static_google_protobuf_CSharpFieldOptions__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_CSharpFieldOptions__Descriptor, + new string[] { "PropertyName", }); + internal__static_google_protobuf_CSharpServiceOptions__Descriptor = Descriptor.MessageTypes[2]; + internal__static_google_protobuf_CSharpServiceOptions__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_CSharpServiceOptions__Descriptor, + new string[] { "InterfaceId", }); + internal__static_google_protobuf_CSharpMethodOptions__Descriptor = Descriptor.MessageTypes[3]; + internal__static_google_protobuf_CSharpMethodOptions__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_CSharpMethodOptions__Descriptor, + new string[] { "DispatchId", }); + global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CSharpFileOptions = pb::GeneratedSingleExtension.CreateInstance(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor.Extensions[0]); + global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CSharpFieldOptions = pb::GeneratedSingleExtension.CreateInstance(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor.Extensions[1]); + global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CsharpServiceOptions = pb::GeneratedSingleExtension.CreateInstance(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor.Extensions[2]); + global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CsharpMethodOptions = pb::GeneratedSingleExtension.CreateInstance(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor.Extensions[3]); + return null; + }; + pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData, + new pbd::FileDescriptor[] { + global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, + }, assigner); + } + #endregion + + } + #region Enums + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public enum CSharpServiceType { + NONE = 0, + GENERIC = 1, + INTERFACE = 2, + IRPCDISPATCH = 3, + } + + #endregion + + #region Messages + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class CSharpFileOptions : pb::GeneratedMessage { + private CSharpFileOptions() { } + private static readonly CSharpFileOptions defaultInstance = new CSharpFileOptions().MakeReadOnly(); + private static readonly string[] _cSharpFileOptionsFieldNames = new string[] { "add_serializable", "cls_compliance", "code_contracts", "expand_namespace_directories", "file_extension", "generate_private_ctor", "ignore_google_protobuf", "multiple_files", "namespace", "nest_classes", "output_directory", "public_classes", "service_generator_type", "umbrella_classname", "umbrella_namespace" }; + private static readonly uint[] _cSharpFileOptionsFieldTags = new uint[] { 72, 64, 48, 56, 1770, 80, 1792, 32, 10, 40, 1786, 24, 1800, 18, 1778 }; + public static CSharpFileOptions DefaultInstance { + get { return defaultInstance; } + } + + public override CSharpFileOptions DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override CSharpFileOptions ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpFileOptions__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpFileOptions__FieldAccessorTable; } + } + + public const int NamespaceFieldNumber = 1; + private bool hasNamespace; + private string namespace_ = ""; + public bool HasNamespace { + get { return hasNamespace; } + } + public string Namespace { + get { return namespace_; } + } + + public const int UmbrellaClassnameFieldNumber = 2; + private bool hasUmbrellaClassname; + private string umbrellaClassname_ = ""; + public bool HasUmbrellaClassname { + get { return hasUmbrellaClassname; } + } + public string UmbrellaClassname { + get { return umbrellaClassname_; } + } + + public const int PublicClassesFieldNumber = 3; + private bool hasPublicClasses; + private bool publicClasses_ = true; + public bool HasPublicClasses { + get { return hasPublicClasses; } + } + public bool PublicClasses { + get { return publicClasses_; } + } + + public const int MultipleFilesFieldNumber = 4; + private bool hasMultipleFiles; + private bool multipleFiles_; + public bool HasMultipleFiles { + get { return hasMultipleFiles; } + } + public bool MultipleFiles { + get { return multipleFiles_; } + } + + public const int NestClassesFieldNumber = 5; + private bool hasNestClasses; + private bool nestClasses_; + public bool HasNestClasses { + get { return hasNestClasses; } + } + public bool NestClasses { + get { return nestClasses_; } + } + + public const int CodeContractsFieldNumber = 6; + private bool hasCodeContracts; + private bool codeContracts_; + public bool HasCodeContracts { + get { return hasCodeContracts; } + } + public bool CodeContracts { + get { return codeContracts_; } + } + + public const int ExpandNamespaceDirectoriesFieldNumber = 7; + private bool hasExpandNamespaceDirectories; + private bool expandNamespaceDirectories_; + public bool HasExpandNamespaceDirectories { + get { return hasExpandNamespaceDirectories; } + } + public bool ExpandNamespaceDirectories { + get { return expandNamespaceDirectories_; } + } + + public const int ClsComplianceFieldNumber = 8; + private bool hasClsCompliance; + private bool clsCompliance_ = true; + public bool HasClsCompliance { + get { return hasClsCompliance; } + } + public bool ClsCompliance { + get { return clsCompliance_; } + } + + public const int AddSerializableFieldNumber = 9; + private bool hasAddSerializable; + private bool addSerializable_; + public bool HasAddSerializable { + get { return hasAddSerializable; } + } + public bool AddSerializable { + get { return addSerializable_; } + } + + public const int GeneratePrivateCtorFieldNumber = 10; + private bool hasGeneratePrivateCtor; + private bool generatePrivateCtor_ = true; + public bool HasGeneratePrivateCtor { + get { return hasGeneratePrivateCtor; } + } + public bool GeneratePrivateCtor { + get { return generatePrivateCtor_; } + } + + public const int FileExtensionFieldNumber = 221; + private bool hasFileExtension; + private string fileExtension_ = ".cs"; + public bool HasFileExtension { + get { return hasFileExtension; } + } + public string FileExtension { + get { return fileExtension_; } + } + + public const int UmbrellaNamespaceFieldNumber = 222; + private bool hasUmbrellaNamespace; + private string umbrellaNamespace_ = ""; + public bool HasUmbrellaNamespace { + get { return hasUmbrellaNamespace; } + } + public string UmbrellaNamespace { + get { return umbrellaNamespace_; } + } + + public const int OutputDirectoryFieldNumber = 223; + private bool hasOutputDirectory; + private string outputDirectory_ = "."; + public bool HasOutputDirectory { + get { return hasOutputDirectory; } + } + public string OutputDirectory { + get { return outputDirectory_; } + } + + public const int IgnoreGoogleProtobufFieldNumber = 224; + private bool hasIgnoreGoogleProtobuf; + private bool ignoreGoogleProtobuf_; + public bool HasIgnoreGoogleProtobuf { + get { return hasIgnoreGoogleProtobuf; } + } + public bool IgnoreGoogleProtobuf { + get { return ignoreGoogleProtobuf_; } + } + + public const int ServiceGeneratorTypeFieldNumber = 225; + private bool hasServiceGeneratorType; + private global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType serviceGeneratorType_ = global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType.NONE; + public bool HasServiceGeneratorType { + get { return hasServiceGeneratorType; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType ServiceGeneratorType { + get { return serviceGeneratorType_; } + } + + public override bool IsInitialized { + get { + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _cSharpFileOptionsFieldNames; + if (hasNamespace) { + output.WriteString(1, field_names[8], Namespace); + } + if (hasUmbrellaClassname) { + output.WriteString(2, field_names[13], UmbrellaClassname); + } + if (hasPublicClasses) { + output.WriteBool(3, field_names[11], PublicClasses); + } + if (hasMultipleFiles) { + output.WriteBool(4, field_names[7], MultipleFiles); + } + if (hasNestClasses) { + output.WriteBool(5, field_names[9], NestClasses); + } + if (hasCodeContracts) { + output.WriteBool(6, field_names[2], CodeContracts); + } + if (hasExpandNamespaceDirectories) { + output.WriteBool(7, field_names[3], ExpandNamespaceDirectories); + } + if (hasClsCompliance) { + output.WriteBool(8, field_names[1], ClsCompliance); + } + if (hasAddSerializable) { + output.WriteBool(9, field_names[0], AddSerializable); + } + if (hasGeneratePrivateCtor) { + output.WriteBool(10, field_names[5], GeneratePrivateCtor); + } + if (hasFileExtension) { + output.WriteString(221, field_names[4], FileExtension); + } + if (hasUmbrellaNamespace) { + output.WriteString(222, field_names[14], UmbrellaNamespace); + } + if (hasOutputDirectory) { + output.WriteString(223, field_names[10], OutputDirectory); + } + if (hasIgnoreGoogleProtobuf) { + output.WriteBool(224, field_names[6], IgnoreGoogleProtobuf); + } + if (hasServiceGeneratorType) { + output.WriteEnum(225, field_names[12], (int) ServiceGeneratorType, ServiceGeneratorType); + } + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasNamespace) { + size += pb::CodedOutputStream.ComputeStringSize(1, Namespace); + } + if (hasUmbrellaClassname) { + size += pb::CodedOutputStream.ComputeStringSize(2, UmbrellaClassname); + } + if (hasPublicClasses) { + size += pb::CodedOutputStream.ComputeBoolSize(3, PublicClasses); + } + if (hasMultipleFiles) { + size += pb::CodedOutputStream.ComputeBoolSize(4, MultipleFiles); + } + if (hasNestClasses) { + size += pb::CodedOutputStream.ComputeBoolSize(5, NestClasses); + } + if (hasCodeContracts) { + size += pb::CodedOutputStream.ComputeBoolSize(6, CodeContracts); + } + if (hasExpandNamespaceDirectories) { + size += pb::CodedOutputStream.ComputeBoolSize(7, ExpandNamespaceDirectories); + } + if (hasClsCompliance) { + size += pb::CodedOutputStream.ComputeBoolSize(8, ClsCompliance); + } + if (hasAddSerializable) { + size += pb::CodedOutputStream.ComputeBoolSize(9, AddSerializable); + } + if (hasGeneratePrivateCtor) { + size += pb::CodedOutputStream.ComputeBoolSize(10, GeneratePrivateCtor); + } + if (hasFileExtension) { + size += pb::CodedOutputStream.ComputeStringSize(221, FileExtension); + } + if (hasUmbrellaNamespace) { + size += pb::CodedOutputStream.ComputeStringSize(222, UmbrellaNamespace); + } + if (hasOutputDirectory) { + size += pb::CodedOutputStream.ComputeStringSize(223, OutputDirectory); + } + if (hasIgnoreGoogleProtobuf) { + size += pb::CodedOutputStream.ComputeBoolSize(224, IgnoreGoogleProtobuf); + } + if (hasServiceGeneratorType) { + size += pb::CodedOutputStream.ComputeEnumSize(225, (int) ServiceGeneratorType); + } + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static CSharpFileOptions ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static CSharpFileOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static CSharpFileOptions ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static CSharpFileOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static CSharpFileOptions ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static CSharpFileOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static CSharpFileOptions ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static CSharpFileOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static CSharpFileOptions ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static CSharpFileOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private CSharpFileOptions MakeReadOnly() { + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(CSharpFileOptions prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::GeneratedBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(CSharpFileOptions cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private CSharpFileOptions result; + + private CSharpFileOptions PrepareBuilder() { + if (resultIsReadOnly) { + CSharpFileOptions original = result; + result = new CSharpFileOptions(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override CSharpFileOptions MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.Descriptor; } + } + + public override CSharpFileOptions DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.DefaultInstance; } + } + + public override CSharpFileOptions BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is CSharpFileOptions) { + return MergeFrom((CSharpFileOptions) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(CSharpFileOptions other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.DefaultInstance) return this; + PrepareBuilder(); + if (other.HasNamespace) { + Namespace = other.Namespace; + } + if (other.HasUmbrellaClassname) { + UmbrellaClassname = other.UmbrellaClassname; + } + if (other.HasPublicClasses) { + PublicClasses = other.PublicClasses; + } + if (other.HasMultipleFiles) { + MultipleFiles = other.MultipleFiles; + } + if (other.HasNestClasses) { + NestClasses = other.NestClasses; + } + if (other.HasCodeContracts) { + CodeContracts = other.CodeContracts; + } + if (other.HasExpandNamespaceDirectories) { + ExpandNamespaceDirectories = other.ExpandNamespaceDirectories; + } + if (other.HasClsCompliance) { + ClsCompliance = other.ClsCompliance; + } + if (other.HasAddSerializable) { + AddSerializable = other.AddSerializable; + } + if (other.HasGeneratePrivateCtor) { + GeneratePrivateCtor = other.GeneratePrivateCtor; + } + if (other.HasFileExtension) { + FileExtension = other.FileExtension; + } + if (other.HasUmbrellaNamespace) { + UmbrellaNamespace = other.UmbrellaNamespace; + } + if (other.HasOutputDirectory) { + OutputDirectory = other.OutputDirectory; + } + if (other.HasIgnoreGoogleProtobuf) { + IgnoreGoogleProtobuf = other.IgnoreGoogleProtobuf; + } + if (other.HasServiceGeneratorType) { + ServiceGeneratorType = other.ServiceGeneratorType; + } + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_cSharpFileOptionsFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _cSharpFileOptionsFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 10: { + result.hasNamespace = input.ReadString(ref result.namespace_); + break; + } + case 18: { + result.hasUmbrellaClassname = input.ReadString(ref result.umbrellaClassname_); + break; + } + case 24: { + result.hasPublicClasses = input.ReadBool(ref result.publicClasses_); + break; + } + case 32: { + result.hasMultipleFiles = input.ReadBool(ref result.multipleFiles_); + break; + } + case 40: { + result.hasNestClasses = input.ReadBool(ref result.nestClasses_); + break; + } + case 48: { + result.hasCodeContracts = input.ReadBool(ref result.codeContracts_); + break; + } + case 56: { + result.hasExpandNamespaceDirectories = input.ReadBool(ref result.expandNamespaceDirectories_); + break; + } + case 64: { + result.hasClsCompliance = input.ReadBool(ref result.clsCompliance_); + break; + } + case 72: { + result.hasAddSerializable = input.ReadBool(ref result.addSerializable_); + break; + } + case 80: { + result.hasGeneratePrivateCtor = input.ReadBool(ref result.generatePrivateCtor_); + break; + } + case 1770: { + result.hasFileExtension = input.ReadString(ref result.fileExtension_); + break; + } + case 1778: { + result.hasUmbrellaNamespace = input.ReadString(ref result.umbrellaNamespace_); + break; + } + case 1786: { + result.hasOutputDirectory = input.ReadString(ref result.outputDirectory_); + break; + } + case 1792: { + result.hasIgnoreGoogleProtobuf = input.ReadBool(ref result.ignoreGoogleProtobuf_); + break; + } + case 1800: { + object unknown; + if(input.ReadEnum(ref result.serviceGeneratorType_, out unknown)) { + result.hasServiceGeneratorType = true; + } else if(unknown is int) { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + unknownFields.MergeVarintField(225, (ulong)(int)unknown); + } + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public bool HasNamespace { + get { return result.hasNamespace; } + } + public string Namespace { + get { return result.Namespace; } + set { SetNamespace(value); } + } + public Builder SetNamespace(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasNamespace = true; + result.namespace_ = value; + return this; + } + public Builder ClearNamespace() { + PrepareBuilder(); + result.hasNamespace = false; + result.namespace_ = ""; + return this; + } + + public bool HasUmbrellaClassname { + get { return result.hasUmbrellaClassname; } + } + public string UmbrellaClassname { + get { return result.UmbrellaClassname; } + set { SetUmbrellaClassname(value); } + } + public Builder SetUmbrellaClassname(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasUmbrellaClassname = true; + result.umbrellaClassname_ = value; + return this; + } + public Builder ClearUmbrellaClassname() { + PrepareBuilder(); + result.hasUmbrellaClassname = false; + result.umbrellaClassname_ = ""; + return this; + } + + public bool HasPublicClasses { + get { return result.hasPublicClasses; } + } + public bool PublicClasses { + get { return result.PublicClasses; } + set { SetPublicClasses(value); } + } + public Builder SetPublicClasses(bool value) { + PrepareBuilder(); + result.hasPublicClasses = true; + result.publicClasses_ = value; + return this; + } + public Builder ClearPublicClasses() { + PrepareBuilder(); + result.hasPublicClasses = false; + result.publicClasses_ = true; + return this; + } + + public bool HasMultipleFiles { + get { return result.hasMultipleFiles; } + } + public bool MultipleFiles { + get { return result.MultipleFiles; } + set { SetMultipleFiles(value); } + } + public Builder SetMultipleFiles(bool value) { + PrepareBuilder(); + result.hasMultipleFiles = true; + result.multipleFiles_ = value; + return this; + } + public Builder ClearMultipleFiles() { + PrepareBuilder(); + result.hasMultipleFiles = false; + result.multipleFiles_ = false; + return this; + } + + public bool HasNestClasses { + get { return result.hasNestClasses; } + } + public bool NestClasses { + get { return result.NestClasses; } + set { SetNestClasses(value); } + } + public Builder SetNestClasses(bool value) { + PrepareBuilder(); + result.hasNestClasses = true; + result.nestClasses_ = value; + return this; + } + public Builder ClearNestClasses() { + PrepareBuilder(); + result.hasNestClasses = false; + result.nestClasses_ = false; + return this; + } + + public bool HasCodeContracts { + get { return result.hasCodeContracts; } + } + public bool CodeContracts { + get { return result.CodeContracts; } + set { SetCodeContracts(value); } + } + public Builder SetCodeContracts(bool value) { + PrepareBuilder(); + result.hasCodeContracts = true; + result.codeContracts_ = value; + return this; + } + public Builder ClearCodeContracts() { + PrepareBuilder(); + result.hasCodeContracts = false; + result.codeContracts_ = false; + return this; + } + + public bool HasExpandNamespaceDirectories { + get { return result.hasExpandNamespaceDirectories; } + } + public bool ExpandNamespaceDirectories { + get { return result.ExpandNamespaceDirectories; } + set { SetExpandNamespaceDirectories(value); } + } + public Builder SetExpandNamespaceDirectories(bool value) { + PrepareBuilder(); + result.hasExpandNamespaceDirectories = true; + result.expandNamespaceDirectories_ = value; + return this; + } + public Builder ClearExpandNamespaceDirectories() { + PrepareBuilder(); + result.hasExpandNamespaceDirectories = false; + result.expandNamespaceDirectories_ = false; + return this; + } + + public bool HasClsCompliance { + get { return result.hasClsCompliance; } + } + public bool ClsCompliance { + get { return result.ClsCompliance; } + set { SetClsCompliance(value); } + } + public Builder SetClsCompliance(bool value) { + PrepareBuilder(); + result.hasClsCompliance = true; + result.clsCompliance_ = value; + return this; + } + public Builder ClearClsCompliance() { + PrepareBuilder(); + result.hasClsCompliance = false; + result.clsCompliance_ = true; + return this; + } + + public bool HasAddSerializable { + get { return result.hasAddSerializable; } + } + public bool AddSerializable { + get { return result.AddSerializable; } + set { SetAddSerializable(value); } + } + public Builder SetAddSerializable(bool value) { + PrepareBuilder(); + result.hasAddSerializable = true; + result.addSerializable_ = value; + return this; + } + public Builder ClearAddSerializable() { + PrepareBuilder(); + result.hasAddSerializable = false; + result.addSerializable_ = false; + return this; + } + + public bool HasGeneratePrivateCtor { + get { return result.hasGeneratePrivateCtor; } + } + public bool GeneratePrivateCtor { + get { return result.GeneratePrivateCtor; } + set { SetGeneratePrivateCtor(value); } + } + public Builder SetGeneratePrivateCtor(bool value) { + PrepareBuilder(); + result.hasGeneratePrivateCtor = true; + result.generatePrivateCtor_ = value; + return this; + } + public Builder ClearGeneratePrivateCtor() { + PrepareBuilder(); + result.hasGeneratePrivateCtor = false; + result.generatePrivateCtor_ = true; + return this; + } + + public bool HasFileExtension { + get { return result.hasFileExtension; } + } + public string FileExtension { + get { return result.FileExtension; } + set { SetFileExtension(value); } + } + public Builder SetFileExtension(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasFileExtension = true; + result.fileExtension_ = value; + return this; + } + public Builder ClearFileExtension() { + PrepareBuilder(); + result.hasFileExtension = false; + result.fileExtension_ = ".cs"; + return this; + } + + public bool HasUmbrellaNamespace { + get { return result.hasUmbrellaNamespace; } + } + public string UmbrellaNamespace { + get { return result.UmbrellaNamespace; } + set { SetUmbrellaNamespace(value); } + } + public Builder SetUmbrellaNamespace(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasUmbrellaNamespace = true; + result.umbrellaNamespace_ = value; + return this; + } + public Builder ClearUmbrellaNamespace() { + PrepareBuilder(); + result.hasUmbrellaNamespace = false; + result.umbrellaNamespace_ = ""; + return this; + } + + public bool HasOutputDirectory { + get { return result.hasOutputDirectory; } + } + public string OutputDirectory { + get { return result.OutputDirectory; } + set { SetOutputDirectory(value); } + } + public Builder SetOutputDirectory(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasOutputDirectory = true; + result.outputDirectory_ = value; + return this; + } + public Builder ClearOutputDirectory() { + PrepareBuilder(); + result.hasOutputDirectory = false; + result.outputDirectory_ = "."; + return this; + } + + public bool HasIgnoreGoogleProtobuf { + get { return result.hasIgnoreGoogleProtobuf; } + } + public bool IgnoreGoogleProtobuf { + get { return result.IgnoreGoogleProtobuf; } + set { SetIgnoreGoogleProtobuf(value); } + } + public Builder SetIgnoreGoogleProtobuf(bool value) { + PrepareBuilder(); + result.hasIgnoreGoogleProtobuf = true; + result.ignoreGoogleProtobuf_ = value; + return this; + } + public Builder ClearIgnoreGoogleProtobuf() { + PrepareBuilder(); + result.hasIgnoreGoogleProtobuf = false; + result.ignoreGoogleProtobuf_ = false; + return this; + } + + public bool HasServiceGeneratorType { + get { return result.hasServiceGeneratorType; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType ServiceGeneratorType { + get { return result.ServiceGeneratorType; } + set { SetServiceGeneratorType(value); } + } + public Builder SetServiceGeneratorType(global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType value) { + PrepareBuilder(); + result.hasServiceGeneratorType = true; + result.serviceGeneratorType_ = value; + return this; + } + public Builder ClearServiceGeneratorType() { + PrepareBuilder(); + result.hasServiceGeneratorType = false; + result.serviceGeneratorType_ = global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType.NONE; + return this; + } + } + static CSharpFileOptions() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class CSharpFieldOptions : pb::GeneratedMessage { + private CSharpFieldOptions() { } + private static readonly CSharpFieldOptions defaultInstance = new CSharpFieldOptions().MakeReadOnly(); + private static readonly string[] _cSharpFieldOptionsFieldNames = new string[] { "property_name" }; + private static readonly uint[] _cSharpFieldOptionsFieldTags = new uint[] { 10 }; + public static CSharpFieldOptions DefaultInstance { + get { return defaultInstance; } + } + + public override CSharpFieldOptions DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override CSharpFieldOptions ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpFieldOptions__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpFieldOptions__FieldAccessorTable; } + } + + public const int PropertyNameFieldNumber = 1; + private bool hasPropertyName; + private string propertyName_ = ""; + public bool HasPropertyName { + get { return hasPropertyName; } + } + public string PropertyName { + get { return propertyName_; } + } + + public override bool IsInitialized { + get { + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _cSharpFieldOptionsFieldNames; + if (hasPropertyName) { + output.WriteString(1, field_names[0], PropertyName); + } + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasPropertyName) { + size += pb::CodedOutputStream.ComputeStringSize(1, PropertyName); + } + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static CSharpFieldOptions ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static CSharpFieldOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static CSharpFieldOptions ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static CSharpFieldOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static CSharpFieldOptions ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static CSharpFieldOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static CSharpFieldOptions ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static CSharpFieldOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static CSharpFieldOptions ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static CSharpFieldOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private CSharpFieldOptions MakeReadOnly() { + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(CSharpFieldOptions prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::GeneratedBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(CSharpFieldOptions cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private CSharpFieldOptions result; + + private CSharpFieldOptions PrepareBuilder() { + if (resultIsReadOnly) { + CSharpFieldOptions original = result; + result = new CSharpFieldOptions(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override CSharpFieldOptions MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.Descriptor; } + } + + public override CSharpFieldOptions DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.DefaultInstance; } + } + + public override CSharpFieldOptions BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is CSharpFieldOptions) { + return MergeFrom((CSharpFieldOptions) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(CSharpFieldOptions other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.DefaultInstance) return this; + PrepareBuilder(); + if (other.HasPropertyName) { + PropertyName = other.PropertyName; + } + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_cSharpFieldOptionsFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _cSharpFieldOptionsFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 10: { + result.hasPropertyName = input.ReadString(ref result.propertyName_); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public bool HasPropertyName { + get { return result.hasPropertyName; } + } + public string PropertyName { + get { return result.PropertyName; } + set { SetPropertyName(value); } + } + public Builder SetPropertyName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasPropertyName = true; + result.propertyName_ = value; + return this; + } + public Builder ClearPropertyName() { + PrepareBuilder(); + result.hasPropertyName = false; + result.propertyName_ = ""; + return this; + } + } + static CSharpFieldOptions() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class CSharpServiceOptions : pb::GeneratedMessage { + private CSharpServiceOptions() { } + private static readonly CSharpServiceOptions defaultInstance = new CSharpServiceOptions().MakeReadOnly(); + private static readonly string[] _cSharpServiceOptionsFieldNames = new string[] { "interface_id" }; + private static readonly uint[] _cSharpServiceOptionsFieldTags = new uint[] { 10 }; + public static CSharpServiceOptions DefaultInstance { + get { return defaultInstance; } + } + + public override CSharpServiceOptions DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override CSharpServiceOptions ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpServiceOptions__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpServiceOptions__FieldAccessorTable; } + } + + public const int InterfaceIdFieldNumber = 1; + private bool hasInterfaceId; + private string interfaceId_ = ""; + public bool HasInterfaceId { + get { return hasInterfaceId; } + } + public string InterfaceId { + get { return interfaceId_; } + } + + public override bool IsInitialized { + get { + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _cSharpServiceOptionsFieldNames; + if (hasInterfaceId) { + output.WriteString(1, field_names[0], InterfaceId); + } + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasInterfaceId) { + size += pb::CodedOutputStream.ComputeStringSize(1, InterfaceId); + } + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static CSharpServiceOptions ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static CSharpServiceOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static CSharpServiceOptions ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static CSharpServiceOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static CSharpServiceOptions ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static CSharpServiceOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static CSharpServiceOptions ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static CSharpServiceOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static CSharpServiceOptions ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static CSharpServiceOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private CSharpServiceOptions MakeReadOnly() { + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(CSharpServiceOptions prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::GeneratedBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(CSharpServiceOptions cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private CSharpServiceOptions result; + + private CSharpServiceOptions PrepareBuilder() { + if (resultIsReadOnly) { + CSharpServiceOptions original = result; + result = new CSharpServiceOptions(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override CSharpServiceOptions MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions.Descriptor; } + } + + public override CSharpServiceOptions DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions.DefaultInstance; } + } + + public override CSharpServiceOptions BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is CSharpServiceOptions) { + return MergeFrom((CSharpServiceOptions) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(CSharpServiceOptions other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions.DefaultInstance) return this; + PrepareBuilder(); + if (other.HasInterfaceId) { + InterfaceId = other.InterfaceId; + } + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_cSharpServiceOptionsFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _cSharpServiceOptionsFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 10: { + result.hasInterfaceId = input.ReadString(ref result.interfaceId_); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public bool HasInterfaceId { + get { return result.hasInterfaceId; } + } + public string InterfaceId { + get { return result.InterfaceId; } + set { SetInterfaceId(value); } + } + public Builder SetInterfaceId(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasInterfaceId = true; + result.interfaceId_ = value; + return this; + } + public Builder ClearInterfaceId() { + PrepareBuilder(); + result.hasInterfaceId = false; + result.interfaceId_ = ""; + return this; + } + } + static CSharpServiceOptions() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class CSharpMethodOptions : pb::GeneratedMessage { + private CSharpMethodOptions() { } + private static readonly CSharpMethodOptions defaultInstance = new CSharpMethodOptions().MakeReadOnly(); + private static readonly string[] _cSharpMethodOptionsFieldNames = new string[] { "dispatch_id" }; + private static readonly uint[] _cSharpMethodOptionsFieldTags = new uint[] { 8 }; + public static CSharpMethodOptions DefaultInstance { + get { return defaultInstance; } + } + + public override CSharpMethodOptions DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override CSharpMethodOptions ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpMethodOptions__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpMethodOptions__FieldAccessorTable; } + } + + public const int DispatchIdFieldNumber = 1; + private bool hasDispatchId; + private int dispatchId_; + public bool HasDispatchId { + get { return hasDispatchId; } + } + public int DispatchId { + get { return dispatchId_; } + } + + public override bool IsInitialized { + get { + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _cSharpMethodOptionsFieldNames; + if (hasDispatchId) { + output.WriteInt32(1, field_names[0], DispatchId); + } + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasDispatchId) { + size += pb::CodedOutputStream.ComputeInt32Size(1, DispatchId); + } + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static CSharpMethodOptions ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static CSharpMethodOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static CSharpMethodOptions ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static CSharpMethodOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static CSharpMethodOptions ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static CSharpMethodOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static CSharpMethodOptions ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static CSharpMethodOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static CSharpMethodOptions ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static CSharpMethodOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private CSharpMethodOptions MakeReadOnly() { + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(CSharpMethodOptions prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::GeneratedBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(CSharpMethodOptions cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private CSharpMethodOptions result; + + private CSharpMethodOptions PrepareBuilder() { + if (resultIsReadOnly) { + CSharpMethodOptions original = result; + result = new CSharpMethodOptions(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override CSharpMethodOptions MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions.Descriptor; } + } + + public override CSharpMethodOptions DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions.DefaultInstance; } + } + + public override CSharpMethodOptions BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is CSharpMethodOptions) { + return MergeFrom((CSharpMethodOptions) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(CSharpMethodOptions other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions.DefaultInstance) return this; + PrepareBuilder(); + if (other.HasDispatchId) { + DispatchId = other.DispatchId; + } + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_cSharpMethodOptionsFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _cSharpMethodOptionsFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 8: { + result.hasDispatchId = input.ReadInt32(ref result.dispatchId_); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public bool HasDispatchId { + get { return result.hasDispatchId; } + } + public int DispatchId { + get { return result.DispatchId; } + set { SetDispatchId(value); } + } + public Builder SetDispatchId(int value) { + PrepareBuilder(); + result.hasDispatchId = true; + result.dispatchId_ = value; + return this; + } + public Builder ClearDispatchId() { + PrepareBuilder(); + result.hasDispatchId = false; + result.dispatchId_ = 0; + return this; + } + } + static CSharpMethodOptions() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, null); + } + } + + #endregion + +} + +#endregion Designer generated code diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs new file mode 100644 index 0000000000..6b2e2c1b4d --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs @@ -0,0 +1,9111 @@ +// Generated by ProtoGen, Version=2.3.0.277, Culture=neutral, PublicKeyToken=17b3b1f090c3ea48. DO NOT EDIT! +#pragma warning disable 1591, 0612 +#region Designer generated code + +using pb = global::Google.ProtocolBuffers; +using pbc = global::Google.ProtocolBuffers.Collections; +using pbd = global::Google.ProtocolBuffers.Descriptors; +using scg = global::System.Collections.Generic; +namespace Google.ProtocolBuffers.DescriptorProtos { + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public static partial class DescriptorProtoFile { + + #region Extension registration + public static void RegisterAllExtensions(pb::ExtensionRegistry registry) { + } + #endregion + #region Static variables + internal static pbd::MessageDescriptor internal__static_google_protobuf_FileDescriptorSet__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_FileDescriptorSet__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_FileDescriptorProto__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_FileDescriptorProto__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_DescriptorProto__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_DescriptorProto__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_DescriptorProto_ExtensionRange__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_DescriptorProto_ExtensionRange__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_FieldDescriptorProto__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_FieldDescriptorProto__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_EnumDescriptorProto__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_EnumDescriptorProto__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_EnumValueDescriptorProto__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_EnumValueDescriptorProto__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_ServiceDescriptorProto__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_ServiceDescriptorProto__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_MethodDescriptorProto__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_MethodDescriptorProto__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_FileOptions__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_FileOptions__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_MessageOptions__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_MessageOptions__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_FieldOptions__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_FieldOptions__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_EnumOptions__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_EnumOptions__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_EnumValueOptions__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_EnumValueOptions__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_ServiceOptions__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_ServiceOptions__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_MethodOptions__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_MethodOptions__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_UninterpretedOption__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_UninterpretedOption__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_UninterpretedOption_NamePart__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_UninterpretedOption_NamePart__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_SourceCodeInfo__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_SourceCodeInfo__FieldAccessorTable; + internal static pbd::MessageDescriptor internal__static_google_protobuf_SourceCodeInfo_Location__Descriptor; + internal static pb::FieldAccess.FieldAccessorTable internal__static_google_protobuf_SourceCodeInfo_Location__FieldAccessorTable; + #endregion + #region Descriptor + public static pbd::FileDescriptor Descriptor { + get { return descriptor; } + } + private static pbd::FileDescriptor descriptor; + + static DescriptorProtoFile() { + byte[] descriptorData = global::System.Convert.FromBase64String( + "CiBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90bxIPZ29vZ2xlLnBy" + + "b3RvYnVmIkcKEUZpbGVEZXNjcmlwdG9yU2V0EjIKBGZpbGUYASADKAsyJC5n" + + "b29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90byKXAwoTRmlsZURl" + + "c2NyaXB0b3JQcm90bxIMCgRuYW1lGAEgASgJEg8KB3BhY2thZ2UYAiABKAkS" + + "EgoKZGVwZW5kZW5jeRgDIAMoCRI2CgxtZXNzYWdlX3R5cGUYBCADKAsyIC5n" + + "b29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvEjcKCWVudW1fdHlwZRgF" + + "IAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvEjgK" + + "B3NlcnZpY2UYBiADKAsyJy5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2Ny" + + "aXB0b3JQcm90bxI4CglleHRlbnNpb24YByADKAsyJS5nb29nbGUucHJvdG9i" + + "dWYuRmllbGREZXNjcmlwdG9yUHJvdG8SLQoHb3B0aW9ucxgIIAEoCzIcLmdv" + + "b2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxI5ChBzb3VyY2VfY29kZV9pbmZv" + + "GAkgASgLMh8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvIqkDCg9E" + + "ZXNjcmlwdG9yUHJvdG8SDAoEbmFtZRgBIAEoCRI0CgVmaWVsZBgCIAMoCzIl" + + "Lmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bxI4CglleHRl" + + "bnNpb24YBiADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9y" + + "UHJvdG8SNQoLbmVzdGVkX3R5cGUYAyADKAsyIC5nb29nbGUucHJvdG9idWYu" + + "RGVzY3JpcHRvclByb3RvEjcKCWVudW1fdHlwZRgEIAMoCzIkLmdvb2dsZS5w" + + "cm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvEkgKD2V4dGVuc2lvbl9yYW5n" + + "ZRgFIAMoCzIvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0" + + "ZW5zaW9uUmFuZ2USMAoHb3B0aW9ucxgHIAEoCzIfLmdvb2dsZS5wcm90b2J1" + + "Zi5NZXNzYWdlT3B0aW9ucxosCg5FeHRlbnNpb25SYW5nZRINCgVzdGFydBgB" + + "IAEoBRILCgNlbmQYAiABKAUilAUKFEZpZWxkRGVzY3JpcHRvclByb3RvEgwK" + + "BG5hbWUYASABKAkSDgoGbnVtYmVyGAMgASgFEjoKBWxhYmVsGAQgASgOMisu" + + "Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsEjgK" + + "BHR5cGUYBSABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9y" + + "UHJvdG8uVHlwZRIRCgl0eXBlX25hbWUYBiABKAkSEAoIZXh0ZW5kZWUYAiAB" + + "KAkSFQoNZGVmYXVsdF92YWx1ZRgHIAEoCRIuCgdvcHRpb25zGAggASgLMh0u" + + "Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucyK2AgoEVHlwZRIPCgtUWVBF" + + "X0RPVUJMRRABEg4KClRZUEVfRkxPQVQQAhIOCgpUWVBFX0lOVDY0EAMSDwoL" + + "VFlQRV9VSU5UNjQQBBIOCgpUWVBFX0lOVDMyEAUSEAoMVFlQRV9GSVhFRDY0" + + "EAYSEAoMVFlQRV9GSVhFRDMyEAcSDQoJVFlQRV9CT09MEAgSDwoLVFlQRV9T" + + "VFJJTkcQCRIOCgpUWVBFX0dST1VQEAoSEAoMVFlQRV9NRVNTQUdFEAsSDgoK" + + "VFlQRV9CWVRFUxAMEg8KC1RZUEVfVUlOVDMyEA0SDQoJVFlQRV9FTlVNEA4S" + + "EQoNVFlQRV9TRklYRUQzMhAPEhEKDVRZUEVfU0ZJWEVENjQQEBIPCgtUWVBF" + + "X1NJTlQzMhAREg8KC1RZUEVfU0lOVDY0EBIiQwoFTGFiZWwSEgoOTEFCRUxf" + + "T1BUSU9OQUwQARISCg5MQUJFTF9SRVFVSVJFRBACEhIKDkxBQkVMX1JFUEVB" + + "VEVEEAMijAEKE0VudW1EZXNjcmlwdG9yUHJvdG8SDAoEbmFtZRgBIAEoCRI4" + + "CgV2YWx1ZRgCIAMoCzIpLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNj" + + "cmlwdG9yUHJvdG8SLQoHb3B0aW9ucxgDIAEoCzIcLmdvb2dsZS5wcm90b2J1" + + "Zi5FbnVtT3B0aW9ucyJsChhFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8SDAoE" + + "bmFtZRgBIAEoCRIOCgZudW1iZXIYAiABKAUSMgoHb3B0aW9ucxgDIAEoCzIh" + + "Lmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zIpABChZTZXJ2aWNl" + + "RGVzY3JpcHRvclByb3RvEgwKBG5hbWUYASABKAkSNgoGbWV0aG9kGAIgAygL" + + "MiYuZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bxIwCgdv" + + "cHRpb25zGAMgASgLMh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25z" + + "In8KFU1ldGhvZERlc2NyaXB0b3JQcm90bxIMCgRuYW1lGAEgASgJEhIKCmlu" + + "cHV0X3R5cGUYAiABKAkSEwoLb3V0cHV0X3R5cGUYAyABKAkSLwoHb3B0aW9u" + + "cxgEIAEoCzIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zItUDCgtG" + + "aWxlT3B0aW9ucxIUCgxqYXZhX3BhY2thZ2UYASABKAkSHAoUamF2YV9vdXRl" + + "cl9jbGFzc25hbWUYCCABKAkSIgoTamF2YV9tdWx0aXBsZV9maWxlcxgKIAEo" + + "CDoFZmFsc2USLAodamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2gYFCAB" + + "KAg6BWZhbHNlEkYKDG9wdGltaXplX2ZvchgJIAEoDjIpLmdvb2dsZS5wcm90" + + "b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGU6BVNQRUVEEiIKE2NjX2dl" + + "bmVyaWNfc2VydmljZXMYECABKAg6BWZhbHNlEiQKFWphdmFfZ2VuZXJpY19z" + + "ZXJ2aWNlcxgRIAEoCDoFZmFsc2USIgoTcHlfZ2VuZXJpY19zZXJ2aWNlcxgS" + + "IAEoCDoFZmFsc2USQwoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQu" + + "Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24iOgoMT3B0aW1p" + + "emVNb2RlEgkKBVNQRUVEEAESDQoJQ09ERV9TSVpFEAISEAoMTElURV9SVU5U" + + "SU1FEAMqCQjoBxCAgICAAiK4AQoOTWVzc2FnZU9wdGlvbnMSJgoXbWVzc2Fn" + + "ZV9zZXRfd2lyZV9mb3JtYXQYASABKAg6BWZhbHNlEi4KH25vX3N0YW5kYXJk" + + "X2Rlc2NyaXB0b3JfYWNjZXNzb3IYAiABKAg6BWZhbHNlEkMKFHVuaW50ZXJw" + + "cmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVy" + + "cHJldGVkT3B0aW9uKgkI6AcQgICAgAIilAIKDEZpZWxkT3B0aW9ucxI6CgVj" + + "dHlwZRgBIAEoDjIjLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5" + + "cGU6BlNUUklORxIOCgZwYWNrZWQYAiABKAgSGQoKZGVwcmVjYXRlZBgDIAEo" + + "CDoFZmFsc2USHAoUZXhwZXJpbWVudGFsX21hcF9rZXkYCSABKAkSQwoUdW5p" + + "bnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVu" + + "aW50ZXJwcmV0ZWRPcHRpb24iLwoFQ1R5cGUSCgoGU1RSSU5HEAASCAoEQ09S" + + "RBABEhAKDFNUUklOR19QSUVDRRACKgkI6AcQgICAgAIiXQoLRW51bU9wdGlv" + + "bnMSQwoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnBy" + + "b3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiJiChBFbnVt" + + "VmFsdWVPcHRpb25zEkMKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIk" + + "Lmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uKgkI6AcQgICA" + + "gAIiYAoOU2VydmljZU9wdGlvbnMSQwoUdW5pbnRlcnByZXRlZF9vcHRpb24Y" + + "5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24q" + + "CQjoBxCAgICAAiJfCg1NZXRob2RPcHRpb25zEkMKFHVuaW50ZXJwcmV0ZWRf" + + "b3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVk" + + "T3B0aW9uKgkI6AcQgICAgAIingIKE1VuaW50ZXJwcmV0ZWRPcHRpb24SOwoE" + + "bmFtZRgCIAMoCzItLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0" + + "aW9uLk5hbWVQYXJ0EhgKEGlkZW50aWZpZXJfdmFsdWUYAyABKAkSGgoScG9z" + + "aXRpdmVfaW50X3ZhbHVlGAQgASgEEhoKEm5lZ2F0aXZlX2ludF92YWx1ZRgF" + + "IAEoAxIUCgxkb3VibGVfdmFsdWUYBiABKAESFAoMc3RyaW5nX3ZhbHVlGAcg" + + "ASgMEhcKD2FnZ3JlZ2F0ZV92YWx1ZRgIIAEoCRozCghOYW1lUGFydBIRCglu" + + "YW1lX3BhcnQYASACKAkSFAoMaXNfZXh0ZW5zaW9uGAIgAigIInwKDlNvdXJj" + + "ZUNvZGVJbmZvEjoKCGxvY2F0aW9uGAEgAygLMiguZ29vZ2xlLnByb3RvYnVm" + + "LlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uGi4KCExvY2F0aW9uEhAKBHBhdGgY" + + "ASADKAVCAhABEhAKBHNwYW4YAiADKAVCAhABQikKE2NvbS5nb29nbGUucHJv" + + "dG9idWZCEERlc2NyaXB0b3JQcm90b3NIAQ=="); + pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) { + descriptor = root; + internal__static_google_protobuf_FileDescriptorSet__Descriptor = Descriptor.MessageTypes[0]; + internal__static_google_protobuf_FileDescriptorSet__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_FileDescriptorSet__Descriptor, + new string[] { "File", }); + internal__static_google_protobuf_FileDescriptorProto__Descriptor = Descriptor.MessageTypes[1]; + internal__static_google_protobuf_FileDescriptorProto__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_FileDescriptorProto__Descriptor, + new string[] { "Name", "Package", "Dependency", "MessageType", "EnumType", "Service", "Extension", "Options", "SourceCodeInfo", }); + internal__static_google_protobuf_DescriptorProto__Descriptor = Descriptor.MessageTypes[2]; + internal__static_google_protobuf_DescriptorProto__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_DescriptorProto__Descriptor, + new string[] { "Name", "Field", "Extension", "NestedType", "EnumType", "ExtensionRange", "Options", }); + internal__static_google_protobuf_DescriptorProto_ExtensionRange__Descriptor = internal__static_google_protobuf_DescriptorProto__Descriptor.NestedTypes[0]; + internal__static_google_protobuf_DescriptorProto_ExtensionRange__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_DescriptorProto_ExtensionRange__Descriptor, + new string[] { "Start", "End", }); + internal__static_google_protobuf_FieldDescriptorProto__Descriptor = Descriptor.MessageTypes[3]; + internal__static_google_protobuf_FieldDescriptorProto__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_FieldDescriptorProto__Descriptor, + new string[] { "Name", "Number", "Label", "Type", "TypeName", "Extendee", "DefaultValue", "Options", }); + internal__static_google_protobuf_EnumDescriptorProto__Descriptor = Descriptor.MessageTypes[4]; + internal__static_google_protobuf_EnumDescriptorProto__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_EnumDescriptorProto__Descriptor, + new string[] { "Name", "Value", "Options", }); + internal__static_google_protobuf_EnumValueDescriptorProto__Descriptor = Descriptor.MessageTypes[5]; + internal__static_google_protobuf_EnumValueDescriptorProto__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_EnumValueDescriptorProto__Descriptor, + new string[] { "Name", "Number", "Options", }); + internal__static_google_protobuf_ServiceDescriptorProto__Descriptor = Descriptor.MessageTypes[6]; + internal__static_google_protobuf_ServiceDescriptorProto__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_ServiceDescriptorProto__Descriptor, + new string[] { "Name", "Method", "Options", }); + internal__static_google_protobuf_MethodDescriptorProto__Descriptor = Descriptor.MessageTypes[7]; + internal__static_google_protobuf_MethodDescriptorProto__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_MethodDescriptorProto__Descriptor, + new string[] { "Name", "InputType", "OutputType", "Options", }); + internal__static_google_protobuf_FileOptions__Descriptor = Descriptor.MessageTypes[8]; + internal__static_google_protobuf_FileOptions__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_FileOptions__Descriptor, + new string[] { "JavaPackage", "JavaOuterClassname", "JavaMultipleFiles", "JavaGenerateEqualsAndHash", "OptimizeFor", "CcGenericServices", "JavaGenericServices", "PyGenericServices", "UninterpretedOption", }); + internal__static_google_protobuf_MessageOptions__Descriptor = Descriptor.MessageTypes[9]; + internal__static_google_protobuf_MessageOptions__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_MessageOptions__Descriptor, + new string[] { "MessageSetWireFormat", "NoStandardDescriptorAccessor", "UninterpretedOption", }); + internal__static_google_protobuf_FieldOptions__Descriptor = Descriptor.MessageTypes[10]; + internal__static_google_protobuf_FieldOptions__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_FieldOptions__Descriptor, + new string[] { "Ctype", "Packed", "Deprecated", "ExperimentalMapKey", "UninterpretedOption", }); + internal__static_google_protobuf_EnumOptions__Descriptor = Descriptor.MessageTypes[11]; + internal__static_google_protobuf_EnumOptions__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_EnumOptions__Descriptor, + new string[] { "UninterpretedOption", }); + internal__static_google_protobuf_EnumValueOptions__Descriptor = Descriptor.MessageTypes[12]; + internal__static_google_protobuf_EnumValueOptions__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_EnumValueOptions__Descriptor, + new string[] { "UninterpretedOption", }); + internal__static_google_protobuf_ServiceOptions__Descriptor = Descriptor.MessageTypes[13]; + internal__static_google_protobuf_ServiceOptions__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_ServiceOptions__Descriptor, + new string[] { "UninterpretedOption", }); + internal__static_google_protobuf_MethodOptions__Descriptor = Descriptor.MessageTypes[14]; + internal__static_google_protobuf_MethodOptions__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_MethodOptions__Descriptor, + new string[] { "UninterpretedOption", }); + internal__static_google_protobuf_UninterpretedOption__Descriptor = Descriptor.MessageTypes[15]; + internal__static_google_protobuf_UninterpretedOption__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_UninterpretedOption__Descriptor, + new string[] { "Name", "IdentifierValue", "PositiveIntValue", "NegativeIntValue", "DoubleValue", "StringValue", "AggregateValue", }); + internal__static_google_protobuf_UninterpretedOption_NamePart__Descriptor = internal__static_google_protobuf_UninterpretedOption__Descriptor.NestedTypes[0]; + internal__static_google_protobuf_UninterpretedOption_NamePart__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_UninterpretedOption_NamePart__Descriptor, + new string[] { "NamePart_", "IsExtension", }); + internal__static_google_protobuf_SourceCodeInfo__Descriptor = Descriptor.MessageTypes[16]; + internal__static_google_protobuf_SourceCodeInfo__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_SourceCodeInfo__Descriptor, + new string[] { "Location", }); + internal__static_google_protobuf_SourceCodeInfo_Location__Descriptor = internal__static_google_protobuf_SourceCodeInfo__Descriptor.NestedTypes[0]; + internal__static_google_protobuf_SourceCodeInfo_Location__FieldAccessorTable = + new pb::FieldAccess.FieldAccessorTable(internal__static_google_protobuf_SourceCodeInfo_Location__Descriptor, + new string[] { "Path", "Span", }); + return null; + }; + pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData, + new pbd::FileDescriptor[] { + }, assigner); + } + #endregion + + } + #region Messages + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class FileDescriptorSet : pb::GeneratedMessage { + private FileDescriptorSet() { } + private static readonly FileDescriptorSet defaultInstance = new FileDescriptorSet().MakeReadOnly(); + private static readonly string[] _fileDescriptorSetFieldNames = new string[] { "file" }; + private static readonly uint[] _fileDescriptorSetFieldTags = new uint[] { 10 }; + public static FileDescriptorSet DefaultInstance { + get { return defaultInstance; } + } + + public override FileDescriptorSet DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override FileDescriptorSet ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileDescriptorSet__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileDescriptorSet__FieldAccessorTable; } + } + + public const int FileFieldNumber = 1; + private pbc::PopsicleList file_ = new pbc::PopsicleList(); + public scg::IList FileList { + get { return file_; } + } + public int FileCount { + get { return file_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto GetFile(int index) { + return file_[index]; + } + + public override bool IsInitialized { + get { + foreach (global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto element in FileList) { + if (!element.IsInitialized) return false; + } + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _fileDescriptorSetFieldNames; + if (file_.Count > 0) { + output.WriteMessageArray(1, field_names[0], file_); + } + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + foreach (global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto element in FileList) { + size += pb::CodedOutputStream.ComputeMessageSize(1, element); + } + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static FileDescriptorSet ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static FileDescriptorSet ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static FileDescriptorSet ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static FileDescriptorSet ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static FileDescriptorSet ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static FileDescriptorSet ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static FileDescriptorSet ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static FileDescriptorSet ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static FileDescriptorSet ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static FileDescriptorSet ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private FileDescriptorSet MakeReadOnly() { + file_.MakeReadOnly(); + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(FileDescriptorSet prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::GeneratedBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(FileDescriptorSet cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private FileDescriptorSet result; + + private FileDescriptorSet PrepareBuilder() { + if (resultIsReadOnly) { + FileDescriptorSet original = result; + result = new FileDescriptorSet(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override FileDescriptorSet MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.Descriptor; } + } + + public override FileDescriptorSet DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.DefaultInstance; } + } + + public override FileDescriptorSet BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is FileDescriptorSet) { + return MergeFrom((FileDescriptorSet) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(FileDescriptorSet other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.DefaultInstance) return this; + PrepareBuilder(); + if (other.file_.Count != 0) { + result.file_.Add(other.file_); + } + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_fileDescriptorSetFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _fileDescriptorSetFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 10: { + input.ReadMessageArray(tag, field_name, result.file_, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.DefaultInstance, extensionRegistry); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public pbc::IPopsicleList FileList { + get { return PrepareBuilder().file_; } + } + public int FileCount { + get { return result.FileCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto GetFile(int index) { + return result.GetFile(index); + } + public Builder SetFile(int index, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.file_[index] = value; + return this; + } + public Builder SetFile(int index, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.file_[index] = builderForValue.Build(); + return this; + } + public Builder AddFile(global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.file_.Add(value); + return this; + } + public Builder AddFile(global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.file_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeFile(scg::IEnumerable values) { + PrepareBuilder(); + result.file_.Add(values); + return this; + } + public Builder ClearFile() { + PrepareBuilder(); + result.file_.Clear(); + return this; + } + } + static FileDescriptorSet() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class FileDescriptorProto : pb::GeneratedMessage { + private FileDescriptorProto() { } + private static readonly FileDescriptorProto defaultInstance = new FileDescriptorProto().MakeReadOnly(); + private static readonly string[] _fileDescriptorProtoFieldNames = new string[] { "dependency", "enum_type", "extension", "message_type", "name", "options", "package", "service", "source_code_info" }; + private static readonly uint[] _fileDescriptorProtoFieldTags = new uint[] { 26, 42, 58, 34, 10, 66, 18, 50, 74 }; + public static FileDescriptorProto DefaultInstance { + get { return defaultInstance; } + } + + public override FileDescriptorProto DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override FileDescriptorProto ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileDescriptorProto__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileDescriptorProto__FieldAccessorTable; } + } + + public const int NameFieldNumber = 1; + private bool hasName; + private string name_ = ""; + public bool HasName { + get { return hasName; } + } + public string Name { + get { return name_; } + } + + public const int PackageFieldNumber = 2; + private bool hasPackage; + private string package_ = ""; + public bool HasPackage { + get { return hasPackage; } + } + public string Package { + get { return package_; } + } + + public const int DependencyFieldNumber = 3; + private pbc::PopsicleList dependency_ = new pbc::PopsicleList(); + public scg::IList DependencyList { + get { return pbc::Lists.AsReadOnly(dependency_); } + } + public int DependencyCount { + get { return dependency_.Count; } + } + public string GetDependency(int index) { + return dependency_[index]; + } + + public const int MessageTypeFieldNumber = 4; + private pbc::PopsicleList messageType_ = new pbc::PopsicleList(); + public scg::IList MessageTypeList { + get { return messageType_; } + } + public int MessageTypeCount { + get { return messageType_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto GetMessageType(int index) { + return messageType_[index]; + } + + public const int EnumTypeFieldNumber = 5; + private pbc::PopsicleList enumType_ = new pbc::PopsicleList(); + public scg::IList EnumTypeList { + get { return enumType_; } + } + public int EnumTypeCount { + get { return enumType_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto GetEnumType(int index) { + return enumType_[index]; + } + + public const int ServiceFieldNumber = 6; + private pbc::PopsicleList service_ = new pbc::PopsicleList(); + public scg::IList ServiceList { + get { return service_; } + } + public int ServiceCount { + get { return service_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto GetService(int index) { + return service_[index]; + } + + public const int ExtensionFieldNumber = 7; + private pbc::PopsicleList extension_ = new pbc::PopsicleList(); + public scg::IList ExtensionList { + get { return extension_; } + } + public int ExtensionCount { + get { return extension_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetExtension(int index) { + return extension_[index]; + } + + public const int OptionsFieldNumber = 8; + private bool hasOptions; + private global::Google.ProtocolBuffers.DescriptorProtos.FileOptions options_; + public bool HasOptions { + get { return hasOptions; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions Options { + get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance; } + } + + public const int SourceCodeInfoFieldNumber = 9; + private bool hasSourceCodeInfo; + private global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo sourceCodeInfo_; + public bool HasSourceCodeInfo { + get { return hasSourceCodeInfo; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo SourceCodeInfo { + get { return sourceCodeInfo_ ?? global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.DefaultInstance; } + } + + public override bool IsInitialized { + get { + foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto element in MessageTypeList) { + if (!element.IsInitialized) return false; + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto element in EnumTypeList) { + if (!element.IsInitialized) return false; + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto element in ServiceList) { + if (!element.IsInitialized) return false; + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in ExtensionList) { + if (!element.IsInitialized) return false; + } + if (HasOptions) { + if (!Options.IsInitialized) return false; + } + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _fileDescriptorProtoFieldNames; + if (hasName) { + output.WriteString(1, field_names[4], Name); + } + if (hasPackage) { + output.WriteString(2, field_names[6], Package); + } + if (dependency_.Count > 0) { + output.WriteStringArray(3, field_names[0], dependency_); + } + if (messageType_.Count > 0) { + output.WriteMessageArray(4, field_names[3], messageType_); + } + if (enumType_.Count > 0) { + output.WriteMessageArray(5, field_names[1], enumType_); + } + if (service_.Count > 0) { + output.WriteMessageArray(6, field_names[7], service_); + } + if (extension_.Count > 0) { + output.WriteMessageArray(7, field_names[2], extension_); + } + if (hasOptions) { + output.WriteMessage(8, field_names[5], Options); + } + if (hasSourceCodeInfo) { + output.WriteMessage(9, field_names[8], SourceCodeInfo); + } + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName) { + size += pb::CodedOutputStream.ComputeStringSize(1, Name); + } + if (hasPackage) { + size += pb::CodedOutputStream.ComputeStringSize(2, Package); + } + { + int dataSize = 0; + foreach (string element in DependencyList) { + dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element); + } + size += dataSize; + size += 1 * dependency_.Count; + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto element in MessageTypeList) { + size += pb::CodedOutputStream.ComputeMessageSize(4, element); + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto element in EnumTypeList) { + size += pb::CodedOutputStream.ComputeMessageSize(5, element); + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto element in ServiceList) { + size += pb::CodedOutputStream.ComputeMessageSize(6, element); + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in ExtensionList) { + size += pb::CodedOutputStream.ComputeMessageSize(7, element); + } + if (hasOptions) { + size += pb::CodedOutputStream.ComputeMessageSize(8, Options); + } + if (hasSourceCodeInfo) { + size += pb::CodedOutputStream.ComputeMessageSize(9, SourceCodeInfo); + } + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static FileDescriptorProto ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static FileDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static FileDescriptorProto ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static FileDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static FileDescriptorProto ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static FileDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static FileDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static FileDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static FileDescriptorProto ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static FileDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private FileDescriptorProto MakeReadOnly() { + dependency_.MakeReadOnly(); + messageType_.MakeReadOnly(); + enumType_.MakeReadOnly(); + service_.MakeReadOnly(); + extension_.MakeReadOnly(); + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(FileDescriptorProto prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::GeneratedBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(FileDescriptorProto cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private FileDescriptorProto result; + + private FileDescriptorProto PrepareBuilder() { + if (resultIsReadOnly) { + FileDescriptorProto original = result; + result = new FileDescriptorProto(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override FileDescriptorProto MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Descriptor; } + } + + public override FileDescriptorProto DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.DefaultInstance; } + } + + public override FileDescriptorProto BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is FileDescriptorProto) { + return MergeFrom((FileDescriptorProto) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(FileDescriptorProto other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.DefaultInstance) return this; + PrepareBuilder(); + if (other.HasName) { + Name = other.Name; + } + if (other.HasPackage) { + Package = other.Package; + } + if (other.dependency_.Count != 0) { + result.dependency_.Add(other.dependency_); + } + if (other.messageType_.Count != 0) { + result.messageType_.Add(other.messageType_); + } + if (other.enumType_.Count != 0) { + result.enumType_.Add(other.enumType_); + } + if (other.service_.Count != 0) { + result.service_.Add(other.service_); + } + if (other.extension_.Count != 0) { + result.extension_.Add(other.extension_); + } + if (other.HasOptions) { + MergeOptions(other.Options); + } + if (other.HasSourceCodeInfo) { + MergeSourceCodeInfo(other.SourceCodeInfo); + } + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_fileDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _fileDescriptorProtoFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 10: { + result.hasName = input.ReadString(ref result.name_); + break; + } + case 18: { + result.hasPackage = input.ReadString(ref result.package_); + break; + } + case 26: { + input.ReadStringArray(tag, field_name, result.dependency_); + break; + } + case 34: { + input.ReadMessageArray(tag, field_name, result.messageType_, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.DefaultInstance, extensionRegistry); + break; + } + case 42: { + input.ReadMessageArray(tag, field_name, result.enumType_, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.DefaultInstance, extensionRegistry); + break; + } + case 50: { + input.ReadMessageArray(tag, field_name, result.service_, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.DefaultInstance, extensionRegistry); + break; + } + case 58: { + input.ReadMessageArray(tag, field_name, result.extension_, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance, extensionRegistry); + break; + } + case 66: { + global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.CreateBuilder(); + if (result.hasOptions) { + subBuilder.MergeFrom(Options); + } + input.ReadMessage(subBuilder, extensionRegistry); + Options = subBuilder.BuildPartial(); + break; + } + case 74: { + global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.CreateBuilder(); + if (result.hasSourceCodeInfo) { + subBuilder.MergeFrom(SourceCodeInfo); + } + input.ReadMessage(subBuilder, extensionRegistry); + SourceCodeInfo = subBuilder.BuildPartial(); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public bool HasName { + get { return result.hasName; } + } + public string Name { + get { return result.Name; } + set { SetName(value); } + } + public Builder SetName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasName = true; + result.name_ = value; + return this; + } + public Builder ClearName() { + PrepareBuilder(); + result.hasName = false; + result.name_ = ""; + return this; + } + + public bool HasPackage { + get { return result.hasPackage; } + } + public string Package { + get { return result.Package; } + set { SetPackage(value); } + } + public Builder SetPackage(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasPackage = true; + result.package_ = value; + return this; + } + public Builder ClearPackage() { + PrepareBuilder(); + result.hasPackage = false; + result.package_ = ""; + return this; + } + + public pbc::IPopsicleList DependencyList { + get { return PrepareBuilder().dependency_; } + } + public int DependencyCount { + get { return result.DependencyCount; } + } + public string GetDependency(int index) { + return result.GetDependency(index); + } + public Builder SetDependency(int index, string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.dependency_[index] = value; + return this; + } + public Builder AddDependency(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.dependency_.Add(value); + return this; + } + public Builder AddRangeDependency(scg::IEnumerable values) { + PrepareBuilder(); + result.dependency_.Add(values); + return this; + } + public Builder ClearDependency() { + PrepareBuilder(); + result.dependency_.Clear(); + return this; + } + + public pbc::IPopsicleList MessageTypeList { + get { return PrepareBuilder().messageType_; } + } + public int MessageTypeCount { + get { return result.MessageTypeCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto GetMessageType(int index) { + return result.GetMessageType(index); + } + public Builder SetMessageType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.messageType_[index] = value; + return this; + } + public Builder SetMessageType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.messageType_[index] = builderForValue.Build(); + return this; + } + public Builder AddMessageType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.messageType_.Add(value); + return this; + } + public Builder AddMessageType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.messageType_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeMessageType(scg::IEnumerable values) { + PrepareBuilder(); + result.messageType_.Add(values); + return this; + } + public Builder ClearMessageType() { + PrepareBuilder(); + result.messageType_.Clear(); + return this; + } + + public pbc::IPopsicleList EnumTypeList { + get { return PrepareBuilder().enumType_; } + } + public int EnumTypeCount { + get { return result.EnumTypeCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto GetEnumType(int index) { + return result.GetEnumType(index); + } + public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.enumType_[index] = value; + return this; + } + public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.enumType_[index] = builderForValue.Build(); + return this; + } + public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.enumType_.Add(value); + return this; + } + public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.enumType_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeEnumType(scg::IEnumerable values) { + PrepareBuilder(); + result.enumType_.Add(values); + return this; + } + public Builder ClearEnumType() { + PrepareBuilder(); + result.enumType_.Clear(); + return this; + } + + public pbc::IPopsicleList ServiceList { + get { return PrepareBuilder().service_; } + } + public int ServiceCount { + get { return result.ServiceCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto GetService(int index) { + return result.GetService(index); + } + public Builder SetService(int index, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.service_[index] = value; + return this; + } + public Builder SetService(int index, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.service_[index] = builderForValue.Build(); + return this; + } + public Builder AddService(global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.service_.Add(value); + return this; + } + public Builder AddService(global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.service_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeService(scg::IEnumerable values) { + PrepareBuilder(); + result.service_.Add(values); + return this; + } + public Builder ClearService() { + PrepareBuilder(); + result.service_.Clear(); + return this; + } + + public pbc::IPopsicleList ExtensionList { + get { return PrepareBuilder().extension_; } + } + public int ExtensionCount { + get { return result.ExtensionCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetExtension(int index) { + return result.GetExtension(index); + } + public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.extension_[index] = value; + return this; + } + public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.extension_[index] = builderForValue.Build(); + return this; + } + public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.extension_.Add(value); + return this; + } + public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.extension_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeExtension(scg::IEnumerable values) { + PrepareBuilder(); + result.extension_.Add(values); + return this; + } + public Builder ClearExtension() { + PrepareBuilder(); + result.extension_.Clear(); + return this; + } + + public bool HasOptions { + get { return result.hasOptions; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions Options { + get { return result.Options; } + set { SetOptions(value); } + } + public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasOptions = true; + result.options_ = value; + return this; + } + public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.hasOptions = true; + result.options_ = builderForValue.Build(); + return this; + } + public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + if (result.hasOptions && + result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance) { + result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial(); + } else { + result.options_ = value; + } + result.hasOptions = true; + return this; + } + public Builder ClearOptions() { + PrepareBuilder(); + result.hasOptions = false; + result.options_ = null; + return this; + } + + public bool HasSourceCodeInfo { + get { return result.hasSourceCodeInfo; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo SourceCodeInfo { + get { return result.SourceCodeInfo; } + set { SetSourceCodeInfo(value); } + } + public Builder SetSourceCodeInfo(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasSourceCodeInfo = true; + result.sourceCodeInfo_ = value; + return this; + } + public Builder SetSourceCodeInfo(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.hasSourceCodeInfo = true; + result.sourceCodeInfo_ = builderForValue.Build(); + return this; + } + public Builder MergeSourceCodeInfo(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + if (result.hasSourceCodeInfo && + result.sourceCodeInfo_ != global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.DefaultInstance) { + result.sourceCodeInfo_ = global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.CreateBuilder(result.sourceCodeInfo_).MergeFrom(value).BuildPartial(); + } else { + result.sourceCodeInfo_ = value; + } + result.hasSourceCodeInfo = true; + return this; + } + public Builder ClearSourceCodeInfo() { + PrepareBuilder(); + result.hasSourceCodeInfo = false; + result.sourceCodeInfo_ = null; + return this; + } + } + static FileDescriptorProto() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class DescriptorProto : pb::GeneratedMessage { + private DescriptorProto() { } + private static readonly DescriptorProto defaultInstance = new DescriptorProto().MakeReadOnly(); + private static readonly string[] _descriptorProtoFieldNames = new string[] { "enum_type", "extension", "extension_range", "field", "name", "nested_type", "options" }; + private static readonly uint[] _descriptorProtoFieldTags = new uint[] { 34, 50, 42, 18, 10, 26, 58 }; + public static DescriptorProto DefaultInstance { + get { return defaultInstance; } + } + + public override DescriptorProto DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override DescriptorProto ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_DescriptorProto__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_DescriptorProto__FieldAccessorTable; } + } + + #region Nested types + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public static class Types { + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class ExtensionRange : pb::GeneratedMessage { + private ExtensionRange() { } + private static readonly ExtensionRange defaultInstance = new ExtensionRange().MakeReadOnly(); + private static readonly string[] _extensionRangeFieldNames = new string[] { "end", "start" }; + private static readonly uint[] _extensionRangeFieldTags = new uint[] { 16, 8 }; + public static ExtensionRange DefaultInstance { + get { return defaultInstance; } + } + + public override ExtensionRange DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override ExtensionRange ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_DescriptorProto_ExtensionRange__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_DescriptorProto_ExtensionRange__FieldAccessorTable; } + } + + public const int StartFieldNumber = 1; + private bool hasStart; + private int start_; + public bool HasStart { + get { return hasStart; } + } + public int Start { + get { return start_; } + } + + public const int EndFieldNumber = 2; + private bool hasEnd; + private int end_; + public bool HasEnd { + get { return hasEnd; } + } + public int End { + get { return end_; } + } + + public override bool IsInitialized { + get { + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _extensionRangeFieldNames; + if (hasStart) { + output.WriteInt32(1, field_names[1], Start); + } + if (hasEnd) { + output.WriteInt32(2, field_names[0], End); + } + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasStart) { + size += pb::CodedOutputStream.ComputeInt32Size(1, Start); + } + if (hasEnd) { + size += pb::CodedOutputStream.ComputeInt32Size(2, End); + } + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static ExtensionRange ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static ExtensionRange ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static ExtensionRange ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static ExtensionRange ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static ExtensionRange ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static ExtensionRange ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static ExtensionRange ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static ExtensionRange ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static ExtensionRange ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static ExtensionRange ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private ExtensionRange MakeReadOnly() { + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(ExtensionRange prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::GeneratedBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(ExtensionRange cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private ExtensionRange result; + + private ExtensionRange PrepareBuilder() { + if (resultIsReadOnly) { + ExtensionRange original = result; + result = new ExtensionRange(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override ExtensionRange MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Descriptor; } + } + + public override ExtensionRange DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.DefaultInstance; } + } + + public override ExtensionRange BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is ExtensionRange) { + return MergeFrom((ExtensionRange) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(ExtensionRange other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.DefaultInstance) return this; + PrepareBuilder(); + if (other.HasStart) { + Start = other.Start; + } + if (other.HasEnd) { + End = other.End; + } + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_extensionRangeFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _extensionRangeFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 8: { + result.hasStart = input.ReadInt32(ref result.start_); + break; + } + case 16: { + result.hasEnd = input.ReadInt32(ref result.end_); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public bool HasStart { + get { return result.hasStart; } + } + public int Start { + get { return result.Start; } + set { SetStart(value); } + } + public Builder SetStart(int value) { + PrepareBuilder(); + result.hasStart = true; + result.start_ = value; + return this; + } + public Builder ClearStart() { + PrepareBuilder(); + result.hasStart = false; + result.start_ = 0; + return this; + } + + public bool HasEnd { + get { return result.hasEnd; } + } + public int End { + get { return result.End; } + set { SetEnd(value); } + } + public Builder SetEnd(int value) { + PrepareBuilder(); + result.hasEnd = true; + result.end_ = value; + return this; + } + public Builder ClearEnd() { + PrepareBuilder(); + result.hasEnd = false; + result.end_ = 0; + return this; + } + } + static ExtensionRange() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + } + #endregion + + public const int NameFieldNumber = 1; + private bool hasName; + private string name_ = ""; + public bool HasName { + get { return hasName; } + } + public string Name { + get { return name_; } + } + + public const int FieldFieldNumber = 2; + private pbc::PopsicleList field_ = new pbc::PopsicleList(); + public scg::IList FieldList { + get { return field_; } + } + public int FieldCount { + get { return field_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetField(int index) { + return field_[index]; + } + + public const int ExtensionFieldNumber = 6; + private pbc::PopsicleList extension_ = new pbc::PopsicleList(); + public scg::IList ExtensionList { + get { return extension_; } + } + public int ExtensionCount { + get { return extension_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetExtension(int index) { + return extension_[index]; + } + + public const int NestedTypeFieldNumber = 3; + private pbc::PopsicleList nestedType_ = new pbc::PopsicleList(); + public scg::IList NestedTypeList { + get { return nestedType_; } + } + public int NestedTypeCount { + get { return nestedType_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto GetNestedType(int index) { + return nestedType_[index]; + } + + public const int EnumTypeFieldNumber = 4; + private pbc::PopsicleList enumType_ = new pbc::PopsicleList(); + public scg::IList EnumTypeList { + get { return enumType_; } + } + public int EnumTypeCount { + get { return enumType_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto GetEnumType(int index) { + return enumType_[index]; + } + + public const int ExtensionRangeFieldNumber = 5; + private pbc::PopsicleList extensionRange_ = new pbc::PopsicleList(); + public scg::IList ExtensionRangeList { + get { return extensionRange_; } + } + public int ExtensionRangeCount { + get { return extensionRange_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange GetExtensionRange(int index) { + return extensionRange_[index]; + } + + public const int OptionsFieldNumber = 7; + private bool hasOptions; + private global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions options_; + public bool HasOptions { + get { return hasOptions; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions Options { + get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.DefaultInstance; } + } + + public override bool IsInitialized { + get { + foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in FieldList) { + if (!element.IsInitialized) return false; + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in ExtensionList) { + if (!element.IsInitialized) return false; + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto element in NestedTypeList) { + if (!element.IsInitialized) return false; + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto element in EnumTypeList) { + if (!element.IsInitialized) return false; + } + if (HasOptions) { + if (!Options.IsInitialized) return false; + } + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _descriptorProtoFieldNames; + if (hasName) { + output.WriteString(1, field_names[4], Name); + } + if (field_.Count > 0) { + output.WriteMessageArray(2, field_names[3], field_); + } + if (nestedType_.Count > 0) { + output.WriteMessageArray(3, field_names[5], nestedType_); + } + if (enumType_.Count > 0) { + output.WriteMessageArray(4, field_names[0], enumType_); + } + if (extensionRange_.Count > 0) { + output.WriteMessageArray(5, field_names[2], extensionRange_); + } + if (extension_.Count > 0) { + output.WriteMessageArray(6, field_names[1], extension_); + } + if (hasOptions) { + output.WriteMessage(7, field_names[6], Options); + } + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName) { + size += pb::CodedOutputStream.ComputeStringSize(1, Name); + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in FieldList) { + size += pb::CodedOutputStream.ComputeMessageSize(2, element); + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in ExtensionList) { + size += pb::CodedOutputStream.ComputeMessageSize(6, element); + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto element in NestedTypeList) { + size += pb::CodedOutputStream.ComputeMessageSize(3, element); + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto element in EnumTypeList) { + size += pb::CodedOutputStream.ComputeMessageSize(4, element); + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange element in ExtensionRangeList) { + size += pb::CodedOutputStream.ComputeMessageSize(5, element); + } + if (hasOptions) { + size += pb::CodedOutputStream.ComputeMessageSize(7, Options); + } + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static DescriptorProto ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static DescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static DescriptorProto ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static DescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static DescriptorProto ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static DescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static DescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static DescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static DescriptorProto ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static DescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private DescriptorProto MakeReadOnly() { + field_.MakeReadOnly(); + extension_.MakeReadOnly(); + nestedType_.MakeReadOnly(); + enumType_.MakeReadOnly(); + extensionRange_.MakeReadOnly(); + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(DescriptorProto prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::GeneratedBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(DescriptorProto cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private DescriptorProto result; + + private DescriptorProto PrepareBuilder() { + if (resultIsReadOnly) { + DescriptorProto original = result; + result = new DescriptorProto(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override DescriptorProto MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Descriptor; } + } + + public override DescriptorProto DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.DefaultInstance; } + } + + public override DescriptorProto BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is DescriptorProto) { + return MergeFrom((DescriptorProto) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(DescriptorProto other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.DefaultInstance) return this; + PrepareBuilder(); + if (other.HasName) { + Name = other.Name; + } + if (other.field_.Count != 0) { + result.field_.Add(other.field_); + } + if (other.extension_.Count != 0) { + result.extension_.Add(other.extension_); + } + if (other.nestedType_.Count != 0) { + result.nestedType_.Add(other.nestedType_); + } + if (other.enumType_.Count != 0) { + result.enumType_.Add(other.enumType_); + } + if (other.extensionRange_.Count != 0) { + result.extensionRange_.Add(other.extensionRange_); + } + if (other.HasOptions) { + MergeOptions(other.Options); + } + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_descriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _descriptorProtoFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 10: { + result.hasName = input.ReadString(ref result.name_); + break; + } + case 18: { + input.ReadMessageArray(tag, field_name, result.field_, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance, extensionRegistry); + break; + } + case 26: { + input.ReadMessageArray(tag, field_name, result.nestedType_, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.DefaultInstance, extensionRegistry); + break; + } + case 34: { + input.ReadMessageArray(tag, field_name, result.enumType_, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.DefaultInstance, extensionRegistry); + break; + } + case 42: { + input.ReadMessageArray(tag, field_name, result.extensionRange_, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.DefaultInstance, extensionRegistry); + break; + } + case 50: { + input.ReadMessageArray(tag, field_name, result.extension_, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance, extensionRegistry); + break; + } + case 58: { + global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.CreateBuilder(); + if (result.hasOptions) { + subBuilder.MergeFrom(Options); + } + input.ReadMessage(subBuilder, extensionRegistry); + Options = subBuilder.BuildPartial(); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public bool HasName { + get { return result.hasName; } + } + public string Name { + get { return result.Name; } + set { SetName(value); } + } + public Builder SetName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasName = true; + result.name_ = value; + return this; + } + public Builder ClearName() { + PrepareBuilder(); + result.hasName = false; + result.name_ = ""; + return this; + } + + public pbc::IPopsicleList FieldList { + get { return PrepareBuilder().field_; } + } + public int FieldCount { + get { return result.FieldCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetField(int index) { + return result.GetField(index); + } + public Builder SetField(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.field_[index] = value; + return this; + } + public Builder SetField(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.field_[index] = builderForValue.Build(); + return this; + } + public Builder AddField(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.field_.Add(value); + return this; + } + public Builder AddField(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.field_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeField(scg::IEnumerable values) { + PrepareBuilder(); + result.field_.Add(values); + return this; + } + public Builder ClearField() { + PrepareBuilder(); + result.field_.Clear(); + return this; + } + + public pbc::IPopsicleList ExtensionList { + get { return PrepareBuilder().extension_; } + } + public int ExtensionCount { + get { return result.ExtensionCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetExtension(int index) { + return result.GetExtension(index); + } + public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.extension_[index] = value; + return this; + } + public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.extension_[index] = builderForValue.Build(); + return this; + } + public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.extension_.Add(value); + return this; + } + public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.extension_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeExtension(scg::IEnumerable values) { + PrepareBuilder(); + result.extension_.Add(values); + return this; + } + public Builder ClearExtension() { + PrepareBuilder(); + result.extension_.Clear(); + return this; + } + + public pbc::IPopsicleList NestedTypeList { + get { return PrepareBuilder().nestedType_; } + } + public int NestedTypeCount { + get { return result.NestedTypeCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto GetNestedType(int index) { + return result.GetNestedType(index); + } + public Builder SetNestedType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.nestedType_[index] = value; + return this; + } + public Builder SetNestedType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.nestedType_[index] = builderForValue.Build(); + return this; + } + public Builder AddNestedType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.nestedType_.Add(value); + return this; + } + public Builder AddNestedType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.nestedType_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeNestedType(scg::IEnumerable values) { + PrepareBuilder(); + result.nestedType_.Add(values); + return this; + } + public Builder ClearNestedType() { + PrepareBuilder(); + result.nestedType_.Clear(); + return this; + } + + public pbc::IPopsicleList EnumTypeList { + get { return PrepareBuilder().enumType_; } + } + public int EnumTypeCount { + get { return result.EnumTypeCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto GetEnumType(int index) { + return result.GetEnumType(index); + } + public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.enumType_[index] = value; + return this; + } + public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.enumType_[index] = builderForValue.Build(); + return this; + } + public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.enumType_.Add(value); + return this; + } + public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.enumType_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeEnumType(scg::IEnumerable values) { + PrepareBuilder(); + result.enumType_.Add(values); + return this; + } + public Builder ClearEnumType() { + PrepareBuilder(); + result.enumType_.Clear(); + return this; + } + + public pbc::IPopsicleList ExtensionRangeList { + get { return PrepareBuilder().extensionRange_; } + } + public int ExtensionRangeCount { + get { return result.ExtensionRangeCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange GetExtensionRange(int index) { + return result.GetExtensionRange(index); + } + public Builder SetExtensionRange(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.extensionRange_[index] = value; + return this; + } + public Builder SetExtensionRange(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.extensionRange_[index] = builderForValue.Build(); + return this; + } + public Builder AddExtensionRange(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.extensionRange_.Add(value); + return this; + } + public Builder AddExtensionRange(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.extensionRange_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeExtensionRange(scg::IEnumerable values) { + PrepareBuilder(); + result.extensionRange_.Add(values); + return this; + } + public Builder ClearExtensionRange() { + PrepareBuilder(); + result.extensionRange_.Clear(); + return this; + } + + public bool HasOptions { + get { return result.hasOptions; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions Options { + get { return result.Options; } + set { SetOptions(value); } + } + public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasOptions = true; + result.options_ = value; + return this; + } + public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.hasOptions = true; + result.options_ = builderForValue.Build(); + return this; + } + public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + if (result.hasOptions && + result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.DefaultInstance) { + result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial(); + } else { + result.options_ = value; + } + result.hasOptions = true; + return this; + } + public Builder ClearOptions() { + PrepareBuilder(); + result.hasOptions = false; + result.options_ = null; + return this; + } + } + static DescriptorProto() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class FieldDescriptorProto : pb::GeneratedMessage { + private FieldDescriptorProto() { } + private static readonly FieldDescriptorProto defaultInstance = new FieldDescriptorProto().MakeReadOnly(); + private static readonly string[] _fieldDescriptorProtoFieldNames = new string[] { "default_value", "extendee", "label", "name", "number", "options", "type", "type_name" }; + private static readonly uint[] _fieldDescriptorProtoFieldTags = new uint[] { 58, 18, 32, 10, 24, 66, 40, 50 }; + public static FieldDescriptorProto DefaultInstance { + get { return defaultInstance; } + } + + public override FieldDescriptorProto DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override FieldDescriptorProto ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FieldDescriptorProto__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FieldDescriptorProto__FieldAccessorTable; } + } + + #region Nested types + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public static class Types { + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public enum Type { + TYPE_DOUBLE = 1, + TYPE_FLOAT = 2, + TYPE_INT64 = 3, + TYPE_UINT64 = 4, + TYPE_INT32 = 5, + TYPE_FIXED64 = 6, + TYPE_FIXED32 = 7, + TYPE_BOOL = 8, + TYPE_STRING = 9, + TYPE_GROUP = 10, + TYPE_MESSAGE = 11, + TYPE_BYTES = 12, + TYPE_UINT32 = 13, + TYPE_ENUM = 14, + TYPE_SFIXED32 = 15, + TYPE_SFIXED64 = 16, + TYPE_SINT32 = 17, + TYPE_SINT64 = 18, + } + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public enum Label { + LABEL_OPTIONAL = 1, + LABEL_REQUIRED = 2, + LABEL_REPEATED = 3, + } + + } + #endregion + + public const int NameFieldNumber = 1; + private bool hasName; + private string name_ = ""; + public bool HasName { + get { return hasName; } + } + public string Name { + get { return name_; } + } + + public const int NumberFieldNumber = 3; + private bool hasNumber; + private int number_; + public bool HasNumber { + get { return hasNumber; } + } + public int Number { + get { return number_; } + } + + public const int LabelFieldNumber = 4; + private bool hasLabel; + private global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label label_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label.LABEL_OPTIONAL; + public bool HasLabel { + get { return hasLabel; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label Label { + get { return label_; } + } + + public const int TypeFieldNumber = 5; + private bool hasType; + private global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type type_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type.TYPE_DOUBLE; + public bool HasType { + get { return hasType; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type Type { + get { return type_; } + } + + public const int TypeNameFieldNumber = 6; + private bool hasTypeName; + private string typeName_ = ""; + public bool HasTypeName { + get { return hasTypeName; } + } + public string TypeName { + get { return typeName_; } + } + + public const int ExtendeeFieldNumber = 2; + private bool hasExtendee; + private string extendee_ = ""; + public bool HasExtendee { + get { return hasExtendee; } + } + public string Extendee { + get { return extendee_; } + } + + public const int DefaultValueFieldNumber = 7; + private bool hasDefaultValue; + private string defaultValue_ = ""; + public bool HasDefaultValue { + get { return hasDefaultValue; } + } + public string DefaultValue { + get { return defaultValue_; } + } + + public const int OptionsFieldNumber = 8; + private bool hasOptions; + private global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions options_; + public bool HasOptions { + get { return hasOptions; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions Options { + get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.DefaultInstance; } + } + + public override bool IsInitialized { + get { + if (HasOptions) { + if (!Options.IsInitialized) return false; + } + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _fieldDescriptorProtoFieldNames; + if (hasName) { + output.WriteString(1, field_names[3], Name); + } + if (hasExtendee) { + output.WriteString(2, field_names[1], Extendee); + } + if (hasNumber) { + output.WriteInt32(3, field_names[4], Number); + } + if (hasLabel) { + output.WriteEnum(4, field_names[2], (int) Label, Label); + } + if (hasType) { + output.WriteEnum(5, field_names[6], (int) Type, Type); + } + if (hasTypeName) { + output.WriteString(6, field_names[7], TypeName); + } + if (hasDefaultValue) { + output.WriteString(7, field_names[0], DefaultValue); + } + if (hasOptions) { + output.WriteMessage(8, field_names[5], Options); + } + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName) { + size += pb::CodedOutputStream.ComputeStringSize(1, Name); + } + if (hasNumber) { + size += pb::CodedOutputStream.ComputeInt32Size(3, Number); + } + if (hasLabel) { + size += pb::CodedOutputStream.ComputeEnumSize(4, (int) Label); + } + if (hasType) { + size += pb::CodedOutputStream.ComputeEnumSize(5, (int) Type); + } + if (hasTypeName) { + size += pb::CodedOutputStream.ComputeStringSize(6, TypeName); + } + if (hasExtendee) { + size += pb::CodedOutputStream.ComputeStringSize(2, Extendee); + } + if (hasDefaultValue) { + size += pb::CodedOutputStream.ComputeStringSize(7, DefaultValue); + } + if (hasOptions) { + size += pb::CodedOutputStream.ComputeMessageSize(8, Options); + } + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static FieldDescriptorProto ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static FieldDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static FieldDescriptorProto ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static FieldDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static FieldDescriptorProto ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static FieldDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static FieldDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static FieldDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static FieldDescriptorProto ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static FieldDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private FieldDescriptorProto MakeReadOnly() { + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(FieldDescriptorProto prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::GeneratedBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(FieldDescriptorProto cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private FieldDescriptorProto result; + + private FieldDescriptorProto PrepareBuilder() { + if (resultIsReadOnly) { + FieldDescriptorProto original = result; + result = new FieldDescriptorProto(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override FieldDescriptorProto MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Descriptor; } + } + + public override FieldDescriptorProto DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance; } + } + + public override FieldDescriptorProto BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is FieldDescriptorProto) { + return MergeFrom((FieldDescriptorProto) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(FieldDescriptorProto other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance) return this; + PrepareBuilder(); + if (other.HasName) { + Name = other.Name; + } + if (other.HasNumber) { + Number = other.Number; + } + if (other.HasLabel) { + Label = other.Label; + } + if (other.HasType) { + Type = other.Type; + } + if (other.HasTypeName) { + TypeName = other.TypeName; + } + if (other.HasExtendee) { + Extendee = other.Extendee; + } + if (other.HasDefaultValue) { + DefaultValue = other.DefaultValue; + } + if (other.HasOptions) { + MergeOptions(other.Options); + } + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_fieldDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _fieldDescriptorProtoFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 10: { + result.hasName = input.ReadString(ref result.name_); + break; + } + case 18: { + result.hasExtendee = input.ReadString(ref result.extendee_); + break; + } + case 24: { + result.hasNumber = input.ReadInt32(ref result.number_); + break; + } + case 32: { + object unknown; + if(input.ReadEnum(ref result.label_, out unknown)) { + result.hasLabel = true; + } else if(unknown is int) { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + unknownFields.MergeVarintField(4, (ulong)(int)unknown); + } + break; + } + case 40: { + object unknown; + if(input.ReadEnum(ref result.type_, out unknown)) { + result.hasType = true; + } else if(unknown is int) { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + unknownFields.MergeVarintField(5, (ulong)(int)unknown); + } + break; + } + case 50: { + result.hasTypeName = input.ReadString(ref result.typeName_); + break; + } + case 58: { + result.hasDefaultValue = input.ReadString(ref result.defaultValue_); + break; + } + case 66: { + global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.CreateBuilder(); + if (result.hasOptions) { + subBuilder.MergeFrom(Options); + } + input.ReadMessage(subBuilder, extensionRegistry); + Options = subBuilder.BuildPartial(); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public bool HasName { + get { return result.hasName; } + } + public string Name { + get { return result.Name; } + set { SetName(value); } + } + public Builder SetName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasName = true; + result.name_ = value; + return this; + } + public Builder ClearName() { + PrepareBuilder(); + result.hasName = false; + result.name_ = ""; + return this; + } + + public bool HasNumber { + get { return result.hasNumber; } + } + public int Number { + get { return result.Number; } + set { SetNumber(value); } + } + public Builder SetNumber(int value) { + PrepareBuilder(); + result.hasNumber = true; + result.number_ = value; + return this; + } + public Builder ClearNumber() { + PrepareBuilder(); + result.hasNumber = false; + result.number_ = 0; + return this; + } + + public bool HasLabel { + get { return result.hasLabel; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label Label { + get { return result.Label; } + set { SetLabel(value); } + } + public Builder SetLabel(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label value) { + PrepareBuilder(); + result.hasLabel = true; + result.label_ = value; + return this; + } + public Builder ClearLabel() { + PrepareBuilder(); + result.hasLabel = false; + result.label_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label.LABEL_OPTIONAL; + return this; + } + + public bool HasType { + get { return result.hasType; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type Type { + get { return result.Type; } + set { SetType(value); } + } + public Builder SetType(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type value) { + PrepareBuilder(); + result.hasType = true; + result.type_ = value; + return this; + } + public Builder ClearType() { + PrepareBuilder(); + result.hasType = false; + result.type_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type.TYPE_DOUBLE; + return this; + } + + public bool HasTypeName { + get { return result.hasTypeName; } + } + public string TypeName { + get { return result.TypeName; } + set { SetTypeName(value); } + } + public Builder SetTypeName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasTypeName = true; + result.typeName_ = value; + return this; + } + public Builder ClearTypeName() { + PrepareBuilder(); + result.hasTypeName = false; + result.typeName_ = ""; + return this; + } + + public bool HasExtendee { + get { return result.hasExtendee; } + } + public string Extendee { + get { return result.Extendee; } + set { SetExtendee(value); } + } + public Builder SetExtendee(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasExtendee = true; + result.extendee_ = value; + return this; + } + public Builder ClearExtendee() { + PrepareBuilder(); + result.hasExtendee = false; + result.extendee_ = ""; + return this; + } + + public bool HasDefaultValue { + get { return result.hasDefaultValue; } + } + public string DefaultValue { + get { return result.DefaultValue; } + set { SetDefaultValue(value); } + } + public Builder SetDefaultValue(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasDefaultValue = true; + result.defaultValue_ = value; + return this; + } + public Builder ClearDefaultValue() { + PrepareBuilder(); + result.hasDefaultValue = false; + result.defaultValue_ = ""; + return this; + } + + public bool HasOptions { + get { return result.hasOptions; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions Options { + get { return result.Options; } + set { SetOptions(value); } + } + public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasOptions = true; + result.options_ = value; + return this; + } + public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.hasOptions = true; + result.options_ = builderForValue.Build(); + return this; + } + public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + if (result.hasOptions && + result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.DefaultInstance) { + result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial(); + } else { + result.options_ = value; + } + result.hasOptions = true; + return this; + } + public Builder ClearOptions() { + PrepareBuilder(); + result.hasOptions = false; + result.options_ = null; + return this; + } + } + static FieldDescriptorProto() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class EnumDescriptorProto : pb::GeneratedMessage { + private EnumDescriptorProto() { } + private static readonly EnumDescriptorProto defaultInstance = new EnumDescriptorProto().MakeReadOnly(); + private static readonly string[] _enumDescriptorProtoFieldNames = new string[] { "name", "options", "value" }; + private static readonly uint[] _enumDescriptorProtoFieldTags = new uint[] { 10, 26, 18 }; + public static EnumDescriptorProto DefaultInstance { + get { return defaultInstance; } + } + + public override EnumDescriptorProto DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override EnumDescriptorProto ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumDescriptorProto__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumDescriptorProto__FieldAccessorTable; } + } + + public const int NameFieldNumber = 1; + private bool hasName; + private string name_ = ""; + public bool HasName { + get { return hasName; } + } + public string Name { + get { return name_; } + } + + public const int ValueFieldNumber = 2; + private pbc::PopsicleList value_ = new pbc::PopsicleList(); + public scg::IList ValueList { + get { return value_; } + } + public int ValueCount { + get { return value_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto GetValue(int index) { + return value_[index]; + } + + public const int OptionsFieldNumber = 3; + private bool hasOptions; + private global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions options_; + public bool HasOptions { + get { return hasOptions; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions Options { + get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.DefaultInstance; } + } + + public override bool IsInitialized { + get { + foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto element in ValueList) { + if (!element.IsInitialized) return false; + } + if (HasOptions) { + if (!Options.IsInitialized) return false; + } + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _enumDescriptorProtoFieldNames; + if (hasName) { + output.WriteString(1, field_names[0], Name); + } + if (value_.Count > 0) { + output.WriteMessageArray(2, field_names[2], value_); + } + if (hasOptions) { + output.WriteMessage(3, field_names[1], Options); + } + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName) { + size += pb::CodedOutputStream.ComputeStringSize(1, Name); + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto element in ValueList) { + size += pb::CodedOutputStream.ComputeMessageSize(2, element); + } + if (hasOptions) { + size += pb::CodedOutputStream.ComputeMessageSize(3, Options); + } + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static EnumDescriptorProto ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static EnumDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static EnumDescriptorProto ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static EnumDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static EnumDescriptorProto ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static EnumDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static EnumDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static EnumDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static EnumDescriptorProto ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static EnumDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private EnumDescriptorProto MakeReadOnly() { + value_.MakeReadOnly(); + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(EnumDescriptorProto prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::GeneratedBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(EnumDescriptorProto cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private EnumDescriptorProto result; + + private EnumDescriptorProto PrepareBuilder() { + if (resultIsReadOnly) { + EnumDescriptorProto original = result; + result = new EnumDescriptorProto(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override EnumDescriptorProto MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Descriptor; } + } + + public override EnumDescriptorProto DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.DefaultInstance; } + } + + public override EnumDescriptorProto BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is EnumDescriptorProto) { + return MergeFrom((EnumDescriptorProto) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(EnumDescriptorProto other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.DefaultInstance) return this; + PrepareBuilder(); + if (other.HasName) { + Name = other.Name; + } + if (other.value_.Count != 0) { + result.value_.Add(other.value_); + } + if (other.HasOptions) { + MergeOptions(other.Options); + } + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_enumDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _enumDescriptorProtoFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 10: { + result.hasName = input.ReadString(ref result.name_); + break; + } + case 18: { + input.ReadMessageArray(tag, field_name, result.value_, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.DefaultInstance, extensionRegistry); + break; + } + case 26: { + global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.CreateBuilder(); + if (result.hasOptions) { + subBuilder.MergeFrom(Options); + } + input.ReadMessage(subBuilder, extensionRegistry); + Options = subBuilder.BuildPartial(); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public bool HasName { + get { return result.hasName; } + } + public string Name { + get { return result.Name; } + set { SetName(value); } + } + public Builder SetName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasName = true; + result.name_ = value; + return this; + } + public Builder ClearName() { + PrepareBuilder(); + result.hasName = false; + result.name_ = ""; + return this; + } + + public pbc::IPopsicleList ValueList { + get { return PrepareBuilder().value_; } + } + public int ValueCount { + get { return result.ValueCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto GetValue(int index) { + return result.GetValue(index); + } + public Builder SetValue(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.value_[index] = value; + return this; + } + public Builder SetValue(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.value_[index] = builderForValue.Build(); + return this; + } + public Builder AddValue(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.value_.Add(value); + return this; + } + public Builder AddValue(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.value_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeValue(scg::IEnumerable values) { + PrepareBuilder(); + result.value_.Add(values); + return this; + } + public Builder ClearValue() { + PrepareBuilder(); + result.value_.Clear(); + return this; + } + + public bool HasOptions { + get { return result.hasOptions; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions Options { + get { return result.Options; } + set { SetOptions(value); } + } + public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasOptions = true; + result.options_ = value; + return this; + } + public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.hasOptions = true; + result.options_ = builderForValue.Build(); + return this; + } + public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + if (result.hasOptions && + result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.DefaultInstance) { + result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial(); + } else { + result.options_ = value; + } + result.hasOptions = true; + return this; + } + public Builder ClearOptions() { + PrepareBuilder(); + result.hasOptions = false; + result.options_ = null; + return this; + } + } + static EnumDescriptorProto() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class EnumValueDescriptorProto : pb::GeneratedMessage { + private EnumValueDescriptorProto() { } + private static readonly EnumValueDescriptorProto defaultInstance = new EnumValueDescriptorProto().MakeReadOnly(); + private static readonly string[] _enumValueDescriptorProtoFieldNames = new string[] { "name", "number", "options" }; + private static readonly uint[] _enumValueDescriptorProtoFieldTags = new uint[] { 10, 16, 26 }; + public static EnumValueDescriptorProto DefaultInstance { + get { return defaultInstance; } + } + + public override EnumValueDescriptorProto DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override EnumValueDescriptorProto ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumValueDescriptorProto__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumValueDescriptorProto__FieldAccessorTable; } + } + + public const int NameFieldNumber = 1; + private bool hasName; + private string name_ = ""; + public bool HasName { + get { return hasName; } + } + public string Name { + get { return name_; } + } + + public const int NumberFieldNumber = 2; + private bool hasNumber; + private int number_; + public bool HasNumber { + get { return hasNumber; } + } + public int Number { + get { return number_; } + } + + public const int OptionsFieldNumber = 3; + private bool hasOptions; + private global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions options_; + public bool HasOptions { + get { return hasOptions; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions Options { + get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.DefaultInstance; } + } + + public override bool IsInitialized { + get { + if (HasOptions) { + if (!Options.IsInitialized) return false; + } + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _enumValueDescriptorProtoFieldNames; + if (hasName) { + output.WriteString(1, field_names[0], Name); + } + if (hasNumber) { + output.WriteInt32(2, field_names[1], Number); + } + if (hasOptions) { + output.WriteMessage(3, field_names[2], Options); + } + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName) { + size += pb::CodedOutputStream.ComputeStringSize(1, Name); + } + if (hasNumber) { + size += pb::CodedOutputStream.ComputeInt32Size(2, Number); + } + if (hasOptions) { + size += pb::CodedOutputStream.ComputeMessageSize(3, Options); + } + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static EnumValueDescriptorProto ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static EnumValueDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static EnumValueDescriptorProto ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static EnumValueDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static EnumValueDescriptorProto ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static EnumValueDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static EnumValueDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static EnumValueDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static EnumValueDescriptorProto ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static EnumValueDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private EnumValueDescriptorProto MakeReadOnly() { + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(EnumValueDescriptorProto prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::GeneratedBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(EnumValueDescriptorProto cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private EnumValueDescriptorProto result; + + private EnumValueDescriptorProto PrepareBuilder() { + if (resultIsReadOnly) { + EnumValueDescriptorProto original = result; + result = new EnumValueDescriptorProto(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override EnumValueDescriptorProto MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Descriptor; } + } + + public override EnumValueDescriptorProto DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.DefaultInstance; } + } + + public override EnumValueDescriptorProto BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is EnumValueDescriptorProto) { + return MergeFrom((EnumValueDescriptorProto) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(EnumValueDescriptorProto other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.DefaultInstance) return this; + PrepareBuilder(); + if (other.HasName) { + Name = other.Name; + } + if (other.HasNumber) { + Number = other.Number; + } + if (other.HasOptions) { + MergeOptions(other.Options); + } + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_enumValueDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _enumValueDescriptorProtoFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 10: { + result.hasName = input.ReadString(ref result.name_); + break; + } + case 16: { + result.hasNumber = input.ReadInt32(ref result.number_); + break; + } + case 26: { + global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.CreateBuilder(); + if (result.hasOptions) { + subBuilder.MergeFrom(Options); + } + input.ReadMessage(subBuilder, extensionRegistry); + Options = subBuilder.BuildPartial(); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public bool HasName { + get { return result.hasName; } + } + public string Name { + get { return result.Name; } + set { SetName(value); } + } + public Builder SetName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasName = true; + result.name_ = value; + return this; + } + public Builder ClearName() { + PrepareBuilder(); + result.hasName = false; + result.name_ = ""; + return this; + } + + public bool HasNumber { + get { return result.hasNumber; } + } + public int Number { + get { return result.Number; } + set { SetNumber(value); } + } + public Builder SetNumber(int value) { + PrepareBuilder(); + result.hasNumber = true; + result.number_ = value; + return this; + } + public Builder ClearNumber() { + PrepareBuilder(); + result.hasNumber = false; + result.number_ = 0; + return this; + } + + public bool HasOptions { + get { return result.hasOptions; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions Options { + get { return result.Options; } + set { SetOptions(value); } + } + public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasOptions = true; + result.options_ = value; + return this; + } + public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.hasOptions = true; + result.options_ = builderForValue.Build(); + return this; + } + public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + if (result.hasOptions && + result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.DefaultInstance) { + result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial(); + } else { + result.options_ = value; + } + result.hasOptions = true; + return this; + } + public Builder ClearOptions() { + PrepareBuilder(); + result.hasOptions = false; + result.options_ = null; + return this; + } + } + static EnumValueDescriptorProto() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class ServiceDescriptorProto : pb::GeneratedMessage { + private ServiceDescriptorProto() { } + private static readonly ServiceDescriptorProto defaultInstance = new ServiceDescriptorProto().MakeReadOnly(); + private static readonly string[] _serviceDescriptorProtoFieldNames = new string[] { "method", "name", "options" }; + private static readonly uint[] _serviceDescriptorProtoFieldTags = new uint[] { 18, 10, 26 }; + public static ServiceDescriptorProto DefaultInstance { + get { return defaultInstance; } + } + + public override ServiceDescriptorProto DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override ServiceDescriptorProto ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_ServiceDescriptorProto__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_ServiceDescriptorProto__FieldAccessorTable; } + } + + public const int NameFieldNumber = 1; + private bool hasName; + private string name_ = ""; + public bool HasName { + get { return hasName; } + } + public string Name { + get { return name_; } + } + + public const int MethodFieldNumber = 2; + private pbc::PopsicleList method_ = new pbc::PopsicleList(); + public scg::IList MethodList { + get { return method_; } + } + public int MethodCount { + get { return method_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto GetMethod(int index) { + return method_[index]; + } + + public const int OptionsFieldNumber = 3; + private bool hasOptions; + private global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions options_; + public bool HasOptions { + get { return hasOptions; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions Options { + get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.DefaultInstance; } + } + + public override bool IsInitialized { + get { + foreach (global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto element in MethodList) { + if (!element.IsInitialized) return false; + } + if (HasOptions) { + if (!Options.IsInitialized) return false; + } + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _serviceDescriptorProtoFieldNames; + if (hasName) { + output.WriteString(1, field_names[1], Name); + } + if (method_.Count > 0) { + output.WriteMessageArray(2, field_names[0], method_); + } + if (hasOptions) { + output.WriteMessage(3, field_names[2], Options); + } + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName) { + size += pb::CodedOutputStream.ComputeStringSize(1, Name); + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto element in MethodList) { + size += pb::CodedOutputStream.ComputeMessageSize(2, element); + } + if (hasOptions) { + size += pb::CodedOutputStream.ComputeMessageSize(3, Options); + } + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static ServiceDescriptorProto ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static ServiceDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static ServiceDescriptorProto ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static ServiceDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static ServiceDescriptorProto ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static ServiceDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static ServiceDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static ServiceDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static ServiceDescriptorProto ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static ServiceDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private ServiceDescriptorProto MakeReadOnly() { + method_.MakeReadOnly(); + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(ServiceDescriptorProto prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::GeneratedBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(ServiceDescriptorProto cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private ServiceDescriptorProto result; + + private ServiceDescriptorProto PrepareBuilder() { + if (resultIsReadOnly) { + ServiceDescriptorProto original = result; + result = new ServiceDescriptorProto(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override ServiceDescriptorProto MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Descriptor; } + } + + public override ServiceDescriptorProto DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.DefaultInstance; } + } + + public override ServiceDescriptorProto BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is ServiceDescriptorProto) { + return MergeFrom((ServiceDescriptorProto) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(ServiceDescriptorProto other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.DefaultInstance) return this; + PrepareBuilder(); + if (other.HasName) { + Name = other.Name; + } + if (other.method_.Count != 0) { + result.method_.Add(other.method_); + } + if (other.HasOptions) { + MergeOptions(other.Options); + } + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_serviceDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _serviceDescriptorProtoFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 10: { + result.hasName = input.ReadString(ref result.name_); + break; + } + case 18: { + input.ReadMessageArray(tag, field_name, result.method_, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.DefaultInstance, extensionRegistry); + break; + } + case 26: { + global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.CreateBuilder(); + if (result.hasOptions) { + subBuilder.MergeFrom(Options); + } + input.ReadMessage(subBuilder, extensionRegistry); + Options = subBuilder.BuildPartial(); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public bool HasName { + get { return result.hasName; } + } + public string Name { + get { return result.Name; } + set { SetName(value); } + } + public Builder SetName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasName = true; + result.name_ = value; + return this; + } + public Builder ClearName() { + PrepareBuilder(); + result.hasName = false; + result.name_ = ""; + return this; + } + + public pbc::IPopsicleList MethodList { + get { return PrepareBuilder().method_; } + } + public int MethodCount { + get { return result.MethodCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto GetMethod(int index) { + return result.GetMethod(index); + } + public Builder SetMethod(int index, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.method_[index] = value; + return this; + } + public Builder SetMethod(int index, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.method_[index] = builderForValue.Build(); + return this; + } + public Builder AddMethod(global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.method_.Add(value); + return this; + } + public Builder AddMethod(global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.method_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeMethod(scg::IEnumerable values) { + PrepareBuilder(); + result.method_.Add(values); + return this; + } + public Builder ClearMethod() { + PrepareBuilder(); + result.method_.Clear(); + return this; + } + + public bool HasOptions { + get { return result.hasOptions; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions Options { + get { return result.Options; } + set { SetOptions(value); } + } + public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasOptions = true; + result.options_ = value; + return this; + } + public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.hasOptions = true; + result.options_ = builderForValue.Build(); + return this; + } + public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + if (result.hasOptions && + result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.DefaultInstance) { + result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial(); + } else { + result.options_ = value; + } + result.hasOptions = true; + return this; + } + public Builder ClearOptions() { + PrepareBuilder(); + result.hasOptions = false; + result.options_ = null; + return this; + } + } + static ServiceDescriptorProto() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class MethodDescriptorProto : pb::GeneratedMessage { + private MethodDescriptorProto() { } + private static readonly MethodDescriptorProto defaultInstance = new MethodDescriptorProto().MakeReadOnly(); + private static readonly string[] _methodDescriptorProtoFieldNames = new string[] { "input_type", "name", "options", "output_type" }; + private static readonly uint[] _methodDescriptorProtoFieldTags = new uint[] { 18, 10, 34, 26 }; + public static MethodDescriptorProto DefaultInstance { + get { return defaultInstance; } + } + + public override MethodDescriptorProto DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override MethodDescriptorProto ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MethodDescriptorProto__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MethodDescriptorProto__FieldAccessorTable; } + } + + public const int NameFieldNumber = 1; + private bool hasName; + private string name_ = ""; + public bool HasName { + get { return hasName; } + } + public string Name { + get { return name_; } + } + + public const int InputTypeFieldNumber = 2; + private bool hasInputType; + private string inputType_ = ""; + public bool HasInputType { + get { return hasInputType; } + } + public string InputType { + get { return inputType_; } + } + + public const int OutputTypeFieldNumber = 3; + private bool hasOutputType; + private string outputType_ = ""; + public bool HasOutputType { + get { return hasOutputType; } + } + public string OutputType { + get { return outputType_; } + } + + public const int OptionsFieldNumber = 4; + private bool hasOptions; + private global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions options_; + public bool HasOptions { + get { return hasOptions; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions Options { + get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.DefaultInstance; } + } + + public override bool IsInitialized { + get { + if (HasOptions) { + if (!Options.IsInitialized) return false; + } + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _methodDescriptorProtoFieldNames; + if (hasName) { + output.WriteString(1, field_names[1], Name); + } + if (hasInputType) { + output.WriteString(2, field_names[0], InputType); + } + if (hasOutputType) { + output.WriteString(3, field_names[3], OutputType); + } + if (hasOptions) { + output.WriteMessage(4, field_names[2], Options); + } + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasName) { + size += pb::CodedOutputStream.ComputeStringSize(1, Name); + } + if (hasInputType) { + size += pb::CodedOutputStream.ComputeStringSize(2, InputType); + } + if (hasOutputType) { + size += pb::CodedOutputStream.ComputeStringSize(3, OutputType); + } + if (hasOptions) { + size += pb::CodedOutputStream.ComputeMessageSize(4, Options); + } + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static MethodDescriptorProto ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static MethodDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static MethodDescriptorProto ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static MethodDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static MethodDescriptorProto ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static MethodDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static MethodDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static MethodDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static MethodDescriptorProto ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static MethodDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private MethodDescriptorProto MakeReadOnly() { + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(MethodDescriptorProto prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::GeneratedBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(MethodDescriptorProto cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private MethodDescriptorProto result; + + private MethodDescriptorProto PrepareBuilder() { + if (resultIsReadOnly) { + MethodDescriptorProto original = result; + result = new MethodDescriptorProto(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override MethodDescriptorProto MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Descriptor; } + } + + public override MethodDescriptorProto DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.DefaultInstance; } + } + + public override MethodDescriptorProto BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is MethodDescriptorProto) { + return MergeFrom((MethodDescriptorProto) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(MethodDescriptorProto other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.DefaultInstance) return this; + PrepareBuilder(); + if (other.HasName) { + Name = other.Name; + } + if (other.HasInputType) { + InputType = other.InputType; + } + if (other.HasOutputType) { + OutputType = other.OutputType; + } + if (other.HasOptions) { + MergeOptions(other.Options); + } + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_methodDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _methodDescriptorProtoFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 10: { + result.hasName = input.ReadString(ref result.name_); + break; + } + case 18: { + result.hasInputType = input.ReadString(ref result.inputType_); + break; + } + case 26: { + result.hasOutputType = input.ReadString(ref result.outputType_); + break; + } + case 34: { + global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.CreateBuilder(); + if (result.hasOptions) { + subBuilder.MergeFrom(Options); + } + input.ReadMessage(subBuilder, extensionRegistry); + Options = subBuilder.BuildPartial(); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public bool HasName { + get { return result.hasName; } + } + public string Name { + get { return result.Name; } + set { SetName(value); } + } + public Builder SetName(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasName = true; + result.name_ = value; + return this; + } + public Builder ClearName() { + PrepareBuilder(); + result.hasName = false; + result.name_ = ""; + return this; + } + + public bool HasInputType { + get { return result.hasInputType; } + } + public string InputType { + get { return result.InputType; } + set { SetInputType(value); } + } + public Builder SetInputType(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasInputType = true; + result.inputType_ = value; + return this; + } + public Builder ClearInputType() { + PrepareBuilder(); + result.hasInputType = false; + result.inputType_ = ""; + return this; + } + + public bool HasOutputType { + get { return result.hasOutputType; } + } + public string OutputType { + get { return result.OutputType; } + set { SetOutputType(value); } + } + public Builder SetOutputType(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasOutputType = true; + result.outputType_ = value; + return this; + } + public Builder ClearOutputType() { + PrepareBuilder(); + result.hasOutputType = false; + result.outputType_ = ""; + return this; + } + + public bool HasOptions { + get { return result.hasOptions; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions Options { + get { return result.Options; } + set { SetOptions(value); } + } + public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasOptions = true; + result.options_ = value; + return this; + } + public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.hasOptions = true; + result.options_ = builderForValue.Build(); + return this; + } + public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + if (result.hasOptions && + result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.DefaultInstance) { + result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial(); + } else { + result.options_ = value; + } + result.hasOptions = true; + return this; + } + public Builder ClearOptions() { + PrepareBuilder(); + result.hasOptions = false; + result.options_ = null; + return this; + } + } + static MethodDescriptorProto() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class FileOptions : pb::ExtendableMessage { + private FileOptions() { } + private static readonly FileOptions defaultInstance = new FileOptions().MakeReadOnly(); + private static readonly string[] _fileOptionsFieldNames = new string[] { "cc_generic_services", "java_generate_equals_and_hash", "java_generic_services", "java_multiple_files", "java_outer_classname", "java_package", "optimize_for", "py_generic_services", "uninterpreted_option" }; + private static readonly uint[] _fileOptionsFieldTags = new uint[] { 128, 160, 136, 80, 66, 10, 72, 144, 7994 }; + public static FileOptions DefaultInstance { + get { return defaultInstance; } + } + + public override FileOptions DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override FileOptions ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileOptions__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileOptions__FieldAccessorTable; } + } + + #region Nested types + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public static class Types { + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public enum OptimizeMode { + SPEED = 1, + CODE_SIZE = 2, + LITE_RUNTIME = 3, + } + + } + #endregion + + public const int JavaPackageFieldNumber = 1; + private bool hasJavaPackage; + private string javaPackage_ = ""; + public bool HasJavaPackage { + get { return hasJavaPackage; } + } + public string JavaPackage { + get { return javaPackage_; } + } + + public const int JavaOuterClassnameFieldNumber = 8; + private bool hasJavaOuterClassname; + private string javaOuterClassname_ = ""; + public bool HasJavaOuterClassname { + get { return hasJavaOuterClassname; } + } + public string JavaOuterClassname { + get { return javaOuterClassname_; } + } + + public const int JavaMultipleFilesFieldNumber = 10; + private bool hasJavaMultipleFiles; + private bool javaMultipleFiles_; + public bool HasJavaMultipleFiles { + get { return hasJavaMultipleFiles; } + } + public bool JavaMultipleFiles { + get { return javaMultipleFiles_; } + } + + public const int JavaGenerateEqualsAndHashFieldNumber = 20; + private bool hasJavaGenerateEqualsAndHash; + private bool javaGenerateEqualsAndHash_; + public bool HasJavaGenerateEqualsAndHash { + get { return hasJavaGenerateEqualsAndHash; } + } + public bool JavaGenerateEqualsAndHash { + get { return javaGenerateEqualsAndHash_; } + } + + public const int OptimizeForFieldNumber = 9; + private bool hasOptimizeFor; + private global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode optimizeFor_ = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode.SPEED; + public bool HasOptimizeFor { + get { return hasOptimizeFor; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode OptimizeFor { + get { return optimizeFor_; } + } + + public const int CcGenericServicesFieldNumber = 16; + private bool hasCcGenericServices; + private bool ccGenericServices_; + public bool HasCcGenericServices { + get { return hasCcGenericServices; } + } + public bool CcGenericServices { + get { return ccGenericServices_; } + } + + public const int JavaGenericServicesFieldNumber = 17; + private bool hasJavaGenericServices; + private bool javaGenericServices_; + public bool HasJavaGenericServices { + get { return hasJavaGenericServices; } + } + public bool JavaGenericServices { + get { return javaGenericServices_; } + } + + public const int PyGenericServicesFieldNumber = 18; + private bool hasPyGenericServices; + private bool pyGenericServices_; + public bool HasPyGenericServices { + get { return hasPyGenericServices; } + } + public bool PyGenericServices { + get { return pyGenericServices_; } + } + + public const int UninterpretedOptionFieldNumber = 999; + private pbc::PopsicleList uninterpretedOption_ = new pbc::PopsicleList(); + public scg::IList UninterpretedOptionList { + get { return uninterpretedOption_; } + } + public int UninterpretedOptionCount { + get { return uninterpretedOption_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) { + return uninterpretedOption_[index]; + } + + public override bool IsInitialized { + get { + foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) { + if (!element.IsInitialized) return false; + } + if (!ExtensionsAreInitialized) return false; + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _fileOptionsFieldNames; + pb::ExtendableMessage.ExtensionWriter extensionWriter = CreateExtensionWriter(this); + if (hasJavaPackage) { + output.WriteString(1, field_names[5], JavaPackage); + } + if (hasJavaOuterClassname) { + output.WriteString(8, field_names[4], JavaOuterClassname); + } + if (hasOptimizeFor) { + output.WriteEnum(9, field_names[6], (int) OptimizeFor, OptimizeFor); + } + if (hasJavaMultipleFiles) { + output.WriteBool(10, field_names[3], JavaMultipleFiles); + } + if (hasCcGenericServices) { + output.WriteBool(16, field_names[0], CcGenericServices); + } + if (hasJavaGenericServices) { + output.WriteBool(17, field_names[2], JavaGenericServices); + } + if (hasPyGenericServices) { + output.WriteBool(18, field_names[7], PyGenericServices); + } + if (hasJavaGenerateEqualsAndHash) { + output.WriteBool(20, field_names[1], JavaGenerateEqualsAndHash); + } + if (uninterpretedOption_.Count > 0) { + output.WriteMessageArray(999, field_names[8], uninterpretedOption_); + } + extensionWriter.WriteUntil(536870912, output); + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasJavaPackage) { + size += pb::CodedOutputStream.ComputeStringSize(1, JavaPackage); + } + if (hasJavaOuterClassname) { + size += pb::CodedOutputStream.ComputeStringSize(8, JavaOuterClassname); + } + if (hasJavaMultipleFiles) { + size += pb::CodedOutputStream.ComputeBoolSize(10, JavaMultipleFiles); + } + if (hasJavaGenerateEqualsAndHash) { + size += pb::CodedOutputStream.ComputeBoolSize(20, JavaGenerateEqualsAndHash); + } + if (hasOptimizeFor) { + size += pb::CodedOutputStream.ComputeEnumSize(9, (int) OptimizeFor); + } + if (hasCcGenericServices) { + size += pb::CodedOutputStream.ComputeBoolSize(16, CcGenericServices); + } + if (hasJavaGenericServices) { + size += pb::CodedOutputStream.ComputeBoolSize(17, JavaGenericServices); + } + if (hasPyGenericServices) { + size += pb::CodedOutputStream.ComputeBoolSize(18, PyGenericServices); + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) { + size += pb::CodedOutputStream.ComputeMessageSize(999, element); + } + size += ExtensionsSerializedSize; + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static FileOptions ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static FileOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static FileOptions ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static FileOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static FileOptions ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static FileOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static FileOptions ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static FileOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static FileOptions ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static FileOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private FileOptions MakeReadOnly() { + uninterpretedOption_.MakeReadOnly(); + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(FileOptions prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::ExtendableBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(FileOptions cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private FileOptions result; + + private FileOptions PrepareBuilder() { + if (resultIsReadOnly) { + FileOptions original = result; + result = new FileOptions(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override FileOptions MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Descriptor; } + } + + public override FileOptions DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance; } + } + + public override FileOptions BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is FileOptions) { + return MergeFrom((FileOptions) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(FileOptions other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance) return this; + PrepareBuilder(); + if (other.HasJavaPackage) { + JavaPackage = other.JavaPackage; + } + if (other.HasJavaOuterClassname) { + JavaOuterClassname = other.JavaOuterClassname; + } + if (other.HasJavaMultipleFiles) { + JavaMultipleFiles = other.JavaMultipleFiles; + } + if (other.HasJavaGenerateEqualsAndHash) { + JavaGenerateEqualsAndHash = other.JavaGenerateEqualsAndHash; + } + if (other.HasOptimizeFor) { + OptimizeFor = other.OptimizeFor; + } + if (other.HasCcGenericServices) { + CcGenericServices = other.CcGenericServices; + } + if (other.HasJavaGenericServices) { + JavaGenericServices = other.JavaGenericServices; + } + if (other.HasPyGenericServices) { + PyGenericServices = other.PyGenericServices; + } + if (other.uninterpretedOption_.Count != 0) { + result.uninterpretedOption_.Add(other.uninterpretedOption_); + } + this.MergeExtensionFields(other); + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_fileOptionsFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _fileOptionsFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 10: { + result.hasJavaPackage = input.ReadString(ref result.javaPackage_); + break; + } + case 66: { + result.hasJavaOuterClassname = input.ReadString(ref result.javaOuterClassname_); + break; + } + case 72: { + object unknown; + if(input.ReadEnum(ref result.optimizeFor_, out unknown)) { + result.hasOptimizeFor = true; + } else if(unknown is int) { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + unknownFields.MergeVarintField(9, (ulong)(int)unknown); + } + break; + } + case 80: { + result.hasJavaMultipleFiles = input.ReadBool(ref result.javaMultipleFiles_); + break; + } + case 128: { + result.hasCcGenericServices = input.ReadBool(ref result.ccGenericServices_); + break; + } + case 136: { + result.hasJavaGenericServices = input.ReadBool(ref result.javaGenericServices_); + break; + } + case 144: { + result.hasPyGenericServices = input.ReadBool(ref result.pyGenericServices_); + break; + } + case 160: { + result.hasJavaGenerateEqualsAndHash = input.ReadBool(ref result.javaGenerateEqualsAndHash_); + break; + } + case 7994: { + input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public bool HasJavaPackage { + get { return result.hasJavaPackage; } + } + public string JavaPackage { + get { return result.JavaPackage; } + set { SetJavaPackage(value); } + } + public Builder SetJavaPackage(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasJavaPackage = true; + result.javaPackage_ = value; + return this; + } + public Builder ClearJavaPackage() { + PrepareBuilder(); + result.hasJavaPackage = false; + result.javaPackage_ = ""; + return this; + } + + public bool HasJavaOuterClassname { + get { return result.hasJavaOuterClassname; } + } + public string JavaOuterClassname { + get { return result.JavaOuterClassname; } + set { SetJavaOuterClassname(value); } + } + public Builder SetJavaOuterClassname(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasJavaOuterClassname = true; + result.javaOuterClassname_ = value; + return this; + } + public Builder ClearJavaOuterClassname() { + PrepareBuilder(); + result.hasJavaOuterClassname = false; + result.javaOuterClassname_ = ""; + return this; + } + + public bool HasJavaMultipleFiles { + get { return result.hasJavaMultipleFiles; } + } + public bool JavaMultipleFiles { + get { return result.JavaMultipleFiles; } + set { SetJavaMultipleFiles(value); } + } + public Builder SetJavaMultipleFiles(bool value) { + PrepareBuilder(); + result.hasJavaMultipleFiles = true; + result.javaMultipleFiles_ = value; + return this; + } + public Builder ClearJavaMultipleFiles() { + PrepareBuilder(); + result.hasJavaMultipleFiles = false; + result.javaMultipleFiles_ = false; + return this; + } + + public bool HasJavaGenerateEqualsAndHash { + get { return result.hasJavaGenerateEqualsAndHash; } + } + public bool JavaGenerateEqualsAndHash { + get { return result.JavaGenerateEqualsAndHash; } + set { SetJavaGenerateEqualsAndHash(value); } + } + public Builder SetJavaGenerateEqualsAndHash(bool value) { + PrepareBuilder(); + result.hasJavaGenerateEqualsAndHash = true; + result.javaGenerateEqualsAndHash_ = value; + return this; + } + public Builder ClearJavaGenerateEqualsAndHash() { + PrepareBuilder(); + result.hasJavaGenerateEqualsAndHash = false; + result.javaGenerateEqualsAndHash_ = false; + return this; + } + + public bool HasOptimizeFor { + get { return result.hasOptimizeFor; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode OptimizeFor { + get { return result.OptimizeFor; } + set { SetOptimizeFor(value); } + } + public Builder SetOptimizeFor(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode value) { + PrepareBuilder(); + result.hasOptimizeFor = true; + result.optimizeFor_ = value; + return this; + } + public Builder ClearOptimizeFor() { + PrepareBuilder(); + result.hasOptimizeFor = false; + result.optimizeFor_ = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode.SPEED; + return this; + } + + public bool HasCcGenericServices { + get { return result.hasCcGenericServices; } + } + public bool CcGenericServices { + get { return result.CcGenericServices; } + set { SetCcGenericServices(value); } + } + public Builder SetCcGenericServices(bool value) { + PrepareBuilder(); + result.hasCcGenericServices = true; + result.ccGenericServices_ = value; + return this; + } + public Builder ClearCcGenericServices() { + PrepareBuilder(); + result.hasCcGenericServices = false; + result.ccGenericServices_ = false; + return this; + } + + public bool HasJavaGenericServices { + get { return result.hasJavaGenericServices; } + } + public bool JavaGenericServices { + get { return result.JavaGenericServices; } + set { SetJavaGenericServices(value); } + } + public Builder SetJavaGenericServices(bool value) { + PrepareBuilder(); + result.hasJavaGenericServices = true; + result.javaGenericServices_ = value; + return this; + } + public Builder ClearJavaGenericServices() { + PrepareBuilder(); + result.hasJavaGenericServices = false; + result.javaGenericServices_ = false; + return this; + } + + public bool HasPyGenericServices { + get { return result.hasPyGenericServices; } + } + public bool PyGenericServices { + get { return result.PyGenericServices; } + set { SetPyGenericServices(value); } + } + public Builder SetPyGenericServices(bool value) { + PrepareBuilder(); + result.hasPyGenericServices = true; + result.pyGenericServices_ = value; + return this; + } + public Builder ClearPyGenericServices() { + PrepareBuilder(); + result.hasPyGenericServices = false; + result.pyGenericServices_ = false; + return this; + } + + public pbc::IPopsicleList UninterpretedOptionList { + get { return PrepareBuilder().uninterpretedOption_; } + } + public int UninterpretedOptionCount { + get { return result.UninterpretedOptionCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) { + return result.GetUninterpretedOption(index); + } + public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.uninterpretedOption_[index] = value; + return this; + } + public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.uninterpretedOption_[index] = builderForValue.Build(); + return this; + } + public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.uninterpretedOption_.Add(value); + return this; + } + public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.uninterpretedOption_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeUninterpretedOption(scg::IEnumerable values) { + PrepareBuilder(); + result.uninterpretedOption_.Add(values); + return this; + } + public Builder ClearUninterpretedOption() { + PrepareBuilder(); + result.uninterpretedOption_.Clear(); + return this; + } + } + static FileOptions() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class MessageOptions : pb::ExtendableMessage { + private MessageOptions() { } + private static readonly MessageOptions defaultInstance = new MessageOptions().MakeReadOnly(); + private static readonly string[] _messageOptionsFieldNames = new string[] { "message_set_wire_format", "no_standard_descriptor_accessor", "uninterpreted_option" }; + private static readonly uint[] _messageOptionsFieldTags = new uint[] { 8, 16, 7994 }; + public static MessageOptions DefaultInstance { + get { return defaultInstance; } + } + + public override MessageOptions DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override MessageOptions ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MessageOptions__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MessageOptions__FieldAccessorTable; } + } + + public const int MessageSetWireFormatFieldNumber = 1; + private bool hasMessageSetWireFormat; + private bool messageSetWireFormat_; + public bool HasMessageSetWireFormat { + get { return hasMessageSetWireFormat; } + } + public bool MessageSetWireFormat { + get { return messageSetWireFormat_; } + } + + public const int NoStandardDescriptorAccessorFieldNumber = 2; + private bool hasNoStandardDescriptorAccessor; + private bool noStandardDescriptorAccessor_; + public bool HasNoStandardDescriptorAccessor { + get { return hasNoStandardDescriptorAccessor; } + } + public bool NoStandardDescriptorAccessor { + get { return noStandardDescriptorAccessor_; } + } + + public const int UninterpretedOptionFieldNumber = 999; + private pbc::PopsicleList uninterpretedOption_ = new pbc::PopsicleList(); + public scg::IList UninterpretedOptionList { + get { return uninterpretedOption_; } + } + public int UninterpretedOptionCount { + get { return uninterpretedOption_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) { + return uninterpretedOption_[index]; + } + + public override bool IsInitialized { + get { + foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) { + if (!element.IsInitialized) return false; + } + if (!ExtensionsAreInitialized) return false; + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _messageOptionsFieldNames; + pb::ExtendableMessage.ExtensionWriter extensionWriter = CreateExtensionWriter(this); + if (hasMessageSetWireFormat) { + output.WriteBool(1, field_names[0], MessageSetWireFormat); + } + if (hasNoStandardDescriptorAccessor) { + output.WriteBool(2, field_names[1], NoStandardDescriptorAccessor); + } + if (uninterpretedOption_.Count > 0) { + output.WriteMessageArray(999, field_names[2], uninterpretedOption_); + } + extensionWriter.WriteUntil(536870912, output); + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasMessageSetWireFormat) { + size += pb::CodedOutputStream.ComputeBoolSize(1, MessageSetWireFormat); + } + if (hasNoStandardDescriptorAccessor) { + size += pb::CodedOutputStream.ComputeBoolSize(2, NoStandardDescriptorAccessor); + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) { + size += pb::CodedOutputStream.ComputeMessageSize(999, element); + } + size += ExtensionsSerializedSize; + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static MessageOptions ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static MessageOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static MessageOptions ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static MessageOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static MessageOptions ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static MessageOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static MessageOptions ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static MessageOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static MessageOptions ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static MessageOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private MessageOptions MakeReadOnly() { + uninterpretedOption_.MakeReadOnly(); + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(MessageOptions prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::ExtendableBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(MessageOptions cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private MessageOptions result; + + private MessageOptions PrepareBuilder() { + if (resultIsReadOnly) { + MessageOptions original = result; + result = new MessageOptions(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override MessageOptions MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Descriptor; } + } + + public override MessageOptions DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.DefaultInstance; } + } + + public override MessageOptions BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is MessageOptions) { + return MergeFrom((MessageOptions) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(MessageOptions other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.DefaultInstance) return this; + PrepareBuilder(); + if (other.HasMessageSetWireFormat) { + MessageSetWireFormat = other.MessageSetWireFormat; + } + if (other.HasNoStandardDescriptorAccessor) { + NoStandardDescriptorAccessor = other.NoStandardDescriptorAccessor; + } + if (other.uninterpretedOption_.Count != 0) { + result.uninterpretedOption_.Add(other.uninterpretedOption_); + } + this.MergeExtensionFields(other); + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_messageOptionsFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _messageOptionsFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 8: { + result.hasMessageSetWireFormat = input.ReadBool(ref result.messageSetWireFormat_); + break; + } + case 16: { + result.hasNoStandardDescriptorAccessor = input.ReadBool(ref result.noStandardDescriptorAccessor_); + break; + } + case 7994: { + input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public bool HasMessageSetWireFormat { + get { return result.hasMessageSetWireFormat; } + } + public bool MessageSetWireFormat { + get { return result.MessageSetWireFormat; } + set { SetMessageSetWireFormat(value); } + } + public Builder SetMessageSetWireFormat(bool value) { + PrepareBuilder(); + result.hasMessageSetWireFormat = true; + result.messageSetWireFormat_ = value; + return this; + } + public Builder ClearMessageSetWireFormat() { + PrepareBuilder(); + result.hasMessageSetWireFormat = false; + result.messageSetWireFormat_ = false; + return this; + } + + public bool HasNoStandardDescriptorAccessor { + get { return result.hasNoStandardDescriptorAccessor; } + } + public bool NoStandardDescriptorAccessor { + get { return result.NoStandardDescriptorAccessor; } + set { SetNoStandardDescriptorAccessor(value); } + } + public Builder SetNoStandardDescriptorAccessor(bool value) { + PrepareBuilder(); + result.hasNoStandardDescriptorAccessor = true; + result.noStandardDescriptorAccessor_ = value; + return this; + } + public Builder ClearNoStandardDescriptorAccessor() { + PrepareBuilder(); + result.hasNoStandardDescriptorAccessor = false; + result.noStandardDescriptorAccessor_ = false; + return this; + } + + public pbc::IPopsicleList UninterpretedOptionList { + get { return PrepareBuilder().uninterpretedOption_; } + } + public int UninterpretedOptionCount { + get { return result.UninterpretedOptionCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) { + return result.GetUninterpretedOption(index); + } + public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.uninterpretedOption_[index] = value; + return this; + } + public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.uninterpretedOption_[index] = builderForValue.Build(); + return this; + } + public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.uninterpretedOption_.Add(value); + return this; + } + public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.uninterpretedOption_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeUninterpretedOption(scg::IEnumerable values) { + PrepareBuilder(); + result.uninterpretedOption_.Add(values); + return this; + } + public Builder ClearUninterpretedOption() { + PrepareBuilder(); + result.uninterpretedOption_.Clear(); + return this; + } + } + static MessageOptions() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class FieldOptions : pb::ExtendableMessage { + private FieldOptions() { } + private static readonly FieldOptions defaultInstance = new FieldOptions().MakeReadOnly(); + private static readonly string[] _fieldOptionsFieldNames = new string[] { "ctype", "deprecated", "experimental_map_key", "packed", "uninterpreted_option" }; + private static readonly uint[] _fieldOptionsFieldTags = new uint[] { 8, 24, 74, 16, 7994 }; + public static FieldOptions DefaultInstance { + get { return defaultInstance; } + } + + public override FieldOptions DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override FieldOptions ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FieldOptions__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FieldOptions__FieldAccessorTable; } + } + + #region Nested types + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public static class Types { + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public enum CType { + STRING = 0, + CORD = 1, + STRING_PIECE = 2, + } + + } + #endregion + + public const int CtypeFieldNumber = 1; + private bool hasCtype; + private global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType ctype_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType.STRING; + public bool HasCtype { + get { return hasCtype; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType Ctype { + get { return ctype_; } + } + + public const int PackedFieldNumber = 2; + private bool hasPacked; + private bool packed_; + public bool HasPacked { + get { return hasPacked; } + } + public bool Packed { + get { return packed_; } + } + + public const int DeprecatedFieldNumber = 3; + private bool hasDeprecated; + private bool deprecated_; + public bool HasDeprecated { + get { return hasDeprecated; } + } + public bool Deprecated { + get { return deprecated_; } + } + + public const int ExperimentalMapKeyFieldNumber = 9; + private bool hasExperimentalMapKey; + private string experimentalMapKey_ = ""; + public bool HasExperimentalMapKey { + get { return hasExperimentalMapKey; } + } + public string ExperimentalMapKey { + get { return experimentalMapKey_; } + } + + public const int UninterpretedOptionFieldNumber = 999; + private pbc::PopsicleList uninterpretedOption_ = new pbc::PopsicleList(); + public scg::IList UninterpretedOptionList { + get { return uninterpretedOption_; } + } + public int UninterpretedOptionCount { + get { return uninterpretedOption_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) { + return uninterpretedOption_[index]; + } + + public override bool IsInitialized { + get { + foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) { + if (!element.IsInitialized) return false; + } + if (!ExtensionsAreInitialized) return false; + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _fieldOptionsFieldNames; + pb::ExtendableMessage.ExtensionWriter extensionWriter = CreateExtensionWriter(this); + if (hasCtype) { + output.WriteEnum(1, field_names[0], (int) Ctype, Ctype); + } + if (hasPacked) { + output.WriteBool(2, field_names[3], Packed); + } + if (hasDeprecated) { + output.WriteBool(3, field_names[1], Deprecated); + } + if (hasExperimentalMapKey) { + output.WriteString(9, field_names[2], ExperimentalMapKey); + } + if (uninterpretedOption_.Count > 0) { + output.WriteMessageArray(999, field_names[4], uninterpretedOption_); + } + extensionWriter.WriteUntil(536870912, output); + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasCtype) { + size += pb::CodedOutputStream.ComputeEnumSize(1, (int) Ctype); + } + if (hasPacked) { + size += pb::CodedOutputStream.ComputeBoolSize(2, Packed); + } + if (hasDeprecated) { + size += pb::CodedOutputStream.ComputeBoolSize(3, Deprecated); + } + if (hasExperimentalMapKey) { + size += pb::CodedOutputStream.ComputeStringSize(9, ExperimentalMapKey); + } + foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) { + size += pb::CodedOutputStream.ComputeMessageSize(999, element); + } + size += ExtensionsSerializedSize; + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static FieldOptions ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static FieldOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static FieldOptions ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static FieldOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static FieldOptions ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static FieldOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static FieldOptions ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static FieldOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static FieldOptions ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static FieldOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private FieldOptions MakeReadOnly() { + uninterpretedOption_.MakeReadOnly(); + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(FieldOptions prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::ExtendableBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(FieldOptions cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private FieldOptions result; + + private FieldOptions PrepareBuilder() { + if (resultIsReadOnly) { + FieldOptions original = result; + result = new FieldOptions(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override FieldOptions MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Descriptor; } + } + + public override FieldOptions DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.DefaultInstance; } + } + + public override FieldOptions BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is FieldOptions) { + return MergeFrom((FieldOptions) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(FieldOptions other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.DefaultInstance) return this; + PrepareBuilder(); + if (other.HasCtype) { + Ctype = other.Ctype; + } + if (other.HasPacked) { + Packed = other.Packed; + } + if (other.HasDeprecated) { + Deprecated = other.Deprecated; + } + if (other.HasExperimentalMapKey) { + ExperimentalMapKey = other.ExperimentalMapKey; + } + if (other.uninterpretedOption_.Count != 0) { + result.uninterpretedOption_.Add(other.uninterpretedOption_); + } + this.MergeExtensionFields(other); + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_fieldOptionsFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _fieldOptionsFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 8: { + object unknown; + if(input.ReadEnum(ref result.ctype_, out unknown)) { + result.hasCtype = true; + } else if(unknown is int) { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + unknownFields.MergeVarintField(1, (ulong)(int)unknown); + } + break; + } + case 16: { + result.hasPacked = input.ReadBool(ref result.packed_); + break; + } + case 24: { + result.hasDeprecated = input.ReadBool(ref result.deprecated_); + break; + } + case 74: { + result.hasExperimentalMapKey = input.ReadString(ref result.experimentalMapKey_); + break; + } + case 7994: { + input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public bool HasCtype { + get { return result.hasCtype; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType Ctype { + get { return result.Ctype; } + set { SetCtype(value); } + } + public Builder SetCtype(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType value) { + PrepareBuilder(); + result.hasCtype = true; + result.ctype_ = value; + return this; + } + public Builder ClearCtype() { + PrepareBuilder(); + result.hasCtype = false; + result.ctype_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType.STRING; + return this; + } + + public bool HasPacked { + get { return result.hasPacked; } + } + public bool Packed { + get { return result.Packed; } + set { SetPacked(value); } + } + public Builder SetPacked(bool value) { + PrepareBuilder(); + result.hasPacked = true; + result.packed_ = value; + return this; + } + public Builder ClearPacked() { + PrepareBuilder(); + result.hasPacked = false; + result.packed_ = false; + return this; + } + + public bool HasDeprecated { + get { return result.hasDeprecated; } + } + public bool Deprecated { + get { return result.Deprecated; } + set { SetDeprecated(value); } + } + public Builder SetDeprecated(bool value) { + PrepareBuilder(); + result.hasDeprecated = true; + result.deprecated_ = value; + return this; + } + public Builder ClearDeprecated() { + PrepareBuilder(); + result.hasDeprecated = false; + result.deprecated_ = false; + return this; + } + + public bool HasExperimentalMapKey { + get { return result.hasExperimentalMapKey; } + } + public string ExperimentalMapKey { + get { return result.ExperimentalMapKey; } + set { SetExperimentalMapKey(value); } + } + public Builder SetExperimentalMapKey(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasExperimentalMapKey = true; + result.experimentalMapKey_ = value; + return this; + } + public Builder ClearExperimentalMapKey() { + PrepareBuilder(); + result.hasExperimentalMapKey = false; + result.experimentalMapKey_ = ""; + return this; + } + + public pbc::IPopsicleList UninterpretedOptionList { + get { return PrepareBuilder().uninterpretedOption_; } + } + public int UninterpretedOptionCount { + get { return result.UninterpretedOptionCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) { + return result.GetUninterpretedOption(index); + } + public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.uninterpretedOption_[index] = value; + return this; + } + public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.uninterpretedOption_[index] = builderForValue.Build(); + return this; + } + public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.uninterpretedOption_.Add(value); + return this; + } + public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.uninterpretedOption_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeUninterpretedOption(scg::IEnumerable values) { + PrepareBuilder(); + result.uninterpretedOption_.Add(values); + return this; + } + public Builder ClearUninterpretedOption() { + PrepareBuilder(); + result.uninterpretedOption_.Clear(); + return this; + } + } + static FieldOptions() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class EnumOptions : pb::ExtendableMessage { + private EnumOptions() { } + private static readonly EnumOptions defaultInstance = new EnumOptions().MakeReadOnly(); + private static readonly string[] _enumOptionsFieldNames = new string[] { "uninterpreted_option" }; + private static readonly uint[] _enumOptionsFieldTags = new uint[] { 7994 }; + public static EnumOptions DefaultInstance { + get { return defaultInstance; } + } + + public override EnumOptions DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override EnumOptions ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumOptions__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumOptions__FieldAccessorTable; } + } + + public const int UninterpretedOptionFieldNumber = 999; + private pbc::PopsicleList uninterpretedOption_ = new pbc::PopsicleList(); + public scg::IList UninterpretedOptionList { + get { return uninterpretedOption_; } + } + public int UninterpretedOptionCount { + get { return uninterpretedOption_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) { + return uninterpretedOption_[index]; + } + + public override bool IsInitialized { + get { + foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) { + if (!element.IsInitialized) return false; + } + if (!ExtensionsAreInitialized) return false; + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _enumOptionsFieldNames; + pb::ExtendableMessage.ExtensionWriter extensionWriter = CreateExtensionWriter(this); + if (uninterpretedOption_.Count > 0) { + output.WriteMessageArray(999, field_names[0], uninterpretedOption_); + } + extensionWriter.WriteUntil(536870912, output); + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) { + size += pb::CodedOutputStream.ComputeMessageSize(999, element); + } + size += ExtensionsSerializedSize; + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static EnumOptions ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static EnumOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static EnumOptions ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static EnumOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static EnumOptions ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static EnumOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static EnumOptions ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static EnumOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static EnumOptions ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static EnumOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private EnumOptions MakeReadOnly() { + uninterpretedOption_.MakeReadOnly(); + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(EnumOptions prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::ExtendableBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(EnumOptions cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private EnumOptions result; + + private EnumOptions PrepareBuilder() { + if (resultIsReadOnly) { + EnumOptions original = result; + result = new EnumOptions(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override EnumOptions MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Descriptor; } + } + + public override EnumOptions DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.DefaultInstance; } + } + + public override EnumOptions BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is EnumOptions) { + return MergeFrom((EnumOptions) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(EnumOptions other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.DefaultInstance) return this; + PrepareBuilder(); + if (other.uninterpretedOption_.Count != 0) { + result.uninterpretedOption_.Add(other.uninterpretedOption_); + } + this.MergeExtensionFields(other); + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_enumOptionsFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _enumOptionsFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 7994: { + input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public pbc::IPopsicleList UninterpretedOptionList { + get { return PrepareBuilder().uninterpretedOption_; } + } + public int UninterpretedOptionCount { + get { return result.UninterpretedOptionCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) { + return result.GetUninterpretedOption(index); + } + public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.uninterpretedOption_[index] = value; + return this; + } + public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.uninterpretedOption_[index] = builderForValue.Build(); + return this; + } + public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.uninterpretedOption_.Add(value); + return this; + } + public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.uninterpretedOption_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeUninterpretedOption(scg::IEnumerable values) { + PrepareBuilder(); + result.uninterpretedOption_.Add(values); + return this; + } + public Builder ClearUninterpretedOption() { + PrepareBuilder(); + result.uninterpretedOption_.Clear(); + return this; + } + } + static EnumOptions() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class EnumValueOptions : pb::ExtendableMessage { + private EnumValueOptions() { } + private static readonly EnumValueOptions defaultInstance = new EnumValueOptions().MakeReadOnly(); + private static readonly string[] _enumValueOptionsFieldNames = new string[] { "uninterpreted_option" }; + private static readonly uint[] _enumValueOptionsFieldTags = new uint[] { 7994 }; + public static EnumValueOptions DefaultInstance { + get { return defaultInstance; } + } + + public override EnumValueOptions DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override EnumValueOptions ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumValueOptions__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumValueOptions__FieldAccessorTable; } + } + + public const int UninterpretedOptionFieldNumber = 999; + private pbc::PopsicleList uninterpretedOption_ = new pbc::PopsicleList(); + public scg::IList UninterpretedOptionList { + get { return uninterpretedOption_; } + } + public int UninterpretedOptionCount { + get { return uninterpretedOption_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) { + return uninterpretedOption_[index]; + } + + public override bool IsInitialized { + get { + foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) { + if (!element.IsInitialized) return false; + } + if (!ExtensionsAreInitialized) return false; + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _enumValueOptionsFieldNames; + pb::ExtendableMessage.ExtensionWriter extensionWriter = CreateExtensionWriter(this); + if (uninterpretedOption_.Count > 0) { + output.WriteMessageArray(999, field_names[0], uninterpretedOption_); + } + extensionWriter.WriteUntil(536870912, output); + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) { + size += pb::CodedOutputStream.ComputeMessageSize(999, element); + } + size += ExtensionsSerializedSize; + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static EnumValueOptions ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static EnumValueOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static EnumValueOptions ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static EnumValueOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static EnumValueOptions ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static EnumValueOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static EnumValueOptions ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static EnumValueOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static EnumValueOptions ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static EnumValueOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private EnumValueOptions MakeReadOnly() { + uninterpretedOption_.MakeReadOnly(); + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(EnumValueOptions prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::ExtendableBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(EnumValueOptions cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private EnumValueOptions result; + + private EnumValueOptions PrepareBuilder() { + if (resultIsReadOnly) { + EnumValueOptions original = result; + result = new EnumValueOptions(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override EnumValueOptions MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Descriptor; } + } + + public override EnumValueOptions DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.DefaultInstance; } + } + + public override EnumValueOptions BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is EnumValueOptions) { + return MergeFrom((EnumValueOptions) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(EnumValueOptions other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.DefaultInstance) return this; + PrepareBuilder(); + if (other.uninterpretedOption_.Count != 0) { + result.uninterpretedOption_.Add(other.uninterpretedOption_); + } + this.MergeExtensionFields(other); + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_enumValueOptionsFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _enumValueOptionsFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 7994: { + input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public pbc::IPopsicleList UninterpretedOptionList { + get { return PrepareBuilder().uninterpretedOption_; } + } + public int UninterpretedOptionCount { + get { return result.UninterpretedOptionCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) { + return result.GetUninterpretedOption(index); + } + public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.uninterpretedOption_[index] = value; + return this; + } + public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.uninterpretedOption_[index] = builderForValue.Build(); + return this; + } + public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.uninterpretedOption_.Add(value); + return this; + } + public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.uninterpretedOption_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeUninterpretedOption(scg::IEnumerable values) { + PrepareBuilder(); + result.uninterpretedOption_.Add(values); + return this; + } + public Builder ClearUninterpretedOption() { + PrepareBuilder(); + result.uninterpretedOption_.Clear(); + return this; + } + } + static EnumValueOptions() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class ServiceOptions : pb::ExtendableMessage { + private ServiceOptions() { } + private static readonly ServiceOptions defaultInstance = new ServiceOptions().MakeReadOnly(); + private static readonly string[] _serviceOptionsFieldNames = new string[] { "uninterpreted_option" }; + private static readonly uint[] _serviceOptionsFieldTags = new uint[] { 7994 }; + public static ServiceOptions DefaultInstance { + get { return defaultInstance; } + } + + public override ServiceOptions DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override ServiceOptions ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_ServiceOptions__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_ServiceOptions__FieldAccessorTable; } + } + + public const int UninterpretedOptionFieldNumber = 999; + private pbc::PopsicleList uninterpretedOption_ = new pbc::PopsicleList(); + public scg::IList UninterpretedOptionList { + get { return uninterpretedOption_; } + } + public int UninterpretedOptionCount { + get { return uninterpretedOption_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) { + return uninterpretedOption_[index]; + } + + public override bool IsInitialized { + get { + foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) { + if (!element.IsInitialized) return false; + } + if (!ExtensionsAreInitialized) return false; + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _serviceOptionsFieldNames; + pb::ExtendableMessage.ExtensionWriter extensionWriter = CreateExtensionWriter(this); + if (uninterpretedOption_.Count > 0) { + output.WriteMessageArray(999, field_names[0], uninterpretedOption_); + } + extensionWriter.WriteUntil(536870912, output); + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) { + size += pb::CodedOutputStream.ComputeMessageSize(999, element); + } + size += ExtensionsSerializedSize; + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static ServiceOptions ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static ServiceOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static ServiceOptions ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static ServiceOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static ServiceOptions ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static ServiceOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static ServiceOptions ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static ServiceOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static ServiceOptions ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static ServiceOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private ServiceOptions MakeReadOnly() { + uninterpretedOption_.MakeReadOnly(); + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(ServiceOptions prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::ExtendableBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(ServiceOptions cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private ServiceOptions result; + + private ServiceOptions PrepareBuilder() { + if (resultIsReadOnly) { + ServiceOptions original = result; + result = new ServiceOptions(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override ServiceOptions MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Descriptor; } + } + + public override ServiceOptions DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.DefaultInstance; } + } + + public override ServiceOptions BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is ServiceOptions) { + return MergeFrom((ServiceOptions) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(ServiceOptions other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.DefaultInstance) return this; + PrepareBuilder(); + if (other.uninterpretedOption_.Count != 0) { + result.uninterpretedOption_.Add(other.uninterpretedOption_); + } + this.MergeExtensionFields(other); + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_serviceOptionsFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _serviceOptionsFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 7994: { + input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public pbc::IPopsicleList UninterpretedOptionList { + get { return PrepareBuilder().uninterpretedOption_; } + } + public int UninterpretedOptionCount { + get { return result.UninterpretedOptionCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) { + return result.GetUninterpretedOption(index); + } + public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.uninterpretedOption_[index] = value; + return this; + } + public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.uninterpretedOption_[index] = builderForValue.Build(); + return this; + } + public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.uninterpretedOption_.Add(value); + return this; + } + public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.uninterpretedOption_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeUninterpretedOption(scg::IEnumerable values) { + PrepareBuilder(); + result.uninterpretedOption_.Add(values); + return this; + } + public Builder ClearUninterpretedOption() { + PrepareBuilder(); + result.uninterpretedOption_.Clear(); + return this; + } + } + static ServiceOptions() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class MethodOptions : pb::ExtendableMessage { + private MethodOptions() { } + private static readonly MethodOptions defaultInstance = new MethodOptions().MakeReadOnly(); + private static readonly string[] _methodOptionsFieldNames = new string[] { "uninterpreted_option" }; + private static readonly uint[] _methodOptionsFieldTags = new uint[] { 7994 }; + public static MethodOptions DefaultInstance { + get { return defaultInstance; } + } + + public override MethodOptions DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override MethodOptions ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MethodOptions__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MethodOptions__FieldAccessorTable; } + } + + public const int UninterpretedOptionFieldNumber = 999; + private pbc::PopsicleList uninterpretedOption_ = new pbc::PopsicleList(); + public scg::IList UninterpretedOptionList { + get { return uninterpretedOption_; } + } + public int UninterpretedOptionCount { + get { return uninterpretedOption_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) { + return uninterpretedOption_[index]; + } + + public override bool IsInitialized { + get { + foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) { + if (!element.IsInitialized) return false; + } + if (!ExtensionsAreInitialized) return false; + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _methodOptionsFieldNames; + pb::ExtendableMessage.ExtensionWriter extensionWriter = CreateExtensionWriter(this); + if (uninterpretedOption_.Count > 0) { + output.WriteMessageArray(999, field_names[0], uninterpretedOption_); + } + extensionWriter.WriteUntil(536870912, output); + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) { + size += pb::CodedOutputStream.ComputeMessageSize(999, element); + } + size += ExtensionsSerializedSize; + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static MethodOptions ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static MethodOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static MethodOptions ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static MethodOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static MethodOptions ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static MethodOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static MethodOptions ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static MethodOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static MethodOptions ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static MethodOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private MethodOptions MakeReadOnly() { + uninterpretedOption_.MakeReadOnly(); + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(MethodOptions prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::ExtendableBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(MethodOptions cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private MethodOptions result; + + private MethodOptions PrepareBuilder() { + if (resultIsReadOnly) { + MethodOptions original = result; + result = new MethodOptions(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override MethodOptions MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Descriptor; } + } + + public override MethodOptions DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.DefaultInstance; } + } + + public override MethodOptions BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is MethodOptions) { + return MergeFrom((MethodOptions) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(MethodOptions other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.DefaultInstance) return this; + PrepareBuilder(); + if (other.uninterpretedOption_.Count != 0) { + result.uninterpretedOption_.Add(other.uninterpretedOption_); + } + this.MergeExtensionFields(other); + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_methodOptionsFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _methodOptionsFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 7994: { + input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public pbc::IPopsicleList UninterpretedOptionList { + get { return PrepareBuilder().uninterpretedOption_; } + } + public int UninterpretedOptionCount { + get { return result.UninterpretedOptionCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) { + return result.GetUninterpretedOption(index); + } + public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.uninterpretedOption_[index] = value; + return this; + } + public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.uninterpretedOption_[index] = builderForValue.Build(); + return this; + } + public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.uninterpretedOption_.Add(value); + return this; + } + public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.uninterpretedOption_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeUninterpretedOption(scg::IEnumerable values) { + PrepareBuilder(); + result.uninterpretedOption_.Add(values); + return this; + } + public Builder ClearUninterpretedOption() { + PrepareBuilder(); + result.uninterpretedOption_.Clear(); + return this; + } + } + static MethodOptions() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class UninterpretedOption : pb::GeneratedMessage { + private UninterpretedOption() { } + private static readonly UninterpretedOption defaultInstance = new UninterpretedOption().MakeReadOnly(); + private static readonly string[] _uninterpretedOptionFieldNames = new string[] { "aggregate_value", "double_value", "identifier_value", "name", "negative_int_value", "positive_int_value", "string_value" }; + private static readonly uint[] _uninterpretedOptionFieldTags = new uint[] { 66, 49, 26, 18, 40, 32, 58 }; + public static UninterpretedOption DefaultInstance { + get { return defaultInstance; } + } + + public override UninterpretedOption DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override UninterpretedOption ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_UninterpretedOption__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_UninterpretedOption__FieldAccessorTable; } + } + + #region Nested types + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public static class Types { + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class NamePart : pb::GeneratedMessage { + private NamePart() { } + private static readonly NamePart defaultInstance = new NamePart().MakeReadOnly(); + private static readonly string[] _namePartFieldNames = new string[] { "is_extension", "name_part" }; + private static readonly uint[] _namePartFieldTags = new uint[] { 16, 10 }; + public static NamePart DefaultInstance { + get { return defaultInstance; } + } + + public override NamePart DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override NamePart ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_UninterpretedOption_NamePart__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_UninterpretedOption_NamePart__FieldAccessorTable; } + } + + public const int NamePart_FieldNumber = 1; + private bool hasNamePart_; + private string namePart_ = ""; + public bool HasNamePart_ { + get { return hasNamePart_; } + } + public string NamePart_ { + get { return namePart_; } + } + + public const int IsExtensionFieldNumber = 2; + private bool hasIsExtension; + private bool isExtension_; + public bool HasIsExtension { + get { return hasIsExtension; } + } + public bool IsExtension { + get { return isExtension_; } + } + + public override bool IsInitialized { + get { + if (!hasNamePart_) return false; + if (!hasIsExtension) return false; + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _namePartFieldNames; + if (hasNamePart_) { + output.WriteString(1, field_names[1], NamePart_); + } + if (hasIsExtension) { + output.WriteBool(2, field_names[0], IsExtension); + } + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasNamePart_) { + size += pb::CodedOutputStream.ComputeStringSize(1, NamePart_); + } + if (hasIsExtension) { + size += pb::CodedOutputStream.ComputeBoolSize(2, IsExtension); + } + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static NamePart ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static NamePart ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static NamePart ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static NamePart ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static NamePart ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static NamePart ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static NamePart ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static NamePart ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static NamePart ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static NamePart ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private NamePart MakeReadOnly() { + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(NamePart prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::GeneratedBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(NamePart cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private NamePart result; + + private NamePart PrepareBuilder() { + if (resultIsReadOnly) { + NamePart original = result; + result = new NamePart(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override NamePart MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Descriptor; } + } + + public override NamePart DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.DefaultInstance; } + } + + public override NamePart BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is NamePart) { + return MergeFrom((NamePart) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(NamePart other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.DefaultInstance) return this; + PrepareBuilder(); + if (other.HasNamePart_) { + NamePart_ = other.NamePart_; + } + if (other.HasIsExtension) { + IsExtension = other.IsExtension; + } + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_namePartFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _namePartFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 10: { + result.hasNamePart_ = input.ReadString(ref result.namePart_); + break; + } + case 16: { + result.hasIsExtension = input.ReadBool(ref result.isExtension_); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public bool HasNamePart_ { + get { return result.hasNamePart_; } + } + public string NamePart_ { + get { return result.NamePart_; } + set { SetNamePart_(value); } + } + public Builder SetNamePart_(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasNamePart_ = true; + result.namePart_ = value; + return this; + } + public Builder ClearNamePart_() { + PrepareBuilder(); + result.hasNamePart_ = false; + result.namePart_ = ""; + return this; + } + + public bool HasIsExtension { + get { return result.hasIsExtension; } + } + public bool IsExtension { + get { return result.IsExtension; } + set { SetIsExtension(value); } + } + public Builder SetIsExtension(bool value) { + PrepareBuilder(); + result.hasIsExtension = true; + result.isExtension_ = value; + return this; + } + public Builder ClearIsExtension() { + PrepareBuilder(); + result.hasIsExtension = false; + result.isExtension_ = false; + return this; + } + } + static NamePart() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + } + #endregion + + public const int NameFieldNumber = 2; + private pbc::PopsicleList name_ = new pbc::PopsicleList(); + public scg::IList NameList { + get { return name_; } + } + public int NameCount { + get { return name_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart GetName(int index) { + return name_[index]; + } + + public const int IdentifierValueFieldNumber = 3; + private bool hasIdentifierValue; + private string identifierValue_ = ""; + public bool HasIdentifierValue { + get { return hasIdentifierValue; } + } + public string IdentifierValue { + get { return identifierValue_; } + } + + public const int PositiveIntValueFieldNumber = 4; + private bool hasPositiveIntValue; + private ulong positiveIntValue_; + public bool HasPositiveIntValue { + get { return hasPositiveIntValue; } + } + [global::System.CLSCompliant(false)] + public ulong PositiveIntValue { + get { return positiveIntValue_; } + } + + public const int NegativeIntValueFieldNumber = 5; + private bool hasNegativeIntValue; + private long negativeIntValue_; + public bool HasNegativeIntValue { + get { return hasNegativeIntValue; } + } + public long NegativeIntValue { + get { return negativeIntValue_; } + } + + public const int DoubleValueFieldNumber = 6; + private bool hasDoubleValue; + private double doubleValue_; + public bool HasDoubleValue { + get { return hasDoubleValue; } + } + public double DoubleValue { + get { return doubleValue_; } + } + + public const int StringValueFieldNumber = 7; + private bool hasStringValue; + private pb::ByteString stringValue_ = pb::ByteString.Empty; + public bool HasStringValue { + get { return hasStringValue; } + } + public pb::ByteString StringValue { + get { return stringValue_; } + } + + public const int AggregateValueFieldNumber = 8; + private bool hasAggregateValue; + private string aggregateValue_ = ""; + public bool HasAggregateValue { + get { return hasAggregateValue; } + } + public string AggregateValue { + get { return aggregateValue_; } + } + + public override bool IsInitialized { + get { + foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart element in NameList) { + if (!element.IsInitialized) return false; + } + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _uninterpretedOptionFieldNames; + if (name_.Count > 0) { + output.WriteMessageArray(2, field_names[3], name_); + } + if (hasIdentifierValue) { + output.WriteString(3, field_names[2], IdentifierValue); + } + if (hasPositiveIntValue) { + output.WriteUInt64(4, field_names[5], PositiveIntValue); + } + if (hasNegativeIntValue) { + output.WriteInt64(5, field_names[4], NegativeIntValue); + } + if (hasDoubleValue) { + output.WriteDouble(6, field_names[1], DoubleValue); + } + if (hasStringValue) { + output.WriteBytes(7, field_names[6], StringValue); + } + if (hasAggregateValue) { + output.WriteString(8, field_names[0], AggregateValue); + } + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart element in NameList) { + size += pb::CodedOutputStream.ComputeMessageSize(2, element); + } + if (hasIdentifierValue) { + size += pb::CodedOutputStream.ComputeStringSize(3, IdentifierValue); + } + if (hasPositiveIntValue) { + size += pb::CodedOutputStream.ComputeUInt64Size(4, PositiveIntValue); + } + if (hasNegativeIntValue) { + size += pb::CodedOutputStream.ComputeInt64Size(5, NegativeIntValue); + } + if (hasDoubleValue) { + size += pb::CodedOutputStream.ComputeDoubleSize(6, DoubleValue); + } + if (hasStringValue) { + size += pb::CodedOutputStream.ComputeBytesSize(7, StringValue); + } + if (hasAggregateValue) { + size += pb::CodedOutputStream.ComputeStringSize(8, AggregateValue); + } + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static UninterpretedOption ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static UninterpretedOption ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static UninterpretedOption ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static UninterpretedOption ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static UninterpretedOption ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static UninterpretedOption ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static UninterpretedOption ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static UninterpretedOption ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static UninterpretedOption ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static UninterpretedOption ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private UninterpretedOption MakeReadOnly() { + name_.MakeReadOnly(); + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(UninterpretedOption prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::GeneratedBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(UninterpretedOption cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private UninterpretedOption result; + + private UninterpretedOption PrepareBuilder() { + if (resultIsReadOnly) { + UninterpretedOption original = result; + result = new UninterpretedOption(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override UninterpretedOption MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Descriptor; } + } + + public override UninterpretedOption DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance; } + } + + public override UninterpretedOption BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is UninterpretedOption) { + return MergeFrom((UninterpretedOption) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(UninterpretedOption other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance) return this; + PrepareBuilder(); + if (other.name_.Count != 0) { + result.name_.Add(other.name_); + } + if (other.HasIdentifierValue) { + IdentifierValue = other.IdentifierValue; + } + if (other.HasPositiveIntValue) { + PositiveIntValue = other.PositiveIntValue; + } + if (other.HasNegativeIntValue) { + NegativeIntValue = other.NegativeIntValue; + } + if (other.HasDoubleValue) { + DoubleValue = other.DoubleValue; + } + if (other.HasStringValue) { + StringValue = other.StringValue; + } + if (other.HasAggregateValue) { + AggregateValue = other.AggregateValue; + } + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_uninterpretedOptionFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _uninterpretedOptionFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 18: { + input.ReadMessageArray(tag, field_name, result.name_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.DefaultInstance, extensionRegistry); + break; + } + case 26: { + result.hasIdentifierValue = input.ReadString(ref result.identifierValue_); + break; + } + case 32: { + result.hasPositiveIntValue = input.ReadUInt64(ref result.positiveIntValue_); + break; + } + case 40: { + result.hasNegativeIntValue = input.ReadInt64(ref result.negativeIntValue_); + break; + } + case 49: { + result.hasDoubleValue = input.ReadDouble(ref result.doubleValue_); + break; + } + case 58: { + result.hasStringValue = input.ReadBytes(ref result.stringValue_); + break; + } + case 66: { + result.hasAggregateValue = input.ReadString(ref result.aggregateValue_); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public pbc::IPopsicleList NameList { + get { return PrepareBuilder().name_; } + } + public int NameCount { + get { return result.NameCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart GetName(int index) { + return result.GetName(index); + } + public Builder SetName(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.name_[index] = value; + return this; + } + public Builder SetName(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.name_[index] = builderForValue.Build(); + return this; + } + public Builder AddName(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.name_.Add(value); + return this; + } + public Builder AddName(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.name_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeName(scg::IEnumerable values) { + PrepareBuilder(); + result.name_.Add(values); + return this; + } + public Builder ClearName() { + PrepareBuilder(); + result.name_.Clear(); + return this; + } + + public bool HasIdentifierValue { + get { return result.hasIdentifierValue; } + } + public string IdentifierValue { + get { return result.IdentifierValue; } + set { SetIdentifierValue(value); } + } + public Builder SetIdentifierValue(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasIdentifierValue = true; + result.identifierValue_ = value; + return this; + } + public Builder ClearIdentifierValue() { + PrepareBuilder(); + result.hasIdentifierValue = false; + result.identifierValue_ = ""; + return this; + } + + public bool HasPositiveIntValue { + get { return result.hasPositiveIntValue; } + } + [global::System.CLSCompliant(false)] + public ulong PositiveIntValue { + get { return result.PositiveIntValue; } + set { SetPositiveIntValue(value); } + } + [global::System.CLSCompliant(false)] + public Builder SetPositiveIntValue(ulong value) { + PrepareBuilder(); + result.hasPositiveIntValue = true; + result.positiveIntValue_ = value; + return this; + } + public Builder ClearPositiveIntValue() { + PrepareBuilder(); + result.hasPositiveIntValue = false; + result.positiveIntValue_ = 0UL; + return this; + } + + public bool HasNegativeIntValue { + get { return result.hasNegativeIntValue; } + } + public long NegativeIntValue { + get { return result.NegativeIntValue; } + set { SetNegativeIntValue(value); } + } + public Builder SetNegativeIntValue(long value) { + PrepareBuilder(); + result.hasNegativeIntValue = true; + result.negativeIntValue_ = value; + return this; + } + public Builder ClearNegativeIntValue() { + PrepareBuilder(); + result.hasNegativeIntValue = false; + result.negativeIntValue_ = 0L; + return this; + } + + public bool HasDoubleValue { + get { return result.hasDoubleValue; } + } + public double DoubleValue { + get { return result.DoubleValue; } + set { SetDoubleValue(value); } + } + public Builder SetDoubleValue(double value) { + PrepareBuilder(); + result.hasDoubleValue = true; + result.doubleValue_ = value; + return this; + } + public Builder ClearDoubleValue() { + PrepareBuilder(); + result.hasDoubleValue = false; + result.doubleValue_ = 0D; + return this; + } + + public bool HasStringValue { + get { return result.hasStringValue; } + } + public pb::ByteString StringValue { + get { return result.StringValue; } + set { SetStringValue(value); } + } + public Builder SetStringValue(pb::ByteString value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasStringValue = true; + result.stringValue_ = value; + return this; + } + public Builder ClearStringValue() { + PrepareBuilder(); + result.hasStringValue = false; + result.stringValue_ = pb::ByteString.Empty; + return this; + } + + public bool HasAggregateValue { + get { return result.hasAggregateValue; } + } + public string AggregateValue { + get { return result.AggregateValue; } + set { SetAggregateValue(value); } + } + public Builder SetAggregateValue(string value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.hasAggregateValue = true; + result.aggregateValue_ = value; + return this; + } + public Builder ClearAggregateValue() { + PrepareBuilder(); + result.hasAggregateValue = false; + result.aggregateValue_ = ""; + return this; + } + } + static UninterpretedOption() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class SourceCodeInfo : pb::GeneratedMessage { + private SourceCodeInfo() { } + private static readonly SourceCodeInfo defaultInstance = new SourceCodeInfo().MakeReadOnly(); + private static readonly string[] _sourceCodeInfoFieldNames = new string[] { "location" }; + private static readonly uint[] _sourceCodeInfoFieldTags = new uint[] { 10 }; + public static SourceCodeInfo DefaultInstance { + get { return defaultInstance; } + } + + public override SourceCodeInfo DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override SourceCodeInfo ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_SourceCodeInfo__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_SourceCodeInfo__FieldAccessorTable; } + } + + #region Nested types + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public static class Types { + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Location : pb::GeneratedMessage { + private Location() { } + private static readonly Location defaultInstance = new Location().MakeReadOnly(); + private static readonly string[] _locationFieldNames = new string[] { "path", "span" }; + private static readonly uint[] _locationFieldTags = new uint[] { 10, 18 }; + public static Location DefaultInstance { + get { return defaultInstance; } + } + + public override Location DefaultInstanceForType { + get { return DefaultInstance; } + } + + protected override Location ThisMessage { + get { return this; } + } + + public static pbd::MessageDescriptor Descriptor { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_SourceCodeInfo_Location__Descriptor; } + } + + protected override pb::FieldAccess.FieldAccessorTable InternalFieldAccessors { + get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_SourceCodeInfo_Location__FieldAccessorTable; } + } + + public const int PathFieldNumber = 1; + private int pathMemoizedSerializedSize; + private pbc::PopsicleList path_ = new pbc::PopsicleList(); + public scg::IList PathList { + get { return pbc::Lists.AsReadOnly(path_); } + } + public int PathCount { + get { return path_.Count; } + } + public int GetPath(int index) { + return path_[index]; + } + + public const int SpanFieldNumber = 2; + private int spanMemoizedSerializedSize; + private pbc::PopsicleList span_ = new pbc::PopsicleList(); + public scg::IList SpanList { + get { return pbc::Lists.AsReadOnly(span_); } + } + public int SpanCount { + get { return span_.Count; } + } + public int GetSpan(int index) { + return span_[index]; + } + + public override bool IsInitialized { + get { + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _locationFieldNames; + if (path_.Count > 0) { + output.WritePackedInt32Array(1, field_names[0], pathMemoizedSerializedSize, path_); + } + if (span_.Count > 0) { + output.WritePackedInt32Array(2, field_names[1], spanMemoizedSerializedSize, span_); + } + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + { + int dataSize = 0; + foreach (int element in PathList) { + dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element); + } + size += dataSize; + if (path_.Count != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize); + } + pathMemoizedSerializedSize = dataSize; + } + { + int dataSize = 0; + foreach (int element in SpanList) { + dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element); + } + size += dataSize; + if (span_.Count != 0) { + size += 1 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize); + } + spanMemoizedSerializedSize = dataSize; + } + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static Location ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static Location ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static Location ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static Location ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static Location ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static Location ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static Location ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static Location ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static Location ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static Location ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private Location MakeReadOnly() { + path_.MakeReadOnly(); + span_.MakeReadOnly(); + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(Location prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::GeneratedBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(Location cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private Location result; + + private Location PrepareBuilder() { + if (resultIsReadOnly) { + Location original = result; + result = new Location(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override Location MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.Descriptor; } + } + + public override Location DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.DefaultInstance; } + } + + public override Location BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is Location) { + return MergeFrom((Location) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(Location other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.DefaultInstance) return this; + PrepareBuilder(); + if (other.path_.Count != 0) { + result.path_.Add(other.path_); + } + if (other.span_.Count != 0) { + result.span_.Add(other.span_); + } + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_locationFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _locationFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 10: + case 8: { + input.ReadInt32Array(tag, field_name, result.path_); + break; + } + case 18: + case 16: { + input.ReadInt32Array(tag, field_name, result.span_); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public pbc::IPopsicleList PathList { + get { return PrepareBuilder().path_; } + } + public int PathCount { + get { return result.PathCount; } + } + public int GetPath(int index) { + return result.GetPath(index); + } + public Builder SetPath(int index, int value) { + PrepareBuilder(); + result.path_[index] = value; + return this; + } + public Builder AddPath(int value) { + PrepareBuilder(); + result.path_.Add(value); + return this; + } + public Builder AddRangePath(scg::IEnumerable values) { + PrepareBuilder(); + result.path_.Add(values); + return this; + } + public Builder ClearPath() { + PrepareBuilder(); + result.path_.Clear(); + return this; + } + + public pbc::IPopsicleList SpanList { + get { return PrepareBuilder().span_; } + } + public int SpanCount { + get { return result.SpanCount; } + } + public int GetSpan(int index) { + return result.GetSpan(index); + } + public Builder SetSpan(int index, int value) { + PrepareBuilder(); + result.span_[index] = value; + return this; + } + public Builder AddSpan(int value) { + PrepareBuilder(); + result.span_.Add(value); + return this; + } + public Builder AddRangeSpan(scg::IEnumerable values) { + PrepareBuilder(); + result.span_.Add(values); + return this; + } + public Builder ClearSpan() { + PrepareBuilder(); + result.span_.Clear(); + return this; + } + } + static Location() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + } + #endregion + + public const int LocationFieldNumber = 1; + private pbc::PopsicleList location_ = new pbc::PopsicleList(); + public scg::IList LocationList { + get { return location_; } + } + public int LocationCount { + get { return location_.Count; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location GetLocation(int index) { + return location_[index]; + } + + public override bool IsInitialized { + get { + return true; + } + } + + public override void WriteTo(pb::ICodedOutputStream output) { + int size = SerializedSize; + string[] field_names = _sourceCodeInfoFieldNames; + if (location_.Count > 0) { + output.WriteMessageArray(1, field_names[0], location_); + } + UnknownFields.WriteTo(output); + } + + private int memoizedSerializedSize = -1; + public override int SerializedSize { + get { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + foreach (global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location element in LocationList) { + size += pb::CodedOutputStream.ComputeMessageSize(1, element); + } + size += UnknownFields.SerializedSize; + memoizedSerializedSize = size; + return size; + } + } + + public static SourceCodeInfo ParseFrom(pb::ByteString data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static SourceCodeInfo ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static SourceCodeInfo ParseFrom(byte[] data) { + return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed(); + } + public static SourceCodeInfo ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed(); + } + public static SourceCodeInfo ParseFrom(global::System.IO.Stream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static SourceCodeInfo ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + public static SourceCodeInfo ParseDelimitedFrom(global::System.IO.Stream input) { + return CreateBuilder().MergeDelimitedFrom(input).BuildParsed(); + } + public static SourceCodeInfo ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) { + return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed(); + } + public static SourceCodeInfo ParseFrom(pb::ICodedInputStream input) { + return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed(); + } + public static SourceCodeInfo ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed(); + } + private SourceCodeInfo MakeReadOnly() { + location_.MakeReadOnly(); + return this; + } + + public static Builder CreateBuilder() { return new Builder(); } + public override Builder ToBuilder() { return CreateBuilder(this); } + public override Builder CreateBuilderForType() { return new Builder(); } + public static Builder CreateBuilder(SourceCodeInfo prototype) { + return new Builder(prototype); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("ProtoGen", "2.3.0.277")] + public sealed partial class Builder : pb::GeneratedBuilder { + protected override Builder ThisBuilder { + get { return this; } + } + public Builder() { + result = DefaultInstance; + resultIsReadOnly = true; + } + internal Builder(SourceCodeInfo cloneFrom) { + result = cloneFrom; + resultIsReadOnly = true; + } + + private bool resultIsReadOnly; + private SourceCodeInfo result; + + private SourceCodeInfo PrepareBuilder() { + if (resultIsReadOnly) { + SourceCodeInfo original = result; + result = new SourceCodeInfo(); + resultIsReadOnly = false; + MergeFrom(original); + } + return result; + } + + public override bool IsInitialized { + get { return result.IsInitialized; } + } + + protected override SourceCodeInfo MessageBeingBuilt { + get { return PrepareBuilder(); } + } + + public override Builder Clear() { + result = DefaultInstance; + resultIsReadOnly = true; + return this; + } + + public override Builder Clone() { + if (resultIsReadOnly) { + return new Builder(result); + } else { + return new Builder().MergeFrom(result); + } + } + + public override pbd::MessageDescriptor DescriptorForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Descriptor; } + } + + public override SourceCodeInfo DefaultInstanceForType { + get { return global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.DefaultInstance; } + } + + public override SourceCodeInfo BuildPartial() { + if (resultIsReadOnly) { + return result; + } + resultIsReadOnly = true; + return result.MakeReadOnly(); + } + + public override Builder MergeFrom(pb::IMessage other) { + if (other is SourceCodeInfo) { + return MergeFrom((SourceCodeInfo) other); + } else { + base.MergeFrom(other); + return this; + } + } + + public override Builder MergeFrom(SourceCodeInfo other) { + if (other == global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.DefaultInstance) return this; + PrepareBuilder(); + if (other.location_.Count != 0) { + result.location_.Add(other.location_); + } + this.MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(pb::ICodedInputStream input) { + return MergeFrom(input, pb::ExtensionRegistry.Empty); + } + + public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) { + PrepareBuilder(); + pb::UnknownFieldSet.Builder unknownFields = null; + uint tag; + string field_name; + while (input.ReadTag(out tag, out field_name)) { + if(tag == 0 && field_name != null) { + int field_ordinal = global::System.Array.BinarySearch(_sourceCodeInfoFieldNames, field_name, global::System.StringComparer.Ordinal); + if(field_ordinal >= 0) + tag = _sourceCodeInfoFieldTags[field_ordinal]; + else { + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + continue; + } + } + switch (tag) { + case 0: { + throw pb::InvalidProtocolBufferException.InvalidTag(); + } + default: { + if (pb::WireFormat.IsEndGroupTag(tag)) { + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + if (unknownFields == null) { + unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields); + } + ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name); + break; + } + case 10: { + input.ReadMessageArray(tag, field_name, result.location_, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.DefaultInstance, extensionRegistry); + break; + } + } + } + + if (unknownFields != null) { + this.UnknownFields = unknownFields.Build(); + } + return this; + } + + + public pbc::IPopsicleList LocationList { + get { return PrepareBuilder().location_; } + } + public int LocationCount { + get { return result.LocationCount; } + } + public global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location GetLocation(int index) { + return result.GetLocation(index); + } + public Builder SetLocation(int index, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.location_[index] = value; + return this; + } + public Builder SetLocation(int index, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.location_[index] = builderForValue.Build(); + return this; + } + public Builder AddLocation(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location value) { + pb::ThrowHelper.ThrowIfNull(value, "value"); + PrepareBuilder(); + result.location_.Add(value); + return this; + } + public Builder AddLocation(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.Builder builderForValue) { + pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue"); + PrepareBuilder(); + result.location_.Add(builderForValue.Build()); + return this; + } + public Builder AddRangeLocation(scg::IEnumerable values) { + PrepareBuilder(); + result.location_.Add(values); + return this; + } + public Builder ClearLocation() { + PrepareBuilder(); + result.location_.Clear(); + return this; + } + } + static SourceCodeInfo() { + object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null); + } + } + + #endregion + +} + +#endregion Designer generated code diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/DescriptorProtos/IDescriptorProto.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/DescriptorProtos/IDescriptorProto.cs new file mode 100644 index 0000000000..1b647181eb --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/DescriptorProtos/IDescriptorProto.cs @@ -0,0 +1,52 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +namespace Google.ProtocolBuffers.DescriptorProtos +{ + /// + /// Interface implemented by all DescriptorProtos. The generator doesn't + /// emit the interface implementation claim, so PartialClasses.cs contains + /// partial class declarations for each of them. + /// + /// The associated options protocol buffer type + public interface IDescriptorProto + { + /// + /// The brief name of the descriptor's target. + /// + string Name { get; } + + /// + /// The options for this descriptor. + /// + TOptions Options { get; } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/DescriptorProtos/PartialClasses.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/DescriptorProtos/PartialClasses.cs new file mode 100644 index 0000000000..d55fc72596 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/DescriptorProtos/PartialClasses.cs @@ -0,0 +1,65 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This file just contains partial classes for each of the +// autogenerated classes, so that they implement +// IDescriptorProto +namespace Google.ProtocolBuffers.DescriptorProtos +{ + public partial class DescriptorProto : IDescriptorProto + { + } + + public partial class EnumDescriptorProto : IDescriptorProto + { + } + + public partial class EnumValueDescriptorProto : IDescriptorProto + { + } + + public partial class FieldDescriptorProto : IDescriptorProto + { + } + + public partial class FileDescriptorProto : IDescriptorProto + { + } + + public partial class MethodDescriptorProto : IDescriptorProto + { + } + + public partial class ServiceDescriptorProto : IDescriptorProto + { + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/DescriptorBase.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/DescriptorBase.cs new file mode 100644 index 0000000000..5c88ec88b5 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/DescriptorBase.cs @@ -0,0 +1,115 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using Google.ProtocolBuffers.DescriptorProtos; + +namespace Google.ProtocolBuffers.Descriptors +{ + /// + /// Base class for nearly all descriptors, providing common functionality. + /// + /// Type of the protocol buffer form of this descriptor + /// Type of the options protocol buffer for this descriptor + public abstract class DescriptorBase : IDescriptor + where TProto : IMessage, IDescriptorProto + { + private TProto proto; + private readonly FileDescriptor file; + private readonly string fullName; + + protected DescriptorBase(TProto proto, FileDescriptor file, string fullName) + { + this.proto = proto; + this.file = file; + this.fullName = fullName; + } + + internal virtual void ReplaceProto(TProto newProto) + { + this.proto = newProto; + } + + protected static string ComputeFullName(FileDescriptor file, MessageDescriptor parent, string name) + { + if (parent != null) + { + return parent.FullName + "." + name; + } + if (file.Package.Length > 0) + { + return file.Package + "." + name; + } + return name; + } + + IMessage IDescriptor.Proto + { + get { return proto; } + } + + /// + /// Returns the protocol buffer form of this descriptor. + /// + public TProto Proto + { + get { return proto; } + } + + public TOptions Options + { + get { return proto.Options; } + } + + /// + /// The fully qualified name of the descriptor's target. + /// + public string FullName + { + get { return fullName; } + } + + /// + /// The brief name of the descriptor's target. + /// + public string Name + { + get { return proto.Name; } + } + + /// + /// The file this descriptor was declared in. + /// + public FileDescriptor File + { + get { return file; } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/DescriptorPool.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/DescriptorPool.cs new file mode 100644 index 0000000000..cf0296ee2c --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/DescriptorPool.cs @@ -0,0 +1,352 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; + +namespace Google.ProtocolBuffers.Descriptors +{ + /// + /// Contains lookup tables containing all the descriptors defined in a particular file. + /// + internal sealed class DescriptorPool + { + private readonly IDictionary descriptorsByName = + new Dictionary(); + + private readonly IDictionary fieldsByNumber = + new Dictionary(); + + private readonly IDictionary enumValuesByNumber = + new Dictionary(); + + private readonly DescriptorPool[] dependencies; + + internal DescriptorPool(FileDescriptor[] dependencyFiles) + { + dependencies = new DescriptorPool[dependencyFiles.Length]; + for (int i = 0; i < dependencyFiles.Length; i++) + { + dependencies[i] = dependencyFiles[i].DescriptorPool; + } + + foreach (FileDescriptor dependency in dependencyFiles) + { + AddPackage(dependency.Package, dependency); + } + } + + /// + /// Finds a symbol of the given name within the pool. + /// + /// The type of symbol to look for + /// Fully-qualified name to look up + /// The symbol with the given name and type, + /// or null if the symbol doesn't exist or has the wrong type + internal T FindSymbol(string fullName) where T : class, IDescriptor + { + IDescriptor result; + descriptorsByName.TryGetValue(fullName, out result); + T descriptor = result as T; + if (descriptor != null) + { + return descriptor; + } + + foreach (DescriptorPool dependency in dependencies) + { + dependency.descriptorsByName.TryGetValue(fullName, out result); + descriptor = result as T; + if (descriptor != null) + { + return descriptor; + } + } + + return null; + } + + /// + /// Adds a package to the symbol tables. If a package by the same name + /// already exists, that is fine, but if some other kind of symbol + /// exists under the same name, an exception is thrown. If the package + /// has multiple components, this also adds the parent package(s). + /// + internal void AddPackage(string fullName, FileDescriptor file) + { + int dotpos = fullName.LastIndexOf('.'); + String name; + if (dotpos != -1) + { + AddPackage(fullName.Substring(0, dotpos), file); + name = fullName.Substring(dotpos + 1); + } + else + { + name = fullName; + } + + IDescriptor old; + if (descriptorsByName.TryGetValue(fullName, out old)) + { + if (!(old is PackageDescriptor)) + { + throw new DescriptorValidationException(file, + "\"" + name + + "\" is already defined (as something other than a " + + "package) in file \"" + old.File.Name + "\"."); + } + } + descriptorsByName[fullName] = new PackageDescriptor(name, fullName, file); + } + + /// + /// Adds a symbol to the symbol table. + /// + /// The symbol already existed + /// in the symbol table. + internal void AddSymbol(IDescriptor descriptor) + { + ValidateSymbolName(descriptor); + String fullName = descriptor.FullName; + + IDescriptor old; + if (descriptorsByName.TryGetValue(fullName, out old)) + { + int dotPos = fullName.LastIndexOf('.'); + string message; + if (descriptor.File == old.File) + { + if (dotPos == -1) + { + message = "\"" + fullName + "\" is already defined."; + } + else + { + message = "\"" + fullName.Substring(dotPos + 1) + "\" is already defined in \"" + + fullName.Substring(0, dotPos) + "\"."; + } + } + else + { + message = "\"" + fullName + "\" is already defined in file \"" + old.File.Name + "\"."; + } + throw new DescriptorValidationException(descriptor, message); + } + descriptorsByName[fullName] = descriptor; + } + + private static readonly Regex ValidationRegex = new Regex("^[_A-Za-z][_A-Za-z0-9]*$", + SilverlightCompatibility.CompiledRegexWhereAvailable); + + /// + /// Verifies that the descriptor's name is valid (i.e. it contains + /// only letters, digits and underscores, and does not start with a digit). + /// + /// + private static void ValidateSymbolName(IDescriptor descriptor) + { + if (descriptor.Name == "") + { + throw new DescriptorValidationException(descriptor, "Missing name."); + } + if (!ValidationRegex.IsMatch(descriptor.Name)) + { + throw new DescriptorValidationException(descriptor, + "\"" + descriptor.Name + "\" is not a valid identifier."); + } + } + + /// + /// Returns the field with the given number in the given descriptor, + /// or null if it can't be found. + /// + internal FieldDescriptor FindFieldByNumber(MessageDescriptor messageDescriptor, int number) + { + FieldDescriptor ret; + fieldsByNumber.TryGetValue(new DescriptorIntPair(messageDescriptor, number), out ret); + return ret; + } + + internal EnumValueDescriptor FindEnumValueByNumber(EnumDescriptor enumDescriptor, int number) + { + EnumValueDescriptor ret; + enumValuesByNumber.TryGetValue(new DescriptorIntPair(enumDescriptor, number), out ret); + return ret; + } + + /// + /// Adds a field to the fieldsByNumber table. + /// + /// A field with the same + /// containing type and number already exists. + internal void AddFieldByNumber(FieldDescriptor field) + { + DescriptorIntPair key = new DescriptorIntPair(field.ContainingType, field.FieldNumber); + FieldDescriptor old; + if (fieldsByNumber.TryGetValue(key, out old)) + { + throw new DescriptorValidationException(field, "Field number " + field.FieldNumber + + "has already been used in \"" + + field.ContainingType.FullName + + "\" by field \"" + old.Name + "\"."); + } + fieldsByNumber[key] = field; + } + + /// + /// Adds an enum value to the enumValuesByNumber table. If an enum value + /// with the same type and number already exists, this method does nothing. + /// (This is allowed; the first value defined with the number takes precedence.) + /// + internal void AddEnumValueByNumber(EnumValueDescriptor enumValue) + { + DescriptorIntPair key = new DescriptorIntPair(enumValue.EnumDescriptor, enumValue.Number); + if (!enumValuesByNumber.ContainsKey(key)) + { + enumValuesByNumber[key] = enumValue; + } + } + + /// + /// Looks up a descriptor by name, relative to some other descriptor. + /// The name may be fully-qualified (with a leading '.'), partially-qualified, + /// or unqualified. C++-like name lookup semantics are used to search for the + /// matching descriptor. + /// + public IDescriptor LookupSymbol(string name, IDescriptor relativeTo) + { + // TODO(jonskeet): This could be optimized in a number of ways. + + IDescriptor result; + if (name.StartsWith(".")) + { + // Fully-qualified name. + result = FindSymbol(name.Substring(1)); + } + else + { + // If "name" is a compound identifier, we want to search for the + // first component of it, then search within it for the rest. + int firstPartLength = name.IndexOf('.'); + string firstPart = firstPartLength == -1 ? name : name.Substring(0, firstPartLength); + + // We will search each parent scope of "relativeTo" looking for the + // symbol. + StringBuilder scopeToTry = new StringBuilder(relativeTo.FullName); + + while (true) + { + // Chop off the last component of the scope. + + // TODO(jonskeet): Make this more efficient. May not be worth using StringBuilder at all + int dotpos = scopeToTry.ToString().LastIndexOf("."); + if (dotpos == -1) + { + result = FindSymbol(name); + break; + } + else + { + scopeToTry.Length = dotpos + 1; + + // Append firstPart and try to find. + scopeToTry.Append(firstPart); + result = FindSymbol(scopeToTry.ToString()); + + if (result != null) + { + if (firstPartLength != -1) + { + // We only found the first part of the symbol. Now look for + // the whole thing. If this fails, we *don't* want to keep + // searching parent scopes. + scopeToTry.Length = dotpos + 1; + scopeToTry.Append(name); + result = FindSymbol(scopeToTry.ToString()); + } + break; + } + + // Not found. Remove the name so we can try again. + scopeToTry.Length = dotpos; + } + } + } + + if (result == null) + { + throw new DescriptorValidationException(relativeTo, "\"" + name + "\" is not defined."); + } + else + { + return result; + } + } + + /// + /// Struct used to hold the keys for the fieldByNumber table. + /// + private struct DescriptorIntPair : IEquatable + { + private readonly int number; + private readonly IDescriptor descriptor; + + internal DescriptorIntPair(IDescriptor descriptor, int number) + { + this.number = number; + this.descriptor = descriptor; + } + + public bool Equals(DescriptorIntPair other) + { + return descriptor == other.descriptor + && number == other.number; + } + + public override bool Equals(object obj) + { + if (obj is DescriptorIntPair) + { + return Equals((DescriptorIntPair) obj); + } + return false; + } + + public override int GetHashCode() + { + return descriptor.GetHashCode()*((1 << 16) - 1) + number; + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/DescriptorUtil.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/DescriptorUtil.cs new file mode 100644 index 0000000000..3bb33c4b71 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/DescriptorUtil.cs @@ -0,0 +1,64 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System.Collections.Generic; +using Google.ProtocolBuffers.Collections; + +namespace Google.ProtocolBuffers.Descriptors +{ + /// + /// Internal class containing utility methods when working with descriptors. + /// + internal static class DescriptorUtil + { + /// + /// Equivalent to Func[TInput, int, TOutput] but usable in .NET 2.0. Only used to convert + /// arrays. + /// + internal delegate TOutput IndexedConverter(TInput element, int index); + + /// + /// Converts the given array into a read-only list, applying the specified conversion to + /// each input element. + /// + internal static IList ConvertAndMakeReadOnly(IList input, + IndexedConverter + converter) + { + TOutput[] array = new TOutput[input.Count]; + for (int i = 0; i < array.Length; i++) + { + array[i] = converter(input[i], i); + } + return Lists.AsReadOnly(array); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/DescriptorValidationException.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/DescriptorValidationException.cs new file mode 100644 index 0000000000..a6d69694a3 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/DescriptorValidationException.cs @@ -0,0 +1,90 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; + +namespace Google.ProtocolBuffers.Descriptors +{ + /// + /// Thrown when building descriptors fails because the source DescriptorProtos + /// are not valid. + /// + public sealed class DescriptorValidationException : Exception + { + private readonly String name; + private readonly IMessage proto; + private readonly string description; + + /// + /// The full name of the descriptor where the error occurred. + /// + public String ProblemSymbolName + { + get { return name; } + } + + /// + /// The protocol message representation of the invalid descriptor. + /// + public IMessage ProblemProto + { + get { return proto; } + } + + /// + /// A human-readable description of the error. (The Message property + /// is made up of the descriptor's name and this description.) + /// + public string Description + { + get { return description; } + } + + internal DescriptorValidationException(IDescriptor problemDescriptor, string description) : + base(problemDescriptor.FullName + ": " + description) + { + // Note that problemDescriptor may be partially uninitialized, so we + // don't want to expose it directly to the user. So, we only provide + // the name and the original proto. + name = problemDescriptor.FullName; + proto = problemDescriptor.Proto; + this.description = description; + } + + internal DescriptorValidationException(IDescriptor problemDescriptor, string description, Exception cause) : + base(problemDescriptor.FullName + ": " + description, cause) + { + name = problemDescriptor.FullName; + proto = problemDescriptor.Proto; + this.description = description; + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/EnumDescriptor.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/EnumDescriptor.cs new file mode 100644 index 0000000000..9d8c63e64a --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/EnumDescriptor.cs @@ -0,0 +1,126 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System.Collections.Generic; +using Google.ProtocolBuffers.DescriptorProtos; + +namespace Google.ProtocolBuffers.Descriptors +{ + /// + /// Descriptor for an enum type in a .proto file. + /// + public sealed class EnumDescriptor : IndexedDescriptorBase, + IEnumLiteMap + { + private readonly MessageDescriptor containingType; + private readonly IList values; + + internal EnumDescriptor(EnumDescriptorProto proto, FileDescriptor file, MessageDescriptor parent, int index) + : base(proto, file, ComputeFullName(file, parent, proto.Name), index) + { + containingType = parent; + + if (proto.ValueCount == 0) + { + // We cannot allow enums with no values because this would mean there + // would be no valid default value for fields of this type. + throw new DescriptorValidationException(this, "Enums must contain at least one value."); + } + + values = DescriptorUtil.ConvertAndMakeReadOnly(proto.ValueList, + (value, i) => new EnumValueDescriptor(value, file, this, i)); + + File.DescriptorPool.AddSymbol(this); + } + + /// + /// If this is a nested type, get the outer descriptor, otherwise null. + /// + public MessageDescriptor ContainingType + { + get { return containingType; } + } + + /// + /// An unmodifiable list of defined value descriptors for this enum. + /// + public IList Values + { + get { return values; } + } + + /// + /// Logic moved from FieldSet to continue current behavior + /// + public bool IsValidValue(IEnumLite value) + { + return value is EnumValueDescriptor && ((EnumValueDescriptor) value).EnumDescriptor == this; + } + + /// + /// Finds an enum value by number. If multiple enum values have the + /// same number, this returns the first defined value with that number. + /// + public EnumValueDescriptor FindValueByNumber(int number) + { + return File.DescriptorPool.FindEnumValueByNumber(this, number); + } + + IEnumLite IEnumLiteMap.FindValueByNumber(int number) + { + return FindValueByNumber(number); + } + + IEnumLite IEnumLiteMap.FindValueByName(string name) + { + return FindValueByName(name); + } + + /// + /// Finds an enum value by name. + /// + /// The unqualified name of the value (e.g. "FOO"). + /// The value's descriptor, or null if not found. + public EnumValueDescriptor FindValueByName(string name) + { + return File.DescriptorPool.FindSymbol(FullName + "." + name); + } + + internal override void ReplaceProto(EnumDescriptorProto newProto) + { + base.ReplaceProto(newProto); + for (int i = 0; i < values.Count; i++) + { + values[i].ReplaceProto(newProto.GetValue(i)); + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/EnumValueDescriptor.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/EnumValueDescriptor.cs new file mode 100644 index 0000000000..2df5b0f51f --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/EnumValueDescriptor.cs @@ -0,0 +1,63 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using Google.ProtocolBuffers.DescriptorProtos; + +namespace Google.ProtocolBuffers.Descriptors +{ + /// + /// Descriptor for a single enum value within an enum in a .proto file. + /// + public sealed class EnumValueDescriptor : IndexedDescriptorBase, + IEnumLite + { + private readonly EnumDescriptor enumDescriptor; + + internal EnumValueDescriptor(EnumValueDescriptorProto proto, FileDescriptor file, + EnumDescriptor parent, int index) + : base(proto, file, parent.FullName + "." + proto.Name, index) + { + enumDescriptor = parent; + file.DescriptorPool.AddSymbol(this); + file.DescriptorPool.AddEnumValueByNumber(this); + } + + public int Number + { + get { return Proto.Number; } + } + + public EnumDescriptor EnumDescriptor + { + get { return enumDescriptor; } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/FieldDescriptor.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/FieldDescriptor.cs new file mode 100644 index 0000000000..1520d0e616 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/FieldDescriptor.cs @@ -0,0 +1,671 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; +using System.Collections.Generic; +using System.Reflection; +using Google.ProtocolBuffers.Collections; +using Google.ProtocolBuffers.DescriptorProtos; + +namespace Google.ProtocolBuffers.Descriptors +{ + /// + /// Descriptor for a field or extension within a message in a .proto file. + /// + public sealed class FieldDescriptor : IndexedDescriptorBase, + IComparable, IFieldDescriptorLite + { + private readonly MessageDescriptor extensionScope; + private EnumDescriptor enumType; + private MessageDescriptor messageType; + private MessageDescriptor containingType; + private object defaultValue; + private FieldType fieldType; + private MappedType mappedType; + + private CSharpFieldOptions csharpFieldOptions; + private readonly object optionsLock = new object(); + + internal FieldDescriptor(FieldDescriptorProto proto, FileDescriptor file, + MessageDescriptor parent, int index, bool isExtension) + : base(proto, file, ComputeFullName(file, parent, proto.Name), index) + { + if (proto.HasType) + { + fieldType = GetFieldTypeFromProtoType(proto.Type); + mappedType = FieldTypeToMappedTypeMap[fieldType]; + } + + if (FieldNumber <= 0) + { + throw new DescriptorValidationException(this, + "Field numbers must be positive integers."); + } + + if (isExtension) + { + if (!proto.HasExtendee) + { + throw new DescriptorValidationException(this, + "FieldDescriptorProto.Extendee not set for extension field."); + } + containingType = null; // Will be filled in when cross-linking + if (parent != null) + { + extensionScope = parent; + } + else + { + extensionScope = null; + } + } + else + { + if (proto.HasExtendee) + { + throw new DescriptorValidationException(this, + "FieldDescriptorProto.Extendee set for non-extension field."); + } + containingType = parent; + extensionScope = null; + } + + file.DescriptorPool.AddSymbol(this); + } + + private CSharpFieldOptions BuildOrFakeCSharpOptions() + { + // TODO(jonskeet): Check if we could use FileDescriptorProto.Descriptor.Name - interesting bootstrap issues + if (File.Proto.Name == "google/protobuf/csharp_options.proto") + { + if (Name == "csharp_field_options") + { + return new CSharpFieldOptions.Builder {PropertyName = "CSharpFieldOptions"}.Build(); + } + if (Name == "csharp_file_options") + { + return new CSharpFieldOptions.Builder {PropertyName = "CSharpFileOptions"}.Build(); + } + } + CSharpFieldOptions.Builder builder = CSharpFieldOptions.CreateBuilder(); + if (Proto.Options.HasExtension(DescriptorProtos.CSharpOptions.CSharpFieldOptions)) + { + builder.MergeFrom(Proto.Options.GetExtension(DescriptorProtos.CSharpOptions.CSharpFieldOptions)); + } + if (!builder.HasPropertyName) + { + string fieldName = FieldType == FieldType.Group ? MessageType.Name : Name; + string propertyName = NameHelpers.UnderscoresToPascalCase(fieldName); + if (propertyName == ContainingType.Name) + { + propertyName += "_"; + } + builder.PropertyName = propertyName; + } + return builder.Build(); + } + + /// + /// Maps a field type as included in the .proto file to a FieldType. + /// + private static FieldType GetFieldTypeFromProtoType(FieldDescriptorProto.Types.Type type) + { + switch (type) + { + case FieldDescriptorProto.Types.Type.TYPE_DOUBLE: + return FieldType.Double; + case FieldDescriptorProto.Types.Type.TYPE_FLOAT: + return FieldType.Float; + case FieldDescriptorProto.Types.Type.TYPE_INT64: + return FieldType.Int64; + case FieldDescriptorProto.Types.Type.TYPE_UINT64: + return FieldType.UInt64; + case FieldDescriptorProto.Types.Type.TYPE_INT32: + return FieldType.Int32; + case FieldDescriptorProto.Types.Type.TYPE_FIXED64: + return FieldType.Fixed64; + case FieldDescriptorProto.Types.Type.TYPE_FIXED32: + return FieldType.Fixed32; + case FieldDescriptorProto.Types.Type.TYPE_BOOL: + return FieldType.Bool; + case FieldDescriptorProto.Types.Type.TYPE_STRING: + return FieldType.String; + case FieldDescriptorProto.Types.Type.TYPE_GROUP: + return FieldType.Group; + case FieldDescriptorProto.Types.Type.TYPE_MESSAGE: + return FieldType.Message; + case FieldDescriptorProto.Types.Type.TYPE_BYTES: + return FieldType.Bytes; + case FieldDescriptorProto.Types.Type.TYPE_UINT32: + return FieldType.UInt32; + case FieldDescriptorProto.Types.Type.TYPE_ENUM: + return FieldType.Enum; + case FieldDescriptorProto.Types.Type.TYPE_SFIXED32: + return FieldType.SFixed32; + case FieldDescriptorProto.Types.Type.TYPE_SFIXED64: + return FieldType.SFixed64; + case FieldDescriptorProto.Types.Type.TYPE_SINT32: + return FieldType.SInt32; + case FieldDescriptorProto.Types.Type.TYPE_SINT64: + return FieldType.SInt64; + default: + throw new ArgumentException("Invalid type specified"); + } + } + + /// + /// Returns the default value for a mapped type. + /// + private static object GetDefaultValueForMappedType(MappedType type) + { + switch (type) + { + case MappedType.Int32: + return 0; + case MappedType.Int64: + return (long) 0; + case MappedType.UInt32: + return (uint) 0; + case MappedType.UInt64: + return (ulong) 0; + case MappedType.Single: + return (float) 0; + case MappedType.Double: + return (double) 0; + case MappedType.Boolean: + return false; + case MappedType.String: + return ""; + case MappedType.ByteString: + return ByteString.Empty; + case MappedType.Message: + return null; + case MappedType.Enum: + return null; + default: + throw new ArgumentException("Invalid type specified"); + } + } + + public bool IsRequired + { + get { return Proto.Label == FieldDescriptorProto.Types.Label.LABEL_REQUIRED; } + } + + public bool IsOptional + { + get { return Proto.Label == FieldDescriptorProto.Types.Label.LABEL_OPTIONAL; } + } + + public bool IsRepeated + { + get { return Proto.Label == FieldDescriptorProto.Types.Label.LABEL_REPEATED; } + } + + public bool IsPacked + { + get { return Proto.Options.Packed; } + } + + /// + /// Indicates whether or not the field had an explicitly-defined default value. + /// + public bool HasDefaultValue + { + get { return Proto.HasDefaultValue; } + } + + /// + /// The field's default value. Valid for all types except messages + /// and groups. For all other types, the object returned is of the + /// same class that would be returned by IMessage[this]. + /// For repeated fields this will always be an empty immutable list compatible with IList[object]. + /// For message fields it will always be null. For singular values, it will depend on the descriptor. + /// + public object DefaultValue + { + get + { + if (MappedType == MappedType.Message) + { + throw new InvalidOperationException( + "FieldDescriptor.DefaultValue called on an embedded message field."); + } + return defaultValue; + } + } + + /// + /// Indicates whether or not this field is an extension. + /// + public bool IsExtension + { + get { return Proto.HasExtendee; } + } + + /* + * Get the field's containing type. For extensions, this is the type being + * extended, not the location where the extension was defined. See + * {@link #getExtensionScope()}. + */ + + /// + /// Get the field's containing type. For extensions, this is the type being + /// extended, not the location where the extension was defined. See + /// . + /// + public MessageDescriptor ContainingType + { + get { return containingType; } + } + + /// + /// Returns the C#-specific options for this field descriptor. This will always be + /// completely filled in. + /// + public CSharpFieldOptions CSharpOptions + { + get + { + lock (optionsLock) + { + if (csharpFieldOptions == null) + { + csharpFieldOptions = BuildOrFakeCSharpOptions(); + } + } + return csharpFieldOptions; + } + } + + /// + /// For extensions defined nested within message types, gets + /// the outer type. Not valid for non-extension fields. + /// + /// + /// + /// message Foo { + /// extensions 1000 to max; + /// } + /// extend Foo { + /// optional int32 baz = 1234; + /// } + /// message Bar { + /// extend Foo { + /// optional int32 qux = 4321; + /// } + /// } + /// + /// The containing type for both baz and qux is Foo. + /// However, the extension scope for baz is null while + /// the extension scope for qux is Bar. + /// + public MessageDescriptor ExtensionScope + { + get + { + if (!IsExtension) + { + throw new InvalidOperationException("This field is not an extension."); + } + return extensionScope; + } + } + + public MappedType MappedType + { + get { return mappedType; } + } + + public FieldType FieldType + { + get { return fieldType; } + } + + public bool IsCLSCompliant + { + get + { + return mappedType != MappedType.UInt32 && + mappedType != MappedType.UInt64 && + !NameHelpers.UnderscoresToPascalCase(Name).StartsWith("_"); + } + } + + public int FieldNumber + { + get { return Proto.Number; } + } + + /// + /// Compares this descriptor with another one, ordering in "canonical" order + /// which simply means ascending order by field number. + /// must be a field of the same type, i.e. the of + /// both fields must be the same. + /// + public int CompareTo(FieldDescriptor other) + { + if (other.containingType != containingType) + { + throw new ArgumentException("FieldDescriptors can only be compared to other FieldDescriptors " + + "for fields of the same message type."); + } + return FieldNumber - other.FieldNumber; + } + + /// + /// Compares this descriptor with another one, ordering in "canonical" order + /// which simply means ascending order by field number. + /// must be a field of the same type, i.e. the of + /// both fields must be the same. + /// + public int CompareTo(IFieldDescriptorLite other) + { + return FieldNumber - other.FieldNumber; + } + + IEnumLiteMap IFieldDescriptorLite.EnumType + { + get { return EnumType; } + } + + bool IFieldDescriptorLite.MessageSetWireFormat + { + get { return ContainingType.Options.MessageSetWireFormat; } + } + + /// + /// For enum fields, returns the field's type. + /// + public EnumDescriptor EnumType + { + get + { + if (MappedType != MappedType.Enum) + { + throw new InvalidOperationException("EnumType is only valid for enum fields."); + } + return enumType; + } + } + + /// + /// For embedded message and group fields, returns the field's type. + /// + public MessageDescriptor MessageType + { + get + { + if (MappedType != MappedType.Message) + { + throw new InvalidOperationException("MessageType is only valid for enum fields."); + } + return messageType; + } + } + + /// + /// Immutable mapping from field type to mapped type. Built using the attributes on + /// FieldType values. + /// + public static readonly IDictionary FieldTypeToMappedTypeMap = MapFieldTypes(); + + private static IDictionary MapFieldTypes() + { + var map = new Dictionary(); + foreach (FieldInfo field in typeof (FieldType).GetFields(BindingFlags.Static | BindingFlags.Public)) + { + FieldType fieldType = (FieldType) field.GetValue(null); + FieldMappingAttribute mapping = + (FieldMappingAttribute) field.GetCustomAttributes(typeof (FieldMappingAttribute), false)[0]; + map[fieldType] = mapping.MappedType; + } + return Dictionaries.AsReadOnly(map); + } + + /// + /// Look up and cross-link all field types etc. + /// + internal void CrossLink() + { + if (Proto.HasExtendee) + { + IDescriptor extendee = File.DescriptorPool.LookupSymbol(Proto.Extendee, this); + if (!(extendee is MessageDescriptor)) + { + throw new DescriptorValidationException(this, "\"" + Proto.Extendee + "\" is not a message type."); + } + containingType = (MessageDescriptor) extendee; + + if (!containingType.IsExtensionNumber(FieldNumber)) + { + throw new DescriptorValidationException(this, + "\"" + containingType.FullName + "\" does not declare " + + FieldNumber + " as an extension number."); + } + } + + if (Proto.HasTypeName) + { + IDescriptor typeDescriptor = + File.DescriptorPool.LookupSymbol(Proto.TypeName, this); + + if (!Proto.HasType) + { + // Choose field type based on symbol. + if (typeDescriptor is MessageDescriptor) + { + fieldType = FieldType.Message; + mappedType = MappedType.Message; + } + else if (typeDescriptor is EnumDescriptor) + { + fieldType = FieldType.Enum; + mappedType = MappedType.Enum; + } + else + { + throw new DescriptorValidationException(this, "\"" + Proto.TypeName + "\" is not a type."); + } + } + + if (MappedType == MappedType.Message) + { + if (!(typeDescriptor is MessageDescriptor)) + { + throw new DescriptorValidationException(this, + "\"" + Proto.TypeName + "\" is not a message type."); + } + messageType = (MessageDescriptor) typeDescriptor; + + if (Proto.HasDefaultValue) + { + throw new DescriptorValidationException(this, "Messages can't have default values."); + } + } + else if (MappedType == Descriptors.MappedType.Enum) + { + if (!(typeDescriptor is EnumDescriptor)) + { + throw new DescriptorValidationException(this, "\"" + Proto.TypeName + "\" is not an enum type."); + } + enumType = (EnumDescriptor) typeDescriptor; + } + else + { + throw new DescriptorValidationException(this, "Field with primitive type has type_name."); + } + } + else + { + if (MappedType == MappedType.Message || MappedType == MappedType.Enum) + { + throw new DescriptorValidationException(this, "Field with message or enum type missing type_name."); + } + } + + // We don't attempt to parse the default value until here because for + // enums we need the enum type's descriptor. + if (Proto.HasDefaultValue) + { + if (IsRepeated) + { + throw new DescriptorValidationException(this, "Repeated fields cannot have default values."); + } + + try + { + switch (FieldType) + { + case FieldType.Int32: + case FieldType.SInt32: + case FieldType.SFixed32: + defaultValue = TextFormat.ParseInt32(Proto.DefaultValue); + break; + case FieldType.UInt32: + case FieldType.Fixed32: + defaultValue = TextFormat.ParseUInt32(Proto.DefaultValue); + break; + case FieldType.Int64: + case FieldType.SInt64: + case FieldType.SFixed64: + defaultValue = TextFormat.ParseInt64(Proto.DefaultValue); + break; + case FieldType.UInt64: + case FieldType.Fixed64: + defaultValue = TextFormat.ParseUInt64(Proto.DefaultValue); + break; + case FieldType.Float: + defaultValue = TextFormat.ParseFloat(Proto.DefaultValue); + break; + case FieldType.Double: + defaultValue = TextFormat.ParseDouble(Proto.DefaultValue); + break; + case FieldType.Bool: + if (Proto.DefaultValue == "true") + { + defaultValue = true; + } + else if (Proto.DefaultValue == "false") + { + defaultValue = false; + } + else + { + throw new FormatException("Boolean values must be \"true\" or \"false\""); + } + break; + case FieldType.String: + defaultValue = Proto.DefaultValue; + break; + case FieldType.Bytes: + try + { + defaultValue = TextFormat.UnescapeBytes(Proto.DefaultValue); + } + catch (FormatException e) + { + throw new DescriptorValidationException(this, + "Couldn't parse default value: " + e.Message); + } + break; + case FieldType.Enum: + defaultValue = enumType.FindValueByName(Proto.DefaultValue); + if (defaultValue == null) + { + throw new DescriptorValidationException(this, + "Unknown enum default value: \"" + + Proto.DefaultValue + "\""); + } + break; + case FieldType.Message: + case FieldType.Group: + throw new DescriptorValidationException(this, "Message type had default value."); + } + } + catch (FormatException e) + { + DescriptorValidationException validationException = + new DescriptorValidationException(this, + "Could not parse default value: \"" + Proto.DefaultValue + + "\"", e); + throw validationException; + } + } + else + { + // Determine the default default for this field. + if (IsRepeated) + { + defaultValue = Lists.Empty; + } + else + { + switch (MappedType) + { + case MappedType.Enum: + // We guarantee elsewhere that an enum type always has at least + // one possible value. + defaultValue = enumType.Values[0]; + break; + case MappedType.Message: + defaultValue = null; + break; + default: + defaultValue = GetDefaultValueForMappedType(MappedType); + break; + } + } + } + + if (!IsExtension) + { + File.DescriptorPool.AddFieldByNumber(this); + } + + if (containingType != null && containingType.Options.MessageSetWireFormat) + { + if (IsExtension) + { + if (!IsOptional || FieldType != FieldType.Message) + { + throw new DescriptorValidationException(this, + "Extensions of MessageSets must be optional messages."); + } + } + else + { + throw new DescriptorValidationException(this, "MessageSets cannot have fields, only extensions."); + } + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/FieldMappingAttribute.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/FieldMappingAttribute.cs new file mode 100644 index 0000000000..c8e2adfff2 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/FieldMappingAttribute.cs @@ -0,0 +1,86 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; +using System.Collections.Generic; +using System.Reflection; +using Google.ProtocolBuffers.Collections; + +namespace Google.ProtocolBuffers.Descriptors +{ + /// + /// Defined specifically for the enumeration, + /// this allows each field type to specify the mapped type and wire type. + /// + [CLSCompliant(false)] + [AttributeUsage(AttributeTargets.Field)] + public sealed class FieldMappingAttribute : Attribute + { + public FieldMappingAttribute(MappedType mappedType, WireFormat.WireType wireType) + { + MappedType = mappedType; + WireType = wireType; + } + + public MappedType MappedType { get; private set; } + public WireFormat.WireType WireType { get; private set; } + + + /// + /// Immutable mapping from field type to mapped type. Built using the attributes on + /// FieldType values. + /// + private static readonly IDictionary FieldTypeToMappedTypeMap = MapFieldTypes(); + + private static IDictionary MapFieldTypes() + { + var map = new Dictionary(); + foreach (FieldInfo field in typeof (FieldType).GetFields(BindingFlags.Static | BindingFlags.Public)) + { + FieldType fieldType = (FieldType) field.GetValue(null); + FieldMappingAttribute mapping = + (FieldMappingAttribute) field.GetCustomAttributes(typeof (FieldMappingAttribute), false)[0]; + map[fieldType] = mapping; + } + return Dictionaries.AsReadOnly(map); + } + + internal static MappedType MappedTypeFromFieldType(FieldType type) + { + return FieldTypeToMappedTypeMap[type].MappedType; + } + + internal static WireFormat.WireType WireTypeFromFieldType(FieldType type, bool packed) + { + return packed ? WireFormat.WireType.LengthDelimited : FieldTypeToMappedTypeMap[type].WireType; + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/FieldType.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/FieldType.cs new file mode 100644 index 0000000000..25c076ac63 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/FieldType.cs @@ -0,0 +1,60 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +namespace Google.ProtocolBuffers.Descriptors +{ + /// + /// Enumeration of all the possible field types. The odd formatting is to make it very clear + /// which attribute applies to which value, while maintaining a compact format. + /// + public enum FieldType + { + [FieldMapping(MappedType.Double, WireFormat.WireType.Fixed64)] Double, + [FieldMapping(MappedType.Single, WireFormat.WireType.Fixed32)] Float, + [FieldMapping(MappedType.Int64, WireFormat.WireType.Varint)] Int64, + [FieldMapping(MappedType.UInt64, WireFormat.WireType.Varint)] UInt64, + [FieldMapping(MappedType.Int32, WireFormat.WireType.Varint)] Int32, + [FieldMapping(MappedType.UInt64, WireFormat.WireType.Fixed64)] Fixed64, + [FieldMapping(MappedType.UInt32, WireFormat.WireType.Fixed32)] Fixed32, + [FieldMapping(MappedType.Boolean, WireFormat.WireType.Varint)] Bool, + [FieldMapping(MappedType.String, WireFormat.WireType.LengthDelimited)] String, + [FieldMapping(MappedType.Message, WireFormat.WireType.StartGroup)] Group, + [FieldMapping(MappedType.Message, WireFormat.WireType.LengthDelimited)] Message, + [FieldMapping(MappedType.ByteString, WireFormat.WireType.LengthDelimited)] Bytes, + [FieldMapping(MappedType.UInt32, WireFormat.WireType.Varint)] UInt32, + [FieldMapping(MappedType.Int32, WireFormat.WireType.Fixed32)] SFixed32, + [FieldMapping(MappedType.Int64, WireFormat.WireType.Fixed64)] SFixed64, + [FieldMapping(MappedType.Int32, WireFormat.WireType.Varint)] SInt32, + [FieldMapping(MappedType.Int64, WireFormat.WireType.Varint)] SInt64, + [FieldMapping(MappedType.Enum, WireFormat.WireType.Varint)] Enum + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/FileDescriptor.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/FileDescriptor.cs new file mode 100644 index 0000000000..752c727f97 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/FileDescriptor.cs @@ -0,0 +1,496 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.IO; +using Google.ProtocolBuffers.DescriptorProtos; +using FileOptions = Google.ProtocolBuffers.DescriptorProtos.FileOptions; + +namespace Google.ProtocolBuffers.Descriptors +{ + /// + /// Describes a .proto file, including everything defined within. + /// IDescriptor is implemented such that the File property returns this descriptor, + /// and the FullName is the same as the Name. + /// + public sealed class FileDescriptor : IDescriptor + { + private FileDescriptorProto proto; + private readonly IList messageTypes; + private readonly IList enumTypes; + private readonly IList services; + private readonly IList extensions; + private readonly IList dependencies; + private readonly DescriptorPool pool; + private CSharpFileOptions csharpFileOptions; + private readonly object optionsLock = new object(); + + private FileDescriptor(FileDescriptorProto proto, FileDescriptor[] dependencies, DescriptorPool pool) + { + this.pool = pool; + this.proto = proto; + this.dependencies = new ReadOnlyCollection((FileDescriptor[]) dependencies.Clone()); + + pool.AddPackage(Package, this); + + messageTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.MessageTypeList, + (message, index) => + new MessageDescriptor(message, this, null, index)); + + enumTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.EnumTypeList, + (enumType, index) => + new EnumDescriptor(enumType, this, null, index)); + + services = DescriptorUtil.ConvertAndMakeReadOnly(proto.ServiceList, + (service, index) => + new ServiceDescriptor(service, this, index)); + + extensions = DescriptorUtil.ConvertAndMakeReadOnly(proto.ExtensionList, + (field, index) => + new FieldDescriptor(field, this, null, index, true)); + } + + + /// + /// Allows a file descriptor to be configured with a set of external options, e.g. from the + /// command-line arguments to protogen. + /// + public void ConfigureWithDefaultOptions(CSharpFileOptions options) + { + csharpFileOptions = BuildOrFakeWithDefaultOptions(options); + } + + private CSharpFileOptions BuildOrFakeWithDefaultOptions(CSharpFileOptions defaultOptions) + { + // Fix for being able to relocate these files to any directory structure + if (proto.Package == "google.protobuf") + { + string filename = Path.GetFileName(proto.Name); + // TODO(jonskeet): Check if we could use FileDescriptorProto.Descriptor.Name - interesting bootstrap issues) + if (filename == "descriptor.proto") + { + return new CSharpFileOptions.Builder + { + Namespace = "Google.ProtocolBuffers.DescriptorProtos", + UmbrellaClassname = "DescriptorProtoFile", + NestClasses = false, + MultipleFiles = false, + PublicClasses = true, + OutputDirectory = defaultOptions.OutputDirectory, + IgnoreGoogleProtobuf = defaultOptions.IgnoreGoogleProtobuf + }.Build(); + } + if (filename == "csharp_options.proto") + { + return new CSharpFileOptions.Builder + { + Namespace = "Google.ProtocolBuffers.DescriptorProtos", + UmbrellaClassname = "CSharpOptions", + NestClasses = false, + MultipleFiles = false, + PublicClasses = true, + OutputDirectory = defaultOptions.OutputDirectory, + IgnoreGoogleProtobuf = defaultOptions.IgnoreGoogleProtobuf + }.Build(); + } + } + CSharpFileOptions.Builder builder = defaultOptions.ToBuilder(); + if (proto.Options.HasExtension(DescriptorProtos.CSharpOptions.CSharpFileOptions)) + { + builder.MergeFrom(proto.Options.GetExtension(DescriptorProtos.CSharpOptions.CSharpFileOptions)); + } + if (!builder.HasNamespace) + { + builder.Namespace = Package; + } + if (!builder.HasUmbrellaClassname) + { + int lastSlash = Name.LastIndexOf('/'); + string baseName = Name.Substring(lastSlash + 1); + builder.UmbrellaClassname = NameHelpers.UnderscoresToPascalCase(NameHelpers.StripProto(baseName)); + } + + // Auto-fix for name collision by placing umbrella class into a new namespace. This + // still won't fix the collisions with nesting enabled; however, you have to turn that on explicitly anyway. + if (!builder.NestClasses && !builder.HasUmbrellaNamespace) + { + bool collision = false; + foreach (IDescriptor d in MessageTypes) + { + collision |= d.Name == builder.UmbrellaClassname; + } + foreach (IDescriptor d in Services) + { + collision |= d.Name == builder.UmbrellaClassname; + } + foreach (IDescriptor d in EnumTypes) + { + collision |= d.Name == builder.UmbrellaClassname; + } + if (collision) + { + builder.UmbrellaNamespace = "Proto"; + } + } + + return builder.Build(); + } + + /// + /// The descriptor in its protocol message representation. + /// + public FileDescriptorProto Proto + { + get { return proto; } + } + + /// + /// The defined in descriptor.proto. + /// + public FileOptions Options + { + get { return proto.Options; } + } + + /// + /// Returns the C#-specific options for this file descriptor. This will always be + /// completely filled in. + /// + public CSharpFileOptions CSharpOptions + { + get + { + lock (optionsLock) + { + if (csharpFileOptions == null) + { + csharpFileOptions = BuildOrFakeWithDefaultOptions(CSharpFileOptions.DefaultInstance); + } + } + return csharpFileOptions; + } + } + + /// + /// The file name. + /// + public string Name + { + get { return proto.Name; } + } + + /// + /// The package as declared in the .proto file. This may or may not + /// be equivalent to the .NET namespace of the generated classes. + /// + public string Package + { + get { return proto.Package; } + } + + /// + /// Unmodifiable list of top-level message types declared in this file. + /// + public IList MessageTypes + { + get { return messageTypes; } + } + + /// + /// Unmodifiable list of top-level enum types declared in this file. + /// + public IList EnumTypes + { + get { return enumTypes; } + } + + /// + /// Unmodifiable list of top-level services declared in this file. + /// + public IList Services + { + get { return services; } + } + + /// + /// Unmodifiable list of top-level extensions declared in this file. + /// + public IList Extensions + { + get { return extensions; } + } + + /// + /// Unmodifiable list of this file's dependencies (imports). + /// + public IList Dependencies + { + get { return dependencies; } + } + + /// + /// Implementation of IDescriptor.FullName - just returns the same as Name. + /// + string IDescriptor.FullName + { + get { return Name; } + } + + /// + /// Implementation of IDescriptor.File - just returns this descriptor. + /// + FileDescriptor IDescriptor.File + { + get { return this; } + } + + /// + /// Protocol buffer describing this descriptor. + /// + IMessage IDescriptor.Proto + { + get { return Proto; } + } + + /// + /// Pool containing symbol descriptors. + /// + internal DescriptorPool DescriptorPool + { + get { return pool; } + } + + /// + /// Finds a type (message, enum, service or extension) in the file by name. Does not find nested types. + /// + /// The unqualified type name to look for. + /// The type of descriptor to look for (or ITypeDescriptor for any) + /// The type's descriptor, or null if not found. + public T FindTypeByName(String name) + where T : class, IDescriptor + { + // Don't allow looking up nested types. This will make optimization + // easier later. + if (name.IndexOf('.') != -1) + { + return null; + } + if (Package.Length > 0) + { + name = Package + "." + name; + } + T result = pool.FindSymbol(name); + if (result != null && result.File == this) + { + return result; + } + return null; + } + + /// + /// Builds a FileDescriptor from its protocol buffer representation. + /// + /// The protocol message form of the FileDescriptor. + /// FileDescriptors corresponding to all of the + /// file's dependencies, in the exact order listed in the .proto file. May be null, + /// in which case it is treated as an empty array. + /// If is not + /// a valid descriptor. This can occur for a number of reasons, such as a field + /// having an undefined type or because two messages were defined with the same name. + public static FileDescriptor BuildFrom(FileDescriptorProto proto, FileDescriptor[] dependencies) + { + // Building descriptors involves two steps: translating and linking. + // In the translation step (implemented by FileDescriptor's + // constructor), we build an object tree mirroring the + // FileDescriptorProto's tree and put all of the descriptors into the + // DescriptorPool's lookup tables. In the linking step, we look up all + // type references in the DescriptorPool, so that, for example, a + // FieldDescriptor for an embedded message contains a pointer directly + // to the Descriptor for that message's type. We also detect undefined + // types in the linking step. + if (dependencies == null) + { + dependencies = new FileDescriptor[0]; + } + + DescriptorPool pool = new DescriptorPool(dependencies); + FileDescriptor result = new FileDescriptor(proto, dependencies, pool); + + if (dependencies.Length != proto.DependencyCount) + { + throw new DescriptorValidationException(result, + "Dependencies passed to FileDescriptor.BuildFrom() don't match " + + "those listed in the FileDescriptorProto."); + } + for (int i = 0; i < proto.DependencyCount; i++) + { + if (dependencies[i].Name != proto.DependencyList[i]) + { + throw new DescriptorValidationException(result, + "Dependencies passed to FileDescriptor.BuildFrom() don't match " + + "those listed in the FileDescriptorProto."); + } + } + + result.CrossLink(); + return result; + } + + private void CrossLink() + { + foreach (MessageDescriptor message in messageTypes) + { + message.CrossLink(); + } + + foreach (ServiceDescriptor service in services) + { + service.CrossLink(); + } + + foreach (FieldDescriptor extension in extensions) + { + extension.CrossLink(); + } + + foreach (MessageDescriptor message in messageTypes) + { + message.CheckRequiredFields(); + } + } + + /// + /// This method is to be called by generated code only. It is equivalent + /// to BuildFrom except that the FileDescriptorProto is encoded in + /// protocol buffer wire format. This overload is maintained for backward + /// compatibility with source code generated before the custom options were available + /// (and working). + /// + public static FileDescriptor InternalBuildGeneratedFileFrom(byte[] descriptorData, FileDescriptor[] dependencies) + { + return InternalBuildGeneratedFileFrom(descriptorData, dependencies, x => null); + } + + /// + /// This delegate should be used by generated code only. When calling + /// FileDescriptor.InternalBuildGeneratedFileFrom, the caller can provide + /// a callback which assigns the global variables defined in the generated code + /// which point at parts of the FileDescriptor. The callback returns an + /// Extension Registry which contains any extensions which might be used in + /// the descriptor - that is, extensions of the various "Options" messages defined + /// in descriptor.proto. The callback may also return null to indicate that + /// no extensions are used in the descriptor. + /// + /// + /// + public delegate ExtensionRegistry InternalDescriptorAssigner(FileDescriptor descriptor); + + public static FileDescriptor InternalBuildGeneratedFileFrom(byte[] descriptorData, + FileDescriptor[] dependencies, + InternalDescriptorAssigner descriptorAssigner) + { + FileDescriptorProto proto; + try + { + proto = FileDescriptorProto.ParseFrom(descriptorData); + } + catch (InvalidProtocolBufferException e) + { + throw new ArgumentException("Failed to parse protocol buffer descriptor for generated code.", e); + } + + FileDescriptor result; + try + { + result = BuildFrom(proto, dependencies); + } + catch (DescriptorValidationException e) + { + throw new ArgumentException("Invalid embedded descriptor for \"" + proto.Name + "\".", e); + } + + ExtensionRegistry registry = descriptorAssigner(result); + + if (registry != null) + { + // We must re-parse the proto using the registry. + try + { + proto = FileDescriptorProto.ParseFrom(descriptorData, registry); + } + catch (InvalidProtocolBufferException e) + { + throw new ArgumentException("Failed to parse protocol buffer descriptor for generated code.", e); + } + + result.ReplaceProto(proto); + } + return result; + } + + /// + /// Replace our FileDescriptorProto with the given one, which is + /// identical except that it might contain extensions that weren't present + /// in the original. This method is needed for bootstrapping when a file + /// defines custom options. The options may be defined in the file itself, + /// so we can't actually parse them until we've constructed the descriptors, + /// but to construct the decsriptors we have to have parsed the descriptor + /// protos. So, we have to parse the descriptor protos a second time after + /// constructing the descriptors. + /// + private void ReplaceProto(FileDescriptorProto newProto) + { + proto = newProto; + + for (int i = 0; i < messageTypes.Count; i++) + { + messageTypes[i].ReplaceProto(proto.GetMessageType(i)); + } + + for (int i = 0; i < enumTypes.Count; i++) + { + enumTypes[i].ReplaceProto(proto.GetEnumType(i)); + } + + for (int i = 0; i < services.Count; i++) + { + services[i].ReplaceProto(proto.GetService(i)); + } + + for (int i = 0; i < extensions.Count; i++) + { + extensions[i].ReplaceProto(proto.GetExtension(i)); + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/IDescriptor.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/IDescriptor.cs new file mode 100644 index 0000000000..3bcaacb23f --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/IDescriptor.cs @@ -0,0 +1,55 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +namespace Google.ProtocolBuffers.Descriptors +{ + /// + /// The non-generic form of the IDescriptor interface. Useful for describing a general + /// descriptor. + /// + public interface IDescriptor + { + string Name { get; } + string FullName { get; } + FileDescriptor File { get; } + IMessage Proto { get; } + } + + /// + /// Strongly-typed form of the IDescriptor interface. + /// + /// Protocol buffer type underlying this descriptor type + public interface IDescriptor : IDescriptor where TProto : IMessage + { + new TProto Proto { get; } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/IndexedDescriptorBase.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/IndexedDescriptorBase.cs new file mode 100644 index 0000000000..8a04a9e5c8 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/IndexedDescriptorBase.cs @@ -0,0 +1,64 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using Google.ProtocolBuffers.DescriptorProtos; + +namespace Google.ProtocolBuffers.Descriptors +{ + /// + /// Base class for descriptors which are also indexed. This is all of them other than + /// . + /// + public abstract class IndexedDescriptorBase : DescriptorBase + where TProto : IMessage, IDescriptorProto + { + private readonly int index; + + protected IndexedDescriptorBase(TProto proto, FileDescriptor file, string fullName, int index) + : base(proto, file, fullName) + { + this.index = index; + } + + /// + /// The index of this descriptor within its parent descriptor. + /// + /// + /// This returns the index of this descriptor within its parent, for + /// this descriptor's type. (There can be duplicate values for different + /// types, e.g. one enum type with index 0 and one message type with index 0.) + /// + public int Index + { + get { return index; } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/MappedType.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/MappedType.cs new file mode 100644 index 0000000000..71182aaed5 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/MappedType.cs @@ -0,0 +1,52 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +namespace Google.ProtocolBuffers.Descriptors +{ + /// + /// Type as it's mapped onto a .NET type. + /// + public enum MappedType + { + Int32, + Int64, + UInt32, + UInt64, + Single, + Double, + Boolean, + String, + ByteString, + Message, + Enum + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/MessageDescriptor.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/MessageDescriptor.cs new file mode 100644 index 0000000000..b11acc0441 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/MessageDescriptor.cs @@ -0,0 +1,288 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; +using System.Collections.Generic; +using Google.ProtocolBuffers.DescriptorProtos; + +namespace Google.ProtocolBuffers.Descriptors +{ + /// + /// Describes a message type. + /// + public sealed class MessageDescriptor : IndexedDescriptorBase + { + private readonly MessageDescriptor containingType; + private readonly IList nestedTypes; + private readonly IList enumTypes; + private readonly IList fields; + private readonly IList extensions; + private bool hasRequiredFields; + + internal MessageDescriptor(DescriptorProto proto, FileDescriptor file, MessageDescriptor parent, int typeIndex) + : base(proto, file, ComputeFullName(file, parent, proto.Name), typeIndex) + { + containingType = parent; + + nestedTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.NestedTypeList, + (type, index) => + new MessageDescriptor(type, file, this, index)); + + enumTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.EnumTypeList, + (type, index) => + new EnumDescriptor(type, file, this, index)); + + // TODO(jonskeet): Sort fields first? + fields = DescriptorUtil.ConvertAndMakeReadOnly(proto.FieldList, + (field, index) => + new FieldDescriptor(field, file, this, index, false)); + + extensions = DescriptorUtil.ConvertAndMakeReadOnly(proto.ExtensionList, + (field, index) => + new FieldDescriptor(field, file, this, index, true)); + + file.DescriptorPool.AddSymbol(this); + } + + /// + /// If this is a nested type, get the outer descriptor, otherwise null. + /// + public MessageDescriptor ContainingType + { + get { return containingType; } + } + + /// + /// An unmodifiable list of this message type's fields. + /// + public IList Fields + { + get { return fields; } + } + + /// + /// An unmodifiable list of this message type's extensions. + /// + public IList Extensions + { + get { return extensions; } + } + + /// + /// An unmodifiable list of this message type's nested types. + /// + public IList NestedTypes + { + get { return nestedTypes; } + } + + /// + /// An unmodifiable list of this message type's enum types. + /// + public IList EnumTypes + { + get { return enumTypes; } + } + + /// + /// Returns a pre-computed result as to whether this message + /// has required fields. This includes optional fields which are + /// message types which in turn have required fields, and any + /// extension fields. + /// + internal bool HasRequiredFields + { + get { return hasRequiredFields; } + } + + /// + /// Determines if the given field number is an extension. + /// + public bool IsExtensionNumber(int number) + { + foreach (DescriptorProto.Types.ExtensionRange range in Proto.ExtensionRangeList) + { + if (range.Start <= number && number < range.End) + { + return true; + } + } + return false; + } + + /// + /// Finds a field by field name. + /// + /// The unqualified name of the field (e.g. "foo"). + /// The field's descriptor, or null if not found. + public FieldDescriptor FindFieldByName(String name) + { + return File.DescriptorPool.FindSymbol(FullName + "." + name); + } + + /// + /// Finds a field by field number. + /// + /// The field number within this message type. + /// The field's descriptor, or null if not found. + public FieldDescriptor FindFieldByNumber(int number) + { + return File.DescriptorPool.FindFieldByNumber(this, number); + } + + /// + /// Finds a field by its property name, as it would be generated by protogen. + /// + /// The property name within this message type. + /// The field's descriptor, or null if not found. + public FieldDescriptor FindFieldByPropertyName(string propertyName) + { + // For reasonably short messages, this will be more efficient than a dictionary + // lookup. It also means we don't need to do things lazily with locks etc. + foreach (FieldDescriptor field in Fields) + { + if (field.CSharpOptions.PropertyName == propertyName) + { + return field; + } + } + return null; + } + + /// + /// Finds a nested descriptor by name. The is valid for fields, nested + /// message types and enums. + /// + /// The unqualified name of the descriptor, e.g. "Foo" + /// The descriptor, or null if not found. + public T FindDescriptor(string name) + where T : class, IDescriptor + { + return File.DescriptorPool.FindSymbol(FullName + "." + name); + } + + /// + /// Looks up and cross-links all fields, nested types, and extensions. + /// + internal void CrossLink() + { + foreach (MessageDescriptor message in nestedTypes) + { + message.CrossLink(); + } + + foreach (FieldDescriptor field in fields) + { + field.CrossLink(); + } + + foreach (FieldDescriptor extension in extensions) + { + extension.CrossLink(); + } + } + + internal void CheckRequiredFields() + { + IDictionary alreadySeen = new Dictionary(); + hasRequiredFields = CheckRequiredFields(alreadySeen); + } + + private bool CheckRequiredFields(IDictionary alreadySeen) + { + if (alreadySeen.ContainsKey(this)) + { + // The type is already in the cache. This means that either: + // a. The type has no required fields. + // b. We are in the midst of checking if the type has required fields, + // somewhere up the stack. In this case, we know that if the type + // has any required fields, they'll be found when we return to it, + // and the whole call to HasRequiredFields() will return true. + // Therefore, we don't have to check if this type has required fields + // here. + return false; + } + alreadySeen[this] = 0; // Value is irrelevant; we want set semantics + + // If the type allows extensions, an extension with message type could contain + // required fields, so we have to be conservative and assume such an + // extension exists. + if (Proto.ExtensionRangeCount != 0) + { + return true; + } + + foreach (FieldDescriptor field in Fields) + { + if (field.IsRequired) + { + return true; + } + if (field.MappedType == MappedType.Message) + { + if (field.MessageType.CheckRequiredFields(alreadySeen)) + { + return true; + } + } + } + return false; + } + + /// + /// See FileDescriptor.ReplaceProto + /// + internal override void ReplaceProto(DescriptorProto newProto) + { + base.ReplaceProto(newProto); + + for (int i = 0; i < nestedTypes.Count; i++) + { + nestedTypes[i].ReplaceProto(newProto.GetNestedType(i)); + } + + for (int i = 0; i < enumTypes.Count; i++) + { + enumTypes[i].ReplaceProto(newProto.GetEnumType(i)); + } + + for (int i = 0; i < fields.Count; i++) + { + fields[i].ReplaceProto(newProto.GetField(i)); + } + + for (int i = 0; i < extensions.Count; i++) + { + extensions[i].ReplaceProto(newProto.GetExtension(i)); + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/MethodDescriptor.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/MethodDescriptor.cs new file mode 100644 index 0000000000..7c58c88052 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/MethodDescriptor.cs @@ -0,0 +1,94 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using Google.ProtocolBuffers.DescriptorProtos; + +namespace Google.ProtocolBuffers.Descriptors +{ + /// + /// Describes a single method in a service. + /// + public sealed class MethodDescriptor : IndexedDescriptorBase + { + private readonly ServiceDescriptor service; + private MessageDescriptor inputType; + private MessageDescriptor outputType; + + /// + /// The service this method belongs to. + /// + public ServiceDescriptor Service + { + get { return service; } + } + + /// + /// The method's input type. + /// + public MessageDescriptor InputType + { + get { return inputType; } + } + + /// + /// The method's input type. + /// + public MessageDescriptor OutputType + { + get { return outputType; } + } + + internal MethodDescriptor(MethodDescriptorProto proto, FileDescriptor file, + ServiceDescriptor parent, int index) + : base(proto, file, parent.FullName + "." + proto.Name, index) + { + service = parent; + file.DescriptorPool.AddSymbol(this); + } + + internal void CrossLink() + { + IDescriptor lookup = File.DescriptorPool.LookupSymbol(Proto.InputType, this); + if (!(lookup is MessageDescriptor)) + { + throw new DescriptorValidationException(this, "\"" + Proto.InputType + "\" is not a message type."); + } + inputType = (MessageDescriptor) lookup; + + lookup = File.DescriptorPool.LookupSymbol(Proto.OutputType, this); + if (!(lookup is MessageDescriptor)) + { + throw new DescriptorValidationException(this, "\"" + Proto.OutputType + "\" is not a message type."); + } + outputType = (MessageDescriptor) lookup; + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/PackageDescriptor.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/PackageDescriptor.cs new file mode 100644 index 0000000000..89c4c7c530 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/PackageDescriptor.cs @@ -0,0 +1,73 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +namespace Google.ProtocolBuffers.Descriptors +{ + /// + /// Represents a package in the symbol table. We use PackageDescriptors + /// just as placeholders so that someone cannot define, say, a message type + /// that has the same name as an existing package. + /// + internal sealed class PackageDescriptor : IDescriptor + { + private readonly string name; + private readonly string fullName; + private readonly FileDescriptor file; + + internal PackageDescriptor(string name, string fullName, FileDescriptor file) + { + this.file = file; + this.fullName = fullName; + this.name = name; + } + + public IMessage Proto + { + get { return file.Proto; } + } + + public string Name + { + get { return name; } + } + + public string FullName + { + get { return fullName; } + } + + public FileDescriptor File + { + get { return file; } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/ServiceDescriptor.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/ServiceDescriptor.cs new file mode 100644 index 0000000000..b86679e913 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/Descriptors/ServiceDescriptor.cs @@ -0,0 +1,89 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; +using System.Collections.Generic; +using Google.ProtocolBuffers.DescriptorProtos; + +namespace Google.ProtocolBuffers.Descriptors +{ + /// + /// Describes a service type. + /// + public sealed class ServiceDescriptor : IndexedDescriptorBase + { + private readonly IList methods; + + public ServiceDescriptor(ServiceDescriptorProto proto, FileDescriptor file, int index) + : base(proto, file, ComputeFullName(file, null, proto.Name), index) + { + methods = DescriptorUtil.ConvertAndMakeReadOnly(proto.MethodList, + (method, i) => new MethodDescriptor(method, file, this, i)); + + file.DescriptorPool.AddSymbol(this); + } + + /// + /// An unmodifiable list of methods in this service. + /// + public IList Methods + { + get { return methods; } + } + + /// + /// Finds a method by name. + /// + /// The unqualified name of the method (e.g. "Foo"). + /// The method's decsriptor, or null if not found. + public MethodDescriptor FindMethodByName(String name) + { + return File.DescriptorPool.FindSymbol(FullName + "." + name); + } + + internal void CrossLink() + { + foreach (MethodDescriptor method in methods) + { + method.CrossLink(); + } + } + + internal override void ReplaceProto(ServiceDescriptorProto newProto) + { + base.ReplaceProto(newProto); + for (int i = 0; i < methods.Count; i++) + { + methods[i].ReplaceProto(newProto.GetMethod(i)); + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/DynamicMessage.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/DynamicMessage.cs new file mode 100644 index 0000000000..9d1d77917f --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/DynamicMessage.cs @@ -0,0 +1,512 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using System.IO; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + /// + /// An implementation of IMessage that can represent arbitrary types, given a MessageaDescriptor. + /// + public sealed partial class DynamicMessage : AbstractMessage + { + private readonly MessageDescriptor type; + private readonly FieldSet fields; + private readonly UnknownFieldSet unknownFields; + private int memoizedSize = -1; + + /// + /// Creates a DynamicMessage with the given FieldSet. + /// + /// + /// + /// + private DynamicMessage(MessageDescriptor type, FieldSet fields, UnknownFieldSet unknownFields) + { + this.type = type; + this.fields = fields; + this.unknownFields = unknownFields; + } + + /// + /// Returns a DynamicMessage representing the default instance of the given type. + /// + /// + /// + public static DynamicMessage GetDefaultInstance(MessageDescriptor type) + { + return new DynamicMessage(type, FieldSet.DefaultInstance, UnknownFieldSet.DefaultInstance); + } + + /// + /// Parses a message of the given type from the given stream. + /// + public static DynamicMessage ParseFrom(MessageDescriptor type, ICodedInputStream input) + { + Builder builder = CreateBuilder(type); + Builder dynamicBuilder = builder.MergeFrom(input); + return dynamicBuilder.BuildParsed(); + } + + /// + /// Parse a message of the given type from the given stream and extension registry. + /// + /// + /// + /// + /// + public static DynamicMessage ParseFrom(MessageDescriptor type, ICodedInputStream input, + ExtensionRegistry extensionRegistry) + { + Builder builder = CreateBuilder(type); + Builder dynamicBuilder = builder.MergeFrom(input, extensionRegistry); + return dynamicBuilder.BuildParsed(); + } + + /// + /// Parses a message of the given type from the given stream. + /// + public static DynamicMessage ParseFrom(MessageDescriptor type, Stream input) + { + Builder builder = CreateBuilder(type); + Builder dynamicBuilder = builder.MergeFrom(input); + return dynamicBuilder.BuildParsed(); + } + + /// + /// Parse a message of the given type from the given stream and extension registry. + /// + /// + /// + /// + /// + public static DynamicMessage ParseFrom(MessageDescriptor type, Stream input, ExtensionRegistry extensionRegistry) + { + Builder builder = CreateBuilder(type); + Builder dynamicBuilder = builder.MergeFrom(input, extensionRegistry); + return dynamicBuilder.BuildParsed(); + } + + /// + /// Parse as a message of the given type and return it. + /// + public static DynamicMessage ParseFrom(MessageDescriptor type, ByteString data) + { + Builder builder = CreateBuilder(type); + Builder dynamicBuilder = builder.MergeFrom(data); + return dynamicBuilder.BuildParsed(); + } + + /// + /// Parse as a message of the given type and return it. + /// + public static DynamicMessage ParseFrom(MessageDescriptor type, ByteString data, + ExtensionRegistry extensionRegistry) + { + Builder builder = CreateBuilder(type); + Builder dynamicBuilder = builder.MergeFrom(data, extensionRegistry); + return dynamicBuilder.BuildParsed(); + } + + /// + /// Parse as a message of the given type and return it. + /// + public static DynamicMessage ParseFrom(MessageDescriptor type, byte[] data) + { + Builder builder = CreateBuilder(type); + Builder dynamicBuilder = builder.MergeFrom(data); + return dynamicBuilder.BuildParsed(); + } + + /// + /// Parse as a message of the given type and return it. + /// + public static DynamicMessage ParseFrom(MessageDescriptor type, byte[] data, ExtensionRegistry extensionRegistry) + { + Builder builder = CreateBuilder(type); + Builder dynamicBuilder = builder.MergeFrom(data, extensionRegistry); + return dynamicBuilder.BuildParsed(); + } + + /// + /// Constructs a builder for the given type. + /// + public static Builder CreateBuilder(MessageDescriptor type) + { + return new Builder(type); + } + + /// + /// Constructs a builder for a message of the same type as , + /// and initializes it with the same contents. + /// + /// + /// + public static Builder CreateBuilder(IMessage prototype) + { + return new Builder(prototype.DescriptorForType).MergeFrom(prototype); + } + + // ----------------------------------------------------------------- + // Implementation of IMessage interface. + + public override MessageDescriptor DescriptorForType + { + get { return type; } + } + + public override DynamicMessage DefaultInstanceForType + { + get { return GetDefaultInstance(type); } + } + + public override IDictionary AllFields + { + get { return fields.AllFieldDescriptors; } + } + + public override bool HasField(FieldDescriptor field) + { + VerifyContainingType(field); + return fields.HasField(field); + } + + public override object this[FieldDescriptor field] + { + get + { + VerifyContainingType(field); + object result = fields[field]; + if (result == null) + { + result = GetDefaultInstance(field.MessageType); + } + return result; + } + } + + public override int GetRepeatedFieldCount(FieldDescriptor field) + { + VerifyContainingType(field); + return fields.GetRepeatedFieldCount(field); + } + + public override object this[FieldDescriptor field, int index] + { + get + { + VerifyContainingType(field); + return fields[field, index]; + } + } + + public override UnknownFieldSet UnknownFields + { + get { return unknownFields; } + } + + public bool Initialized + { + get { return fields.IsInitializedWithRespectTo(type.Fields); } + } + + public override void WriteTo(ICodedOutputStream output) + { + fields.WriteTo(output); + if (type.Options.MessageSetWireFormat) + { + unknownFields.WriteAsMessageSetTo(output); + } + else + { + unknownFields.WriteTo(output); + } + } + + public override int SerializedSize + { + get + { + int size = memoizedSize; + if (size != -1) + { + return size; + } + + size = fields.SerializedSize; + if (type.Options.MessageSetWireFormat) + { + size += unknownFields.SerializedSizeAsMessageSet; + } + else + { + size += unknownFields.SerializedSize; + } + + memoizedSize = size; + return size; + } + } + + public override Builder CreateBuilderForType() + { + return new Builder(type); + } + + public override Builder ToBuilder() + { + return CreateBuilderForType().MergeFrom(this); + } + + /// + /// Verifies that the field is a field of this message. + /// + private void VerifyContainingType(FieldDescriptor field) + { + if (field.ContainingType != type) + { + throw new ArgumentException("FieldDescriptor does not match message type."); + } + } + + /// + /// Builder for dynamic messages. Instances are created with DynamicMessage.CreateBuilder. + /// + public sealed partial class Builder : AbstractBuilder + { + private readonly MessageDescriptor type; + private FieldSet fields; + private UnknownFieldSet unknownFields; + + internal Builder(MessageDescriptor type) + { + this.type = type; + this.fields = FieldSet.CreateInstance(); + this.unknownFields = UnknownFieldSet.DefaultInstance; + } + + protected override Builder ThisBuilder + { + get { return this; } + } + + public override Builder Clear() + { + fields.Clear(); + return this; + } + + public override Builder MergeFrom(IMessage other) + { + if (other.DescriptorForType != type) + { + throw new ArgumentException("MergeFrom(IMessage) can only merge messages of the same type."); + } + fields.MergeFrom(other); + MergeUnknownFields(other.UnknownFields); + return this; + } + + public override Builder MergeFrom(DynamicMessage other) + { + IMessage downcast = other; + return MergeFrom(downcast); + } + + public override DynamicMessage Build() + { + if (fields != null && !IsInitialized) + { + throw new UninitializedMessageException(new DynamicMessage(type, fields, unknownFields)); + } + return BuildPartial(); + } + + /// + /// Helper for DynamicMessage.ParseFrom() methods to call. Throws + /// InvalidProtocolBufferException + /// + /// + internal DynamicMessage BuildParsed() + { + if (!IsInitialized) + { + throw new UninitializedMessageException(new DynamicMessage(type, fields, unknownFields)). + AsInvalidProtocolBufferException(); + } + return BuildPartial(); + } + + public override DynamicMessage BuildPartial() + { + if (fields == null) + { + throw new InvalidOperationException("Build() has already been called on this Builder."); + } + fields.MakeImmutable(); + DynamicMessage result = new DynamicMessage(type, fields, unknownFields); + fields = null; + unknownFields = null; + return result; + } + + public override Builder Clone() + { + Builder result = new Builder(type); + result.fields.MergeFrom(fields); + return result; + } + + public override bool IsInitialized + { + get { return fields.IsInitializedWithRespectTo(type.Fields); } + } + + public override Builder MergeFrom(ICodedInputStream input, ExtensionRegistry extensionRegistry) + { + UnknownFieldSet.Builder unknownFieldsBuilder = UnknownFieldSet.CreateBuilder(unknownFields); + unknownFieldsBuilder.MergeFrom(input, extensionRegistry, this); + unknownFields = unknownFieldsBuilder.Build(); + return this; + } + + public override MessageDescriptor DescriptorForType + { + get { return type; } + } + + public override DynamicMessage DefaultInstanceForType + { + get { return GetDefaultInstance(type); } + } + + public override IDictionary AllFields + { + get { return fields.AllFieldDescriptors; } + } + + public override IBuilder CreateBuilderForField(FieldDescriptor field) + { + VerifyContainingType(field); + if (field.MappedType != MappedType.Message) + { + throw new ArgumentException("CreateBuilderForField is only valid for fields with message type."); + } + return new Builder(field.MessageType); + } + + public override bool HasField(FieldDescriptor field) + { + VerifyContainingType(field); + return fields.HasField(field); + } + + public override object this[FieldDescriptor field, int index] + { + get + { + VerifyContainingType(field); + return fields[field, index]; + } + set + { + VerifyContainingType(field); + fields[field, index] = value; + } + } + + public override object this[FieldDescriptor field] + { + get + { + VerifyContainingType(field); + object result = fields[field]; + if (result == null) + { + result = GetDefaultInstance(field.MessageType); + } + return result; + } + set + { + VerifyContainingType(field); + fields[field] = value; + } + } + + public override Builder ClearField(FieldDescriptor field) + { + VerifyContainingType(field); + fields.ClearField(field); + return this; + } + + public override int GetRepeatedFieldCount(FieldDescriptor field) + { + VerifyContainingType(field); + return fields.GetRepeatedFieldCount(field); + } + + public override Builder AddRepeatedField(FieldDescriptor field, object value) + { + VerifyContainingType(field); + fields.AddRepeatedField(field, value); + return this; + } + + public override UnknownFieldSet UnknownFields + { + get { return unknownFields; } + set { unknownFields = value; } + } + + /// + /// Verifies that the field is a field of this message. + /// + /// + private void VerifyContainingType(FieldDescriptor field) + { + if (field.ContainingType != type) + { + throw new ArgumentException("FieldDescriptor does not match message type."); + } + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/EnumLite.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/EnumLite.cs new file mode 100644 index 0000000000..e8af71078d --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/EnumLite.cs @@ -0,0 +1,143 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; + +namespace Google.ProtocolBuffers +{ + /// + ///Interface for an enum value or value descriptor, to be used in FieldSet. + ///The lite library stores enum values directly in FieldSets but the full + ///library stores EnumValueDescriptors in order to better support reflection. + /// + public interface IEnumLite + { + int Number { get; } + string Name { get; } + } + + /// + ///Interface for an object which maps integers to {@link EnumLite}s. + ///{@link Descriptors.EnumDescriptor} implements this interface by mapping + ///numbers to {@link Descriptors.EnumValueDescriptor}s. Additionally, + ///every generated enum type has a static method internalGetValueMap() which + ///returns an implementation of this type that maps numbers to enum values. + /// + public interface IEnumLiteMap : IEnumLiteMap + where T : IEnumLite + { + new T FindValueByNumber(int number); + } + + public interface IEnumLiteMap + { + bool IsValidValue(IEnumLite value); + IEnumLite FindValueByNumber(int number); + IEnumLite FindValueByName(string name); + } + + public class EnumLiteMap : IEnumLiteMap + where TEnum : struct, IComparable, IFormattable + { + private struct EnumValue : IEnumLite + { + private readonly TEnum value; + + public EnumValue(TEnum value) + { + this.value = value; + } + + int IEnumLite.Number + { + get { return Convert.ToInt32(value); } + } + + string IEnumLite.Name + { + get { return value.ToString(); } + } + } + + private readonly SortedList items; + + public EnumLiteMap() + { + items = new SortedList(); +#if SILVERLIGHT + // Silverlight doesn't support Enum.GetValues + // TODO(jonskeet): Validate that this reflection is permitted, e.g. in Windows Phone 7 + foreach (System.Reflection.FieldInfo fi in typeof(TEnum).GetFields(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public)) + { + TEnum evalue = (TEnum) fi.GetValue(null); + items.Add(Convert.ToInt32(evalue), new EnumValue(evalue)); + } +#else + foreach (TEnum evalue in Enum.GetValues(typeof (TEnum))) + { + items.Add(Convert.ToInt32(evalue), new EnumValue(evalue)); + } +#endif + } + + IEnumLite IEnumLiteMap.FindValueByNumber(int number) + { + return FindValueByNumber(number); + } + + public IEnumLite FindValueByNumber(int number) + { + IEnumLite val; + return items.TryGetValue(number, out val) ? val : null; + } + + public IEnumLite FindValueByName(string name) + { + IEnumLite val; + if (Enum.IsDefined(typeof (TEnum), name)) + { + return items.TryGetValue((int) Enum.Parse(typeof (TEnum), name, false), out val) ? val : null; + } + return null; + } + + public bool IsValidValue(IEnumLite value) + { + return items.ContainsKey(value.Number); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/ExtendableBuilder.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/ExtendableBuilder.cs new file mode 100644 index 0000000000..963833328e --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/ExtendableBuilder.cs @@ -0,0 +1,213 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + public abstract partial class ExtendableBuilder : GeneratedBuilder + where TMessage : ExtendableMessage + where TBuilder : GeneratedBuilder, new() + { + protected ExtendableBuilder() + { + } + + /// + /// Checks if a singular extension is present + /// + public bool HasExtension(GeneratedExtensionBase extension) + { + return MessageBeingBuilt.HasExtension(extension); + } + + /// + /// Returns the number of elements in a repeated extension. + /// + public int GetExtensionCount(GeneratedExtensionBase> extension) + { + return MessageBeingBuilt.GetExtensionCount(extension); + } + + /// + /// Returns the value of an extension. + /// + public TExtension GetExtension(GeneratedExtensionBase extension) + { + return MessageBeingBuilt.GetExtension(extension); + } + + /// + /// Returns one element of a repeated extension. + /// + public TExtension GetExtension(GeneratedExtensionBase> extension, int index) + { + return MessageBeingBuilt.GetExtension(extension, index); + } + + /// + /// Sets the value of an extension. + /// + public TBuilder SetExtension(GeneratedExtensionBase extension, TExtension value) + { + ExtendableMessage message = MessageBeingBuilt; + message.VerifyExtensionContainingType(extension); + message.Extensions[extension.Descriptor] = extension.ToReflectionType(value); + return ThisBuilder; + } + + /// + /// Sets the value of one element of a repeated extension. + /// + public TBuilder SetExtension(GeneratedExtensionBase> extension, int index, + TExtension value) + { + ExtendableMessage message = MessageBeingBuilt; + message.VerifyExtensionContainingType(extension); + message.Extensions[extension.Descriptor, index] = extension.SingularToReflectionType(value); + return ThisBuilder; + } + + /// + /// Appends a value to a repeated extension. + /// + public TBuilder AddExtension(GeneratedExtensionBase> extension, TExtension value) + { + ExtendableMessage message = MessageBeingBuilt; + message.VerifyExtensionContainingType(extension); + message.Extensions.AddRepeatedField(extension.Descriptor, extension.SingularToReflectionType(value)); + return ThisBuilder; + } + + /// + /// Clears an extension. + /// + public TBuilder ClearExtension(GeneratedExtensionBase extension) + { + ExtendableMessage message = MessageBeingBuilt; + message.VerifyExtensionContainingType(extension); + message.Extensions.ClearField(extension.Descriptor); + return ThisBuilder; + } + + /// + /// Called by subclasses to parse an unknown field or an extension. + /// + /// true unless the tag is an end-group tag + [CLSCompliant(false)] + protected override bool ParseUnknownField(ICodedInputStream input, UnknownFieldSet.Builder unknownFields, + ExtensionRegistry extensionRegistry, uint tag, string fieldName) + { + return unknownFields.MergeFieldFrom(input, extensionRegistry, this, tag, fieldName); + } + + // --------------------------------------------------------------- + // Reflection + + + public override object this[FieldDescriptor field, int index] + { + set + { + if (field.IsExtension) + { + ExtendableMessage message = MessageBeingBuilt; + message.VerifyContainingType(field); + message.Extensions[field, index] = value; + } + else + { + base[field, index] = value; + } + } + } + + + public override object this[FieldDescriptor field] + { + set + { + if (field.IsExtension) + { + ExtendableMessage message = MessageBeingBuilt; + message.VerifyContainingType(field); + message.Extensions[field] = value; + } + else + { + base[field] = value; + } + } + } + + public override TBuilder ClearField(FieldDescriptor field) + { + if (field.IsExtension) + { + ExtendableMessage message = MessageBeingBuilt; + message.VerifyContainingType(field); + message.Extensions.ClearField(field); + return ThisBuilder; + } + else + { + return base.ClearField(field); + } + } + + public override TBuilder AddRepeatedField(FieldDescriptor field, object value) + { + if (field.IsExtension) + { + ExtendableMessage message = MessageBeingBuilt; + message.VerifyContainingType(field); + message.Extensions.AddRepeatedField(field, value); + return ThisBuilder; + } + else + { + return base.AddRepeatedField(field, value); + } + } + + protected void MergeExtensionFields(ExtendableMessage other) + { + MessageBeingBuilt.Extensions.MergeFrom(other.Extensions); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/ExtendableBuilderLite.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/ExtendableBuilderLite.cs new file mode 100644 index 0000000000..393acfcccf --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/ExtendableBuilderLite.cs @@ -0,0 +1,346 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + public abstract partial class ExtendableBuilderLite : GeneratedBuilderLite + where TMessage : ExtendableMessageLite + where TBuilder : GeneratedBuilderLite + { + protected ExtendableBuilderLite() + { + } + + /// + /// Checks if a singular extension is present + /// + public bool HasExtension(GeneratedExtensionLite extension) + { + return MessageBeingBuilt.HasExtension(extension); + } + + /// + /// Returns the number of elements in a repeated extension. + /// + public int GetExtensionCount(GeneratedExtensionLite> extension) + { + return MessageBeingBuilt.GetExtensionCount(extension); + } + + /// + /// Returns the value of an extension. + /// + public TExtension GetExtension(GeneratedExtensionLite extension) + { + return MessageBeingBuilt.GetExtension(extension); + } + + /// + /// Returns one element of a repeated extension. + /// + public TExtension GetExtension(GeneratedExtensionLite> extension, + int index) + { + return MessageBeingBuilt.GetExtension(extension, index); + } + + /// + /// Sets the value of an extension. + /// + public TBuilder SetExtension(GeneratedExtensionLite extension, + TExtension value) + { + ExtendableMessageLite message = MessageBeingBuilt; + message.VerifyExtensionContainingType(extension); + message.Extensions[extension.Descriptor] = extension.ToReflectionType(value); + return ThisBuilder; + } + + /// + /// Sets the value of one element of a repeated extension. + /// + public TBuilder SetExtension(GeneratedExtensionLite> extension, + int index, TExtension value) + { + ExtendableMessageLite message = MessageBeingBuilt; + message.VerifyExtensionContainingType(extension); + message.Extensions[extension.Descriptor, index] = extension.SingularToReflectionType(value); + return ThisBuilder; + } + + /// + /// Appends a value to a repeated extension. + /// + public TBuilder AddExtension(GeneratedExtensionLite> extension, + TExtension value) + { + ExtendableMessageLite message = MessageBeingBuilt; + message.VerifyExtensionContainingType(extension); + message.Extensions.AddRepeatedField(extension.Descriptor, extension.SingularToReflectionType(value)); + return ThisBuilder; + } + + /// + /// Clears an extension. + /// + public TBuilder ClearExtension(GeneratedExtensionLite extension) + { + ExtendableMessageLite message = MessageBeingBuilt; + message.VerifyExtensionContainingType(extension); + message.Extensions.ClearField(extension.Descriptor); + return ThisBuilder; + } + + /// + /// Called by subclasses to parse an unknown field or an extension. + /// + /// true unless the tag is an end-group tag + [CLSCompliant(false)] + protected override bool ParseUnknownField(ICodedInputStream input, + ExtensionRegistry extensionRegistry, uint tag, string fieldName) + { + FieldSet extensions = MessageBeingBuilt.Extensions; + + WireFormat.WireType wireType = WireFormat.GetTagWireType(tag); + int fieldNumber = WireFormat.GetTagFieldNumber(tag); + IGeneratedExtensionLite extension = extensionRegistry[DefaultInstanceForType, fieldNumber]; + + if (extension == null) //unknown field + { + return input.SkipField(); + } + + IFieldDescriptorLite field = extension.Descriptor; + + + // Unknown field or wrong wire type. Skip. + if (field == null) + { + return input.SkipField(); + } + WireFormat.WireType expectedType = field.IsPacked + ? WireFormat.WireType.LengthDelimited + : WireFormat.GetWireType(field.FieldType); + if (wireType != expectedType) + { + expectedType = WireFormat.GetWireType(field.FieldType); + if (wireType == expectedType) + { + //Allowed as of 2.3, this is unpacked data for a packed array + } + else if (field.IsRepeated && wireType == WireFormat.WireType.LengthDelimited && + (expectedType == WireFormat.WireType.Varint || expectedType == WireFormat.WireType.Fixed32 || + expectedType == WireFormat.WireType.Fixed64)) + { + //Allowed as of 2.3, this is packed data for an unpacked array + } + else + { + return input.SkipField(); + } + } + if (!field.IsRepeated && wireType != WireFormat.GetWireType(field.FieldType)) //invalid wire type + { + return input.SkipField(); + } + + switch (field.FieldType) + { + case FieldType.Group: + case FieldType.Message: + { + if (!field.IsRepeated) + { + IMessageLite message = extensions[extension.Descriptor] as IMessageLite; + IBuilderLite subBuilder = (message ?? extension.MessageDefaultInstance).WeakToBuilder(); + + if (field.FieldType == FieldType.Group) + { + input.ReadGroup(field.FieldNumber, subBuilder, extensionRegistry); + } + else + { + input.ReadMessage(subBuilder, extensionRegistry); + } + + extensions[field] = subBuilder.WeakBuild(); + } + else + { + List list = new List(); + if (field.FieldType == FieldType.Group) + { + input.ReadGroupArray(tag, fieldName, list, extension.MessageDefaultInstance, + extensionRegistry); + } + else + { + input.ReadMessageArray(tag, fieldName, list, extension.MessageDefaultInstance, + extensionRegistry); + } + + foreach (IMessageLite m in list) + { + extensions.AddRepeatedField(field, m); + } + return true; + } + break; + } + case FieldType.Enum: + { + if (!field.IsRepeated) + { + object unknown; + IEnumLite value = null; + if (input.ReadEnum(ref value, out unknown, field.EnumType)) + { + extensions[field] = value; + } + } + else + { + ICollection unknown; + List list = new List(); + input.ReadEnumArray(tag, fieldName, list, out unknown, field.EnumType); + + foreach (IEnumLite en in list) + { + extensions.AddRepeatedField(field, en); + } + } + break; + } + default: + { + if (!field.IsRepeated) + { + object value = null; + if (input.ReadPrimitiveField(field.FieldType, ref value)) + { + extensions[field] = value; + } + } + else + { + List list = new List(); + input.ReadPrimitiveArray(field.FieldType, tag, fieldName, list); + foreach (object oval in list) + { + extensions.AddRepeatedField(field, oval); + } + } + break; + } + } + + return true; + } + + #region Reflection + + public object this[IFieldDescriptorLite field, int index] + { + set + { + if (field.IsExtension) + { + ExtendableMessageLite message = MessageBeingBuilt; + message.Extensions[field, index] = value; + } + else + { + throw new NotSupportedException("Not supported in the lite runtime."); + } + } + } + + public object this[IFieldDescriptorLite field] + { + set + { + if (field.IsExtension) + { + ExtendableMessageLite message = MessageBeingBuilt; + message.Extensions[field] = value; + } + else + { + throw new NotSupportedException("Not supported in the lite runtime."); + } + } + } + + public TBuilder ClearField(IFieldDescriptorLite field) + { + if (field.IsExtension) + { + ExtendableMessageLite message = MessageBeingBuilt; + message.Extensions.ClearField(field); + return ThisBuilder; + } + else + { + throw new NotSupportedException("Not supported in the lite runtime."); + } + } + + public TBuilder AddRepeatedField(IFieldDescriptorLite field, object value) + { + if (field.IsExtension) + { + ExtendableMessageLite message = MessageBeingBuilt; + message.Extensions.AddRepeatedField(field, value); + return ThisBuilder; + } + else + { + throw new NotSupportedException("Not supported in the lite runtime."); + } + } + + protected void MergeExtensionFields(ExtendableMessageLite other) + { + MessageBeingBuilt.Extensions.MergeFrom(other.Extensions); + } + + #endregion + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/ExtendableMessage.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/ExtendableMessage.cs new file mode 100644 index 0000000000..32bfd01fa1 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/ExtendableMessage.cs @@ -0,0 +1,274 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using Google.ProtocolBuffers.Collections; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + public abstract partial class ExtendableMessage : GeneratedMessage + where TMessage : GeneratedMessage + where TBuilder : GeneratedBuilder, new() + { + protected ExtendableMessage() + { + } + + private readonly FieldSet extensions = FieldSet.CreateInstance(); + + /// + /// Access for the builder. + /// + internal FieldSet Extensions + { + get { return extensions; } + } + + /// + /// Checks if a singular extension is present. + /// + public bool HasExtension(GeneratedExtensionBase extension) + { + return extensions.HasField(extension.Descriptor); + } + + /// + /// Returns the number of elements in a repeated extension. + /// + public int GetExtensionCount(GeneratedExtensionBase> extension) + { + return extensions.GetRepeatedFieldCount(extension.Descriptor); + } + + /// + /// Returns the value of an extension. + /// + public TExtension GetExtension(GeneratedExtensionBase extension) + { + object value = extensions[extension.Descriptor]; + if (value == null) + { + return (TExtension) extension.MessageDefaultInstance; + } + else + { + return (TExtension) extension.FromReflectionType(value); + } + } + + /// + /// Returns one element of a repeated extension. + /// + public TExtension GetExtension(GeneratedExtensionBase> extension, int index) + { + return (TExtension) extension.SingularFromReflectionType(extensions[extension.Descriptor, index]); + } + + /// + /// Called to check if all extensions are initialized. + /// + protected bool ExtensionsAreInitialized + { + get { return extensions.IsInitialized; } + } + + public override bool IsInitialized + { + get { return base.IsInitialized && ExtensionsAreInitialized; } + } + + #region Reflection + + public override IDictionary AllFields + { + get + { + IDictionary result = GetMutableFieldMap(); + foreach (KeyValuePair entry in extensions.AllFields) + { + result[(FieldDescriptor) entry.Key] = entry.Value; + } + return Dictionaries.AsReadOnly(result); + } + } + + public override bool HasField(FieldDescriptor field) + { + if (field.IsExtension) + { + VerifyContainingType(field); + return extensions.HasField(field); + } + else + { + return base.HasField(field); + } + } + + public override object this[FieldDescriptor field] + { + get + { + if (field.IsExtension) + { + VerifyContainingType(field); + object value = extensions[field]; + if (value == null) + { + // Lacking an ExtensionRegistry, we have no way to determine the + // extension's real type, so we return a DynamicMessage. + // TODO(jonskeet): Work out what this means + return DynamicMessage.GetDefaultInstance(field.MessageType); + } + else + { + return value; + } + } + else + { + return base[field]; + } + } + } + + public override int GetRepeatedFieldCount(FieldDescriptor field) + { + if (field.IsExtension) + { + VerifyContainingType(field); + return extensions.GetRepeatedFieldCount(field); + } + else + { + return base.GetRepeatedFieldCount(field); + } + } + + public override object this[FieldDescriptor field, int index] + { + get + { + if (field.IsExtension) + { + VerifyContainingType(field); + return extensions[field, index]; + } + else + { + return base[field, index]; + } + } + } + + internal void VerifyContainingType(FieldDescriptor field) + { + if (field.ContainingType != DescriptorForType) + { + throw new ArgumentException("FieldDescriptor does not match message type."); + } + } + + #endregion + + /// + /// Used by subclasses to serialize extensions. Extension ranges may be + /// interleaves with field numbers, but we must write them in canonical + /// (sorted by field number) order. This class helps us to write individual + /// ranges of extensions at once. + /// + /// TODO(jonskeet): See if we can improve this in terms of readability. + /// + protected class ExtensionWriter + { + private readonly IEnumerator> iterator; + private readonly FieldSet extensions; + private KeyValuePair? next = null; + + internal ExtensionWriter(ExtendableMessage message) + { + extensions = message.extensions; + iterator = message.extensions.GetEnumerator(); + if (iterator.MoveNext()) + { + next = iterator.Current; + } + } + + public void WriteUntil(int end, ICodedOutputStream output) + { + while (next != null && next.Value.Key.FieldNumber < end) + { + extensions.WriteField(next.Value.Key, next.Value.Value, output); + if (iterator.MoveNext()) + { + next = iterator.Current; + } + else + { + next = null; + } + } + } + } + + protected ExtensionWriter CreateExtensionWriter(ExtendableMessage message) + { + return new ExtensionWriter(message); + } + + /// + /// Called by subclasses to compute the size of extensions. + /// + protected int ExtensionsSerializedSize + { + get { return extensions.SerializedSize; } + } + + internal void VerifyExtensionContainingType(GeneratedExtensionBase extension) + { + if (extension.Descriptor.ContainingType != DescriptorForType) + { + // This can only happen if someone uses unchecked operations. + throw new ArgumentException("Extension is for type \"" + extension.Descriptor.ContainingType.FullName + + "\" which does not match message type \"" + DescriptorForType.FullName + + "\"."); + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/ExtendableMessageLite.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/ExtendableMessageLite.cs new file mode 100644 index 0000000000..ff7e99240f --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/ExtendableMessageLite.cs @@ -0,0 +1,221 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using Google.ProtocolBuffers.Collections; + +namespace Google.ProtocolBuffers +{ + public abstract partial class ExtendableMessageLite : GeneratedMessageLite + where TMessage : GeneratedMessageLite + where TBuilder : GeneratedBuilderLite + { + protected ExtendableMessageLite() + { + } + + private readonly FieldSet extensions = FieldSet.CreateInstance(); + + /// + /// Access for the builder. + /// + internal FieldSet Extensions + { + get { return extensions; } + } + + public override bool Equals(object obj) + { + ExtendableMessageLite other = obj as ExtendableMessageLite; + return !ReferenceEquals(null, other) && + Dictionaries.Equals(extensions.AllFields, other.extensions.AllFields); + } + + public override int GetHashCode() + { + return Dictionaries.GetHashCode(extensions.AllFields); + } + + /// + /// writes the extensions to the text stream + /// + public override void PrintTo(TextWriter writer) + { + foreach (KeyValuePair entry in extensions.AllFields) + { + string fn = string.Format("[{0}]", entry.Key.FullName); + if (entry.Key.IsRepeated) + { + foreach (object o in ((IEnumerable) entry.Value)) + { + PrintField(fn, true, o, writer); + } + } + else + { + PrintField(fn, true, entry.Value, writer); + } + } + } + + /// + /// Checks if a singular extension is present. + /// + public bool HasExtension(GeneratedExtensionLite extension) + { + VerifyExtensionContainingType(extension); + return extensions.HasField(extension.Descriptor); + } + + /// + /// Returns the number of elements in a repeated extension. + /// + public int GetExtensionCount(GeneratedExtensionLite> extension) + { + VerifyExtensionContainingType(extension); + return extensions.GetRepeatedFieldCount(extension.Descriptor); + } + + /// + /// Returns the value of an extension. + /// + public TExtension GetExtension(GeneratedExtensionLite extension) + { + VerifyExtensionContainingType(extension); + object value = extensions[extension.Descriptor]; + if (value == null) + { + return extension.DefaultValue; + } + else + { + return (TExtension) extension.FromReflectionType(value); + } + } + + /// + /// Returns one element of a repeated extension. + /// + public TExtension GetExtension(GeneratedExtensionLite> extension, + int index) + { + VerifyExtensionContainingType(extension); + return (TExtension) extension.SingularFromReflectionType(extensions[extension.Descriptor, index]); + } + + /// + /// Called to check if all extensions are initialized. + /// + protected bool ExtensionsAreInitialized + { + get { return extensions.IsInitialized; } + } + + public override bool IsInitialized + { + get { return ExtensionsAreInitialized; } + } + + /// + /// Used by subclasses to serialize extensions. Extension ranges may be + /// interleaves with field numbers, but we must write them in canonical + /// (sorted by field number) order. This class helps us to write individual + /// ranges of extensions at once. + /// + /// TODO(jonskeet): See if we can improve this in terms of readability. + /// + protected class ExtensionWriter + { + private readonly IEnumerator> iterator; + private readonly FieldSet extensions; + private KeyValuePair? next = null; + + internal ExtensionWriter(ExtendableMessageLite message) + { + extensions = message.extensions; + iterator = message.extensions.GetEnumerator(); + if (iterator.MoveNext()) + { + next = iterator.Current; + } + } + + public void WriteUntil(int end, ICodedOutputStream output) + { + while (next != null && next.Value.Key.FieldNumber < end) + { + extensions.WriteField(next.Value.Key, next.Value.Value, output); + if (iterator.MoveNext()) + { + next = iterator.Current; + } + else + { + next = null; + } + } + } + } + + protected ExtensionWriter CreateExtensionWriter(ExtendableMessageLite message) + { + return new ExtensionWriter(message); + } + + /// + /// Called by subclasses to compute the size of extensions. + /// + protected int ExtensionsSerializedSize + { + get { return extensions.SerializedSize; } + } + + internal void VerifyExtensionContainingType(GeneratedExtensionLite extension) + { + if (!ReferenceEquals(extension.ContainingTypeDefaultInstance, DefaultInstanceForType)) + { + // This can only happen if someone uses unchecked operations. + throw new ArgumentException( + String.Format("Extension is for type \"{0}\" which does not match message type \"{1}\".", + extension.ContainingTypeDefaultInstance, DefaultInstanceForType + )); + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/ExtensionInfo.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/ExtensionInfo.cs new file mode 100644 index 0000000000..b34854def0 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/ExtensionInfo.cs @@ -0,0 +1,88 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + public sealed class ExtensionInfo : IGeneratedExtensionLite + { + /// + /// The extension's descriptor + /// + public FieldDescriptor Descriptor { get; private set; } + + IFieldDescriptorLite IGeneratedExtensionLite.Descriptor + { + get { return Descriptor; } + } + + /// + /// A default instance of the extensions's type, if it has a message type, + /// or null otherwise. + /// + public IMessageLite DefaultInstance { get; private set; } + + internal ExtensionInfo(FieldDescriptor descriptor) : this(descriptor, null) + { + } + + internal ExtensionInfo(FieldDescriptor descriptor, IMessageLite defaultInstance) + { + Descriptor = descriptor; + DefaultInstance = defaultInstance; + } + + #region IGeneratedExtensionLite Members + + int IGeneratedExtensionLite.Number + { + get { return Descriptor.FieldNumber; } + } + + object IGeneratedExtensionLite.ContainingType + { + get { return Descriptor.ContainingType; } + } + + IMessageLite IGeneratedExtensionLite.MessageDefaultInstance + { + get { return DefaultInstance; } + } + + #endregion + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/ExtensionRegistry.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/ExtensionRegistry.cs new file mode 100644 index 0000000000..3787f58387 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/ExtensionRegistry.cs @@ -0,0 +1,215 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + /// + /// A table of known extensions, searchable by name or field number. When + /// parsing a protocol message that might have extensions, you must provide + /// an in which you have registered any extensions + /// that you want to be able to parse. Otherwise, those extensions will just + /// be treated like unknown fields. + /// + /// + /// For example, if you had the .proto file: + /// + /// option java_class = "MyProto"; + /// + /// message Foo { + /// extensions 1000 to max; + /// } + /// + /// extend Foo { + /// optional int32 bar; + /// } + /// + /// + /// Then you might write code like: + /// + /// + /// ExtensionRegistry registry = ExtensionRegistry.CreateInstance(); + /// registry.Add(MyProto.Bar); + /// MyProto.Foo message = MyProto.Foo.ParseFrom(input, registry); + /// + /// + /// + /// + /// You might wonder why this is necessary. Two alternatives might come to + /// mind. First, you might imagine a system where generated extensions are + /// automatically registered when their containing classes are loaded. This + /// is a popular technique, but is bad design; among other things, it creates a + /// situation where behavior can change depending on what classes happen to be + /// loaded. It also introduces a security vulnerability, because an + /// unprivileged class could cause its code to be called unexpectedly from a + /// privileged class by registering itself as an extension of the right type. + /// + /// Another option you might consider is lazy parsing: do not parse an + /// extension until it is first requested, at which point the caller must + /// provide a type to use. This introduces a different set of problems. First, + /// it would require a mutex lock any time an extension was accessed, which + /// would be slow. Second, corrupt data would not be detected until first + /// access, at which point it would be much harder to deal with it. Third, it + /// could violate the expectation that message objects are immutable, since the + /// type provided could be any arbitrary message class. An unprivileged user + /// could take advantage of this to inject a mutable object into a message + /// belonging to privileged code and create mischief. + /// + public sealed partial class ExtensionRegistry + { + /// + /// Finds an extension by fully-qualified field name, in the + /// proto namespace, i.e. result.Descriptor.FullName will match + /// if a match is found. A null + /// reference is returned if the extension can't be found. + /// + [Obsolete("Please use the FindByName method instead.", true)] + public ExtensionInfo this[string fullName] + { + get + { + foreach (IGeneratedExtensionLite ext in extensionsByNumber.Values) + { + if (StringComparer.Ordinal.Equals(ext.Descriptor.FullName, fullName)) + { + return ext as ExtensionInfo; + } + } + return null; + } + } + +#if !LITE + /// + /// Finds an extension by containing type and field number. + /// A null reference is returned if the extension can't be found. + /// + public ExtensionInfo this[MessageDescriptor containingType, int fieldNumber] + { + get + { + IGeneratedExtensionLite ret; + extensionsByNumber.TryGetValue(new ExtensionIntPair(containingType, fieldNumber), out ret); + return ret as ExtensionInfo; + } + } + + public ExtensionInfo FindByName(MessageDescriptor containingType, string fieldName) + { + return FindExtensionByName(containingType, fieldName) as ExtensionInfo; + } +#endif + + /// + /// Add an extension from a generated file to the registry. + /// + public void Add(GeneratedExtensionBase extension) + { + if (extension.Descriptor.MappedType == MappedType.Message) + { + Add(new ExtensionInfo(extension.Descriptor, extension.MessageDefaultInstance)); + } + else + { + Add(new ExtensionInfo(extension.Descriptor, null)); + } + } + + /// + /// Adds a non-message-type extension to the registry by descriptor. + /// + /// + public void Add(FieldDescriptor type) + { + if (type.MappedType == MappedType.Message) + { + throw new ArgumentException("ExtensionRegistry.Add() must be provided a default instance " + + "when adding an embedded message extension."); + } + Add(new ExtensionInfo(type, null)); + } + + /// + /// Adds a message-type-extension to the registry by descriptor. + /// + /// + /// + public void Add(FieldDescriptor type, IMessage defaultInstance) + { + if (type.MappedType != MappedType.Message) + { + throw new ArgumentException("ExtensionRegistry.Add() provided a default instance for a " + + "non-message extension."); + } + Add(new ExtensionInfo(type, defaultInstance)); + } + + private void Add(ExtensionInfo extension) + { + if (readOnly) + { + throw new InvalidOperationException("Cannot add entries to a read-only extension registry"); + } + if (!extension.Descriptor.IsExtension) + { + throw new ArgumentException("ExtensionRegistry.add() was given a FieldDescriptor for a " + + "regular (non-extension) field."); + } + + IGeneratedExtensionLite liteExtension = extension; + Add(liteExtension); + + FieldDescriptor field = extension.Descriptor; + if (field.ContainingType.Options.MessageSetWireFormat + && field.FieldType == FieldType.Message + && field.IsOptional + && field.ExtensionScope == field.MessageType) + { + // This is an extension of a MessageSet type defined within the extension + // type's own scope. For backwards-compatibility, allow it to be looked + // up by type name. + Dictionary map; + if (extensionsByName.TryGetValue(liteExtension.ContainingType, out map)) + { + map[field.MessageType.FullName] = extension; + } + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/ExtensionRegistryLite.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/ExtensionRegistryLite.cs new file mode 100644 index 0000000000..166d4f54c7 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/ExtensionRegistryLite.cs @@ -0,0 +1,220 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using ExtensionByNameMap = System.Collections.Generic.Dictionary>; +using ExtensionByIdMap = System.Collections.Generic.Dictionary; + +namespace Google.ProtocolBuffers +{ + /// + /// A table of known extensions, searchable by name or field number. When + /// parsing a protocol message that might have extensions, you must provide + /// an in which you have registered any extensions + /// that you want to be able to parse. Otherwise, those extensions will just + /// be treated like unknown fields. + /// + /// + /// For example, if you had the .proto file: + /// + /// option java_class = "MyProto"; + /// + /// message Foo { + /// extensions 1000 to max; + /// } + /// + /// extend Foo { + /// optional int32 bar; + /// } + /// + /// + /// Then you might write code like: + /// + /// + /// extensionRegistry registry = extensionRegistry.CreateInstance(); + /// registry.Add(MyProto.Bar); + /// MyProto.Foo message = MyProto.Foo.ParseFrom(input, registry); + /// + /// + /// + /// + /// You might wonder why this is necessary. Two alternatives might come to + /// mind. First, you might imagine a system where generated extensions are + /// automatically registered when their containing classes are loaded. This + /// is a popular technique, but is bad design; among other things, it creates a + /// situation where behavior can change depending on what classes happen to be + /// loaded. It also introduces a security vulnerability, because an + /// unprivileged class could cause its code to be called unexpectedly from a + /// privileged class by registering itself as an extension of the right type. + /// + /// Another option you might consider is lazy parsing: do not parse an + /// extension until it is first requested, at which point the caller must + /// provide a type to use. This introduces a different set of problems. First, + /// it would require a mutex lock any time an extension was accessed, which + /// would be slow. Second, corrupt data would not be detected until first + /// access, at which point it would be much harder to deal with it. Third, it + /// could violate the expectation that message objects are immutable, since the + /// type provided could be any arbitrary message class. An unprivileged user + /// could take advantage of this to inject a mutable object into a message + /// belonging to privileged code and create mischief. + /// + public sealed partial class ExtensionRegistry + { + private static readonly ExtensionRegistry empty = new ExtensionRegistry( + new ExtensionByNameMap(), + new ExtensionByIdMap(), + true); + + private readonly ExtensionByNameMap extensionsByName; + private readonly ExtensionByIdMap extensionsByNumber; + + private readonly bool readOnly; + + private ExtensionRegistry(ExtensionByNameMap byName, ExtensionByIdMap byNumber, bool readOnly) + { + this.extensionsByName = byName; + this.extensionsByNumber = byNumber; + this.readOnly = readOnly; + } + + /// + /// Construct a new, empty instance. + /// + public static ExtensionRegistry CreateInstance() + { + return new ExtensionRegistry(new ExtensionByNameMap(), new ExtensionByIdMap(), false); + } + + public ExtensionRegistry AsReadOnly() + { + return new ExtensionRegistry(extensionsByName, extensionsByNumber, true); + } + + /// + /// Get the unmodifiable singleton empty instance. + /// + public static ExtensionRegistry Empty + { + get { return empty; } + } + + /// + /// Finds an extension by containing type and field number. + /// A null reference is returned if the extension can't be found. + /// + public IGeneratedExtensionLite this[IMessageLite containingType, int fieldNumber] + { + get + { + IGeneratedExtensionLite ret; + extensionsByNumber.TryGetValue(new ExtensionIntPair(containingType, fieldNumber), out ret); + return ret; + } + } + + public IGeneratedExtensionLite FindByName(IMessageLite defaultInstanceOfType, string fieldName) + { + return FindExtensionByName(defaultInstanceOfType, fieldName); + } + + private IGeneratedExtensionLite FindExtensionByName(object forwhat, string fieldName) + { + IGeneratedExtensionLite extension = null; + Dictionary map; + if (extensionsByName.TryGetValue(forwhat, out map) && map.TryGetValue(fieldName, out extension)) + { + return extension; + } + return null; + } + + /// + /// Add an extension from a generated file to the registry. + /// + public void Add(IGeneratedExtensionLite extension) + { + if (readOnly) + { + throw new InvalidOperationException("Cannot add entries to a read-only extension registry"); + } + extensionsByNumber.Add(new ExtensionIntPair(extension.ContainingType, extension.Number), extension); + + Dictionary map; + if (!extensionsByName.TryGetValue(extension.ContainingType, out map)) + { + extensionsByName.Add(extension.ContainingType, map = new Dictionary()); + } + map[extension.Descriptor.Name] = extension; + map[extension.Descriptor.FullName] = extension; + } + + /// + /// Nested type just used to represent a pair of MessageDescriptor and int, as + /// the key into the "by number" map. + /// + internal struct ExtensionIntPair : IEquatable + { + private readonly object msgType; + private readonly int number; + + internal ExtensionIntPair(object msgType, int number) + { + this.msgType = msgType; + this.number = number; + } + + public override int GetHashCode() + { + return msgType.GetHashCode()*((1 << 16) - 1) + number; + } + + public override bool Equals(object obj) + { + if (!(obj is ExtensionIntPair)) + { + return false; + } + return Equals((ExtensionIntPair) obj); + } + + public bool Equals(ExtensionIntPair other) + { + return msgType.Equals(other.msgType) && number == other.number; + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/FieldAccessorTable.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/FieldAccessorTable.cs new file mode 100644 index 0000000000..e88fc1ac85 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/FieldAccessorTable.cs @@ -0,0 +1,126 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.FieldAccess +{ + /// + /// Provides access to fields in generated messages via reflection. + /// This type is public to allow it to be used by generated messages, which + /// create appropriate instances in the .proto file description class. + /// TODO(jonskeet): See if we can hide it somewhere... + /// + public sealed class FieldAccessorTable + where TMessage : IMessage + where TBuilder : IBuilder + { + private readonly IFieldAccessor[] accessors; + + private readonly MessageDescriptor descriptor; + + public MessageDescriptor Descriptor + { + get { return descriptor; } + } + + /// + /// Constructs a FieldAccessorTable for a particular message class. + /// Only one FieldAccessorTable should be constructed per class. + /// The property names should all actually correspond with the field descriptor's + /// CSharpOptions.PropertyName property, but bootstrapping issues currently + /// prevent us from using that. This may be addressed at a future time, in which case + /// we can keep this constructor for backwards compatibility, just ignoring the parameter. + /// TODO(jonskeet): Make it so. + /// + /// The type's descriptor + /// The Pascal-case names of all the field-based properties in the message. + public FieldAccessorTable(MessageDescriptor descriptor, String[] propertyNames) + { + this.descriptor = descriptor; + accessors = new IFieldAccessor[descriptor.Fields.Count]; + for (int i = 0; i < accessors.Length; i++) + { + accessors[i] = CreateAccessor(descriptor.Fields[i], propertyNames[i]); + } + } + + /// + /// Creates an accessor for a single field + /// + private static IFieldAccessor CreateAccessor(FieldDescriptor field, string name) + { + if (field.IsRepeated) + { + switch (field.MappedType) + { + case MappedType.Message: + return new RepeatedMessageAccessor(name); + case MappedType.Enum: + return new RepeatedEnumAccessor(field, name); + default: + return new RepeatedPrimitiveAccessor(name); + } + } + else + { + switch (field.MappedType) + { + case MappedType.Message: + return new SingleMessageAccessor(name); + case MappedType.Enum: + return new SingleEnumAccessor(field, name); + default: + return new SinglePrimitiveAccessor(name); + } + } + } + + internal IFieldAccessor this[FieldDescriptor field] + { + get + { + if (field.ContainingType != descriptor) + { + throw new ArgumentException("FieldDescriptor does not match message type."); + } + else if (field.IsExtension) + { + // If this type had extensions, it would subclass ExtendableMessage, + // which overrides the reflection interface to handle extensions. + throw new ArgumentException("This type does not have extensions."); + } + return accessors[field.Index]; + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/IFieldAccessor.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/IFieldAccessor.cs new file mode 100644 index 0000000000..c8835b81ba --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/IFieldAccessor.cs @@ -0,0 +1,95 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +namespace Google.ProtocolBuffers.FieldAccess +{ + /// + /// Allows fields to be reflectively accessed in a smart manner. + /// The property descriptors for each field are created once and then cached. + /// In addition, this interface holds knowledge of repeated fields, builders etc. + /// + internal interface IFieldAccessor + where TMessage : IMessage + where TBuilder : IBuilder + { + /// + /// Indicates whether the specified message contains the field. + /// + bool Has(TMessage message); + + /// + /// Gets the count of the repeated field in the specified message. + /// + int GetRepeatedCount(TMessage message); + + /// + /// Clears the field in the specified builder. + /// + /// + void Clear(TBuilder builder); + + /// + /// Creates a builder for the type of this field (which must be a message field). + /// + IBuilder CreateBuilder(); + + /// + /// Accessor for single fields + /// + object GetValue(TMessage message); + + /// + /// Mutator for single fields + /// + void SetValue(TBuilder builder, object value); + + /// + /// Accessor for repeated fields + /// + object GetRepeatedValue(TMessage message, int index); + + /// + /// Mutator for repeated fields + /// + void SetRepeated(TBuilder builder, int index, object value); + + /// + /// Adds the specified value to the field in the given builder. + /// + void AddRepeated(TBuilder builder, object value); + + /// + /// Returns a read-only wrapper around the value of a repeated field. + /// + object GetRepeatedWrapper(TBuilder builder); + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/ReflectionUtil.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/ReflectionUtil.cs new file mode 100644 index 0000000000..7abafbd04e --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/ReflectionUtil.cs @@ -0,0 +1,136 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; +using System.Reflection; + +namespace Google.ProtocolBuffers.FieldAccess +{ + /// + /// The methods in this class are somewhat evil, and should not be tampered with lightly. + /// Basically they allow the creation of relatively weakly typed delegates from MethodInfos + /// which are more strongly typed. They do this by creating an appropriate strongly typed + /// delegate from the MethodInfo, and then calling that within an anonymous method. + /// Mind-bending stuff (at least to your humble narrator) but the resulting delegates are + /// very fast compared with calling Invoke later on. + /// + internal static class ReflectionUtil + { + /// + /// Creates a delegate which will execute the given method and then return + /// the result as an object. + /// + public static Func CreateUpcastDelegate(MethodInfo method) + { + // The tricky bit is invoking CreateCreateUpcastDelegateImpl with the right type parameters + MethodInfo openImpl = typeof (ReflectionUtil).GetMethod("CreateUpcastDelegateImpl"); + MethodInfo closedImpl = openImpl.MakeGenericMethod(typeof (T), method.ReturnType); + return (Func) closedImpl.Invoke(null, new object[] {method}); + } + + /// + /// Method used solely for implementing CreateUpcastDelegate. Public to avoid trust issues + /// in low-trust scenarios, e.g. Silverlight. + /// TODO(jonskeet): Check any of this actually works in Silverlight... + /// + public static Func CreateUpcastDelegateImpl(MethodInfo method) + { + // Convert the reflection call into an open delegate, i.e. instead of calling x.Method() + // we'll call getter(x). + Func getter = + (Func) Delegate.CreateDelegate(typeof (Func), null, method); + + // Implicit upcast to object (within the delegate) + return delegate(TSource source) { return getter(source); }; + } + + /// + /// Creates a delegate which will execute the given method after casting the parameter + /// down from object to the required parameter type. + /// + public static Action CreateDowncastDelegate(MethodInfo method) + { + MethodInfo openImpl = typeof (ReflectionUtil).GetMethod("CreateDowncastDelegateImpl"); + MethodInfo closedImpl = openImpl.MakeGenericMethod(typeof (T), method.GetParameters()[0].ParameterType); + return (Action) closedImpl.Invoke(null, new object[] {method}); + } + + public static Action CreateDowncastDelegateImpl(MethodInfo method) + { + // Convert the reflection call into an open delegate, i.e. instead of calling x.Method(y) we'll + // call Method(x, y) + Action call = + (Action) Delegate.CreateDelegate(typeof (Action), null, method); + + return delegate(TSource source, object parameter) { call(source, (TParam) parameter); }; + } + + /// + /// Creates a delegate which will execute the given method after casting the parameter + /// down from object to the required parameter type. + /// + public static Action CreateDowncastDelegateIgnoringReturn(MethodInfo method) + { + MethodInfo openImpl = typeof (ReflectionUtil).GetMethod("CreateDowncastDelegateIgnoringReturnImpl"); + MethodInfo closedImpl = openImpl.MakeGenericMethod(typeof (T), method.GetParameters()[0].ParameterType, + method.ReturnType); + return (Action) closedImpl.Invoke(null, new object[] {method}); + } + + public static Action CreateDowncastDelegateIgnoringReturnImpl( + MethodInfo method) + { + // Convert the reflection call into an open delegate, i.e. instead of calling x.Method(y) we'll + // call Method(x, y) + Func call = (Func) + Delegate.CreateDelegate(typeof (Func), null, + method); + + return delegate(TSource source, object parameter) { call(source, (TParam) parameter); }; + } + + /// + /// Creates a delegate which will execute the given static method and cast the result up to IBuilder. + /// + public static Func CreateStaticUpcastDelegate(MethodInfo method) + { + MethodInfo openImpl = typeof (ReflectionUtil).GetMethod("CreateStaticUpcastDelegateImpl"); + MethodInfo closedImpl = openImpl.MakeGenericMethod(method.ReturnType); + return (Func) closedImpl.Invoke(null, new object[] {method}); + } + + public static Func CreateStaticUpcastDelegateImpl(MethodInfo method) + { + Func call = (Func) Delegate.CreateDelegate(typeof (Func), null, method); + return delegate { return (IBuilder) call(); }; + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/RepeatedEnumAccessor.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/RepeatedEnumAccessor.cs new file mode 100644 index 0000000000..41e2287204 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/RepeatedEnumAccessor.cs @@ -0,0 +1,83 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System.Collections; +using System.Collections.Generic; +using Google.ProtocolBuffers.Collections; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.FieldAccess +{ + /// + /// Accessor for a repeated enum field. + /// + internal sealed class RepeatedEnumAccessor : RepeatedPrimitiveAccessor + where TMessage : IMessage + where TBuilder : IBuilder + { + private readonly EnumDescriptor enumDescriptor; + + internal RepeatedEnumAccessor(FieldDescriptor field, string name) : base(name) + { + enumDescriptor = field.EnumType; + } + + public override object GetValue(TMessage message) + { + List ret = new List(); + foreach (int rawValue in (IEnumerable) base.GetValue(message)) + { + ret.Add(enumDescriptor.FindValueByNumber(rawValue)); + } + return Lists.AsReadOnly(ret); + } + + public override object GetRepeatedValue(TMessage message, int index) + { + // Note: This relies on the fact that the CLR allows unboxing from an enum to + // its underlying value + int rawValue = (int) base.GetRepeatedValue(message, index); + return enumDescriptor.FindValueByNumber(rawValue); + } + + public override void AddRepeated(TBuilder builder, object value) + { + ThrowHelper.ThrowIfNull(value, "value"); + base.AddRepeated(builder, ((EnumValueDescriptor) value).Number); + } + + public override void SetRepeated(TBuilder builder, int index, object value) + { + ThrowHelper.ThrowIfNull(value, "value"); + base.SetRepeated(builder, index, ((EnumValueDescriptor) value).Number); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/RepeatedMessageAccessor.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/RepeatedMessageAccessor.cs new file mode 100644 index 0000000000..244d69b161 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/RepeatedMessageAccessor.cs @@ -0,0 +1,97 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; +using System.Reflection; + +namespace Google.ProtocolBuffers.FieldAccess +{ + /// + /// Accessor for a repeated message field. + /// + /// TODO(jonskeet): Try to extract the commonality between this and SingleMessageAccessor. + /// We almost want multiple inheritance... + /// + internal sealed class RepeatedMessageAccessor : RepeatedPrimitiveAccessor + where TMessage : IMessage + where TBuilder : IBuilder + { + /// + /// The static method to create a builder for the property type. For example, + /// in a message type "Foo", a field called "bar" might be of type "Baz". This + /// method is Baz.CreateBuilder. + /// + private readonly Func createBuilderDelegate; + + internal RepeatedMessageAccessor(string name) : base(name) + { + MethodInfo createBuilderMethod = ClrType.GetMethod("CreateBuilder", EmptyTypes); + if (createBuilderMethod == null) + { + throw new ArgumentException("No public static CreateBuilder method declared in " + ClrType.Name); + } + createBuilderDelegate = ReflectionUtil.CreateStaticUpcastDelegate(createBuilderMethod); + } + + /// + /// Creates a message of the appropriate CLR type from the given value, + /// which may already be of the right type or may be a dynamic message. + /// + private object CoerceType(object value) + { + ThrowHelper.ThrowIfNull(value, "value"); + // If it's already of the right type, we're done + if (ClrType.IsInstanceOfType(value)) + { + return value; + } + + // No... so let's create a builder of the right type, and merge the value in. + IMessageLite message = (IMessageLite) value; + return CreateBuilder().WeakMergeFrom(message).WeakBuild(); + } + + public override void SetRepeated(TBuilder builder, int index, object value) + { + base.SetRepeated(builder, index, CoerceType(value)); + } + + public override IBuilder CreateBuilder() + { + return createBuilderDelegate(); + } + + public override void AddRepeated(TBuilder builder, object value) + { + base.AddRepeated(builder, CoerceType(value)); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/RepeatedPrimitiveAccessor.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/RepeatedPrimitiveAccessor.cs new file mode 100644 index 0000000000..2ec5319606 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/RepeatedPrimitiveAccessor.cs @@ -0,0 +1,160 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; +using System.Collections; +using System.Reflection; + +namespace Google.ProtocolBuffers.FieldAccess +{ + /// + /// Accessor for a repeated field of type int, ByteString etc. + /// + internal class RepeatedPrimitiveAccessor : IFieldAccessor + where TMessage : IMessage + where TBuilder : IBuilder + { + private readonly Type clrType; + private readonly Func getValueDelegate; + private readonly Func clearDelegate; + private readonly Action addValueDelegate; + private readonly Func getRepeatedWrapperDelegate; + private readonly Func countDelegate; + private readonly MethodInfo getElementMethod; + private readonly MethodInfo setElementMethod; + + // Replacement for Type.EmptyTypes which apparently isn't available on the compact framework + internal static readonly Type[] EmptyTypes = new Type[0]; + + /// + /// The CLR type of the field (int, the enum type, ByteString, the message etc). + /// This is taken from the return type of the method used to retrieve a single + /// value. + /// + protected Type ClrType + { + get { return clrType; } + } + + internal RepeatedPrimitiveAccessor(string name) + { + PropertyInfo messageProperty = typeof (TMessage).GetProperty(name + "List"); + PropertyInfo builderProperty = typeof (TBuilder).GetProperty(name + "List"); + PropertyInfo countProperty = typeof (TMessage).GetProperty(name + "Count"); + MethodInfo clearMethod = typeof (TBuilder).GetMethod("Clear" + name, EmptyTypes); + getElementMethod = typeof (TMessage).GetMethod("Get" + name, new Type[] {typeof (int)}); + clrType = getElementMethod.ReturnType; + MethodInfo addMethod = typeof (TBuilder).GetMethod("Add" + name, new Type[] {ClrType}); + setElementMethod = typeof (TBuilder).GetMethod("Set" + name, new Type[] {typeof (int), ClrType}); + if (messageProperty == null + || builderProperty == null + || countProperty == null + || clearMethod == null + || addMethod == null + || getElementMethod == null + || setElementMethod == null) + { + throw new ArgumentException("Not all required properties/methods available"); + } + clearDelegate = + (Func) Delegate.CreateDelegate(typeof (Func), null, clearMethod); + countDelegate = (Func) Delegate.CreateDelegate + (typeof (Func), null, countProperty.GetGetMethod()); + getValueDelegate = ReflectionUtil.CreateUpcastDelegate(messageProperty.GetGetMethod()); + addValueDelegate = ReflectionUtil.CreateDowncastDelegateIgnoringReturn(addMethod); + getRepeatedWrapperDelegate = ReflectionUtil.CreateUpcastDelegate(builderProperty.GetGetMethod()); + } + + public bool Has(TMessage message) + { + throw new InvalidOperationException(); + } + + public virtual IBuilder CreateBuilder() + { + throw new InvalidOperationException(); + } + + public virtual object GetValue(TMessage message) + { + return getValueDelegate(message); + } + + public void SetValue(TBuilder builder, object value) + { + // Add all the elements individually. This serves two purposes: + // 1) Verifies that each element has the correct type. + // 2) Insures that the caller cannot modify the list later on and + // have the modifications be reflected in the message. + Clear(builder); + foreach (object element in (IEnumerable) value) + { + AddRepeated(builder, element); + } + } + + public void Clear(TBuilder builder) + { + clearDelegate(builder); + } + + public int GetRepeatedCount(TMessage message) + { + return countDelegate(message); + } + + public virtual object GetRepeatedValue(TMessage message, int index) + { + return getElementMethod.Invoke(message, new object[] {index}); + } + + public virtual void SetRepeated(TBuilder builder, int index, object value) + { + ThrowHelper.ThrowIfNull(value, "value"); + setElementMethod.Invoke(builder, new object[] {index, value}); + } + + public virtual void AddRepeated(TBuilder builder, object value) + { + ThrowHelper.ThrowIfNull(value, "value"); + addValueDelegate(builder, value); + } + + /// + /// The builder class's accessor already builds a read-only wrapper for + /// us, which is exactly what we want. + /// + public object GetRepeatedWrapper(TBuilder builder) + { + return getRepeatedWrapperDelegate(builder); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/SingleEnumAccessor.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/SingleEnumAccessor.cs new file mode 100644 index 0000000000..5df5a3cf38 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/SingleEnumAccessor.cs @@ -0,0 +1,74 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers.FieldAccess +{ + /// + /// Accessor for fields representing a non-repeated enum value. + /// + internal sealed class SingleEnumAccessor : SinglePrimitiveAccessor + where TMessage : IMessage + where TBuilder : IBuilder + { + private readonly EnumDescriptor enumDescriptor; + + internal SingleEnumAccessor(FieldDescriptor field, string name) : base(name) + { + enumDescriptor = field.EnumType; + } + + /// + /// Returns an EnumValueDescriptor representing the value in the builder. + /// Note that if an enum has multiple values for the same number, the descriptor + /// for the first value with that number will be returned. + /// + public override object GetValue(TMessage message) + { + // Note: This relies on the fact that the CLR allows unboxing from an enum to + // its underlying value + int rawValue = (int) base.GetValue(message); + return enumDescriptor.FindValueByNumber(rawValue); + } + + /// + /// Sets the value as an enum (via an int) in the builder, + /// from an EnumValueDescriptor parameter. + /// + public override void SetValue(TBuilder builder, object value) + { + ThrowHelper.ThrowIfNull(value, "value"); + EnumValueDescriptor valueDescriptor = (EnumValueDescriptor) value; + base.SetValue(builder, valueDescriptor.Number); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs new file mode 100644 index 0000000000..a066c7a15d --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs @@ -0,0 +1,89 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; +using System.Reflection; + +namespace Google.ProtocolBuffers.FieldAccess +{ + /// + /// Accessor for fields representing a non-repeated message value. + /// + internal sealed class SingleMessageAccessor : SinglePrimitiveAccessor + where TMessage : IMessage + where TBuilder : IBuilder + { + /// + /// The static method to create a builder for the property type. For example, + /// in a message type "Foo", a field called "bar" might be of type "Baz". This + /// method is Baz.CreateBuilder. + /// + private readonly Func createBuilderDelegate; + + internal SingleMessageAccessor(string name) : base(name) + { + MethodInfo createBuilderMethod = ClrType.GetMethod("CreateBuilder", EmptyTypes); + if (createBuilderMethod == null) + { + throw new ArgumentException("No public static CreateBuilder method declared in " + ClrType.Name); + } + createBuilderDelegate = ReflectionUtil.CreateStaticUpcastDelegate(createBuilderMethod); + } + + /// + /// Creates a message of the appropriate CLR type from the given value, + /// which may already be of the right type or may be a dynamic message. + /// + private object CoerceType(object value) + { + ThrowHelper.ThrowIfNull(value, "value"); + // If it's already of the right type, we're done + if (ClrType.IsInstanceOfType(value)) + { + return value; + } + + // No... so let's create a builder of the right type, and merge the value in. + IMessageLite message = (IMessageLite) value; + return CreateBuilder().WeakMergeFrom(message).WeakBuild(); + } + + public override void SetValue(TBuilder builder, object value) + { + base.SetValue(builder, CoerceType(value)); + } + + public override IBuilder CreateBuilder() + { + return createBuilderDelegate(); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/SinglePrimitiveAccessor.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/SinglePrimitiveAccessor.cs new file mode 100644 index 0000000000..2ad1d9159c --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldAccess/SinglePrimitiveAccessor.cs @@ -0,0 +1,142 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +using System; +using System.Reflection; + +namespace Google.ProtocolBuffers.FieldAccess +{ + /// + /// Access for a non-repeated field of a "primitive" type (i.e. not another message or an enum). + /// + internal class SinglePrimitiveAccessor : IFieldAccessor + where TMessage : IMessage + where TBuilder : IBuilder + { + private readonly Type clrType; + private readonly Func getValueDelegate; + private readonly Action setValueDelegate; + private readonly Func hasDelegate; + private readonly Func clearDelegate; + + internal static readonly Type[] EmptyTypes = new Type[0]; + + /// + /// The CLR type of the field (int, the enum type, ByteString, the message etc). + /// As declared by the property. + /// + protected Type ClrType + { + get { return clrType; } + } + + internal SinglePrimitiveAccessor(string name) + { + PropertyInfo messageProperty = typeof (TMessage).GetProperty(name); + PropertyInfo builderProperty = typeof (TBuilder).GetProperty(name); + if (builderProperty == null) + { + builderProperty = typeof (TBuilder).GetProperty(name); + } + PropertyInfo hasProperty = typeof (TMessage).GetProperty("Has" + name); + MethodInfo clearMethod = typeof (TBuilder).GetMethod("Clear" + name, EmptyTypes); + if (messageProperty == null || builderProperty == null || hasProperty == null || clearMethod == null) + { + throw new ArgumentException("Not all required properties/methods available"); + } + clrType = messageProperty.PropertyType; + hasDelegate = + (Func) + Delegate.CreateDelegate(typeof (Func), null, hasProperty.GetGetMethod()); + clearDelegate = + (Func) Delegate.CreateDelegate(typeof (Func), null, clearMethod); + getValueDelegate = ReflectionUtil.CreateUpcastDelegate(messageProperty.GetGetMethod()); + setValueDelegate = ReflectionUtil.CreateDowncastDelegate(builderProperty.GetSetMethod()); + } + + public bool Has(TMessage message) + { + return hasDelegate(message); + } + + public void Clear(TBuilder builder) + { + clearDelegate(builder); + } + + /// + /// Only valid for message types - this implementation throws InvalidOperationException. + /// + public virtual IBuilder CreateBuilder() + { + throw new InvalidOperationException(); + } + + public virtual object GetValue(TMessage message) + { + return getValueDelegate(message); + } + + public virtual void SetValue(TBuilder builder, object value) + { + setValueDelegate(builder, value); + } + + #region Methods only related to repeated values + + public int GetRepeatedCount(TMessage message) + { + throw new InvalidOperationException(); + } + + public object GetRepeatedValue(TMessage message, int index) + { + throw new InvalidOperationException(); + } + + public void SetRepeated(TBuilder builder, int index, object value) + { + throw new InvalidOperationException(); + } + + public void AddRepeated(TBuilder builder, object value) + { + throw new InvalidOperationException(); + } + + public object GetRepeatedWrapper(TBuilder builder) + { + throw new InvalidOperationException(); + } + + #endregion + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/FieldSet.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldSet.cs new file mode 100644 index 0000000000..0e8e657c09 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/FieldSet.cs @@ -0,0 +1,632 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections; +using System.Collections.Generic; +using Google.ProtocolBuffers.Collections; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + public interface IFieldDescriptorLite : IComparable + { + bool IsRepeated { get; } + bool IsRequired { get; } + bool IsPacked { get; } + bool IsExtension { get; } + bool MessageSetWireFormat { get; } //field.ContainingType.Options.MessageSetWireFormat + int FieldNumber { get; } + string Name { get; } + string FullName { get; } + IEnumLiteMap EnumType { get; } + FieldType FieldType { get; } + MappedType MappedType { get; } + object DefaultValue { get; } + } + + /// + /// A class which represents an arbitrary set of fields of some message type. + /// This is used to implement DynamicMessage, and also to represent extensions + /// in GeneratedMessage. This class is internal, since outside users should probably + /// be using DynamicMessage. + /// + /// As in the Java implementation, this class goes against the rest of the framework + /// in terms of mutability. Instead of having a mutable Builder class and an immutable + /// FieldSet class, FieldSet just has a MakeImmutable() method. This is safe so long as + /// all callers are careful not to let a mutable FieldSet escape into the open. This would + /// be impossible to guarantee if this were a public class, of course. + /// + /// All repeated fields are stored as IList[object] even + /// TODO(jonskeet): Finish this comment! + /// + internal sealed class FieldSet + { + private static readonly FieldSet defaultInstance = + new FieldSet(new Dictionary()).MakeImmutable(); + + private IDictionary fields; + + private FieldSet(IDictionary fields) + { + this.fields = fields; + } + + public static FieldSet CreateInstance() + { + // Use SortedList to keep fields in the canonical order + return new FieldSet(new SortedList()); + } + + /// + /// Makes this FieldSet immutable, and returns it for convenience. Any + /// mutable repeated fields are made immutable, as well as the map itself. + /// + internal FieldSet MakeImmutable() + { + // First check if we have any repeated values + bool hasRepeats = false; + foreach (object value in fields.Values) + { + IList list = value as IList; + if (list != null && !list.IsReadOnly) + { + hasRepeats = true; + break; + } + } + + if (hasRepeats) + { + var tmp = new SortedList(); + foreach (KeyValuePair entry in fields) + { + IList list = entry.Value as IList; + tmp[entry.Key] = list == null ? entry.Value : Lists.AsReadOnly(list); + } + fields = tmp; + } + + fields = Dictionaries.AsReadOnly(fields); + + return this; + } + + /// + /// Returns the default, immutable instance with no fields defined. + /// + internal static FieldSet DefaultInstance + { + get { return defaultInstance; } + } + + /// + /// Returns an immutable mapping of fields. Note that although the mapping itself + /// is immutable, the entries may not be (i.e. any repeated values are represented by + /// mutable lists). The behaviour is not specified if the contents are mutated. + /// + internal IDictionary AllFields + { + get { return Dictionaries.AsReadOnly(fields); } + } + +#if !LITE + /// + /// Force coercion to full descriptor dictionary. + /// + internal IDictionary AllFieldDescriptors + { + get + { + SortedList copy = + new SortedList(); + foreach (KeyValuePair fd in fields) + { + copy.Add((FieldDescriptor) fd.Key, fd.Value); + } + return Dictionaries.AsReadOnly(copy); + } + } +#endif + + /// + /// See . + /// + public bool HasField(IFieldDescriptorLite field) + { + if (field.IsRepeated) + { + throw new ArgumentException("HasField() can only be called on non-repeated fields."); + } + + return fields.ContainsKey(field); + } + + /// + /// Clears all fields. + /// + internal void Clear() + { + fields.Clear(); + } + + /// + /// See + /// + /// + /// If the field is not set, the behaviour when fetching this property varies by field type: + /// + /// For singular message values, null is returned. + /// For singular non-message values, the default value of the field is returned. + /// For repeated values, an empty immutable list is returned. This will be compatible + /// with IList[object], regardless of the type of the repeated item. + /// + /// This method returns null if the field is a singular message type + /// and is not set; in this case it is up to the caller to fetch the + /// message's default instance. For repeated fields of message types, + /// an empty collection is returned. For repeated fields of non-message + /// types, null is returned. + /// + /// When setting this property, any list values are copied, and each element is checked + /// to ensure it is of an appropriate type. + /// + /// + internal object this[IFieldDescriptorLite field] + { + get + { + object result; + if (fields.TryGetValue(field, out result)) + { + return result; + } + if (field.MappedType == MappedType.Message) + { + if (field.IsRepeated) + { + return new List(); + } + else + { + return null; + } + } + return field.DefaultValue; + } + set + { + if (field.IsRepeated) + { + List list = value as List; + if (list == null) + { + throw new ArgumentException("Wrong object type used with protocol message reflection."); + } + + // Wrap the contents in a new list so that the caller cannot change + // the list's contents after setting it. + List newList = new List(list); + foreach (object element in newList) + { + VerifyType(field, element); + } + value = newList; + } + else + { + VerifyType(field, value); + } + fields[field] = value; + } + } + + /// + /// See + /// + internal object this[IFieldDescriptorLite field, int index] + { + get + { + if (!field.IsRepeated) + { + throw new ArgumentException( + "Indexer specifying field and index can only be called on repeated fields."); + } + + return ((IList) this[field])[index]; + } + set + { + if (!field.IsRepeated) + { + throw new ArgumentException( + "Indexer specifying field and index can only be called on repeated fields."); + } + VerifyType(field, value); + object list; + if (!fields.TryGetValue(field, out list)) + { + throw new ArgumentOutOfRangeException(); + } + ((IList) list)[index] = value; + } + } + + /// + /// See + /// + internal void AddRepeatedField(IFieldDescriptorLite field, object value) + { + if (!field.IsRepeated) + { + throw new ArgumentException("AddRepeatedField can only be called on repeated fields."); + } + VerifyType(field, value); + object list; + if (!fields.TryGetValue(field, out list)) + { + list = new List(); + fields[field] = list; + } + ((IList) list).Add(value); + } + + /// + /// Returns an enumerator for the field map. Used to write the fields out. + /// + internal IEnumerator> GetEnumerator() + { + return fields.GetEnumerator(); + } + + /// + /// See + /// + /// + /// Since FieldSet itself does not have any way of knowing about + /// required fields that aren't actually present in the set, it is up + /// to the caller to check for genuinely required fields. This property + /// merely checks that any messages present are themselves initialized. + /// + internal bool IsInitialized + { + get + { + foreach (KeyValuePair entry in fields) + { + IFieldDescriptorLite field = entry.Key; + if (field.MappedType == MappedType.Message) + { + if (field.IsRepeated) + { + foreach (IMessageLite message in (IEnumerable) entry.Value) + { + if (!message.IsInitialized) + { + return false; + } + } + } + else + { + if (!((IMessageLite) entry.Value).IsInitialized) + { + return false; + } + } + } + } + return true; + } + } + + /// + /// Verifies whether all the required fields in the specified message + /// descriptor are present in this field set, as well as whether + /// all the embedded messages are themselves initialized. + /// + internal bool IsInitializedWithRespectTo(IEnumerable typeFields) + { + foreach (IFieldDescriptorLite field in typeFields) + { + if (field.IsRequired && !HasField(field)) + { + return false; + } + } + return IsInitialized; + } + + /// + /// See + /// + public void ClearField(IFieldDescriptorLite field) + { + fields.Remove(field); + } + + /// + /// See + /// + public int GetRepeatedFieldCount(IFieldDescriptorLite field) + { + if (!field.IsRepeated) + { + throw new ArgumentException("GetRepeatedFieldCount() can only be called on repeated fields."); + } + + return ((IList) this[field]).Count; + } + +#if !LITE + /// + /// See + /// + public void MergeFrom(IMessage other) + { + foreach (KeyValuePair fd in other.AllFields) + { + MergeField(fd.Key, fd.Value); + } + } +#endif + + /// + /// Implementation of both MergeFrom methods. + /// + /// + public void MergeFrom(FieldSet other) + { + // Note: We don't attempt to verify that other's fields have valid + // types. Doing so would be a losing battle. We'd have to verify + // all sub-messages as well, and we'd have to make copies of all of + // them to insure that they don't change after verification (since + // the IMessageLite interface itself cannot enforce immutability of + // implementations). + // TODO(jonskeet): Provide a function somewhere called MakeDeepCopy() + // which allows people to make secure deep copies of messages. + + foreach (KeyValuePair entry in other.fields) + { + MergeField(entry.Key, entry.Value); + } + } + + private void MergeField(IFieldDescriptorLite field, object mergeValue) + { + object existingValue; + fields.TryGetValue(field, out existingValue); + if (field.IsRepeated) + { + if (existingValue == null) + { + existingValue = new List(); + fields[field] = existingValue; + } + IList list = (IList) existingValue; + foreach (object otherValue in (IEnumerable) mergeValue) + { + list.Add(otherValue); + } + } + else if (field.MappedType == MappedType.Message && existingValue != null) + { + IMessageLite existingMessage = (IMessageLite) existingValue; + IMessageLite merged = existingMessage.WeakToBuilder() + .WeakMergeFrom((IMessageLite) mergeValue) + .WeakBuild(); + this[field] = merged; + } + else + { + this[field] = mergeValue; + } + } + + /// + /// See . + /// + public void WriteTo(ICodedOutputStream output) + { + foreach (KeyValuePair entry in fields) + { + WriteField(entry.Key, entry.Value, output); + } + } + + /// + /// Writes a single field to a CodedOutputStream. + /// + public void WriteField(IFieldDescriptorLite field, Object value, ICodedOutputStream output) + { + if (field.IsExtension && field.MessageSetWireFormat) + { + output.WriteMessageSetExtension(field.FieldNumber, field.Name, (IMessageLite) value); + } + else + { + if (field.IsRepeated) + { + IEnumerable valueList = (IEnumerable) value; + if (field.IsPacked) + { + output.WritePackedArray(field.FieldType, field.FieldNumber, field.Name, valueList); + } + else + { + output.WriteArray(field.FieldType, field.FieldNumber, field.Name, valueList); + } + } + else + { + output.WriteField(field.FieldType, field.FieldNumber, field.Name, value); + } + } + } + + /// + /// See . It's up to the caller to + /// cache the resulting size if desired. + /// + public int SerializedSize + { + get + { + int size = 0; + foreach (KeyValuePair entry in fields) + { + IFieldDescriptorLite field = entry.Key; + object value = entry.Value; + + if (field.IsExtension && field.MessageSetWireFormat) + { + size += CodedOutputStream.ComputeMessageSetExtensionSize(field.FieldNumber, (IMessageLite) value); + } + else + { + if (field.IsRepeated) + { + IEnumerable valueList = (IEnumerable) value; + if (field.IsPacked) + { + int dataSize = 0; + foreach (object element in valueList) + { + dataSize += CodedOutputStream.ComputeFieldSizeNoTag(field.FieldType, element); + } + size += dataSize + CodedOutputStream.ComputeTagSize(field.FieldNumber) + + CodedOutputStream.ComputeRawVarint32Size((uint) dataSize); + } + else + { + foreach (object element in valueList) + { + size += CodedOutputStream.ComputeFieldSize(field.FieldType, field.FieldNumber, + element); + } + } + } + else + { + size += CodedOutputStream.ComputeFieldSize(field.FieldType, field.FieldNumber, value); + } + } + } + return size; + } + } + + /// + /// Verifies that the given object is of the correct type to be a valid + /// value for the given field. + /// + /// + /// For repeated fields, this checks if the object is of the right + /// element type, not whether it's a list. + /// + /// The value is not of the right type. + /// The value is null. + private static void VerifyType(IFieldDescriptorLite field, object value) + { + ThrowHelper.ThrowIfNull(value, "value"); + bool isValid = false; + switch (field.MappedType) + { + case MappedType.Int32: + isValid = value is int; + break; + case MappedType.Int64: + isValid = value is long; + break; + case MappedType.UInt32: + isValid = value is uint; + break; + case MappedType.UInt64: + isValid = value is ulong; + break; + case MappedType.Single: + isValid = value is float; + break; + case MappedType.Double: + isValid = value is double; + break; + case MappedType.Boolean: + isValid = value is bool; + break; + case MappedType.String: + isValid = value is string; + break; + case MappedType.ByteString: + isValid = value is ByteString; + break; + case MappedType.Enum: + IEnumLite enumValue = value as IEnumLite; + isValid = enumValue != null && field.EnumType.IsValidValue(enumValue); + break; + case MappedType.Message: + IMessageLite messageValue = value as IMessageLite; + isValid = messageValue != null; +#if !LITE + if (isValid && messageValue is IMessage && field is FieldDescriptor) + { + isValid = ((IMessage) messageValue).DescriptorForType == ((FieldDescriptor) field).MessageType; + } +#endif + break; + } + + if (!isValid) + { + // When chaining calls to SetField(), it can be hard to tell from + // the stack trace which exact call failed, since the whole chain is + // considered one line of code. So, let's make sure to include the + // field name and other useful info in the exception. + string message = "Wrong object type used with protocol message reflection."; +#if !LITE + FieldDescriptor fieldinfo = + field as FieldDescriptor; + if (fieldinfo != null) + { + message += "Message type \"" + fieldinfo.ContainingType.FullName; + message += "\", field \"" + (fieldinfo.IsExtension ? fieldinfo.FullName : fieldinfo.Name); + message += "\", value was type \"" + value.GetType().Name + "\"."; + } +#endif + throw new ArgumentException(message); + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedBuilder.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedBuilder.cs new file mode 100644 index 0000000000..87e226b753 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedBuilder.cs @@ -0,0 +1,215 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections; +using System.Collections.Generic; +using Google.ProtocolBuffers.Descriptors; +using Google.ProtocolBuffers.FieldAccess; + +namespace Google.ProtocolBuffers +{ + /// + /// All generated protocol message builder classes extend this class. It implements + /// most of the IBuilder interface using reflection. Users can ignore this class + /// as an implementation detail. + /// + public abstract partial class GeneratedBuilder : AbstractBuilder + where TMessage : GeneratedMessage + where TBuilder : GeneratedBuilder, new() + { + /// + /// Returns the message being built at the moment. + /// + protected abstract TMessage MessageBeingBuilt { get; } + + protected internal FieldAccessorTable InternalFieldAccessors + { + get { return DefaultInstanceForType.FieldAccessorsFromBuilder; } + } + + public override IDictionary AllFields + { + get { return MessageBeingBuilt.AllFields; } + } + + public override object this[FieldDescriptor field] + { + get + { + // For repeated fields, the underlying list object is still modifiable at this point. + // Make sure not to expose the modifiable list to the caller. + return field.IsRepeated + ? InternalFieldAccessors[field].GetRepeatedWrapper(ThisBuilder) + : MessageBeingBuilt[field]; + } + set { InternalFieldAccessors[field].SetValue(ThisBuilder, value); } + } + + /// + /// Called by derived classes to parse an unknown field. + /// + /// true unless the tag is an end-group tag + [CLSCompliant(false)] + protected virtual bool ParseUnknownField(ICodedInputStream input, UnknownFieldSet.Builder unknownFields, + ExtensionRegistry extensionRegistry, uint tag, string fieldName) + { + return unknownFields.MergeFieldFrom(tag, input); + } + + public override MessageDescriptor DescriptorForType + { + get { return DefaultInstanceForType.DescriptorForType; } + } + + public override int GetRepeatedFieldCount(FieldDescriptor field) + { + return MessageBeingBuilt.GetRepeatedFieldCount(field); + } + + public override object this[FieldDescriptor field, int index] + { + get { return MessageBeingBuilt[field, index]; } + set { InternalFieldAccessors[field].SetRepeated(ThisBuilder, index, value); } + } + + public override bool HasField(FieldDescriptor field) + { + return MessageBeingBuilt.HasField(field); + } + + public override IBuilder CreateBuilderForField(FieldDescriptor field) + { + return InternalFieldAccessors[field].CreateBuilder(); + } + + public override TBuilder ClearField(FieldDescriptor field) + { + InternalFieldAccessors[field].Clear(ThisBuilder); + return ThisBuilder; + } + + public override TBuilder MergeFrom(TMessage other) + { + if (other.DescriptorForType != InternalFieldAccessors.Descriptor) + { + throw new ArgumentException("Message type mismatch"); + } + + foreach (KeyValuePair entry in other.AllFields) + { + FieldDescriptor field = entry.Key; + if (field.IsRepeated) + { + // Concatenate repeated fields + foreach (object element in (IEnumerable) entry.Value) + { + AddRepeatedField(field, element); + } + } + else if (field.MappedType == MappedType.Message && HasField(field)) + { + // Merge singular embedded messages + IMessageLite oldValue = (IMessageLite) this[field]; + this[field] = oldValue.WeakCreateBuilderForType() + .WeakMergeFrom(oldValue) + .WeakMergeFrom((IMessageLite) entry.Value) + .WeakBuildPartial(); + } + else + { + // Just overwrite + this[field] = entry.Value; + } + } + + //Fix for unknown fields not merging, see java's AbstractMessage.Builder line 236 + MergeUnknownFields(other.UnknownFields); + + return ThisBuilder; + } + + public override TBuilder MergeUnknownFields(UnknownFieldSet unknownFields) + { + if (unknownFields != UnknownFieldSet.DefaultInstance) + { + TMessage result = MessageBeingBuilt; + result.SetUnknownFields(UnknownFieldSet.CreateBuilder(result.UnknownFields) + .MergeFrom(unknownFields) + .Build()); + } + return ThisBuilder; + } + + public override TBuilder AddRepeatedField(FieldDescriptor field, object value) + { + InternalFieldAccessors[field].AddRepeated(ThisBuilder, value); + return ThisBuilder; + } + + /// + /// Like Build(), but will wrap UninitializedMessageException in + /// InvalidProtocolBufferException. + /// + public TMessage BuildParsed() + { + if (!IsInitialized) + { + throw new UninitializedMessageException(MessageBeingBuilt).AsInvalidProtocolBufferException(); + } + return BuildPartial(); + } + + /// + /// Implementation of . + /// + public override TMessage Build() + { + // If the message is null, we'll throw a more appropriate exception in BuildPartial. + if (!IsInitialized) + { + throw new UninitializedMessageException(MessageBeingBuilt); + } + return BuildPartial(); + } + + public override UnknownFieldSet UnknownFields + { + get { return MessageBeingBuilt.UnknownFields; } + set { MessageBeingBuilt.SetUnknownFields(value); } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedBuilderLite.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedBuilderLite.cs new file mode 100644 index 0000000000..2f491d6656 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedBuilderLite.cs @@ -0,0 +1,101 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; + +namespace Google.ProtocolBuffers +{ + /// + /// All generated protocol message builder classes extend this class. It implements + /// most of the IBuilder interface using reflection. Users can ignore this class + /// as an implementation detail. + /// + public abstract partial class GeneratedBuilderLite : AbstractBuilderLite + where TMessage : GeneratedMessageLite + where TBuilder : GeneratedBuilderLite + { + /// + /// Returns the message being built at the moment. + /// + protected abstract TMessage MessageBeingBuilt { get; } + + public override TBuilder MergeFrom(IMessageLite other) + { + //do nothing, Lite runtime does not support cross-message merges + return ThisBuilder; + } + + public abstract TBuilder MergeFrom(TMessage other); + + /// + /// Called by derived classes to parse an unknown field. + /// + /// true unless the tag is an end-group tag + [CLSCompliant(false)] + protected virtual bool ParseUnknownField(ICodedInputStream input, + ExtensionRegistry extensionRegistry, uint tag, string fieldName) + { + return input.SkipField(); + } + + /// + /// Like Build(), but will wrap UninitializedMessageException in + /// InvalidProtocolBufferException. + /// + public TMessage BuildParsed() + { + if (!IsInitialized) + { + throw new UninitializedMessageException(MessageBeingBuilt).AsInvalidProtocolBufferException(); + } + return BuildPartial(); + } + + /// + /// Implementation of . + /// + public override TMessage Build() + { + // If the message is null, we'll throw a more appropriate exception in BuildPartial. + if (!IsInitialized) + { + throw new UninitializedMessageException(MessageBeingBuilt); + } + return BuildPartial(); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedExtensionBase.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedExtensionBase.cs new file mode 100644 index 0000000000..7140d608d9 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedExtensionBase.cs @@ -0,0 +1,185 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + /// + /// Base type for all generated extensions. + /// + /// + /// The protocol compiler generates a static singleton instance of this + /// class for each extension. For exmaple, imagine a .proto file with: + /// + /// message Foo { + /// extensions 1000 to max + /// } + /// + /// extend Foo { + /// optional int32 bar; + /// } + /// + /// Then MyProto.Foo.Bar has type GeneratedExtensionBase<MyProto.Foo,int>. + /// + /// In general, users should ignore the details of this type, and + /// simply use the static singletons as parameters to the extension accessors + /// in ExtendableMessage and ExtendableBuilder. + /// The interface implemented by both GeneratedException and GeneratedRepeatException, + /// to make it easier to cope with repeats separately. + /// + public abstract class GeneratedExtensionBase + { + private readonly FieldDescriptor descriptor; + private readonly IMessageLite messageDefaultInstance; + + protected GeneratedExtensionBase(FieldDescriptor descriptor, Type singularExtensionType) + { + if (!descriptor.IsExtension) + { + throw new ArgumentException("GeneratedExtension given a regular (non-extension) field."); + } + + this.descriptor = descriptor; + if (descriptor.MappedType == MappedType.Message) + { + PropertyInfo defaultInstanceProperty = singularExtensionType + .GetProperty("DefaultInstance", BindingFlags.Static | BindingFlags.Public); + if (defaultInstanceProperty == null) + { + throw new ArgumentException("No public static DefaultInstance property for type " + + typeof (TExtension).Name); + } + + messageDefaultInstance = (IMessageLite) defaultInstanceProperty.GetValue(null, null); + } + } + + public FieldDescriptor Descriptor + { + get { return descriptor; } + } + + public int Number + { + get { return Descriptor.FieldNumber; } + } + + /// + /// Returns the default message instance for extensions which are message types. + /// + public IMessageLite MessageDefaultInstance + { + get { return messageDefaultInstance; } + } + + public object SingularFromReflectionType(object value) + { + switch (Descriptor.MappedType) + { + case MappedType.Message: + if (value is TExtension) + { + return value; + } + else + { + // It seems the copy of the embedded message stored inside the + // extended message is not of the exact type the user was + // expecting. This can happen if a user defines a + // GeneratedExtension manually and gives it a different type. + // This should not happen in normal use. But, to be nice, we'll + // copy the message to whatever type the caller was expecting. + return MessageDefaultInstance.WeakCreateBuilderForType() + .WeakMergeFrom((IMessageLite) value).WeakBuild(); + } + case MappedType.Enum: + // Just return a boxed int - that can be unboxed to the enum + EnumValueDescriptor enumValue = (EnumValueDescriptor) value; + return enumValue.Number; + default: + return value; + } + } + + /// + /// Converts from the type used by the native accessors to the type + /// used by reflection accessors. For example, the reflection accessors + /// for enums use EnumValueDescriptors but the native accessors use + /// the generated enum type. + /// + public object ToReflectionType(object value) + { + if (descriptor.IsRepeated) + { + if (descriptor.MappedType == MappedType.Enum) + { + // Must convert the whole list. + IList result = new List(); + foreach (object element in (IEnumerable) value) + { + result.Add(SingularToReflectionType(element)); + } + return result; + } + else + { + return value; + } + } + else + { + return SingularToReflectionType(value); + } + } + + /// + /// Like ToReflectionType(object) but for a single element. + /// + internal Object SingularToReflectionType(object value) + { + return descriptor.MappedType == MappedType.Enum + ? descriptor.EnumType.FindValueByNumber((int) value) + : value; + } + + public abstract object FromReflectionType(object value); + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedExtensionLite.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedExtensionLite.cs new file mode 100644 index 0000000000..51de7b2e11 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedExtensionLite.cs @@ -0,0 +1,354 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System.Collections; +using System.Collections.Generic; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + public interface IGeneratedExtensionLite + { + int Number { get; } + object ContainingType { get; } + IMessageLite MessageDefaultInstance { get; } + IFieldDescriptorLite Descriptor { get; } + } + + public class ExtensionDescriptorLite : IFieldDescriptorLite + { + private readonly string fullName; + private readonly IEnumLiteMap enumTypeMap; + private readonly int number; + private readonly FieldType type; + private readonly bool isRepeated; + private readonly bool isPacked; + private readonly MappedType mapType; + private readonly object defaultValue; + + public ExtensionDescriptorLite(string fullName, IEnumLiteMap enumTypeMap, int number, FieldType type, + object defaultValue, bool isRepeated, bool isPacked) + { + this.fullName = fullName; + this.enumTypeMap = enumTypeMap; + this.number = number; + this.type = type; + this.mapType = FieldMappingAttribute.MappedTypeFromFieldType(type); + this.isRepeated = isRepeated; + this.isPacked = isPacked; + this.defaultValue = defaultValue; + } + + public string Name + { + get + { + string name = fullName; + int offset = name.LastIndexOf('.'); + if (offset >= 0) + { + name = name.Substring(offset); + } + return name; + } + } + + public string FullName + { + get { return fullName; } + } + + public bool IsRepeated + { + get { return isRepeated; } + } + + public bool IsRequired + { + get { return false; } + } + + public bool IsPacked + { + get { return isPacked; } + } + + public bool IsExtension + { + get { return true; } + } + + /// + /// This is not supported and assertions are made to ensure this does not exist on extensions of Lite types + /// + public bool MessageSetWireFormat + { + get { return false; } + } + + public int FieldNumber + { + get { return number; } + } + + public IEnumLiteMap EnumType + { + get { return enumTypeMap; } + } + + public FieldType FieldType + { + get { return type; } + } + + public MappedType MappedType + { + get { return mapType; } + } + + public object DefaultValue + { + get { return defaultValue; } + } + + public int CompareTo(IFieldDescriptorLite other) + { + return FieldNumber.CompareTo(other.FieldNumber); + } + } + + public class GeneratedRepeatExtensionLite : + GeneratedExtensionLite> + where TContainingType : IMessageLite + { + public GeneratedRepeatExtensionLite(string fullName, TContainingType containingTypeDefaultInstance, + IMessageLite messageDefaultInstance, IEnumLiteMap enumTypeMap, int number, + FieldType type, bool isPacked) : + base( + fullName, containingTypeDefaultInstance, new List(), + messageDefaultInstance, enumTypeMap, number, type, isPacked) + { + } + + public override object ToReflectionType(object value) + { + IList result = new List(); + foreach (object element in (IEnumerable) value) + { + result.Add(SingularToReflectionType(element)); + } + return result; + } + + public override object FromReflectionType(object value) + { + // Must convert the whole list. + List result = new List(); + foreach (object element in (IEnumerable) value) + { + result.Add((TExtensionType) SingularFromReflectionType(element)); + } + return result; + } + } + + public class GeneratedExtensionLite : IGeneratedExtensionLite + where TContainingType : IMessageLite + { + private readonly TContainingType containingTypeDefaultInstance; + private readonly TExtensionType defaultValue; + private readonly IMessageLite messageDefaultInstance; + private readonly ExtensionDescriptorLite descriptor; + + // We can't always initialize a GeneratedExtension when we first construct + // it due to initialization order difficulties (namely, the default + // instances may not have been constructed yet). So, we construct an + // uninitialized GeneratedExtension once, then call internalInit() on it + // later. Generated code will always call internalInit() on all extensions + // as part of the static initialization code, and internalInit() throws an + // exception if called more than once, so this method is useless to users. + protected GeneratedExtensionLite( + TContainingType containingTypeDefaultInstance, + TExtensionType defaultValue, + IMessageLite messageDefaultInstance, + ExtensionDescriptorLite descriptor) + { + this.containingTypeDefaultInstance = containingTypeDefaultInstance; + this.messageDefaultInstance = messageDefaultInstance; + this.defaultValue = defaultValue; + this.descriptor = descriptor; + } + + /** For use by generated code only. */ + + public GeneratedExtensionLite( + string fullName, + TContainingType containingTypeDefaultInstance, + TExtensionType defaultValue, + IMessageLite messageDefaultInstance, + IEnumLiteMap enumTypeMap, + int number, + FieldType type) + : this(containingTypeDefaultInstance, defaultValue, messageDefaultInstance, + new ExtensionDescriptorLite(fullName, enumTypeMap, number, type, defaultValue, + false /* isRepeated */, false /* isPacked */)) + { + } + + private static readonly IList Empty = new object[0]; + /** Repeating fields: For use by generated code only. */ + + protected GeneratedExtensionLite( + string fullName, + TContainingType containingTypeDefaultInstance, + TExtensionType defaultValue, + IMessageLite messageDefaultInstance, + IEnumLiteMap enumTypeMap, + int number, + FieldType type, + bool isPacked) + : this(containingTypeDefaultInstance, defaultValue, messageDefaultInstance, + new ExtensionDescriptorLite(fullName, enumTypeMap, number, type, Empty, + true /* isRepeated */, isPacked)) + { + } + + /// + /// Returns information about this extension + /// + public IFieldDescriptorLite Descriptor + { + get { return descriptor; } + } + + /// + /// Returns the default value for this extension + /// + public TExtensionType DefaultValue + { + get { return defaultValue; } + } + + /// + /// used for the extension registry + /// + object IGeneratedExtensionLite.ContainingType + { + get { return ContainingTypeDefaultInstance; } + } + + /** + * Default instance of the type being extended, used to identify that type. + */ + + public TContainingType ContainingTypeDefaultInstance + { + get { return containingTypeDefaultInstance; } + } + + /** Get the field number. */ + + public int Number + { + get { return descriptor.FieldNumber; } + } + + /** + * If the extension is an embedded message, this is the default instance of + * that type. + */ + + public IMessageLite MessageDefaultInstance + { + get { return messageDefaultInstance; } + } + + /// + /// Converts from the type used by the native accessors to the type + /// used by reflection accessors. For example, the reflection accessors + /// for enums use EnumValueDescriptors but the native accessors use + /// the generated enum type. + /// + public virtual object ToReflectionType(object value) + { + return SingularToReflectionType(value); + } + + /// + /// Like ToReflectionType(object) but for a single element. + /// + public object SingularToReflectionType(object value) + { + return descriptor.MappedType == MappedType.Enum + ? descriptor.EnumType.FindValueByNumber((int) value) + : value; + } + + public virtual object FromReflectionType(object value) + { + return SingularFromReflectionType(value); + } + + public object SingularFromReflectionType(object value) + { + switch (Descriptor.MappedType) + { + case MappedType.Message: + if (value is TExtensionType) + { + return value; + } + else + { + // It seems the copy of the embedded message stored inside the + // extended message is not of the exact type the user was + // expecting. This can happen if a user defines a + // GeneratedExtension manually and gives it a different type. + // This should not happen in normal use. But, to be nice, we'll + // copy the message to whatever type the caller was expecting. + return MessageDefaultInstance.WeakCreateBuilderForType() + .WeakMergeFrom((IMessageLite) value).WeakBuild(); + } + case MappedType.Enum: + // Just return a boxed int - that can be unboxed to the enum + IEnumLite enumValue = (IEnumLite) value; + return enumValue.Number; + default: + return value; + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedMessage.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedMessage.cs new file mode 100644 index 0000000000..4c2e197a0f --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedMessage.cs @@ -0,0 +1,181 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Xml; +using Google.ProtocolBuffers.Collections; +using Google.ProtocolBuffers.Descriptors; +using Google.ProtocolBuffers.FieldAccess; + +namespace Google.ProtocolBuffers +{ + /// + /// All generated protocol message classes extend this class. It implements + /// most of the IMessage interface using reflection. Users + /// can ignore this class as an implementation detail. + /// + public abstract partial class GeneratedMessage : AbstractMessage + where TMessage : GeneratedMessage + where TBuilder : GeneratedBuilder, new() + { + private UnknownFieldSet unknownFields = UnknownFieldSet.DefaultInstance; + + /// + /// Returns the message as a TMessage. + /// + protected abstract TMessage ThisMessage { get; } + + internal FieldAccessorTable FieldAccessorsFromBuilder + { + get { return InternalFieldAccessors; } + } + + protected abstract FieldAccessorTable InternalFieldAccessors { get; } + + public override MessageDescriptor DescriptorForType + { + get { return InternalFieldAccessors.Descriptor; } + } + + internal IDictionary GetMutableFieldMap() + { + // Use a SortedList so we'll end up serializing fields in order + var ret = new SortedList(); + MessageDescriptor descriptor = DescriptorForType; + foreach (FieldDescriptor field in descriptor.Fields) + { + IFieldAccessor accessor = InternalFieldAccessors[field]; + if (field.IsRepeated) + { + if (accessor.GetRepeatedCount(ThisMessage) != 0) + { + ret[field] = accessor.GetValue(ThisMessage); + } + } + else if (HasField(field)) + { + ret[field] = accessor.GetValue(ThisMessage); + } + } + return ret; + } + + public override bool IsInitialized + { + get + { + foreach (FieldDescriptor field in DescriptorForType.Fields) + { + // Check that all required fields are present. + if (field.IsRequired && !HasField(field)) + { + return false; + } + // Check that embedded messages are initialized. + // This code is similar to that in AbstractMessage, but we don't + // fetch all the field values - just the ones we need to. + if (field.MappedType == MappedType.Message) + { + if (field.IsRepeated) + { + // We know it's an IList, but not the exact type - so + // IEnumerable is the best we can do. (C# generics aren't covariant yet.) + foreach (IMessageLite element in (IEnumerable) this[field]) + { + if (!element.IsInitialized) + { + return false; + } + } + } + else + { + if (HasField(field) && !((IMessageLite) this[field]).IsInitialized) + { + return false; + } + } + } + } + return true; + } + } + + public override IDictionary AllFields + { + get { return Dictionaries.AsReadOnly(GetMutableFieldMap()); } + } + + public override bool HasField(FieldDescriptor field) + { + return InternalFieldAccessors[field].Has(ThisMessage); + } + + public override int GetRepeatedFieldCount(FieldDescriptor field) + { + return InternalFieldAccessors[field].GetRepeatedCount(ThisMessage); + } + + public override object this[FieldDescriptor field, int index] + { + get { return InternalFieldAccessors[field].GetRepeatedValue(ThisMessage, index); } + } + + public override object this[FieldDescriptor field] + { + get { return InternalFieldAccessors[field].GetValue(ThisMessage); } + } + + public override UnknownFieldSet UnknownFields + { + get { return unknownFields; } + } + + /// + /// Replaces the set of unknown fields for this message. This should + /// only be used before a message is built, by the builder. (In the + /// Java code it is private, but the builder is nested so has access + /// to it.) + /// + internal void SetUnknownFields(UnknownFieldSet fieldSet) + { + unknownFields = fieldSet; + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedMessageLite.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedMessageLite.cs new file mode 100644 index 0000000000..30e8d37997 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedMessageLite.cs @@ -0,0 +1,182 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text; + +namespace Google.ProtocolBuffers +{ + /// + /// All generated protocol message classes extend this class. It implements + /// most of the IMessage interface using reflection. Users + /// can ignore this class as an implementation detail. + /// + public abstract partial class GeneratedMessageLite : AbstractMessageLite + where TMessage : GeneratedMessageLite + where TBuilder : GeneratedBuilderLite + { + protected abstract TMessage ThisMessage { get; } + + public override sealed string ToString() + { + using (StringWriter wtr = new StringWriter()) + { + PrintTo(wtr); + return wtr.ToString(); + } + } + + /// + /// PrintTo() helper methods for Lite Runtime + /// + protected static void PrintField(string name, IList value, TextWriter writer) + { + foreach (T item in value) + { + PrintField(name, true, (object) item, writer); + } + } + + /// + /// PrintTo() helper methods for Lite Runtime + /// + protected static void PrintField(string name, bool hasValue, object value, TextWriter writer) + { + if (!hasValue) + { + return; + } + if (value is IMessageLite) + { + writer.WriteLine("{0} {{", name); + ((IMessageLite) value).PrintTo(writer); + writer.WriteLine("}"); + } + else if (value is ByteString || value is String) + { + writer.Write("{0}: \"", name); + if (value is String) + { + EscapeBytes(Encoding.UTF8.GetBytes((string) value), writer); + } + else + { + EscapeBytes(((ByteString) value), writer); + } + writer.WriteLine("\""); + } + else if (value is bool) + { + writer.WriteLine("{0}: {1}", name, (bool) value ? "true" : "false"); + } + else if (value is IEnumLite) + { + writer.WriteLine("{0}: {1}", name, ((IEnumLite) value).Name); + } + else + { + writer.WriteLine("{0}: {1}", name, ((IConvertible) value).ToString(CultureInfo.InvariantCulture)); + } + } + + /// + /// COPIED from TextFormat + /// Escapes bytes in the format used in protocol buffer text format, which + /// is the same as the format used for C string literals. All bytes + /// that are not printable 7-bit ASCII characters are escaped, as well as + /// backslash, single-quote, and double-quote characters. Characters for + /// which no defined short-hand escape sequence is defined will be escaped + /// using 3-digit octal sequences. + /// The returned value is guaranteed to be entirely ASCII. + /// + private static void EscapeBytes(IEnumerable input, TextWriter writer) + { + foreach (byte b in input) + { + switch (b) + { + // C# does not use \a or \v + case 0x07: + writer.Write("\\a"); + break; + case (byte) '\b': + writer.Write("\\b"); + break; + case (byte) '\f': + writer.Write("\\f"); + break; + case (byte) '\n': + writer.Write("\\n"); + break; + case (byte) '\r': + writer.Write("\\r"); + break; + case (byte) '\t': + writer.Write("\\t"); + break; + case 0x0b: + writer.Write("\\v"); + break; + case (byte) '\\': + writer.Write("\\\\"); + break; + case (byte) '\'': + writer.Write("\\\'"); + break; + case (byte) '"': + writer.Write("\\\""); + break; + default: + if (b >= 0x20 && b < 128) + { + writer.Write((char) b); + } + else + { + writer.Write('\\'); + writer.Write((char) ('0' + ((b >> 6) & 3))); + writer.Write((char) ('0' + ((b >> 3) & 7))); + writer.Write((char) ('0' + (b & 7))); + } + break; + } + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedRepeatExtension.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedRepeatExtension.cs new file mode 100644 index 0000000000..76eec4427d --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedRepeatExtension.cs @@ -0,0 +1,88 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections; +using System.Collections.Generic; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + /// + /// Class used to represent repeat extensions in generated classes. + /// + public sealed class GeneratedRepeatExtension : GeneratedExtensionBase> + { + private GeneratedRepeatExtension(FieldDescriptor field) : base(field, typeof (TExtensionElement)) + { + } + + public static GeneratedExtensionBase> CreateInstance(FieldDescriptor descriptor) + { + if (!descriptor.IsRepeated) + { + throw new ArgumentException("Must call GeneratedRepeatExtension.CreateInstance() for repeated types."); + } + return new GeneratedRepeatExtension(descriptor); + } + + /// + /// Converts the list to the right type. + /// TODO(jonskeet): Check where this is used, and whether we need to convert + /// for primitive types. + /// + /// + /// + public override object FromReflectionType(object value) + { + if (Descriptor.MappedType == MappedType.Message || + Descriptor.MappedType == MappedType.Enum) + { + // Must convert the whole list. + List result = new List(); + foreach (object element in (IEnumerable) value) + { + result.Add((TExtensionElement) SingularFromReflectionType(element)); + } + return result; + } + else + { + return value; + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedSingleExtension.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedSingleExtension.cs new file mode 100644 index 0000000000..ba2fc7f160 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/GeneratedSingleExtension.cs @@ -0,0 +1,65 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + /// + /// Generated extension for a singular field. + /// + public sealed class GeneratedSingleExtension : GeneratedExtensionBase + { + internal GeneratedSingleExtension(FieldDescriptor descriptor) : base(descriptor, typeof (TExtension)) + { + } + + public static GeneratedSingleExtension CreateInstance(FieldDescriptor descriptor) + { + if (descriptor.IsRepeated) + { + throw new ArgumentException("Must call GeneratedRepeateExtension.CreateInstance() for repeated types."); + } + return new GeneratedSingleExtension(descriptor); + } + + public override object FromReflectionType(object value) + { + return base.SingularFromReflectionType(value); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/IBuilder.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/IBuilder.cs new file mode 100644 index 0000000000..1b9833d9ee --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/IBuilder.cs @@ -0,0 +1,309 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using System.IO; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + /// + /// Non-generic interface for all members whose signatures don't require knowledge of + /// the type being built. The generic interface extends this one. Some methods return + /// either an IBuilder or an IMessage; in these cases the generic interface redeclares + /// the same method with a type-specific signature. Implementations are encouraged to + /// use explicit interface implemenation for the non-generic form. This mirrors + /// how IEnumerable and IEnumerable<T> work. + /// + public interface IBuilder : IBuilderLite + { + /// + /// Returns true iff all required fields in the message and all + /// embedded messages are set. + /// + new bool IsInitialized { get; } + + /// + /// Only present in the nongeneric interface - useful for tests, but + /// not as much in real life. + /// + IBuilder SetField(FieldDescriptor field, object value); + + /// + /// Only present in the nongeneric interface - useful for tests, but + /// not as much in real life. + /// + IBuilder SetRepeatedField(FieldDescriptor field, int index, object value); + + /// + /// Behaves like the equivalent property in IMessage<T>. + /// The returned map may or may not reflect future changes to the builder. + /// Either way, the returned map is unmodifiable. + /// + IDictionary AllFields { get; } + + /// + /// Allows getting and setting of a field. + /// + /// + /// + /// + object this[FieldDescriptor field] { get; set; } + + /// + /// Get the message's type descriptor. + /// + /// + MessageDescriptor DescriptorForType { get; } + + /// + /// + /// + /// + /// + int GetRepeatedFieldCount(FieldDescriptor field); + + /// + /// Allows getting and setting of a repeated field value. + /// + /// + object this[FieldDescriptor field, int index] { get; set; } + + /// + /// + /// + bool HasField(FieldDescriptor field); + + /// + /// + /// + UnknownFieldSet UnknownFields { get; set; } + + /// + /// Create a builder for messages of the appropriate type for the given field. + /// Messages built with this can then be passed to the various mutation properties + /// and methods. + /// + IBuilder CreateBuilderForField(FieldDescriptor field); + + #region Methods which are like those of the generic form, but without any knowledge of the type parameters + + IBuilder WeakAddRepeatedField(FieldDescriptor field, object value); + new IBuilder WeakClear(); + IBuilder WeakClearField(FieldDescriptor field); + IBuilder WeakMergeFrom(IMessage message); + new IBuilder WeakMergeFrom(ByteString data); + new IBuilder WeakMergeFrom(ByteString data, ExtensionRegistry registry); + new IBuilder WeakMergeFrom(ICodedInputStream input); + new IBuilder WeakMergeFrom(ICodedInputStream input, ExtensionRegistry registry); + new IMessage WeakBuild(); + new IMessage WeakBuildPartial(); + new IBuilder WeakClone(); + new IMessage WeakDefaultInstanceForType { get; } + + #endregion + } + + /// + /// Interface implemented by Protocol Message builders. + /// TODO(jonskeet): Consider "SetXXX" methods returning the builder, as well as the properties. + /// + /// Type of message + /// Type of builder + public interface IBuilder : IBuilder, IBuilderLite + where TMessage : IMessage + where TBuilder : IBuilder + { + TBuilder SetUnknownFields(UnknownFieldSet unknownFields); + + /// + /// Resets all fields to their default values. + /// + new TBuilder Clear(); + + /// + /// Merge the specified other message which may be a different implementation of + /// the same message descriptor. + /// + TBuilder MergeFrom(IMessage other); + + /// + /// Constructs the final message. Once this is called, this Builder instance + /// is no longer valid, and calling any other method may throw a + /// NullReferenceException. If you need to continue working with the builder + /// after calling Build, call Clone first. + /// + /// the message + /// is missing one or more required fields; use BuildPartial to bypass + /// this check + new TMessage Build(); + + /// + /// Like Build(), but does not throw an exception if the message is missing + /// required fields. Instead, a partial message is returned. + /// + new TMessage BuildPartial(); + + /// + /// Clones this builder. + /// TODO(jonskeet): Explain depth of clone. + /// + new TBuilder Clone(); + + /// + /// Parses a message of this type from the input and merges it with this + /// message, as if using MergeFrom(IMessage<T>). + /// + /// + /// Warning: This does not verify that all required fields are present + /// in the input message. If you call Build() without setting all + /// required fields, it will throw an UninitializedMessageException. + /// There are a few good ways to deal with this: + /// + /// Call IsInitialized to verify to verify that all required fields are + /// set before building. + /// Parse the message separately using one of the static ParseFrom + /// methods, then use MergeFrom(IMessage<T>) to merge it with + /// this one. ParseFrom will throw an InvalidProtocolBufferException + /// (an IOException) if some required fields are missing. + /// Use BuildPartial to build, which ignores missing required fields. + /// + /// + new TBuilder MergeFrom(ICodedInputStream input); + + /// + /// Like MergeFrom(ICodedInputStream), but also parses extensions. + /// The extensions that you want to be able to parse must be registered + /// in . Extensions not in the registry + /// will be treated as unknown fields. + /// + new TBuilder MergeFrom(ICodedInputStream input, ExtensionRegistry extensionRegistry); + + /// + /// Get's the message's type's default instance. + /// + /// + new TMessage DefaultInstanceForType { get; } + + /// + /// Clears the field. This is exactly equivalent to calling the generated + /// Clear method corresponding to the field. + /// + /// + /// + TBuilder ClearField(FieldDescriptor field); + + /// + /// Appends the given value as a new element for the specified repeated field. + /// + /// the field is not a repeated field, + /// the field does not belong to this builder's type, or the value is + /// of the incorrect type + /// + TBuilder AddRepeatedField(FieldDescriptor field, object value); + + /// + /// Merge some unknown fields into the set for this message. + /// + TBuilder MergeUnknownFields(UnknownFieldSet unknownFields); + + /// + /// Like MergeFrom(Stream), but does not read until the end of the file. + /// Instead, the size of the message (encoded as a varint) is read first, + /// then the message data. Use Message.WriteDelimitedTo(Stream) to + /// write messages in this format. + /// + /// + new TBuilder MergeDelimitedFrom(Stream input); + + /// + /// Like MergeDelimitedFrom(Stream) but supporting extensions. + /// + new TBuilder MergeDelimitedFrom(Stream input, ExtensionRegistry extensionRegistry); + + #region Convenience methods + + /// + /// Parse as a message of this type and merge + /// it with the message being built. This is just a small wrapper around + /// MergeFrom(ICodedInputStream). + /// + new TBuilder MergeFrom(ByteString data); + + /// + /// Parse as a message of this type and merge + /// it with the message being built. This is just a small wrapper around + /// MergeFrom(ICodedInputStream, extensionRegistry). + /// + new TBuilder MergeFrom(ByteString data, ExtensionRegistry extensionRegistry); + + /// + /// Parse as a message of this type and merge + /// it with the message being built. This is just a small wrapper around + /// MergeFrom(ICodedInputStream). + /// + new TBuilder MergeFrom(byte[] data); + + /// + /// Parse as a message of this type and merge + /// it with the message being built. This is just a small wrapper around + /// MergeFrom(ICodedInputStream, extensionRegistry). + /// + new TBuilder MergeFrom(byte[] data, ExtensionRegistry extensionRegistry); + + /// + /// Parse as a message of this type and merge + /// it with the message being built. This is just a small wrapper around + /// MergeFrom(ICodedInputStream). Note that this method always reads + /// the entire input (unless it throws an exception). If you want it to + /// stop earlier, you will need to wrap the input in a wrapper + /// stream which limits reading. Or, use IMessage.WriteDelimitedTo(Stream) + /// to write your message and MmergeDelimitedFrom(Stream) to read it. + /// Despite usually reading the entire stream, this method never closes the stream. + /// + new TBuilder MergeFrom(Stream input); + + /// + /// Parse as a message of this type and merge + /// it with the message being built. This is just a small wrapper around + /// MergeFrom(ICodedInputStream, extensionRegistry). + /// + new TBuilder MergeFrom(Stream input, ExtensionRegistry extensionRegistry); + + #endregion + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/IBuilderLite.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/IBuilderLite.cs new file mode 100644 index 0000000000..64b0a83324 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/IBuilderLite.cs @@ -0,0 +1,213 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System.IO; + +namespace Google.ProtocolBuffers +{ + /// + /// Non-generic interface for all members whose signatures don't require knowledge of + /// the type being built. The generic interface extends this one. Some methods return + /// either an IBuilder or an IMessage; in these cases the generic interface redeclares + /// the same method with a type-specific signature. Implementations are encouraged to + /// use explicit interface implemenation for the non-generic form. This mirrors + /// how IEnumerable and IEnumerable<T> work. + /// + public partial interface IBuilderLite + { + /// + /// Returns true iff all required fields in the message and all + /// embedded messages are set. + /// + bool IsInitialized { get; } + + IBuilderLite WeakClear(); + IBuilderLite WeakMergeFrom(IMessageLite message); + IBuilderLite WeakMergeFrom(ByteString data); + IBuilderLite WeakMergeFrom(ByteString data, ExtensionRegistry registry); + IBuilderLite WeakMergeFrom(ICodedInputStream input); + IBuilderLite WeakMergeFrom(ICodedInputStream input, ExtensionRegistry registry); + IMessageLite WeakBuild(); + IMessageLite WeakBuildPartial(); + IBuilderLite WeakClone(); + IMessageLite WeakDefaultInstanceForType { get; } + } + + /// + /// Interface implemented by Protocol Message builders. + /// TODO(jonskeet): Consider "SetXXX" methods returning the builder, as well as the properties. + /// + /// Type of message + /// Type of builder + public interface IBuilderLite : IBuilderLite + where TMessage : IMessageLite + where TBuilder : IBuilderLite + { + /// + /// Resets all fields to their default values. + /// + TBuilder Clear(); + + /// + /// Merge the specified other message which may be a different implementation of + /// the same message descriptor. + /// + TBuilder MergeFrom(IMessageLite other); + + /// + /// Constructs the final message. Once this is called, this Builder instance + /// is no longer valid, and calling any other method may throw a + /// NullReferenceException. If you need to continue working with the builder + /// after calling Build, call Clone first. + /// + /// the message + /// is missing one or more required fields; use BuildPartial to bypass + /// this check + TMessage Build(); + + /// + /// Like Build(), but does not throw an exception if the message is missing + /// required fields. Instead, a partial message is returned. + /// + TMessage BuildPartial(); + + /// + /// Clones this builder. + /// TODO(jonskeet): Explain depth of clone. + /// + TBuilder Clone(); + + /// + /// Parses a message of this type from the input and merges it with this + /// message, as if using MergeFrom(IMessage<T>). + /// + /// + /// Warning: This does not verify that all required fields are present + /// in the input message. If you call Build() without setting all + /// required fields, it will throw an UninitializedMessageException. + /// There are a few good ways to deal with this: + /// + /// Call IsInitialized to verify to verify that all required fields are + /// set before building. + /// Parse the message separately using one of the static ParseFrom + /// methods, then use MergeFrom(IMessage<T>) to merge it with + /// this one. ParseFrom will throw an InvalidProtocolBufferException + /// (an IOException) if some required fields are missing. + /// Use BuildPartial to build, which ignores missing required fields. + /// + /// + TBuilder MergeFrom(ICodedInputStream input); + + /// + /// Like MergeFrom(ICodedInputStream), but also parses extensions. + /// The extensions that you want to be able to parse must be registered + /// in . Extensions not in the registry + /// will be treated as unknown fields. + /// + TBuilder MergeFrom(ICodedInputStream input, ExtensionRegistry extensionRegistry); + + /// + /// Get's the message's type's default instance. + /// + /// + TMessage DefaultInstanceForType { get; } + + /// + /// Like MergeFrom(Stream), but does not read until the end of the file. + /// Instead, the size of the message (encoded as a varint) is read first, + /// then the message data. Use Message.WriteDelimitedTo(Stream) to + /// write messages in this format. + /// + /// + TBuilder MergeDelimitedFrom(Stream input); + + /// + /// Like MergeDelimitedFrom(Stream) but supporting extensions. + /// + TBuilder MergeDelimitedFrom(Stream input, ExtensionRegistry extensionRegistry); + + #region Convenience methods + + /// + /// Parse as a message of this type and merge + /// it with the message being built. This is just a small wrapper around + /// MergeFrom(ICodedInputStream). + /// + TBuilder MergeFrom(ByteString data); + + /// + /// Parse as a message of this type and merge + /// it with the message being built. This is just a small wrapper around + /// MergeFrom(ICodedInputStream, ExtensionRegistry). + /// + TBuilder MergeFrom(ByteString data, ExtensionRegistry extensionRegistry); + + /// + /// Parse as a message of this type and merge + /// it with the message being built. This is just a small wrapper around + /// MergeFrom(ICodedInputStream). + /// + TBuilder MergeFrom(byte[] data); + + /// + /// Parse as a message of this type and merge + /// it with the message being built. This is just a small wrapper around + /// MergeFrom(ICodedInputStream, ExtensionRegistry). + /// + TBuilder MergeFrom(byte[] data, ExtensionRegistry extensionRegistry); + + /// + /// Parse as a message of this type and merge + /// it with the message being built. This is just a small wrapper around + /// MergeFrom(ICodedInputStream). Note that this method always reads + /// the entire input (unless it throws an exception). If you want it to + /// stop earlier, you will need to wrap the input in a wrapper + /// stream which limits reading. Or, use IMessage.WriteDelimitedTo(Stream) + /// to write your message and MmergeDelimitedFrom(Stream) to read it. + /// Despite usually reading the entire stream, this method never closes the stream. + /// + TBuilder MergeFrom(Stream input); + + /// + /// Parse as a message of this type and merge + /// it with the message being built. This is just a small wrapper around + /// MergeFrom(ICodedInputStream, ExtensionRegistry). + /// + TBuilder MergeFrom(Stream input, ExtensionRegistry extensionRegistry); + + #endregion + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/ICodedInputStream.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/ICodedInputStream.cs new file mode 100644 index 0000000000..e41d9473d4 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/ICodedInputStream.cs @@ -0,0 +1,345 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using Google.ProtocolBuffers.Descriptors; + +//Disable warning CS3010: CLS-compliant interfaces must have only CLS-compliant members +#pragma warning disable 3010 + +namespace Google.ProtocolBuffers +{ + public interface ICodedInputStream + { + /// + /// Reads any message initialization data expected from the input stream + /// + /// + /// This is primarily used by text formats and unnecessary for protobuffers' own + /// binary format. The API for MessageStart/End was added for consistent handling + /// of output streams regardless of the actual writer implementation. + /// + void ReadMessageStart(); + /// + /// Reads any message finalization data expected from the input stream + /// + /// + /// This is primarily used by text formats and unnecessary for protobuffers' own + /// binary format. The API for MessageStart/End was added for consistent handling + /// of output streams regardless of the actual writer implementation. + /// + void ReadMessageEnd(); + /// + /// Attempt to read a field tag, returning false if we have reached the end + /// of the input data. + /// + /// + /// + /// If fieldTag is non-zero and ReadTag returns true then the value in fieldName + /// may or may not be populated. However, if fieldTag is zero and ReadTag returns + /// true, then fieldName should be populated with a non-null field name. + /// + /// In other words if ReadTag returns true then either fieldTag will be non-zero OR + /// fieldName will be non-zero. In some cases both may be populated, however the + /// builders will always prefer the fieldTag over fieldName. + /// + /// + [CLSCompliant(false)] + bool ReadTag(out uint fieldTag, out string fieldName); + + /// + /// Read a double field from the stream. + /// + bool ReadDouble(ref double value); + + /// + /// Read a float field from the stream. + /// + bool ReadFloat(ref float value); + + /// + /// Read a uint64 field from the stream. + /// + [CLSCompliant(false)] + bool ReadUInt64(ref ulong value); + + /// + /// Read an int64 field from the stream. + /// + bool ReadInt64(ref long value); + + /// + /// Read an int32 field from the stream. + /// + bool ReadInt32(ref int value); + + /// + /// Read a fixed64 field from the stream. + /// + [CLSCompliant(false)] + bool ReadFixed64(ref ulong value); + + /// + /// Read a fixed32 field from the stream. + /// + [CLSCompliant(false)] + bool ReadFixed32(ref uint value); + + /// + /// Read a bool field from the stream. + /// + bool ReadBool(ref bool value); + + /// + /// Reads a string field from the stream. + /// + bool ReadString(ref string value); + + /// + /// Reads a group field value from the stream. + /// + void ReadGroup(int fieldNumber, IBuilderLite builder, + ExtensionRegistry extensionRegistry); + + /// + /// Reads a group field value from the stream and merges it into the given + /// UnknownFieldSet. + /// + [Obsolete] + void ReadUnknownGroup(int fieldNumber, IBuilderLite builder); + + /// + /// Reads an embedded message field value from the stream. + /// + void ReadMessage(IBuilderLite builder, ExtensionRegistry extensionRegistry); + + /// + /// Reads a bytes field value from the stream. + /// + bool ReadBytes(ref ByteString value); + + /// + /// Reads a uint32 field value from the stream. + /// + [CLSCompliant(false)] + bool ReadUInt32(ref uint value); + + /// + /// Reads an enum field value from the stream. The caller is responsible + /// for converting the numeric value to an actual enum. + /// + bool ReadEnum(ref IEnumLite value, out object unknown, IEnumLiteMap mapping); + + /// + /// Reads an enum field value from the stream. If the enum is valid for type T, + /// then the ref value is set and it returns true. Otherwise the unkown output + /// value is set and this method returns false. + /// + [CLSCompliant(false)] + bool ReadEnum(ref T value, out object unknown) + where T : struct, IComparable, IFormattable, IConvertible; + + /// + /// Reads an sfixed32 field value from the stream. + /// + bool ReadSFixed32(ref int value); + + /// + /// Reads an sfixed64 field value from the stream. + /// + bool ReadSFixed64(ref long value); + + /// + /// Reads an sint32 field value from the stream. + /// + bool ReadSInt32(ref int value); + + /// + /// Reads an sint64 field value from the stream. + /// + bool ReadSInt64(ref long value); + + /// + /// Reads an array of primitive values into the list, if the wire-type of fieldTag is length-prefixed and the + /// type is numeric, it will read a packed array. + /// + [CLSCompliant(false)] + void ReadPrimitiveArray(FieldType fieldType, uint fieldTag, string fieldName, ICollection list); + + /// + /// Reads an array of primitive values into the list, if the wire-type of fieldTag is length-prefixed, it will + /// read a packed array. + /// + [CLSCompliant(false)] + void ReadEnumArray(uint fieldTag, string fieldName, ICollection list, out ICollection unknown, + IEnumLiteMap mapping); + + /// + /// Reads an array of primitive values into the list, if the wire-type of fieldTag is length-prefixed, it will + /// read a packed array. + /// + [CLSCompliant(false)] + void ReadEnumArray(uint fieldTag, string fieldName, ICollection list, out ICollection unknown) + where T : struct, IComparable, IFormattable, IConvertible; + + /// + /// Reads a set of messages using the as a template. T is not guaranteed to be + /// the most derived type, it is only the type specifier for the collection. + /// + [CLSCompliant(false)] + void ReadMessageArray(uint fieldTag, string fieldName, ICollection list, T messageType, + ExtensionRegistry registry) where T : IMessageLite; + + /// + /// Reads a set of messages using the as a template. + /// + [CLSCompliant(false)] + void ReadGroupArray(uint fieldTag, string fieldName, ICollection list, T messageType, + ExtensionRegistry registry) where T : IMessageLite; + + /// + /// Reads a field of any primitive type. Enums, groups and embedded + /// messages are not handled by this method. + /// + bool ReadPrimitiveField(FieldType fieldType, ref object value); + + /// + /// Returns true if the stream has reached the end of the input. This is the + /// case if either the end of the underlying input source has been reached or + /// the stream has reached a limit created using PushLimit. + /// + bool IsAtEnd { get; } + + /// + /// Reads and discards a single field, given its tag value. + /// + /// false if the tag is an end-group tag, in which case + /// nothing is skipped. Otherwise, returns true. + [CLSCompliant(false)] + bool SkipField(); + + /// + /// Reads one or more repeated string field values from the stream. + /// + [CLSCompliant(false)] + void ReadStringArray(uint fieldTag, string fieldName, ICollection list); + + /// + /// Reads one or more repeated ByteString field values from the stream. + /// + [CLSCompliant(false)] + void ReadBytesArray(uint fieldTag, string fieldName, ICollection list); + + /// + /// Reads one or more repeated boolean field values from the stream. + /// + [CLSCompliant(false)] + void ReadBoolArray(uint fieldTag, string fieldName, ICollection list); + + /// + /// Reads one or more repeated Int32 field values from the stream. + /// + [CLSCompliant(false)] + void ReadInt32Array(uint fieldTag, string fieldName, ICollection list); + + /// + /// Reads one or more repeated SInt32 field values from the stream. + /// + [CLSCompliant(false)] + void ReadSInt32Array(uint fieldTag, string fieldName, ICollection list); + + /// + /// Reads one or more repeated UInt32 field values from the stream. + /// + [CLSCompliant(false)] + void ReadUInt32Array(uint fieldTag, string fieldName, ICollection list); + + /// + /// Reads one or more repeated Fixed32 field values from the stream. + /// + [CLSCompliant(false)] + void ReadFixed32Array(uint fieldTag, string fieldName, ICollection list); + + /// + /// Reads one or more repeated SFixed32 field values from the stream. + /// + [CLSCompliant(false)] + void ReadSFixed32Array(uint fieldTag, string fieldName, ICollection list); + + /// + /// Reads one or more repeated Int64 field values from the stream. + /// + [CLSCompliant(false)] + void ReadInt64Array(uint fieldTag, string fieldName, ICollection list); + + /// + /// Reads one or more repeated SInt64 field values from the stream. + /// + [CLSCompliant(false)] + void ReadSInt64Array(uint fieldTag, string fieldName, ICollection list); + + /// + /// Reads one or more repeated UInt64 field values from the stream. + /// + [CLSCompliant(false)] + void ReadUInt64Array(uint fieldTag, string fieldName, ICollection list); + + /// + /// Reads one or more repeated Fixed64 field values from the stream. + /// + [CLSCompliant(false)] + void ReadFixed64Array(uint fieldTag, string fieldName, ICollection list); + + /// + /// Reads one or more repeated SFixed64 field values from the stream. + /// + [CLSCompliant(false)] + void ReadSFixed64Array(uint fieldTag, string fieldName, ICollection list); + + /// + /// Reads one or more repeated Double field values from the stream. + /// + [CLSCompliant(false)] + void ReadDoubleArray(uint fieldTag, string fieldName, ICollection list); + + /// + /// Reads one or more repeated Float field values from the stream. + /// + [CLSCompliant(false)] + void ReadFloatArray(uint fieldTag, string fieldName, ICollection list); + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/ICodedOutputStream.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/ICodedOutputStream.cs new file mode 100644 index 0000000000..4aa03dae5a --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/ICodedOutputStream.cs @@ -0,0 +1,374 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections; +using System.Collections.Generic; +using Google.ProtocolBuffers.Descriptors; + +//Disable warning CS3010: CLS-compliant interfaces must have only CLS-compliant members +#pragma warning disable 3010 + +namespace Google.ProtocolBuffers +{ + /// + /// Provides an interface that is used write a message. Most often proto buffers are written + /// in their binary form by creating a instance via the CodedOutputStream.CreateInstance + /// static factory. + /// + public interface ICodedOutputStream + { + /// + /// Writes any message initialization data needed to the output stream + /// + /// + /// This is primarily used by text formats and unnecessary for protobuffers' own + /// binary format. The API for MessageStart/End was added for consistent handling + /// of output streams regardless of the actual writer implementation. + /// + void WriteMessageStart(); + /// + /// Writes any message finalization data needed to the output stream + /// + /// + /// This is primarily used by text formats and unnecessary for protobuffers' own + /// binary format. The API for MessageStart/End was added for consistent handling + /// of output streams regardless of the actual writer implementation. + /// + void WriteMessageEnd(); + /// + /// Indicates that all temporary buffers be written to the final output. + /// + void Flush(); + /// + /// Writes an unknown message as a group + /// + [Obsolete] + void WriteUnknownGroup(int fieldNumber, IMessageLite value); + /// + /// Writes an unknown field value of bytes + /// + void WriteUnknownBytes(int fieldNumber, ByteString value); + /// + /// Writes an unknown field of a primitive type + /// + [CLSCompliant(false)] + void WriteUnknownField(int fieldNumber, WireFormat.WireType wireType, ulong value); + /// + /// Writes an extension as a message-set group + /// + void WriteMessageSetExtension(int fieldNumber, string fieldName, IMessageLite value); + /// + /// Writes an unknown extension as a message-set group + /// + void WriteMessageSetExtension(int fieldNumber, string fieldName, ByteString value); + + /// + /// Writes a field value, including tag, to the stream. + /// + void WriteField(FieldType fieldType, int fieldNumber, string fieldName, object value); + + /// + /// Writes a double field value, including tag, to the stream. + /// + void WriteDouble(int fieldNumber, string fieldName, double value); + + /// + /// Writes a float field value, including tag, to the stream. + /// + void WriteFloat(int fieldNumber, string fieldName, float value); + + /// + /// Writes a uint64 field value, including tag, to the stream. + /// + [CLSCompliant(false)] + void WriteUInt64(int fieldNumber, string fieldName, ulong value); + + /// + /// Writes an int64 field value, including tag, to the stream. + /// + void WriteInt64(int fieldNumber, string fieldName, long value); + + /// + /// Writes an int32 field value, including tag, to the stream. + /// + void WriteInt32(int fieldNumber, string fieldName, int value); + + /// + /// Writes a fixed64 field value, including tag, to the stream. + /// + [CLSCompliant(false)] + void WriteFixed64(int fieldNumber, string fieldName, ulong value); + + /// + /// Writes a fixed32 field value, including tag, to the stream. + /// + [CLSCompliant(false)] + void WriteFixed32(int fieldNumber, string fieldName, uint value); + + /// + /// Writes a bool field value, including tag, to the stream. + /// + void WriteBool(int fieldNumber, string fieldName, bool value); + + /// + /// Writes a string field value, including tag, to the stream. + /// + void WriteString(int fieldNumber, string fieldName, string value); + + /// + /// Writes a group field value, including tag, to the stream. + /// + void WriteGroup(int fieldNumber, string fieldName, IMessageLite value); + + /// + /// Writes a message field value, including tag, to the stream. + /// + void WriteMessage(int fieldNumber, string fieldName, IMessageLite value); + + /// + /// Writes a byte array field value, including tag, to the stream. + /// + void WriteBytes(int fieldNumber, string fieldName, ByteString value); + + /// + /// Writes a UInt32 field value, including tag, to the stream. + /// + [CLSCompliant(false)] + void WriteUInt32(int fieldNumber, string fieldName, uint value); + + /// + /// Writes an enum field value, including tag, to the stream. + /// + void WriteEnum(int fieldNumber, string fieldName, int value, object rawValue); + + /// + /// Writes a fixed 32-bit field value, including tag, to the stream. + /// + void WriteSFixed32(int fieldNumber, string fieldName, int value); + + /// + /// Writes a signed fixed 64-bit field value, including tag, to the stream. + /// + void WriteSFixed64(int fieldNumber, string fieldName, long value); + + /// + /// Writes a signed 32-bit field value, including tag, to the stream. + /// + void WriteSInt32(int fieldNumber, string fieldName, int value); + + /// + /// Writes a signed 64-bit field value, including tag, to the stream. + /// + void WriteSInt64(int fieldNumber, string fieldName, long value); + + /// + /// Writes a repeated field value, including tag(s), to the stream. + /// + void WriteArray(FieldType fieldType, int fieldNumber, string fieldName, IEnumerable list); + + /// + /// Writes a repeated group value, including tag(s), to the stream. + /// + void WriteGroupArray(int fieldNumber, string fieldName, IEnumerable list) + where T : IMessageLite; + + /// + /// Writes a repeated message value, including tag(s), to the stream. + /// + void WriteMessageArray(int fieldNumber, string fieldName, IEnumerable list) + where T : IMessageLite; + + /// + /// Writes a repeated string value, including tag(s), to the stream. + /// + void WriteStringArray(int fieldNumber, string fieldName, IEnumerable list); + + /// + /// Writes a repeated ByteString value, including tag(s), to the stream. + /// + void WriteBytesArray(int fieldNumber, string fieldName, IEnumerable list); + + /// + /// Writes a repeated boolean value, including tag(s), to the stream. + /// + void WriteBoolArray(int fieldNumber, string fieldName, IEnumerable list); + + /// + /// Writes a repeated Int32 value, including tag(s), to the stream. + /// + void WriteInt32Array(int fieldNumber, string fieldName, IEnumerable list); + + /// + /// Writes a repeated SInt32 value, including tag(s), to the stream. + /// + void WriteSInt32Array(int fieldNumber, string fieldName, IEnumerable list); + + /// + /// Writes a repeated UInt32 value, including tag(s), to the stream. + /// + void WriteUInt32Array(int fieldNumber, string fieldName, IEnumerable list); + + /// + /// Writes a repeated Fixed32 value, including tag(s), to the stream. + /// + void WriteFixed32Array(int fieldNumber, string fieldName, IEnumerable list); + + /// + /// Writes a repeated SFixed32 value, including tag(s), to the stream. + /// + void WriteSFixed32Array(int fieldNumber, string fieldName, IEnumerable list); + + /// + /// Writes a repeated Int64 value, including tag(s), to the stream. + /// + void WriteInt64Array(int fieldNumber, string fieldName, IEnumerable list); + + /// + /// Writes a repeated SInt64 value, including tag(s), to the stream. + /// + void WriteSInt64Array(int fieldNumber, string fieldName, IEnumerable list); + + /// + /// Writes a repeated UInt64 value, including tag(s), to the stream. + /// + void WriteUInt64Array(int fieldNumber, string fieldName, IEnumerable list); + + /// + /// Writes a repeated Fixed64 value, including tag(s), to the stream. + /// + void WriteFixed64Array(int fieldNumber, string fieldName, IEnumerable list); + + /// + /// Writes a repeated SFixed64 value, including tag(s), to the stream. + /// + void WriteSFixed64Array(int fieldNumber, string fieldName, IEnumerable list); + + /// + /// Writes a repeated Double value, including tag(s), to the stream. + /// + void WriteDoubleArray(int fieldNumber, string fieldName, IEnumerable list); + + /// + /// Writes a repeated Float value, including tag(s), to the stream. + /// + void WriteFloatArray(int fieldNumber, string fieldName, IEnumerable list); + + /// + /// Writes a repeated enumeration value of type T, including tag(s), to the stream. + /// + [CLSCompliant(false)] + void WriteEnumArray(int fieldNumber, string fieldName, IEnumerable list) + where T : struct, IComparable, IFormattable, IConvertible; + + /// + /// Writes a packed repeated primitive, including tag and length, to the stream. + /// + void WritePackedArray(FieldType fieldType, int fieldNumber, string fieldName, IEnumerable list); + + /// + /// Writes a packed repeated boolean, including tag and length, to the stream. + /// + void WritePackedBoolArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list); + + /// + /// Writes a packed repeated Int32, including tag and length, to the stream. + /// + void WritePackedInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list); + + /// + /// Writes a packed repeated SInt32, including tag and length, to the stream. + /// + void WritePackedSInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list); + + /// + /// Writes a packed repeated UInt32, including tag and length, to the stream. + /// + void WritePackedUInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list); + + /// + /// Writes a packed repeated Fixed32, including tag and length, to the stream. + /// + void WritePackedFixed32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list); + + /// + /// Writes a packed repeated SFixed32, including tag and length, to the stream. + /// + void WritePackedSFixed32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list); + + /// + /// Writes a packed repeated Int64, including tag and length, to the stream. + /// + void WritePackedInt64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list); + + /// + /// Writes a packed repeated SInt64, including tag and length, to the stream. + /// + void WritePackedSInt64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list); + + /// + /// Writes a packed repeated UInt64, including tag and length, to the stream. + /// + void WritePackedUInt64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list); + + /// + /// Writes a packed repeated Fixed64, including tag and length, to the stream. + /// + void WritePackedFixed64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list); + + /// + /// Writes a packed repeated SFixed64, including tag and length, to the stream. + /// + void WritePackedSFixed64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list); + + /// + /// Writes a packed repeated Double, including tag and length, to the stream. + /// + void WritePackedDoubleArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list); + + /// + /// Writes a packed repeated Float, including tag and length, to the stream. + /// + void WritePackedFloatArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list); + + /// + /// Writes a packed repeated enumeration of type T, including tag and length, to the stream. + /// + [CLSCompliant(false)] + void WritePackedEnumArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable list) + where T : struct, IComparable, IFormattable, IConvertible; + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/IMessage.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/IMessage.cs new file mode 100644 index 0000000000..99f5964fac --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/IMessage.cs @@ -0,0 +1,249 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using System.IO; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + /// + /// Non-generic interface used for all parts of the API which don't require + /// any type knowledge. + /// + public interface IMessage : IMessageLite + { + /// + /// Returns the message's type's descriptor. This differs from the + /// Descriptor property of each generated message class in that this + /// method is an abstract method of IMessage whereas Descriptor is + /// a static property of a specific class. They return the same thing. + /// + MessageDescriptor DescriptorForType { get; } + + /// + /// Returns a collection of all the fields in this message which are set + /// and their corresponding values. A singular ("required" or "optional") + /// field is set iff HasField() returns true for that field. A "repeated" + /// field is set iff GetRepeatedFieldSize() is greater than zero. The + /// values are exactly what would be returned by calling + /// GetField(FieldDescriptor) for each field. The map + /// is guaranteed to be a sorted map, so iterating over it will return fields + /// in order by field number. + /// + IDictionary AllFields { get; } + + /// + /// Returns true if the given field is set. This is exactly equivalent + /// to calling the generated "Has" property corresponding to the field. + /// + /// the field is a repeated field, + /// or it's not a field of this type + bool HasField(FieldDescriptor field); + + /// + /// Obtains the value of the given field, or the default value if + /// it isn't set. For value type fields, the boxed value is returned. + /// For enum fields, the EnumValueDescriptor for the enum is returned. + /// For embedded message fields, the sub-message + /// is returned. For repeated fields, an IList<T> is returned. + /// + object this[FieldDescriptor field] { get; } + + /// + /// Returns the number of elements of a repeated field. This is + /// exactly equivalent to calling the generated "Count" property + /// corresponding to the field. + /// + /// the field is not a repeated field, + /// or it's not a field of this type + int GetRepeatedFieldCount(FieldDescriptor field); + + /// + /// Gets an element of a repeated field. For value type fields + /// excluding enums, the boxed value is returned. For embedded + /// message fields, the sub-message is returned. For enums, the + /// relevant EnumValueDescriptor is returned. + /// + /// the field is not a repeated field, + /// or it's not a field of this type + /// the index is out of + /// range for the repeated field's value + object this[FieldDescriptor field, int index] { get; } + + /// + /// Returns the unknown fields for this message. + /// + UnknownFieldSet UnknownFields { get; } + + /// + /// Returns true iff all required fields in the message and all embedded + /// messages are set. + /// + new bool IsInitialized { get; } + + /// + /// Serializes the message and writes it to the given output stream. + /// This does not flush or close the stream. + /// + /// + /// Protocol Buffers are not self-delimiting. Therefore, if you write + /// any more data to the stream after the message, you must somehow ensure + /// that the parser on the receiving end does not interpret this as being + /// part of the protocol message. One way of doing this is by writing the size + /// of the message before the data, then making sure you limit the input to + /// that size when receiving the data. Alternatively, use WriteDelimitedTo(Stream). + /// + new void WriteTo(ICodedOutputStream output); + + /// + /// Like WriteTo(Stream) but writes the size of the message as a varint before + /// writing the data. This allows more data to be written to the stream after the + /// message without the need to delimit the message data yourself. Use + /// IBuilder.MergeDelimitedFrom(Stream) or the static method + /// YourMessageType.ParseDelimitedFrom(Stream) to parse messages written by this method. + /// + /// + new void WriteDelimitedTo(Stream output); + + /// + /// Returns the number of bytes required to encode this message. + /// The result is only computed on the first call and memoized after that. + /// + new int SerializedSize { get; } + + #region Comparison and hashing + + /// + /// Compares the specified object with this message for equality. + /// Returns true iff the given object is a message of the same type + /// (as defined by DescriptorForType) and has identical values + /// for all its fields. + /// + new bool Equals(object other); + + /// + /// Returns the hash code value for this message. + /// TODO(jonskeet): Specify the hash algorithm, but better than the Java one! + /// + new int GetHashCode(); + + #endregion + + #region Convenience methods + + /// + /// Converts the message to a string in protocol buffer text format. + /// This is just a trivial wrapper around TextFormat.PrintToString. + /// + new string ToString(); + + /// + /// Serializes the message to a ByteString. This is a trivial wrapper + /// around WriteTo(ICodedOutputStream). + /// + new ByteString ToByteString(); + + /// + /// Serializes the message to a byte array. This is a trivial wrapper + /// around WriteTo(ICodedOutputStream). + /// + new byte[] ToByteArray(); + + /// + /// Serializes the message and writes it to the given stream. + /// This is just a wrapper around WriteTo(ICodedOutputStream). This + /// does not flush or close the stream. + /// + /// + new void WriteTo(Stream output); + + #endregion + + /// + /// Creates a builder for the type, but in a weakly typed manner. This + /// is typically implemented by strongly typed messages by just returning + /// the result of CreateBuilderForType. + /// + new IBuilder WeakCreateBuilderForType(); + + /// + /// Creates a builder with the same contents as this message. This + /// is typically implemented by strongly typed messages by just returning + /// the result of ToBuilder. + /// + new IBuilder WeakToBuilder(); + + new IMessage WeakDefaultInstanceForType { get; } + } + + public interface IMessage : IMessage, IMessageLite + { + /// + /// Returns an instance of this message type with all fields set to + /// their default values. This may or may not be a singleton. This differs + /// from the DefaultInstance property of each generated message class in that this + /// method is an abstract method of IMessage whereas DefaultInstance is + /// a static property of a specific class. They return the same thing. + /// + new TMessage DefaultInstanceForType { get; } + } + + /// + /// Type-safe interface for all generated messages to implement. + /// + public interface IMessage : IMessage, IMessageLite + where TMessage : IMessage + where TBuilder : IBuilder + { + #region Builders + + /// + /// Constructs a new builder for a message of the same type as this message. + /// + new TBuilder CreateBuilderForType(); + + /// + /// Creates a builder with the same contents as this current instance. + /// This is typically implemented by strongly typed messages by just + /// returning the result of ToBuilder(). + /// + new TBuilder ToBuilder(); + + #endregion + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/IMessageLite.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/IMessageLite.cs new file mode 100644 index 0000000000..ff4ce68274 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/IMessageLite.cs @@ -0,0 +1,188 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System.IO; + +namespace Google.ProtocolBuffers +{ + /// + /// Non-generic interface used for all parts of the API which don't require + /// any type knowledge. + /// + public partial interface IMessageLite + { + /// + /// Returns true iff all required fields in the message and all embedded + /// messages are set. + /// + bool IsInitialized { get; } + + /// + /// Serializes the message and writes it to the given output stream. + /// This does not flush or close the stream. + /// + /// + /// Protocol Buffers are not self-delimiting. Therefore, if you write + /// any more data to the stream after the message, you must somehow ensure + /// that the parser on the receiving end does not interpret this as being + /// part of the protocol message. One way of doing this is by writing the size + /// of the message before the data, then making sure you limit the input to + /// that size when receiving the data. Alternatively, use WriteDelimitedTo(Stream). + /// + void WriteTo(ICodedOutputStream output); + + /// + /// Like WriteTo(Stream) but writes the size of the message as a varint before + /// writing the data. This allows more data to be written to the stream after the + /// message without the need to delimit the message data yourself. Use + /// IBuilder.MergeDelimitedFrom(Stream) or the static method + /// YourMessageType.ParseDelimitedFrom(Stream) to parse messages written by this method. + /// + /// + void WriteDelimitedTo(Stream output); + + /// + /// Returns the number of bytes required to encode this message. + /// The result is only computed on the first call and memoized after that. + /// + int SerializedSize { get; } + + #region Comparison and hashing + + /// + /// Compares the specified object with this message for equality. + /// Returns true iff the given object is a message of the same type + /// (as defined by DescriptorForType) and has identical values + /// for all its fields. + /// + bool Equals(object other); + + /// + /// Returns the hash code value for this message. + /// TODO(jonskeet): Specify the hash algorithm, but better than the Java one! + /// + int GetHashCode(); + + #endregion + + #region Convenience methods + + /// + /// Converts the message to a string in protocol buffer text format. + /// This is just a trivial wrapper around TextFormat.PrintToString. + /// + string ToString(); + + /// + /// Converts the message to a string. + /// + void PrintTo(TextWriter writer); + + /// + /// Serializes the message to a ByteString. This is a trivial wrapper + /// around WriteTo(ICodedOutputStream). + /// + ByteString ToByteString(); + + /// + /// Serializes the message to a byte array. This is a trivial wrapper + /// around WriteTo(ICodedOutputStream). + /// + byte[] ToByteArray(); + + /// + /// Serializes the message and writes it to the given stream. + /// This is just a wrapper around WriteTo(ICodedOutputStream). This + /// does not flush or close the stream. + /// + /// + void WriteTo(Stream output); + + #endregion + + /// + /// Creates a builder for the type, but in a weakly typed manner. This + /// is typically implemented by strongly typed messages by just returning + /// the result of CreateBuilderForType. + /// + IBuilderLite WeakCreateBuilderForType(); + + /// + /// Creates a builder with the same contents as this message. This + /// is typically implemented by strongly typed messages by just returning + /// the result of ToBuilder. + /// + IBuilderLite WeakToBuilder(); + + IMessageLite WeakDefaultInstanceForType { get; } + } + + public interface IMessageLite : IMessageLite + { + /// + /// Returns an instance of this message type with all fields set to + /// their default values. This may or may not be a singleton. This differs + /// from the DefaultInstance property of each generated message class in that this + /// method is an abstract method of IMessage whereas DefaultInstance is + /// a static property of a specific class. They return the same thing. + /// + TMessage DefaultInstanceForType { get; } + } + + /// + /// Type-safe interface for all generated messages to implement. + /// + public interface IMessageLite : IMessageLite + where TMessage : IMessageLite + where TBuilder : IBuilderLite + { + #region Builders + + /// + /// Constructs a new builder for a message of the same type as this message. + /// + TBuilder CreateBuilderForType(); + + /// + /// Creates a builder with the same contents as this current instance. + /// This is typically implemented by strongly typed messages by just + /// returning the result of ToBuilder(). + /// + TBuilder ToBuilder(); + + #endregion + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/IRpcChannel.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/IRpcChannel.cs new file mode 100644 index 0000000000..7875d0a855 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/IRpcChannel.cs @@ -0,0 +1,63 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + /// + /// Interface for an RPC channel. A channel represents a communication line to + /// a service (IService implementation) which can be used to call that service's + /// methods. The service may be running on another machine. Normally, you should + /// not call an IRpcChannel directly, but instead construct a stub wrapping it. + /// Generated service classes contain a CreateStub method for precisely this purpose. + /// + public interface IRpcChannel + { + /// + /// Calls the given method of the remote service. This method is similar + /// to with one important difference: the + /// caller decides the types of the IMessage objects, not the implementation. + /// The request may be of any type as long as request.Descriptor == method.InputType. + /// The response passed to the callback will be of the same type as + /// (which must be such that + /// responsePrototype.Descriptor == method.OutputType). + /// + void CallMethod(MethodDescriptor method, IRpcController controller, + IMessage request, IMessage responsePrototype, Action done); + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/IRpcController.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/IRpcController.cs new file mode 100644 index 0000000000..98c6585c0b --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/IRpcController.cs @@ -0,0 +1,125 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; + +namespace Google.ProtocolBuffers +{ + /// + /// Mediates a single method call. The primary purpose of the controller + /// is to provide a way to manipulate settings specific to the + /// RPC implementation and to find out about RPC-level errors. + /// + /// The methods provided by this interface are intended to be a "least + /// common denominator" set of features which we expect all implementations to + /// support. Specific implementations may provide more advanced features, + /// (e.g. deadline propagation). + /// + public interface IRpcController + { + #region Client side calls + + // These calls may be made from the client side only. Their results + // are undefined on the server side (may throw exceptions). + + /// + /// Resets the controller to its initial state so that it may be reused in + /// a new call. This can be called from the client side only. It must not + /// be called while an RPC is in progress. + /// + void Reset(); + + /// + /// After a call has finished, returns true if the call failed. The possible + /// reasons for failure depend on the RPC implementation. Failed must + /// only be called on the client side, and must not be called before a call has + /// finished. + /// + bool Failed { get; } + + /// + /// If Failed is true, ErrorText returns a human-readable description of the error. + /// + string ErrorText { get; } + + /// + /// Advises the RPC system that the caller desires that the RPC call be + /// canceled. The RPC system may cancel it immediately, may wait awhile and + /// then cancel it, or may not even cancel the call at all. If the call is + /// canceled, the "done" callback will still be called and the RpcController + /// will indicate that the call failed at that time. + /// + void StartCancel(); + + #endregion + + #region Server side calls + + // These calls may be made from the server side only. Their results + // are undefined on the client side (may throw exceptions). + + /// + /// Causes Failed to return true on the client side. + /// will be incorporated into the message returned by ErrorText. + /// If you find you need to return machine-readable information about + /// failures, you should incorporate it into your response protocol buffer + /// and should *not* call SetFailed. + /// + void SetFailed(string reason); + + /// + /// If true, indicates that the client canceled the RPC, so the server may as + /// well give up on replying to it. This method must be called on the server + /// side only. The server should still call the final "done" callback. + /// + bool IsCanceled(); + + /// + /// Requests that the given callback be called when the RPC is canceled. + /// The parameter passed to the callback will always be null. The callback will + /// be called exactly once. If the RPC completes without being canceled, the + /// callback will be called after completion. If the RPC has already been canceled + /// when NotifyOnCancel is called, the callback will be called immediately. + /// + /// NotifyOnCancel must be called no more than once per request. It must be + /// called on the server side only. + /// + /// + void NotifyOnCancel(Action callback); + + #endregion + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/IRpcDispatch.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/IRpcDispatch.cs new file mode 100644 index 0000000000..cf8fbd78fd --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/IRpcDispatch.cs @@ -0,0 +1,78 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; + +namespace Google.ProtocolBuffers +{ + /// + /// Provides an entry-point for transport listeners to call a specified method on a service + /// + public interface IRpcServerStub : IDisposable + { + /// + /// Calls the method identified by methodName and returns the message + /// + /// The method name on the service descriptor (case-sensitive) + /// The ICodedInputStream to deserialize the call parameter from + /// The extension registry to use when deserializing the call parameter + /// The message that was returned from the service's method + IMessageLite CallMethod(string methodName, ICodedInputStream input, ExtensionRegistry registry); + } + + /// + /// Used to forward an invocation of a service method to a transport sender implementation + /// + public interface IRpcDispatch + { + /// + /// Calls the service member on the endpoint connected. This is generally done by serializing + /// the message, sending the bytes over a transport, and then deserializing the call parameter + /// to invoke the service's actual implementation via IRpcServerStub. Once the call has + /// completed the result message is serialized and returned to the originating endpoint. + /// + /// The type of the response message + /// The type of of the response builder + /// The name of the method on the service + /// The message instance provided to the service call + /// The builder used to deserialize the response + /// The resulting message of the service call + TMessage CallMethod(string method, IMessageLite request, + IBuilderLite response) + where TMessage : IMessageLite + where TBuilder : IBuilderLite; + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/IService.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/IService.cs new file mode 100644 index 0000000000..6e97ae1f86 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/IService.cs @@ -0,0 +1,102 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + /// + /// Base interface for protocol-buffer-based RPC services. Services themselves + /// are abstract classes (implemented either by servers or as stubs) but they + /// implement this itnerface. The methods of this interface can be used to call + /// the methods of the service without knowing its exact type at compile time + /// (analagous to the IMessage interface). + /// + public interface IService + { + /// + /// The ServiceDescriptor describing this service and its methods. + /// + ServiceDescriptor DescriptorForType { get; } + + /// + /// Call a method of the service specified by MethodDescriptor. This is + /// normally implemented as a simple switch that calls the standard + /// definitions of the service's methods. + /// + /// Preconditions + /// + /// method.Service == DescriptorForType + /// request is of the exact same class as the object returned by GetRequestPrototype(method) + /// controller is of the correct type for the RPC implementation being used by this service. + /// For stubs, the "correct type" depends on the IRpcChannel which the stub is using. Server-side + /// implementations are expected to accept whatever type of IRpcController the server-side RPC implementation + /// uses. + /// + /// + /// + /// Postconditions + /// + /// will be called when the method is complete. + /// This may before CallMethod returns or it may be at some point in the future. + /// The parameter to is the response. It will be of the + /// exact same type as would be returned by . + /// If the RPC failed, the parameter to will be null. + /// Further details about the failure can be found by querying . + /// + /// + /// + void CallMethod(MethodDescriptor method, IRpcController controller, + IMessage request, Action done); + + /// + /// CallMethod requires that the request passed in is of a particular implementation + /// of IMessage. This method gets the default instance of this type of a given method. + /// You can then call WeakCreateBuilderForType to create a builder to build an object which + /// you can then pass to CallMethod. + /// + IMessage GetRequestPrototype(MethodDescriptor method); + + /// + /// Like GetRequestPrototype, but returns a prototype of the response message. + /// This is generally not needed because the IService implementation contructs + /// the response message itself, but it may be useful in some cases to know ahead + /// of time what type of object will be returned. + /// + IMessage GetResponsePrototype(MethodDescriptor method); + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/InvalidProtocolBufferException.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/InvalidProtocolBufferException.cs new file mode 100644 index 0000000000..ae6bcacab8 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/InvalidProtocolBufferException.cs @@ -0,0 +1,112 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System.IO; + +namespace Google.ProtocolBuffers +{ + /// + /// Thrown when a protocol message being parsed is invalid in some way, + /// e.g. it contains a malformed varint or a negative byte length. + /// + public sealed class InvalidProtocolBufferException : IOException + { + internal InvalidProtocolBufferException(string message) + : base(message) + { + } + + public static InvalidProtocolBufferException TruncatedMessage() + { + return new InvalidProtocolBufferException( + "While parsing a protocol message, the input ended unexpectedly " + + "in the middle of a field. This could mean either than the " + + "input has been truncated or that an embedded message " + + "misreported its own length."); + } + + internal static InvalidProtocolBufferException NegativeSize() + { + return new InvalidProtocolBufferException( + "CodedInputStream encountered an embedded string or message " + + "which claimed to have negative size."); + } + + public static InvalidProtocolBufferException MalformedVarint() + { + return new InvalidProtocolBufferException( + "CodedInputStream encountered a malformed varint."); + } + + public static InvalidProtocolBufferException InvalidTag() + { + return new InvalidProtocolBufferException( + "Protocol message contained an invalid tag (zero)."); + } + + internal static InvalidProtocolBufferException InvalidEndTag() + { + return new InvalidProtocolBufferException( + "Protocol message end-group tag did not match expected tag."); + } + + internal static InvalidProtocolBufferException InvalidWireType() + { + return new InvalidProtocolBufferException( + "Protocol message tag had invalid wire type."); + } + + internal static InvalidProtocolBufferException RecursionLimitExceeded() + { + return new InvalidProtocolBufferException( + "Protocol message had too many levels of nesting. May be malicious. " + + "Use CodedInputStream.SetRecursionLimit() to increase the depth limit."); + } + + internal static InvalidProtocolBufferException SizeLimitExceeded() + { + return new InvalidProtocolBufferException( + "Protocol message was too large. May be malicious. " + + "Use CodedInputStream.SetSizeLimit() to increase the size limit."); + } + + internal static InvalidProtocolBufferException InvalidMessageStreamTag() + { + return new InvalidProtocolBufferException( + "Stream of protocol messages had invalid tag. Expected tag is length-delimited field 1."); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/MessageStreamIterator.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/MessageStreamIterator.cs new file mode 100644 index 0000000000..47533ddb1e --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/MessageStreamIterator.cs @@ -0,0 +1,244 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Reflection; + +namespace Google.ProtocolBuffers +{ + /// + /// Iterates over data created using a . + /// Unlike MessageStreamWriter, this class is not usually constructed directly with + /// a stream; instead it is provided with a way of opening a stream when iteration + /// is started. The stream is closed when the iteration is completed or the enumerator + /// is disposed. (This occurs naturally when using foreach.) + /// + public class MessageStreamIterator : IEnumerable + where TMessage : IMessage + { + private readonly StreamProvider streamProvider; + private readonly ExtensionRegistry extensionRegistry; + private readonly int sizeLimit; + + // Type.EmptyTypes isn't present on the compact framework + private static readonly Type[] EmptyTypes = new Type[0]; + + /// + /// Delegate created via reflection trickery (once per type) to create a builder + /// and read a message from a CodedInputStream with it. Note that unlike in Java, + /// there's one static field per constructed type. + /// + private static readonly Func messageReader = BuildMessageReader(); + + /// + /// Any exception (within reason) thrown within messageReader is caught and rethrown in the constructor. + /// This makes life a lot simpler for the caller. + /// + private static Exception typeInitializationException; + + /// + /// Creates the delegate later used to read messages. This is only called once per type, but to + /// avoid exceptions occurring at confusing times, if this fails it will set typeInitializationException + /// to the appropriate error and return null. + /// + private static Func BuildMessageReader() + { + try + { + Type builderType = FindBuilderType(); + + // Yes, it's redundant to find this again, but it's only the once... + MethodInfo createBuilderMethod = typeof (TMessage).GetMethod("CreateBuilder", EmptyTypes); + Delegate builderBuilder = Delegate.CreateDelegate( + typeof (Func<>).MakeGenericType(builderType), null, createBuilderMethod); + + MethodInfo buildMethod = typeof (MessageStreamIterator) + .GetMethod("BuildImpl", BindingFlags.Static | BindingFlags.NonPublic) + .MakeGenericMethod(typeof (TMessage), builderType); + + return (Func) Delegate.CreateDelegate( + typeof (Func), builderBuilder, buildMethod); + } + catch (ArgumentException e) + { + typeInitializationException = e; + } + catch (InvalidOperationException e) + { + typeInitializationException = e; + } + catch (InvalidCastException e) + { + // Can't see why this would happen, but best to know about it. + typeInitializationException = e; + } + return null; + } + + /// + /// Works out the builder type for TMessage, or throws an ArgumentException to explain why it can't. + /// + private static Type FindBuilderType() + { + MethodInfo createBuilderMethod = typeof (TMessage).GetMethod("CreateBuilder", EmptyTypes); + if (createBuilderMethod == null) + { + throw new ArgumentException("Message type " + typeof (TMessage).FullName + + " has no CreateBuilder method."); + } + if (createBuilderMethod.ReturnType == typeof (void)) + { + throw new ArgumentException("CreateBuilder method in " + typeof (TMessage).FullName + + " has void return type"); + } + Type builderType = createBuilderMethod.ReturnType; + Type messageInterface = typeof (IMessage<,>).MakeGenericType(typeof (TMessage), builderType); + Type builderInterface = typeof (IBuilder<,>).MakeGenericType(typeof (TMessage), builderType); + if (Array.IndexOf(typeof (TMessage).GetInterfaces(), messageInterface) == -1) + { + throw new ArgumentException("Message type " + typeof (TMessage) + " doesn't implement " + + messageInterface.FullName); + } + if (Array.IndexOf(builderType.GetInterfaces(), builderInterface) == -1) + { + throw new ArgumentException("Builder type " + typeof (TMessage) + " doesn't implement " + + builderInterface.FullName); + } + return builderType; + } + +// This is only ever fetched by reflection, so the compiler may +// complain that it's unused +#pragma warning disable 0169 + /// + /// Method we'll use to build messageReader, with the first parameter fixed to TMessage.CreateBuilder. Note that we + /// have to introduce another type parameter (TMessage2) as we can't constrain TMessage for just a single method + /// (and we can't do it at the type level because we don't know TBuilder). However, by constraining TMessage2 + /// to not only implement IMessage appropriately but also to derive from TMessage2, we can avoid doing a cast + /// for every message; the implicit reference conversion will be fine. In practice, TMessage2 and TMessage will + /// be the same type when we construct the generic method by reflection. + /// + private static TMessage BuildImpl(Func builderBuilder, CodedInputStream input, + ExtensionRegistry registry) + where TBuilder : IBuilder + where TMessage2 : TMessage, IMessage + { + TBuilder builder = builderBuilder(); + input.ReadMessage(builder, registry); + return builder.Build(); + } +#pragma warning restore 0414 + + private static readonly uint ExpectedTag = WireFormat.MakeTag(1, WireFormat.WireType.LengthDelimited); + + private MessageStreamIterator(StreamProvider streamProvider, ExtensionRegistry extensionRegistry, int sizeLimit) + { + if (messageReader == null) + { + throw typeInitializationException; + } + this.streamProvider = streamProvider; + this.extensionRegistry = extensionRegistry; + this.sizeLimit = sizeLimit; + } + + private MessageStreamIterator(StreamProvider streamProvider, ExtensionRegistry extensionRegistry) + : this(streamProvider, extensionRegistry, CodedInputStream.DefaultSizeLimit) + { + } + + /// + /// Creates a new instance which uses the same stream provider as this one, + /// but the specified extension registry. + /// + public MessageStreamIterator WithExtensionRegistry(ExtensionRegistry newRegistry) + { + return new MessageStreamIterator(streamProvider, newRegistry, sizeLimit); + } + + /// + /// Creates a new instance which uses the same stream provider and extension registry as this one, + /// but with the specified size limit. Note that this must be big enough for the largest message + /// and the tag and size preceding it. + /// + public MessageStreamIterator WithSizeLimit(int newSizeLimit) + { + return new MessageStreamIterator(streamProvider, extensionRegistry, newSizeLimit); + } + + public static MessageStreamIterator FromFile(string file) + { + return new MessageStreamIterator(() => File.OpenRead(file), ExtensionRegistry.Empty); + } + + public static MessageStreamIterator FromStreamProvider(StreamProvider streamProvider) + { + return new MessageStreamIterator(streamProvider, ExtensionRegistry.Empty); + } + + public IEnumerator GetEnumerator() + { + using (Stream stream = streamProvider()) + { + CodedInputStream input = CodedInputStream.CreateInstance(stream); + input.SetSizeLimit(sizeLimit); + uint tag; + string name; + while (input.ReadTag(out tag, out name)) + { + if ((tag == 0 && name == "item") || (tag == ExpectedTag)) + { + yield return messageReader(input, extensionRegistry); + } + else + { + throw InvalidProtocolBufferException.InvalidMessageStreamTag(); + } + + input.ResetSizeCounter(); + } + } + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/MessageStreamWriter.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/MessageStreamWriter.cs new file mode 100644 index 0000000000..02adece529 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/MessageStreamWriter.cs @@ -0,0 +1,70 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System.IO; + +namespace Google.ProtocolBuffers +{ + /// + /// Writes multiple messages to the same stream. Each message is written + /// as if it were an element of a repeated field 1 in a larger protocol buffer. + /// This class takes no ownership of the stream it is given; it never closes the + /// stream. + /// + public sealed class MessageStreamWriter where T : IMessage + { + private readonly CodedOutputStream codedOutput; + + /// + /// Creates an instance which writes to the given stream. + /// + /// Stream to write messages to. + public MessageStreamWriter(Stream output) + { + codedOutput = CodedOutputStream.CreateInstance(output); + } + + public void Write(T message) + { + codedOutput.WriteMessage(1, "item", message); + } + + public void Flush() + { + codedOutput.Flush(); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/MessageUtil.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/MessageUtil.cs new file mode 100644 index 0000000000..92b1843989 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/MessageUtil.cs @@ -0,0 +1,109 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Reflection; + +namespace Google.ProtocolBuffers +{ + /// + /// Utilities for arbitrary messages of an unknown type. This class does not use + /// generics precisely because it is designed for dynamically discovered types. + /// + public static class MessageUtil + { + /// + /// Returns the default message for the given type. If an exception is thrown + /// (directly from this code), the message will be suitable to be displayed to a user. + /// + /// + /// The type parameter is null. + /// The type doesn't implement IMessage, or doesn't + /// have a static DefaultMessage property of the same type, or is generic or abstract. + /// + public static IMessage GetDefaultMessage(Type type) + { + if (type == null) + { + throw new ArgumentNullException("type", "No type specified."); + } + if (type.IsAbstract || type.IsGenericTypeDefinition) + { + throw new ArgumentException("Unable to get a default message for an abstract or generic type (" + + type.FullName + ")"); + } + if (!typeof (IMessage).IsAssignableFrom(type)) + { + throw new ArgumentException("Unable to get a default message for non-message type (" + type.FullName + + ")"); + } + PropertyInfo property = type.GetProperty("DefaultInstance", + BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); + if (property == null) + { + throw new ArgumentException(type.FullName + " doesn't have a static DefaultInstance property"); + } + if (property.PropertyType != type) + { + throw new ArgumentException(type.FullName + ".DefaultInstance property is of the wrong type"); + } + return (IMessage) property.GetValue(null, null); + } + + /// + /// Returns the default message for the type with the given name. This is just + /// a convenience wrapper around calling Type.GetType and then GetDefaultMessage. + /// If an exception is thrown, the message will be suitable to be displayed to a user. + /// + /// + /// The typeName parameter is null. + /// The type doesn't implement IMessage, or doesn't + /// have a static DefaultMessage property of the same type, or can't be found. + public static IMessage GetDefaultMessage(string typeName) + { + if (typeName == null) + { + throw new ArgumentNullException("typeName", "No type name specified."); + } + Type type = Type.GetType(typeName); + if (type == null) + { + throw new ArgumentException("Unable to load type " + typeName); + } + return GetDefaultMessage(type); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/NameHelpers.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/NameHelpers.cs new file mode 100644 index 0000000000..b1068bf5b4 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/NameHelpers.cs @@ -0,0 +1,140 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Text.RegularExpressions; + +namespace Google.ProtocolBuffers +{ + /// + /// Helpers for converting names to pascal case etc. + /// + public class NameHelpers + { + /// + /// All characters that are not alpha-numeric + /// + private static readonly Regex NonAlphaNumericCharacters = new Regex(@"[^a-zA-Z0-9]+"); + + /// + /// Matches lower-case character that follow either an underscore, or a number + /// + private static readonly Regex UnderscoreOrNumberWithLowerCase = new Regex(@"[0-9_][a-z]"); + + /// + /// Removes non alpha numeric characters while capitalizing letters that follow + /// a number or underscore. The first letter is always upper case. + /// + public static string UnderscoresToPascalCase(string input) + { + string name = UnderscoresToUpperCase(input); + + // Pascal case always begins with upper-case letter + if (Char.IsLower(name[0])) + { + char[] chars = name.ToCharArray(); + chars[0] = char.ToUpper(chars[0]); + return new string(chars); + } + return name; + } + + /// + /// Removes non alpha numeric characters while capitalizing letters that follow + /// a number or underscore. The first letter is always lower case. + /// + public static string UnderscoresToCamelCase(string input) + { + string name = UnderscoresToUpperCase(input); + + // Camel case always begins with lower-case letter + if (Char.IsUpper(name[0])) + { + char[] chars = name.ToCharArray(); + chars[0] = char.ToLower(chars[0]); + return new string(chars); + } + return name; + } + + /// + /// Capitalizes any characters following an '_' or a number '0' - '9' and removes + /// all non alpha-numeric characters. If the resulting string begins with a number + /// an '_' will be prefixed. + /// + private static string UnderscoresToUpperCase(string input) + { + string name = UnderscoreOrNumberWithLowerCase.Replace(input, x => x.Value.ToUpper()); + name = NonAlphaNumericCharacters.Replace(name, String.Empty); + + if (name.Length == 0) + { + throw new ArgumentException(String.Format("The field name '{0}' is invalid.", input)); + } + + // Fields can not start with a number + if (Char.IsNumber(name[0])) + { + name = '_' + name; + } + + return name; + } + + internal static string StripProto(string text) + { + if (!StripSuffix(ref text, ".protodevel")) + { + StripSuffix(ref text, ".proto"); + } + return text; + } + + /// + /// Attempts to strip a suffix from a string, returning whether + /// or not the suffix was actually present. + /// + public static bool StripSuffix(ref string text, string suffix) + { + if (text.EndsWith(suffix)) + { + text = text.Substring(0, text.Length - suffix.Length); + return true; + } + return false; + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj b/build/source/HeuristicLab.Build/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj new file mode 100644 index 0000000000..21058f095d --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj @@ -0,0 +1,7 @@ + + + netstandard2.0 + $(SolutionDir)..\bin + false + + \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/RpcUtil.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/RpcUtil.cs new file mode 100644 index 0000000000..69f6d055e4 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/RpcUtil.cs @@ -0,0 +1,79 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; + +namespace Google.ProtocolBuffers +{ + /// + /// Grab-bag of utility functions useful when dealing with RPCs. + /// + public static class RpcUtil + { + /// + /// Converts an Action[IMessage] to an Action[T]. + /// + public static Action SpecializeCallback(Action action) + where T : IMessage + { + return message => action(message); + } + + /// + /// Converts an Action[T] to an Action[IMessage]. + /// The generalized action will accept any message object which has + /// the same descriptor, and will convert it to the correct class + /// before calling the original action. However, if the generalized + /// callback is given a message with a different descriptor, an + /// exception will be thrown. + /// + public static Action GeneralizeCallback(Action action, + TMessage defaultInstance) + where TMessage : class, IMessage + where TBuilder : IBuilder + { + return message => + { + TMessage castMessage = message as TMessage; + if (castMessage == null) + { + castMessage = defaultInstance.CreateBuilderForType().MergeFrom(message).Build(); + } + action(castMessage); + }; + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/SilverlightCompatibility.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/SilverlightCompatibility.cs new file mode 100644 index 0000000000..a33cea3ad9 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/SilverlightCompatibility.cs @@ -0,0 +1,52 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System.Text.RegularExpressions; + +namespace Google.ProtocolBuffers +{ + /// + /// Class containing helpful workarounds for Silverlight compatibility + /// + internal static class SilverlightCompatibility + { +#if SILVERLIGHT + internal const RegexOptions CompiledRegexWhereAvailable = RegexOptions.None; +#else + internal const RegexOptions CompiledRegexWhereAvailable = RegexOptions.Compiled; +#endif + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/SortedList.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/SortedList.cs new file mode 100644 index 0000000000..31abe7fbed --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/SortedList.cs @@ -0,0 +1,169 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +#if SILVERLIGHT +using System.Collections; +using System.Collections.Generic; + +namespace Google.ProtocolBuffers +{ + /// + /// Dictionary implementation which always yields keys in sorted order. + /// This is not particularly efficient: it wraps a normal dictionary + /// for most operations, but sorts by key when either iterating or + /// fetching the Keys/Values properties. + /// This is only used for Silverlight, which doesn't have the normal + /// sorted collections. + /// + internal sealed class SortedList : IDictionary + { + private readonly IDictionary wrapped = new Dictionary(); + + public SortedList() + { + } + + public SortedList(IDictionary dictionary) + { + foreach (KeyValuePair entry in dictionary) + { + Add(entry.Key, entry.Value); + } + } + + public void Add(TKey key, TValue value) + { + wrapped.Add(key, value); + } + + public bool ContainsKey(TKey key) + { + return wrapped.ContainsKey(key); + } + + public ICollection Keys + { + get + { + List keys = new List(wrapped.Count); + foreach (var pair in this) + { + keys.Add(pair.Key); + } + return keys; + } + } + + public bool Remove(TKey key) + { + return wrapped.Remove(key); + } + + public bool TryGetValue(TKey key, out TValue value) + { + return wrapped.TryGetValue(key, out value); + } + + public ICollection Values + { + get + { + List values = new List(wrapped.Count); + foreach (var pair in this) + { + values.Add(pair.Value); + } + return values; + } + } + + public TValue this[TKey key] + { + get { return wrapped[key]; } + set { wrapped[key] = value; } + } + + public void Add(KeyValuePair item) + { + wrapped.Add(item); + } + + public void Clear() + { + wrapped.Clear(); + } + + public bool Contains(KeyValuePair item) + { + return wrapped.Contains(item); + } + + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + wrapped.CopyTo(array, arrayIndex); + } + + public int Count + { + get { return wrapped.Count; } + } + + public bool IsReadOnly + { + get { return wrapped.IsReadOnly; } + } + + public bool Remove(KeyValuePair item) + { + return wrapped.Remove(item); + } + + public IEnumerator> GetEnumerator() + { + IComparer comparer = Comparer.Default; + var list = new List>(wrapped); + list.Sort((x, y) => comparer.Compare(x.Key, y.Key)); + return list.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} + +#endif \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/TextFormat.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/TextFormat.cs new file mode 100644 index 0000000000..03a155707e --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/TextFormat.cs @@ -0,0 +1,869 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + /// + /// Provides ASCII text formatting support for messages. + /// TODO(jonskeet): Support for alternative line endings. + /// (Easy to print, via TextGenerator. Not sure about parsing.) + /// + public static class TextFormat + { + /// + /// Outputs a textual representation of the Protocol Message supplied into + /// the parameter output. + /// + public static void Print(IMessage message, TextWriter output) + { + TextGenerator generator = new TextGenerator(output, "\n"); + Print(message, generator); + } + + /// + /// Outputs a textual representation of to . + /// + public static void Print(UnknownFieldSet fields, TextWriter output) + { + TextGenerator generator = new TextGenerator(output, "\n"); + PrintUnknownFields(fields, generator); + } + + public static string PrintToString(IMessage message) + { + StringWriter text = new StringWriter(); + Print(message, text); + return text.ToString(); + } + + public static string PrintToString(UnknownFieldSet fields) + { + StringWriter text = new StringWriter(); + Print(fields, text); + return text.ToString(); + } + + private static void Print(IMessage message, TextGenerator generator) + { + foreach (KeyValuePair entry in message.AllFields) + { + PrintField(entry.Key, entry.Value, generator); + } + PrintUnknownFields(message.UnknownFields, generator); + } + + internal static void PrintField(FieldDescriptor field, object value, TextGenerator generator) + { + if (field.IsRepeated) + { + // Repeated field. Print each element. + foreach (object element in (IEnumerable) value) + { + PrintSingleField(field, element, generator); + } + } + else + { + PrintSingleField(field, value, generator); + } + } + + private static void PrintSingleField(FieldDescriptor field, Object value, TextGenerator generator) + { + if (field.IsExtension) + { + generator.Print("["); + // We special-case MessageSet elements for compatibility with proto1. + if (field.ContainingType.Options.MessageSetWireFormat + && field.FieldType == FieldType.Message + && field.IsOptional + // object equality (TODO(jonskeet): Work out what this comment means!) + && field.ExtensionScope == field.MessageType) + { + generator.Print(field.MessageType.FullName); + } + else + { + generator.Print(field.FullName); + } + generator.Print("]"); + } + else + { + if (field.FieldType == FieldType.Group) + { + // Groups must be serialized with their original capitalization. + generator.Print(field.MessageType.Name); + } + else + { + generator.Print(field.Name); + } + } + + if (field.MappedType == MappedType.Message) + { + generator.Print(" {\n"); + generator.Indent(); + } + else + { + generator.Print(": "); + } + + PrintFieldValue(field, value, generator); + + if (field.MappedType == MappedType.Message) + { + generator.Outdent(); + generator.Print("}"); + } + generator.Print("\n"); + } + + private static void PrintFieldValue(FieldDescriptor field, object value, TextGenerator generator) + { + switch (field.FieldType) + { + // The Float and Double types must specify the "r" format to preserve their precision, otherwise, + // the double to/from string will trim the precision to 6 places. As with other numeric formats + // below, always use the invariant culture so it's predictable. + case FieldType.Float: + generator.Print(((float) value).ToString("r", CultureInfo.InvariantCulture)); + break; + case FieldType.Double: + generator.Print(((double) value).ToString("r", CultureInfo.InvariantCulture)); + break; + + case FieldType.Int32: + case FieldType.Int64: + case FieldType.SInt32: + case FieldType.SInt64: + case FieldType.SFixed32: + case FieldType.SFixed64: + case FieldType.UInt32: + case FieldType.UInt64: + case FieldType.Fixed32: + case FieldType.Fixed64: + // The simple Object.ToString converts using the current culture. + // We want to always use the invariant culture so it's predictable. + generator.Print(((IConvertible) value).ToString(CultureInfo.InvariantCulture)); + break; + case FieldType.Bool: + // Explicitly use the Java true/false + generator.Print((bool) value ? "true" : "false"); + break; + + case FieldType.String: + generator.Print("\""); + generator.Print(EscapeText((string) value)); + generator.Print("\""); + break; + + case FieldType.Bytes: + { + generator.Print("\""); + generator.Print(EscapeBytes((ByteString) value)); + generator.Print("\""); + break; + } + + case FieldType.Enum: + { + if (value is IEnumLite && !(value is EnumValueDescriptor)) + { + throw new NotSupportedException("Lite enumerations are not supported."); + } + generator.Print(((EnumValueDescriptor) value).Name); + break; + } + + case FieldType.Message: + case FieldType.Group: + if (value is IMessageLite && !(value is IMessage)) + { + throw new NotSupportedException("Lite messages are not supported."); + } + Print((IMessage) value, generator); + break; + } + } + + private static void PrintUnknownFields(UnknownFieldSet unknownFields, TextGenerator generator) + { + foreach (KeyValuePair entry in unknownFields.FieldDictionary) + { + String prefix = entry.Key.ToString() + ": "; + UnknownField field = entry.Value; + + foreach (ulong value in field.VarintList) + { + generator.Print(prefix); + generator.Print(value.ToString()); + generator.Print("\n"); + } + foreach (uint value in field.Fixed32List) + { + generator.Print(prefix); + generator.Print(string.Format("0x{0:x8}", value)); + generator.Print("\n"); + } + foreach (ulong value in field.Fixed64List) + { + generator.Print(prefix); + generator.Print(string.Format("0x{0:x16}", value)); + generator.Print("\n"); + } + foreach (ByteString value in field.LengthDelimitedList) + { + generator.Print(entry.Key.ToString()); + generator.Print(": \""); + generator.Print(EscapeBytes(value)); + generator.Print("\"\n"); + } + foreach (UnknownFieldSet value in field.GroupList) + { + generator.Print(entry.Key.ToString()); + generator.Print(" {\n"); + generator.Indent(); + PrintUnknownFields(value, generator); + generator.Outdent(); + generator.Print("}\n"); + } + } + } + + [CLSCompliant(false)] + public static ulong ParseUInt64(string text) + { + return (ulong) ParseInteger(text, false, true); + } + + public static long ParseInt64(string text) + { + return ParseInteger(text, true, true); + } + + [CLSCompliant(false)] + public static uint ParseUInt32(string text) + { + return (uint) ParseInteger(text, false, false); + } + + public static int ParseInt32(string text) + { + return (int) ParseInteger(text, true, false); + } + + public static float ParseFloat(string text) + { + switch (text) + { + case "-inf": + case "-infinity": + case "-inff": + case "-infinityf": + return float.NegativeInfinity; + case "inf": + case "infinity": + case "inff": + case "infinityf": + return float.PositiveInfinity; + case "nan": + case "nanf": + return float.NaN; + default: + return float.Parse(text, CultureInfo.InvariantCulture); + } + } + + public static double ParseDouble(string text) + { + switch (text) + { + case "-inf": + case "-infinity": + return double.NegativeInfinity; + case "inf": + case "infinity": + return double.PositiveInfinity; + case "nan": + return double.NaN; + default: + return double.Parse(text, CultureInfo.InvariantCulture); + } + } + + /// + /// Parses an integer in hex (leading 0x), decimal (no prefix) or octal (leading 0). + /// Only a negative sign is permitted, and it must come before the radix indicator. + /// + private static long ParseInteger(string text, bool isSigned, bool isLong) + { + string original = text; + bool negative = false; + if (text.StartsWith("-")) + { + if (!isSigned) + { + throw new FormatException("Number must be positive: " + original); + } + negative = true; + text = text.Substring(1); + } + + int radix = 10; + if (text.StartsWith("0x")) + { + radix = 16; + text = text.Substring(2); + } + else if (text.StartsWith("0")) + { + radix = 8; + } + + ulong result; + try + { + // Workaround for https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=278448 + // We should be able to use Convert.ToUInt64 for all cases. + result = radix == 10 ? ulong.Parse(text) : Convert.ToUInt64(text, radix); + } + catch (OverflowException) + { + // Convert OverflowException to FormatException so there's a single exception type this method can throw. + string numberDescription = string.Format("{0}-bit {1}signed integer", isLong ? 64 : 32, + isSigned ? "" : "un"); + throw new FormatException("Number out of range for " + numberDescription + ": " + original); + } + + if (negative) + { + ulong max = isLong ? 0x8000000000000000UL : 0x80000000L; + if (result > max) + { + string numberDescription = string.Format("{0}-bit signed integer", isLong ? 64 : 32); + throw new FormatException("Number out of range for " + numberDescription + ": " + original); + } + return -((long) result); + } + else + { + ulong max = isSigned + ? (isLong ? (ulong) long.MaxValue : int.MaxValue) + : (isLong ? ulong.MaxValue : uint.MaxValue); + if (result > max) + { + string numberDescription = string.Format("{0}-bit {1}signed integer", isLong ? 64 : 32, + isSigned ? "" : "un"); + throw new FormatException("Number out of range for " + numberDescription + ": " + original); + } + return (long) result; + } + } + + /// + /// Tests a character to see if it's an octal digit. + /// + private static bool IsOctal(char c) + { + return '0' <= c && c <= '7'; + } + + /// + /// Tests a character to see if it's a hex digit. + /// + private static bool IsHex(char c) + { + return ('0' <= c && c <= '9') || + ('a' <= c && c <= 'f') || + ('A' <= c && c <= 'F'); + } + + /// + /// Interprets a character as a digit (in any base up to 36) and returns the + /// numeric value. + /// + private static int ParseDigit(char c) + { + if ('0' <= c && c <= '9') + { + return c - '0'; + } + else if ('a' <= c && c <= 'z') + { + return c - 'a' + 10; + } + else + { + return c - 'A' + 10; + } + } + + /// + /// Unescapes a text string as escaped using . + /// Two-digit hex escapes (starting with "\x" are also recognised. + /// + public static string UnescapeText(string input) + { + return UnescapeBytes(input).ToStringUtf8(); + } + + /// + /// Like but escapes a text string. + /// The string is first encoded as UTF-8, then each byte escaped individually. + /// The returned value is guaranteed to be entirely ASCII. + /// + public static string EscapeText(string input) + { + return EscapeBytes(ByteString.CopyFromUtf8(input)); + } + + /// + /// Escapes bytes in the format used in protocol buffer text format, which + /// is the same as the format used for C string literals. All bytes + /// that are not printable 7-bit ASCII characters are escaped, as well as + /// backslash, single-quote, and double-quote characters. Characters for + /// which no defined short-hand escape sequence is defined will be escaped + /// using 3-digit octal sequences. + /// The returned value is guaranteed to be entirely ASCII. + /// + public static String EscapeBytes(ByteString input) + { + StringBuilder builder = new StringBuilder(input.Length); + foreach (byte b in input) + { + switch (b) + { + // C# does not use \a or \v + case 0x07: + builder.Append("\\a"); + break; + case (byte) '\b': + builder.Append("\\b"); + break; + case (byte) '\f': + builder.Append("\\f"); + break; + case (byte) '\n': + builder.Append("\\n"); + break; + case (byte) '\r': + builder.Append("\\r"); + break; + case (byte) '\t': + builder.Append("\\t"); + break; + case 0x0b: + builder.Append("\\v"); + break; + case (byte) '\\': + builder.Append("\\\\"); + break; + case (byte) '\'': + builder.Append("\\\'"); + break; + case (byte) '"': + builder.Append("\\\""); + break; + default: + if (b >= 0x20 && b < 128) + { + builder.Append((char) b); + } + else + { + builder.Append('\\'); + builder.Append((char) ('0' + ((b >> 6) & 3))); + builder.Append((char) ('0' + ((b >> 3) & 7))); + builder.Append((char) ('0' + (b & 7))); + } + break; + } + } + return builder.ToString(); + } + + /// + /// Performs string unescaping from C style (octal, hex, form feeds, tab etc) into a byte string. + /// + public static ByteString UnescapeBytes(string input) + { + byte[] result = new byte[input.Length]; + int pos = 0; + for (int i = 0; i < input.Length; i++) + { + char c = input[i]; + if (c > 127 || c < 32) + { + throw new FormatException("Escaped string must only contain ASCII"); + } + if (c != '\\') + { + result[pos++] = (byte) c; + continue; + } + if (i + 1 >= input.Length) + { + throw new FormatException("Invalid escape sequence: '\\' at end of string."); + } + + i++; + c = input[i]; + if (c >= '0' && c <= '7') + { + // Octal escape. + int code = ParseDigit(c); + if (i + 1 < input.Length && IsOctal(input[i + 1])) + { + i++; + code = code*8 + ParseDigit(input[i]); + } + if (i + 1 < input.Length && IsOctal(input[i + 1])) + { + i++; + code = code*8 + ParseDigit(input[i]); + } + result[pos++] = (byte) code; + } + else + { + switch (c) + { + case 'a': + result[pos++] = 0x07; + break; + case 'b': + result[pos++] = (byte) '\b'; + break; + case 'f': + result[pos++] = (byte) '\f'; + break; + case 'n': + result[pos++] = (byte) '\n'; + break; + case 'r': + result[pos++] = (byte) '\r'; + break; + case 't': + result[pos++] = (byte) '\t'; + break; + case 'v': + result[pos++] = 0x0b; + break; + case '\\': + result[pos++] = (byte) '\\'; + break; + case '\'': + result[pos++] = (byte) '\''; + break; + case '"': + result[pos++] = (byte) '\"'; + break; + + case 'x': + // hex escape + int code; + if (i + 1 < input.Length && IsHex(input[i + 1])) + { + i++; + code = ParseDigit(input[i]); + } + else + { + throw new FormatException("Invalid escape sequence: '\\x' with no digits"); + } + if (i + 1 < input.Length && IsHex(input[i + 1])) + { + ++i; + code = code*16 + ParseDigit(input[i]); + } + result[pos++] = (byte) code; + break; + + default: + throw new FormatException("Invalid escape sequence: '\\" + c + "'"); + } + } + } + + return ByteString.CopyFrom(result, 0, pos); + } + + public static void Merge(string text, IBuilder builder) + { + Merge(text, ExtensionRegistry.Empty, builder); + } + + public static void Merge(TextReader reader, IBuilder builder) + { + Merge(reader, ExtensionRegistry.Empty, builder); + } + + public static void Merge(TextReader reader, ExtensionRegistry registry, IBuilder builder) + { + Merge(reader.ReadToEnd(), registry, builder); + } + + public static void Merge(string text, ExtensionRegistry registry, IBuilder builder) + { + TextTokenizer tokenizer = new TextTokenizer(text); + + while (!tokenizer.AtEnd) + { + MergeField(tokenizer, registry, builder); + } + } + + /// + /// Parses a single field from the specified tokenizer and merges it into + /// the builder. + /// + private static void MergeField(TextTokenizer tokenizer, ExtensionRegistry extensionRegistry, + IBuilder builder) + { + FieldDescriptor field; + MessageDescriptor type = builder.DescriptorForType; + ExtensionInfo extension = null; + + if (tokenizer.TryConsume("[")) + { + // An extension. + StringBuilder name = new StringBuilder(tokenizer.ConsumeIdentifier()); + while (tokenizer.TryConsume(".")) + { + name.Append("."); + name.Append(tokenizer.ConsumeIdentifier()); + } + + extension = extensionRegistry.FindByName(type, name.ToString()); + + if (extension == null) + { + throw tokenizer.CreateFormatExceptionPreviousToken("Extension \"" + name + + "\" not found in the ExtensionRegistry."); + } + else if (extension.Descriptor.ContainingType != type) + { + throw tokenizer.CreateFormatExceptionPreviousToken("Extension \"" + name + + "\" does not extend message type \"" + + type.FullName + "\"."); + } + + tokenizer.Consume("]"); + + field = extension.Descriptor; + } + else + { + String name = tokenizer.ConsumeIdentifier(); + field = type.FindDescriptor(name); + + // Group names are expected to be capitalized as they appear in the + // .proto file, which actually matches their type names, not their field + // names. + if (field == null) + { + // Explicitly specify the invariant culture so that this code does not break when + // executing in Turkey. + String lowerName = name.ToLower(CultureInfo.InvariantCulture); + field = type.FindDescriptor(lowerName); + // If the case-insensitive match worked but the field is NOT a group, + // TODO(jonskeet): What? Java comment ends here! + if (field != null && field.FieldType != FieldType.Group) + { + field = null; + } + } + // Again, special-case group names as described above. + if (field != null && field.FieldType == FieldType.Group && field.MessageType.Name != name) + { + field = null; + } + + if (field == null) + { + throw tokenizer.CreateFormatExceptionPreviousToken( + "Message type \"" + type.FullName + "\" has no field named \"" + name + "\"."); + } + } + + object value = null; + + if (field.MappedType == MappedType.Message) + { + tokenizer.TryConsume(":"); // optional + + String endToken; + if (tokenizer.TryConsume("<")) + { + endToken = ">"; + } + else + { + tokenizer.Consume("{"); + endToken = "}"; + } + + IBuilder subBuilder; + if (extension == null) + { + subBuilder = builder.CreateBuilderForField(field); + } + else + { + subBuilder = extension.DefaultInstance.WeakCreateBuilderForType() as IBuilder; + if (subBuilder == null) + { + throw new NotSupportedException("Lite messages are not supported."); + } + } + + while (!tokenizer.TryConsume(endToken)) + { + if (tokenizer.AtEnd) + { + throw tokenizer.CreateFormatException("Expected \"" + endToken + "\"."); + } + MergeField(tokenizer, extensionRegistry, subBuilder); + } + + value = subBuilder.WeakBuild(); + } + else + { + tokenizer.Consume(":"); + + switch (field.FieldType) + { + case FieldType.Int32: + case FieldType.SInt32: + case FieldType.SFixed32: + value = tokenizer.ConsumeInt32(); + break; + + case FieldType.Int64: + case FieldType.SInt64: + case FieldType.SFixed64: + value = tokenizer.ConsumeInt64(); + break; + + case FieldType.UInt32: + case FieldType.Fixed32: + value = tokenizer.ConsumeUInt32(); + break; + + case FieldType.UInt64: + case FieldType.Fixed64: + value = tokenizer.ConsumeUInt64(); + break; + + case FieldType.Float: + value = tokenizer.ConsumeFloat(); + break; + + case FieldType.Double: + value = tokenizer.ConsumeDouble(); + break; + + case FieldType.Bool: + value = tokenizer.ConsumeBoolean(); + break; + + case FieldType.String: + value = tokenizer.ConsumeString(); + break; + + case FieldType.Bytes: + value = tokenizer.ConsumeByteString(); + break; + + case FieldType.Enum: + { + EnumDescriptor enumType = field.EnumType; + + if (tokenizer.LookingAtInteger()) + { + int number = tokenizer.ConsumeInt32(); + value = enumType.FindValueByNumber(number); + if (value == null) + { + throw tokenizer.CreateFormatExceptionPreviousToken( + "Enum type \"" + enumType.FullName + + "\" has no value with number " + number + "."); + } + } + else + { + String id = tokenizer.ConsumeIdentifier(); + value = enumType.FindValueByName(id); + if (value == null) + { + throw tokenizer.CreateFormatExceptionPreviousToken( + "Enum type \"" + enumType.FullName + + "\" has no value named \"" + id + "\"."); + } + } + + break; + } + + case FieldType.Message: + case FieldType.Group: + throw new InvalidOperationException("Can't get here."); + } + } + + if (field.IsRepeated) + { + builder.WeakAddRepeatedField(field, value); + } + else + { + builder.SetField(field, value); + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/TextGenerator.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/TextGenerator.cs new file mode 100644 index 0000000000..f2b1dc1e90 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/TextGenerator.cs @@ -0,0 +1,159 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.IO; +using System.Text; + +namespace Google.ProtocolBuffers +{ + /// + /// Helper class to control indentation. Used for TextFormat and by ProtoGen. + /// + public sealed class TextGenerator + { + /// + /// The string to use at the end of each line. We assume that "Print" is only called using \n + /// to indicate a line break; that's what we use to detect when we need to indent etc, and + /// *just* the \n is replaced with the contents of lineBreak. + /// + private readonly string lineBreak; + + /// + /// Writer to write formatted text to. + /// + private readonly TextWriter writer; + + /// + /// Keeps track of whether the next piece of text should be indented + /// + private bool atStartOfLine = true; + + /// + /// Keeps track of the current level of indentation + /// + private readonly StringBuilder indent = new StringBuilder(); + + /// + /// Creates a generator writing to the given writer. The writer + /// is not closed by this class. + /// + public TextGenerator(TextWriter writer, string lineBreak) + { + this.writer = writer; + this.lineBreak = lineBreak; + } + + /// + /// Indents text by two spaces. After calling Indent(), two spaces + /// will be inserted at the beginning of each line of text. Indent() may + /// be called multiple times to produce deeper indents. + /// + public void Indent() + { + indent.Append(" "); + } + + /// + /// Reduces the current indent level by two spaces. + /// + public void Outdent() + { + if (indent.Length == 0) + { + throw new InvalidOperationException("Too many calls to Outdent()"); + } + indent.Length -= 2; + } + + public void WriteLine(string text) + { + Print(text); + Print("\n"); + } + + public void WriteLine(string format, params object[] args) + { + WriteLine(string.Format(format, args)); + } + + public void WriteLine() + { + WriteLine(""); + } + + /// + /// Prints the given text to the output stream, indenting at line boundaries. + /// + /// + public void Print(string text) + { + int pos = 0; + + for (int i = 0; i < text.Length; i++) + { + if (text[i] == '\n') + { + // Strip off the \n from what we write + Write(text.Substring(pos, i - pos)); + Write(lineBreak); + pos = i + 1; + atStartOfLine = true; + } + } + Write(text.Substring(pos)); + } + + public void Write(string format, params object[] args) + { + Write(string.Format(format, args)); + } + + private void Write(string data) + { + if (data.Length == 0) + { + return; + } + if (atStartOfLine) + { + atStartOfLine = false; + writer.Write(indent); + } + writer.Write(data); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/TextTokenizer.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/TextTokenizer.cs new file mode 100644 index 0000000000..dc7a87c7b4 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/TextTokenizer.cs @@ -0,0 +1,501 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Globalization; +using System.Text.RegularExpressions; + +namespace Google.ProtocolBuffers +{ + /// + /// Represents a stream of tokens parsed from a string. + /// + internal sealed class TextTokenizer + { + private readonly string text; + private string currentToken; + + /// + /// The character index within the text to perform the next regex match at. + /// + private int matchPos = 0; + + /// + /// The character index within the text at which the current token begins. + /// + private int pos = 0; + + /// + /// The line number of the current token. + /// + private int line = 0; + + /// + /// The column number of the current token. + /// + private int column = 0; + + /// + /// The line number of the previous token. + /// + private int previousLine = 0; + + /// + /// The column number of the previous token. + /// + private int previousColumn = 0; + + // Note: atomic groups used to mimic possessive quantifiers in Java in both of these regexes + internal static readonly Regex WhitespaceAndCommentPattern = new Regex("\\G(?>(\\s|(#.*$))+)", + SilverlightCompatibility. + CompiledRegexWhereAvailable | + RegexOptions.Multiline); + + private static readonly Regex TokenPattern = new Regex( + "\\G[a-zA-Z_](?>[0-9a-zA-Z_+-]*)|" + // an identifier + "\\G[0-9+-](?>[0-9a-zA-Z_.+-]*)|" + // a number + "\\G\"(?>([^\"\\\n\\\\]|\\\\.)*)(\"|\\\\?$)|" + // a double-quoted string + "\\G\'(?>([^\"\\\n\\\\]|\\\\.)*)(\'|\\\\?$)", // a single-quoted string + SilverlightCompatibility.CompiledRegexWhereAvailable | RegexOptions.Multiline); + + private static readonly Regex DoubleInfinity = new Regex("^-?inf(inity)?$", + SilverlightCompatibility.CompiledRegexWhereAvailable | + RegexOptions.IgnoreCase); + + private static readonly Regex FloatInfinity = new Regex("^-?inf(inity)?f?$", + SilverlightCompatibility.CompiledRegexWhereAvailable | + RegexOptions.IgnoreCase); + + private static readonly Regex FloatNan = new Regex("^nanf?$", + SilverlightCompatibility.CompiledRegexWhereAvailable | + RegexOptions.IgnoreCase); + + /** Construct a tokenizer that parses tokens from the given text. */ + + public TextTokenizer(string text) + { + this.text = text; + SkipWhitespace(); + NextToken(); + } + + /// + /// Are we at the end of the input? + /// + public bool AtEnd + { + get { return currentToken.Length == 0; } + } + + /// + /// Advances to the next token. + /// + public void NextToken() + { + previousLine = line; + previousColumn = column; + + // Advance the line counter to the current position. + while (pos < matchPos) + { + if (text[pos] == '\n') + { + ++line; + column = 0; + } + else + { + ++column; + } + ++pos; + } + + // Match the next token. + if (matchPos == text.Length) + { + // EOF + currentToken = ""; + } + else + { + Match match = TokenPattern.Match(text, matchPos); + if (match.Success) + { + currentToken = match.Value; + matchPos += match.Length; + } + else + { + // Take one character. + currentToken = text[matchPos].ToString(); + matchPos++; + } + + SkipWhitespace(); + } + } + + /// + /// Skip over any whitespace so that matchPos starts at the next token. + /// + private void SkipWhitespace() + { + Match match = WhitespaceAndCommentPattern.Match(text, matchPos); + if (match.Success) + { + matchPos += match.Length; + } + } + + /// + /// If the next token exactly matches the given token, consume it and return + /// true. Otherwise, return false without doing anything. + /// + public bool TryConsume(string token) + { + if (currentToken == token) + { + NextToken(); + return true; + } + return false; + } + + /* + * If the next token exactly matches {@code token}, consume it. Otherwise, + * throw a {@link ParseException}. + */ + + /// + /// If the next token exactly matches the specified one, consume it. + /// Otherwise, throw a FormatException. + /// + /// + public void Consume(string token) + { + if (!TryConsume(token)) + { + throw CreateFormatException("Expected \"" + token + "\"."); + } + } + + /// + /// Returns true if the next token is an integer, but does not consume it. + /// + public bool LookingAtInteger() + { + if (currentToken.Length == 0) + { + return false; + } + + char c = currentToken[0]; + return ('0' <= c && c <= '9') || c == '-' || c == '+'; + } + + /// + /// If the next token is an identifier, consume it and return its value. + /// Otherwise, throw a FormatException. + /// + public string ConsumeIdentifier() + { + foreach (char c in currentToken) + { + if (('a' <= c && c <= 'z') || + ('A' <= c && c <= 'Z') || + ('0' <= c && c <= '9') || + (c == '_') || (c == '.')) + { + // OK + } + else + { + throw CreateFormatException("Expected identifier."); + } + } + + string result = currentToken; + NextToken(); + return result; + } + + /// + /// If the next token is a 32-bit signed integer, consume it and return its + /// value. Otherwise, throw a FormatException. + /// + public int ConsumeInt32() + { + try + { + int result = TextFormat.ParseInt32(currentToken); + NextToken(); + return result; + } + catch (FormatException e) + { + throw CreateIntegerParseException(e); + } + } + + /// + /// If the next token is a 32-bit unsigned integer, consume it and return its + /// value. Otherwise, throw a FormatException. + /// + public uint ConsumeUInt32() + { + try + { + uint result = TextFormat.ParseUInt32(currentToken); + NextToken(); + return result; + } + catch (FormatException e) + { + throw CreateIntegerParseException(e); + } + } + + /// + /// If the next token is a 64-bit signed integer, consume it and return its + /// value. Otherwise, throw a FormatException. + /// + public long ConsumeInt64() + { + try + { + long result = TextFormat.ParseInt64(currentToken); + NextToken(); + return result; + } + catch (FormatException e) + { + throw CreateIntegerParseException(e); + } + } + + /// + /// If the next token is a 64-bit unsigned integer, consume it and return its + /// value. Otherwise, throw a FormatException. + /// + public ulong ConsumeUInt64() + { + try + { + ulong result = TextFormat.ParseUInt64(currentToken); + NextToken(); + return result; + } + catch (FormatException e) + { + throw CreateIntegerParseException(e); + } + } + + /// + /// If the next token is a double, consume it and return its value. + /// Otherwise, throw a FormatException. + /// + public double ConsumeDouble() + { + // We need to parse infinity and nan separately because + // double.Parse() does not accept "inf", "infinity", or "nan". + if (DoubleInfinity.IsMatch(currentToken)) + { + bool negative = currentToken.StartsWith("-"); + NextToken(); + return negative ? double.NegativeInfinity : double.PositiveInfinity; + } + if (currentToken.Equals("nan", StringComparison.InvariantCultureIgnoreCase)) + { + NextToken(); + return Double.NaN; + } + + try + { + double result = double.Parse(currentToken, CultureInfo.InvariantCulture); + NextToken(); + return result; + } + catch (FormatException e) + { + throw CreateFloatParseException(e); + } + catch (OverflowException e) + { + throw CreateFloatParseException(e); + } + } + + /// + /// If the next token is a float, consume it and return its value. + /// Otherwise, throw a FormatException. + /// + public float ConsumeFloat() + { + // We need to parse infinity and nan separately because + // Float.parseFloat() does not accept "inf", "infinity", or "nan". + if (FloatInfinity.IsMatch(currentToken)) + { + bool negative = currentToken.StartsWith("-"); + NextToken(); + return negative ? float.NegativeInfinity : float.PositiveInfinity; + } + if (FloatNan.IsMatch(currentToken)) + { + NextToken(); + return float.NaN; + } + + if (currentToken.EndsWith("f")) + { + currentToken = currentToken.TrimEnd('f'); + } + + try + { + float result = float.Parse(currentToken, CultureInfo.InvariantCulture); + NextToken(); + return result; + } + catch (FormatException e) + { + throw CreateFloatParseException(e); + } + catch (OverflowException e) + { + throw CreateFloatParseException(e); + } + } + + /// + /// If the next token is a Boolean, consume it and return its value. + /// Otherwise, throw a FormatException. + /// + public bool ConsumeBoolean() + { + if (currentToken == "true") + { + NextToken(); + return true; + } + if (currentToken == "false") + { + NextToken(); + return false; + } + throw CreateFormatException("Expected \"true\" or \"false\"."); + } + + /// + /// If the next token is a string, consume it and return its (unescaped) value. + /// Otherwise, throw a FormatException. + /// + public string ConsumeString() + { + return ConsumeByteString().ToStringUtf8(); + } + + /// + /// If the next token is a string, consume it, unescape it as a + /// ByteString and return it. Otherwise, throw a FormatException. + /// + public ByteString ConsumeByteString() + { + char quote = currentToken.Length > 0 ? currentToken[0] : '\0'; + if (quote != '\"' && quote != '\'') + { + throw CreateFormatException("Expected string."); + } + + if (currentToken.Length < 2 || + currentToken[currentToken.Length - 1] != quote) + { + throw CreateFormatException("String missing ending quote."); + } + + try + { + string escaped = currentToken.Substring(1, currentToken.Length - 2); + ByteString result = TextFormat.UnescapeBytes(escaped); + NextToken(); + return result; + } + catch (FormatException e) + { + throw CreateFormatException(e.Message); + } + } + + /// + /// Returns a format exception with the current line and column numbers + /// in the description, suitable for throwing. + /// + public FormatException CreateFormatException(string description) + { + // Note: People generally prefer one-based line and column numbers. + return new FormatException((line + 1) + ":" + (column + 1) + ": " + description); + } + + /// + /// Returns a format exception with the line and column numbers of the + /// previous token in the description, suitable for throwing. + /// + public FormatException CreateFormatExceptionPreviousToken(string description) + { + // Note: People generally prefer one-based line and column numbers. + return new FormatException((previousLine + 1) + ":" + (previousColumn + 1) + ": " + description); + } + + /// + /// Constructs an appropriate FormatException for the given existing exception + /// when trying to parse an integer. + /// + private FormatException CreateIntegerParseException(FormatException e) + { + return CreateFormatException("Couldn't parse integer: " + e.Message); + } + + /// + /// Constructs an appropriate FormatException for the given existing exception + /// when trying to parse a float or double. + /// + private FormatException CreateFloatParseException(Exception e) + { + return CreateFormatException("Couldn't parse number: " + e.Message); + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/ThrowHelper.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/ThrowHelper.cs new file mode 100644 index 0000000000..be7beef945 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/ThrowHelper.cs @@ -0,0 +1,92 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; + +namespace Google.ProtocolBuffers +{ + /// + /// Helper methods for throwing exceptions + /// + public static class ThrowHelper + { + /// + /// Throws an ArgumentNullException if the given value is null. + /// + public static void ThrowIfNull(object value, string name) + { + if (value == null) + { + throw new ArgumentNullException(name); + } + } + + /// + /// Throws an ArgumentNullException if the given value is null. + /// + public static void ThrowIfNull(object value) + { + if (value == null) + { + throw new ArgumentNullException(); + } + } + + /// + /// Throws an ArgumentNullException if the given value or any element within it is null. + /// + public static void ThrowIfAnyNull(IEnumerable sequence) + { + foreach (T t in sequence) + { + if (t == null) + { + throw new ArgumentNullException(); + } + } + } + + public static Exception CreateMissingMethod(Type type, string methodName) + { +#if SILVERLIGHT + return new MissingMethodException(String.Format("The method '{0}' was not found on type {1}", methodName, type)); +#else + return new MissingMethodException(String.Format("{0}", type), methodName); +#endif + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/UninitializedMessageException.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/UninitializedMessageException.cs new file mode 100644 index 0000000000..5b5a0ca405 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/UninitializedMessageException.cs @@ -0,0 +1,208 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; + +#if !LITE +using Google.ProtocolBuffers.Collections; +using Google.ProtocolBuffers.Descriptors; + +#endif + +namespace Google.ProtocolBuffers +{ + /// + /// TODO(jonskeet): Write summary text. + /// + public sealed class UninitializedMessageException : Exception + { + private readonly IList missingFields; + + private UninitializedMessageException(IList missingFields) + : base(BuildDescription(missingFields)) + { + this.missingFields = new List(missingFields); + } + + /// + /// Returns a read-only list of human-readable names of + /// required fields missing from this message. Each name + /// is a full path to a field, e.g. "foo.bar[5].baz" + /// + public IList MissingFields + { + get { return missingFields; } + } + + /// + /// Converts this exception into an InvalidProtocolBufferException. + /// When a parsed message is missing required fields, this should be thrown + /// instead of UninitializedMessageException. + /// + public InvalidProtocolBufferException AsInvalidProtocolBufferException() + { + return new InvalidProtocolBufferException(Message); + } + + /// + /// Constructs the description string for a given list of missing fields. + /// + private static string BuildDescription(IEnumerable missingFields) + { + StringBuilder description = new StringBuilder("Message missing required fields: "); + bool first = true; + foreach (string field in missingFields) + { + if (first) + { + first = false; + } + else + { + description.Append(", "); + } + description.Append(field); + } + return description.ToString(); + } + + /// + /// For Lite exceptions that do not known how to enumerate missing fields + /// + public UninitializedMessageException(IMessageLite message) + : base(String.Format("Message {0} is missing required fields", message.GetType())) + { + missingFields = new List(); + } + +#if !LITE + public UninitializedMessageException(IMessage message) + : this(FindMissingFields(message)) + { + } + + /// + /// Returns a list of the full "paths" of missing required + /// fields in the specified message. + /// + private static IList FindMissingFields(IMessage message) + { + List results = new List(); + FindMissingFields(message, "", results); + return results; + } + + /// + /// Recursive helper implementing FindMissingFields. + /// + private static void FindMissingFields(IMessage message, String prefix, List results) + { + foreach (FieldDescriptor field in message.DescriptorForType.Fields) + { + if (field.IsRequired && !message.HasField(field)) + { + results.Add(prefix + field.Name); + } + } + + foreach (KeyValuePair entry in message.AllFields) + { + FieldDescriptor field = entry.Key; + object value = entry.Value; + + if (field.MappedType == MappedType.Message) + { + if (field.IsRepeated) + { + int i = 0; + foreach (object element in (IEnumerable) value) + { + if (element is IMessage) + { + FindMissingFields((IMessage) element, SubMessagePrefix(prefix, field, i++), results); + } + else + { + results.Add(prefix + field.Name); + } + } + } + else + { + if (message.HasField(field)) + { + if (value is IMessage) + { + FindMissingFields((IMessage) value, SubMessagePrefix(prefix, field, -1), results); + } + else + { + results.Add(prefix + field.Name); + } + } + } + } + } + } + + private static String SubMessagePrefix(String prefix, FieldDescriptor field, int index) + { + StringBuilder result = new StringBuilder(prefix); + if (field.IsExtension) + { + result.Append('(') + .Append(field.FullName) + .Append(')'); + } + else + { + result.Append(field.Name); + } + if (index != -1) + { + result.Append('[') + .Append(index) + .Append(']'); + } + result.Append('.'); + return result.ToString(); + } +#endif + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/UnknownField.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/UnknownField.cs new file mode 100644 index 0000000000..b206229b11 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/UnknownField.cs @@ -0,0 +1,418 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using Google.ProtocolBuffers.Collections; + +namespace Google.ProtocolBuffers +{ + /// + /// Represents a single field in an UnknownFieldSet. + /// + /// An UnknownField consists of five lists of values. The lists correspond + /// to the five "wire types" used in the protocol buffer binary format. + /// The wire type of each field can be determined from the encoded form alone, + /// without knowing the field's declared type. So, we are able to parse + /// unknown values at least this far and separate them. Normally, only one + /// of the five lists will contain any values, since it is impossible to + /// define a valid message type that declares two different types for the + /// same field number. However, the code is designed to allow for the case + /// where the same unknown field number is encountered using multiple different + /// wire types. + /// + /// UnknownField is an immutable class. To construct one, you must use an + /// UnknownField.Builder. + /// + public sealed class UnknownField + { + public const string UnknownFieldName = "unknown_field"; + private static readonly UnknownField defaultInstance = CreateBuilder().Build(); + private readonly ReadOnlyCollection varintList; + private readonly ReadOnlyCollection fixed32List; + private readonly ReadOnlyCollection fixed64List; + private readonly ReadOnlyCollection lengthDelimitedList; + private readonly ReadOnlyCollection groupList; + + private UnknownField(ReadOnlyCollection varintList, + ReadOnlyCollection fixed32List, + ReadOnlyCollection fixed64List, + ReadOnlyCollection lengthDelimitedList, + ReadOnlyCollection groupList) + { + this.varintList = varintList; + this.fixed32List = fixed32List; + this.fixed64List = fixed64List; + this.lengthDelimitedList = lengthDelimitedList; + this.groupList = groupList; + } + + public static UnknownField DefaultInstance + { + get { return defaultInstance; } + } + + /// + /// The list of varint values for this field. + /// + public IList VarintList + { + get { return varintList; } + } + + /// + /// The list of fixed32 values for this field. + /// + public IList Fixed32List + { + get { return fixed32List; } + } + + /// + /// The list of fixed64 values for this field. + /// + public IList Fixed64List + { + get { return fixed64List; } + } + + /// + /// The list of length-delimited values for this field. + /// + public IList LengthDelimitedList + { + get { return lengthDelimitedList; } + } + + /// + /// The list of embedded group values for this field. These + /// are represented using UnknownFieldSets rather than Messages + /// since the group's type is presumably unknown. + /// + public IList GroupList + { + get { return groupList; } + } + + public override bool Equals(object other) + { + if (ReferenceEquals(this, other)) + { + return true; + } + UnknownField otherField = other as UnknownField; + return otherField != null + && Lists.Equals(varintList, otherField.varintList) + && Lists.Equals(fixed32List, otherField.fixed32List) + && Lists.Equals(fixed64List, otherField.fixed64List) + && Lists.Equals(lengthDelimitedList, otherField.lengthDelimitedList) + && Lists.Equals(groupList, otherField.groupList); + } + + public override int GetHashCode() + { + int hash = 43; + hash = hash*47 + Lists.GetHashCode(varintList); + hash = hash*47 + Lists.GetHashCode(fixed32List); + hash = hash*47 + Lists.GetHashCode(fixed64List); + hash = hash*47 + Lists.GetHashCode(lengthDelimitedList); + hash = hash*47 + Lists.GetHashCode(groupList); + return hash; + } + + /// + /// Constructs a new Builder. + /// + public static Builder CreateBuilder() + { + return new Builder(); + } + + /// + /// Constructs a new Builder and initializes it to a copy of . + /// + public static Builder CreateBuilder(UnknownField copyFrom) + { + return new Builder().MergeFrom(copyFrom); + } + + /// + /// Serializes the field, including the field number, and writes it to + /// . + /// + public void WriteTo(int fieldNumber, ICodedOutputStream output) + { + foreach (ulong value in varintList) + { + output.WriteUnknownField(fieldNumber, WireFormat.WireType.Varint, value); + } + foreach (uint value in fixed32List) + { + output.WriteUnknownField(fieldNumber, WireFormat.WireType.Fixed32, value); + } + foreach (ulong value in fixed64List) + { + output.WriteUnknownField(fieldNumber, WireFormat.WireType.Fixed64, value); + } + foreach (ByteString value in lengthDelimitedList) + { + output.WriteUnknownBytes(fieldNumber, value); + } + foreach (UnknownFieldSet value in groupList) + { +#pragma warning disable 0612 + output.WriteUnknownGroup(fieldNumber, value); +#pragma warning restore 0612 + } + } + + /// + /// Computes the number of bytes required to encode this field, including field + /// number. + /// + public int GetSerializedSize(int fieldNumber) + { + int result = 0; + foreach (ulong value in varintList) + { + result += CodedOutputStream.ComputeUInt64Size(fieldNumber, value); + } + foreach (uint value in fixed32List) + { + result += CodedOutputStream.ComputeFixed32Size(fieldNumber, value); + } + foreach (ulong value in fixed64List) + { + result += CodedOutputStream.ComputeFixed64Size(fieldNumber, value); + } + foreach (ByteString value in lengthDelimitedList) + { + result += CodedOutputStream.ComputeBytesSize(fieldNumber, value); + } + foreach (UnknownFieldSet value in groupList) + { +#pragma warning disable 0612 + result += CodedOutputStream.ComputeUnknownGroupSize(fieldNumber, value); +#pragma warning restore 0612 + } + return result; + } + + /// + /// Serializes the length-delimited values of the field, including field + /// number, and writes them to using the MessageSet wire format. + /// + /// + /// + public void WriteAsMessageSetExtensionTo(int fieldNumber, ICodedOutputStream output) + { + foreach (ByteString value in lengthDelimitedList) + { + output.WriteMessageSetExtension(fieldNumber, UnknownFieldName, value); + } + } + + /// + /// Get the number of bytes required to encode this field, incuding field number, + /// using the MessageSet wire format. + /// + public int GetSerializedSizeAsMessageSetExtension(int fieldNumber) + { + int result = 0; + foreach (ByteString value in lengthDelimitedList) + { + result += CodedOutputStream.ComputeRawMessageSetExtensionSize(fieldNumber, value); + } + return result; + } + + /// + /// Used to build instances of UnknownField. + /// + public sealed class Builder + { + private List varintList; + private List fixed32List; + private List fixed64List; + private List lengthDelimitedList; + private List groupList; + + /// + /// Builds the field. After building, the builder is reset to an empty + /// state. (This is actually easier than making it unusable.) + /// + public UnknownField Build() + { + return new UnknownField(MakeReadOnly(ref varintList), + MakeReadOnly(ref fixed32List), + MakeReadOnly(ref fixed64List), + MakeReadOnly(ref lengthDelimitedList), + MakeReadOnly(ref groupList)); + } + + /// + /// Merge the values in into this field. For each list + /// of values, 's values are append to the ones in this + /// field. + /// + public Builder MergeFrom(UnknownField other) + { + varintList = AddAll(varintList, other.VarintList); + fixed32List = AddAll(fixed32List, other.Fixed32List); + fixed64List = AddAll(fixed64List, other.Fixed64List); + lengthDelimitedList = AddAll(lengthDelimitedList, other.LengthDelimitedList); + groupList = AddAll(groupList, other.GroupList); + return this; + } + + /// + /// Returns a new list containing all of the given specified values from + /// both the and lists. + /// If is null and is empty, + /// null is returned. Otherwise, either a new list is created (if + /// is null) or the elements of are added to . + /// + private static List AddAll(List current, IList extras) + { + if (extras.Count == 0) + { + return current; + } + if (current == null) + { + current = new List(extras); + } + else + { + current.AddRange(extras); + } + return current; + } + + /// + /// Clears the contents of this builder. + /// + public Builder Clear() + { + varintList = null; + fixed32List = null; + fixed64List = null; + lengthDelimitedList = null; + groupList = null; + return this; + } + + /// + /// Adds a varint value. + /// + [CLSCompliant(false)] + public Builder AddVarint(ulong value) + { + varintList = Add(varintList, value); + return this; + } + + /// + /// Adds a fixed32 value. + /// + [CLSCompliant(false)] + public Builder AddFixed32(uint value) + { + fixed32List = Add(fixed32List, value); + return this; + } + + /// + /// Adds a fixed64 value. + /// + [CLSCompliant(false)] + public Builder AddFixed64(ulong value) + { + fixed64List = Add(fixed64List, value); + return this; + } + + /// + /// Adds a length-delimited value. + /// + public Builder AddLengthDelimited(ByteString value) + { + lengthDelimitedList = Add(lengthDelimitedList, value); + return this; + } + + /// + /// Adds an embedded group. + /// + /// + /// + public Builder AddGroup(UnknownFieldSet value) + { + groupList = Add(groupList, value); + return this; + } + + /// + /// Adds to the , creating + /// a new list if is null. The list is returned - either + /// the original reference or the new list. + /// + private static List Add(List list, T value) + { + if (list == null) + { + list = new List(); + } + list.Add(value); + return list; + } + + /// + /// Returns a read-only version of the given IList, and clears + /// the field used for . If the value + /// is null, an empty list is produced using Lists.Empty. + /// + /// + private static ReadOnlyCollection MakeReadOnly(ref List list) + { + ReadOnlyCollection ret = list == null ? Lists.Empty : new ReadOnlyCollection(list); + list = null; + return ret; + } + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/UnknownFieldSet.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/UnknownFieldSet.cs new file mode 100644 index 0000000000..a2001b8310 --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/UnknownFieldSet.cs @@ -0,0 +1,1043 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using System.Collections.Generic; +using System.IO; +using Google.ProtocolBuffers.Collections; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + /// + /// Used to keep track of fields which were seen when parsing a protocol message + /// but whose field numbers or types are unrecognized. This most frequently + /// occurs when new fields are added to a message type and then messages containing + /// those fields are read by old software that was built before the new types were + /// added. + /// + /// Every message contains an UnknownFieldSet. + /// + /// Most users will never need to use this class directly. + /// + public sealed partial class UnknownFieldSet : IMessageLite + { + private static readonly UnknownFieldSet defaultInstance = + new UnknownFieldSet(new Dictionary()); + + private readonly IDictionary fields; + + private UnknownFieldSet(IDictionary fields) + { + this.fields = fields; + } + + /// + /// Creates a new unknown field set builder. + /// + public static Builder CreateBuilder() + { + return new Builder(); + } + + /// + /// Creates a new unknown field set builder + /// and initialize it from . + /// + public static Builder CreateBuilder(UnknownFieldSet original) + { + return new Builder().MergeFrom(original); + } + + public static UnknownFieldSet DefaultInstance + { + get { return defaultInstance; } + } + + /// + /// Returns a read-only view of the mapping from field numbers to values. + /// + public IDictionary FieldDictionary + { + get { return Dictionaries.AsReadOnly(fields); } + } + + /// + /// Checks whether or not the given field number is present in the set. + /// + public bool HasField(int field) + { + return fields.ContainsKey(field); + } + + /// + /// Fetches a field by number, returning an empty field if not present. + /// Never returns null. + /// + public UnknownField this[int number] + { + get + { + UnknownField ret; + if (!fields.TryGetValue(number, out ret)) + { + ret = UnknownField.DefaultInstance; + } + return ret; + } + } + + /// + /// Serializes the set and writes it to . + /// + public void WriteTo(ICodedOutputStream output) + { + foreach (KeyValuePair entry in fields) + { + entry.Value.WriteTo(entry.Key, output); + } + } + + /// + /// Gets the number of bytes required to encode this set. + /// + public int SerializedSize + { + get + { + int result = 0; + foreach (KeyValuePair entry in fields) + { + result += entry.Value.GetSerializedSize(entry.Key); + } + return result; + } + } + + /// + /// Converts the set to a string in protocol buffer text format. This + /// is just a trivial wrapper around TextFormat.PrintToString. + /// + public override String ToString() + { + return TextFormat.PrintToString(this); + } + + /// + /// Converts the set to a string in protocol buffer text format. This + /// is just a trivial wrapper around TextFormat.PrintToString. + /// + public void PrintTo(TextWriter writer) + { + TextFormat.Print(this, writer); + } + + /// + /// Serializes the message to a ByteString and returns it. This is + /// just a trivial wrapper around WriteTo(ICodedOutputStream). + /// + /// + public ByteString ToByteString() + { + ByteString.CodedBuilder codedBuilder = new ByteString.CodedBuilder(SerializedSize); + WriteTo(codedBuilder.CodedOutput); + return codedBuilder.Build(); + } + + /// + /// Serializes the message to a byte array and returns it. This is + /// just a trivial wrapper around WriteTo(ICodedOutputStream). + /// + /// + public byte[] ToByteArray() + { + byte[] data = new byte[SerializedSize]; + CodedOutputStream output = CodedOutputStream.CreateInstance(data); + WriteTo(output); + output.CheckNoSpaceLeft(); + return data; + } + + /// + /// Serializes the message and writes it to . This is + /// just a trivial wrapper around WriteTo(ICodedOutputStream). + /// + /// + public void WriteTo(Stream output) + { + CodedOutputStream codedOutput = CodedOutputStream.CreateInstance(output); + WriteTo(codedOutput); + codedOutput.Flush(); + } + + /// + /// Serializes the set and writes it to using + /// the MessageSet wire format. + /// + public void WriteAsMessageSetTo(ICodedOutputStream output) + { + foreach (KeyValuePair entry in fields) + { + entry.Value.WriteAsMessageSetExtensionTo(entry.Key, output); + } + } + + /// + /// Gets the number of bytes required to encode this set using the MessageSet + /// wire format. + /// + public int SerializedSizeAsMessageSet + { + get + { + int result = 0; + foreach (KeyValuePair entry in fields) + { + result += entry.Value.GetSerializedSizeAsMessageSetExtension(entry.Key); + } + return result; + } + } + + public override bool Equals(object other) + { + if (ReferenceEquals(this, other)) + { + return true; + } + UnknownFieldSet otherSet = other as UnknownFieldSet; + return otherSet != null && Dictionaries.Equals(fields, otherSet.fields); + } + + public override int GetHashCode() + { + return Dictionaries.GetHashCode(fields); + } + + /// + /// Parses an UnknownFieldSet from the given input. + /// + public static UnknownFieldSet ParseFrom(ICodedInputStream input) + { + return CreateBuilder().MergeFrom(input).Build(); + } + + /// + /// Parses an UnknownFieldSet from the given data. + /// + public static UnknownFieldSet ParseFrom(ByteString data) + { + return CreateBuilder().MergeFrom(data).Build(); + } + + /// + /// Parses an UnknownFieldSet from the given data. + /// + public static UnknownFieldSet ParseFrom(byte[] data) + { + return CreateBuilder().MergeFrom(data).Build(); + } + + /// + /// Parses an UnknownFieldSet from the given input. + /// + public static UnknownFieldSet ParseFrom(Stream input) + { + return CreateBuilder().MergeFrom(input).Build(); + } + + #region IMessageLite Members + + public bool IsInitialized + { + get { return fields != null; } + } + + public void WriteDelimitedTo(Stream output) + { + CodedOutputStream codedOutput = CodedOutputStream.CreateInstance(output); + codedOutput.WriteRawVarint32((uint) SerializedSize); + WriteTo(codedOutput); + codedOutput.Flush(); + } + + public IBuilderLite WeakCreateBuilderForType() + { + return new Builder(); + } + + public IBuilderLite WeakToBuilder() + { + return new Builder(fields); + } + + public IMessageLite WeakDefaultInstanceForType + { + get { return defaultInstance; } + } + + #endregion + + /// + /// Builder for UnknownFieldSets. + /// + public sealed partial class Builder : IBuilderLite + { + /// + /// Mapping from number to field. Note that by using a SortedList we ensure + /// that the fields will be serialized in ascending order. + /// + private IDictionary fields; + + // Optimization: We keep around a builder for the last field that was + // modified so that we can efficiently add to it multiple times in a + // row (important when parsing an unknown repeated field). + private int lastFieldNumber; + private UnknownField.Builder lastField; + + internal Builder() + { + fields = new SortedList(); + } + + internal Builder(IDictionary dictionary) + { + fields = new SortedList(dictionary); + } + + /// + /// Returns a field builder for the specified field number, including any values + /// which already exist. + /// + private UnknownField.Builder GetFieldBuilder(int number) + { + if (lastField != null) + { + if (number == lastFieldNumber) + { + return lastField; + } + // Note: AddField() will reset lastField and lastFieldNumber. + AddField(lastFieldNumber, lastField.Build()); + } + if (number == 0) + { + return null; + } + + lastField = UnknownField.CreateBuilder(); + UnknownField existing; + if (fields.TryGetValue(number, out existing)) + { + lastField.MergeFrom(existing); + } + lastFieldNumber = number; + return lastField; + } + + /// + /// Build the UnknownFieldSet and return it. Once this method has been called, + /// this instance will no longer be usable. Calling any method after this + /// will throw a NullReferenceException. + /// + public UnknownFieldSet Build() + { + GetFieldBuilder(0); // Force lastField to be built. + UnknownFieldSet result = fields.Count == 0 ? DefaultInstance : new UnknownFieldSet(fields); + fields = null; + return result; + } + + /// + /// Adds a field to the set. If a field with the same number already exists, it + /// is replaced. + /// + public Builder AddField(int number, UnknownField field) + { + if (number == 0) + { + throw new ArgumentOutOfRangeException("number", "Zero is not a valid field number."); + } + if (lastField != null && lastFieldNumber == number) + { + // Discard this. + lastField = null; + lastFieldNumber = 0; + } + fields[number] = field; + return this; + } + + /// + /// Resets the builder to an empty set. + /// + public Builder Clear() + { + fields.Clear(); + lastFieldNumber = 0; + lastField = null; + return this; + } + + /// + /// Parse an entire message from and merge + /// its fields into this set. + /// + public Builder MergeFrom(ICodedInputStream input) + { + uint tag; + string name; + while (input.ReadTag(out tag, out name)) + { + if (tag == 0) + { + if (input.SkipField()) + { + continue; //can't merge unknown without field tag + } + break; + } + + if (!MergeFieldFrom(tag, input)) + { + break; + } + } + return this; + } + + /// + /// Parse a single field from and merge it + /// into this set. + /// + /// The field's tag number, which was already parsed. + /// The coded input stream containing the field + /// false if the tag is an "end group" tag, true otherwise + [CLSCompliant(false)] + public bool MergeFieldFrom(uint tag, ICodedInputStream input) + { + if (tag == 0) + { + input.SkipField(); + return true; + } + + int number = WireFormat.GetTagFieldNumber(tag); + switch (WireFormat.GetTagWireType(tag)) + { + case WireFormat.WireType.Varint: + { + ulong uint64 = 0; + if (input.ReadUInt64(ref uint64)) + { + GetFieldBuilder(number).AddVarint(uint64); + } + return true; + } + case WireFormat.WireType.Fixed32: + { + uint uint32 = 0; + if (input.ReadFixed32(ref uint32)) + { + GetFieldBuilder(number).AddFixed32(uint32); + } + return true; + } + case WireFormat.WireType.Fixed64: + { + ulong uint64 = 0; + if (input.ReadFixed64(ref uint64)) + { + GetFieldBuilder(number).AddFixed64(uint64); + } + return true; + } + case WireFormat.WireType.LengthDelimited: + { + ByteString bytes = null; + if (input.ReadBytes(ref bytes)) + { + GetFieldBuilder(number).AddLengthDelimited(bytes); + } + return true; + } + case WireFormat.WireType.StartGroup: + { + Builder subBuilder = CreateBuilder(); +#pragma warning disable 0612 + input.ReadUnknownGroup(number, subBuilder); +#pragma warning restore 0612 + GetFieldBuilder(number).AddGroup(subBuilder.Build()); + return true; + } + case WireFormat.WireType.EndGroup: + return false; + default: + throw InvalidProtocolBufferException.InvalidWireType(); + } + } + + /// + /// Parses as an UnknownFieldSet and merge it + /// with the set being built. This is just a small wrapper around + /// MergeFrom(ICodedInputStream). + /// + public Builder MergeFrom(Stream input) + { + CodedInputStream codedInput = CodedInputStream.CreateInstance(input); + MergeFrom(codedInput); + codedInput.CheckLastTagWas(0); + return this; + } + + /// + /// Parses as an UnknownFieldSet and merge it + /// with the set being built. This is just a small wrapper around + /// MergeFrom(ICodedInputStream). + /// + public Builder MergeFrom(ByteString data) + { + CodedInputStream input = data.CreateCodedInput(); + MergeFrom(input); + input.CheckLastTagWas(0); + return this; + } + + /// + /// Parses as an UnknownFieldSet and merge it + /// with the set being built. This is just a small wrapper around + /// MergeFrom(ICodedInputStream). + /// + public Builder MergeFrom(byte[] data) + { + CodedInputStream input = CodedInputStream.CreateInstance(data); + MergeFrom(input); + input.CheckLastTagWas(0); + return this; + } + + /// + /// Convenience method for merging a new field containing a single varint + /// value. This is used in particular when an unknown enum value is + /// encountered. + /// + [CLSCompliant(false)] + public Builder MergeVarintField(int number, ulong value) + { + if (number == 0) + { + throw new ArgumentOutOfRangeException("number", "Zero is not a valid field number."); + } + GetFieldBuilder(number).AddVarint(value); + return this; + } + + /// + /// Merges the fields from into this set. + /// If a field number exists in both sets, the values in + /// will be appended to the values in this set. + /// + public Builder MergeFrom(UnknownFieldSet other) + { + if (other != DefaultInstance) + { + foreach (KeyValuePair entry in other.fields) + { + MergeField(entry.Key, entry.Value); + } + } + return this; + } + + /// + /// Checks if the given field number is present in the set. + /// + public bool HasField(int number) + { + if (number == 0) + { + throw new ArgumentOutOfRangeException("number", "Zero is not a valid field number."); + } + return number == lastFieldNumber || fields.ContainsKey(number); + } + + /// + /// Adds a field to the unknown field set. If a field with the same + /// number already exists, the two are merged. + /// + public Builder MergeField(int number, UnknownField field) + { + if (number == 0) + { + throw new ArgumentOutOfRangeException("number", "Zero is not a valid field number."); + } + if (HasField(number)) + { + GetFieldBuilder(number).MergeFrom(field); + } + else + { + // Optimization: We could call getFieldBuilder(number).mergeFrom(field) + // in this case, but that would create a copy of the Field object. + // We'd rather reuse the one passed to us, so call AddField() instead. + AddField(number, field); + } + return this; + } + + internal void MergeFrom(ICodedInputStream input, ExtensionRegistry extensionRegistry, IBuilder builder) + { + uint tag; + string name; + while (input.ReadTag(out tag, out name)) + { + if (tag == 0 && name != null) + { + FieldDescriptor fieldByName = builder.DescriptorForType.FindFieldByName(name); + if (fieldByName != null) + { + tag = WireFormat.MakeTag(fieldByName); + } + else + { + ExtensionInfo extension = extensionRegistry.FindByName(builder.DescriptorForType, name); + if (extension != null) + { + tag = WireFormat.MakeTag(extension.Descriptor); + } + } + } + if (tag == 0) + { + if (input.SkipField()) + { + continue; //can't merge unknown without field tag + } + break; + } + + if (!MergeFieldFrom(input, extensionRegistry, builder, tag, name)) + { + // end group tag + break; + } + } + } + + /// + /// Like + /// but parses a single field. + /// + /// The input to read the field from + /// Registry to use when an extension field is encountered + /// Builder to merge field into, if it's a known field + /// The tag, which should already have been read from the input + /// true unless the tag is an end-group tag + internal bool MergeFieldFrom(ICodedInputStream input, + ExtensionRegistry extensionRegistry, IBuilder builder, uint tag, + string fieldName) + { + if (tag == 0 && fieldName != null) + { + FieldDescriptor fieldByName = builder.DescriptorForType.FindFieldByName(fieldName); + if (fieldByName != null) + { + tag = WireFormat.MakeTag(fieldByName); + } + else + { + ExtensionInfo extension = extensionRegistry.FindByName(builder.DescriptorForType, fieldName); + if (extension != null) + { + tag = WireFormat.MakeTag(extension.Descriptor); + } + } + } + + MessageDescriptor type = builder.DescriptorForType; + if (type.Options.MessageSetWireFormat && tag == WireFormat.MessageSetTag.ItemStart) + { + MergeMessageSetExtensionFromCodedStream(input, extensionRegistry, builder); + return true; + } + + WireFormat.WireType wireType = WireFormat.GetTagWireType(tag); + int fieldNumber = WireFormat.GetTagFieldNumber(tag); + + FieldDescriptor field; + IMessageLite defaultFieldInstance = null; + + if (type.IsExtensionNumber(fieldNumber)) + { + ExtensionInfo extension = extensionRegistry[type, fieldNumber]; + if (extension == null) + { + field = null; + } + else + { + field = extension.Descriptor; + defaultFieldInstance = extension.DefaultInstance; + } + } + else + { + field = type.FindFieldByNumber(fieldNumber); + } + + // Unknown field or wrong wire type. Skip. + if (field == null) + { + return MergeFieldFrom(tag, input); + } + if (wireType != WireFormat.GetWireType(field)) + { + WireFormat.WireType expectedType = WireFormat.GetWireType(field.FieldType); + if (wireType == expectedType) + { + //Allowed as of 2.3, this is unpacked data for a packed array + } + else if (field.IsRepeated && wireType == WireFormat.WireType.LengthDelimited && + (expectedType == WireFormat.WireType.Varint || expectedType == WireFormat.WireType.Fixed32 || + expectedType == WireFormat.WireType.Fixed64)) + { + //Allowed as of 2.3, this is packed data for an unpacked array + } + else + { + return MergeFieldFrom(tag, input); + } + } + + switch (field.FieldType) + { + case FieldType.Group: + case FieldType.Message: + { + IBuilderLite subBuilder = (defaultFieldInstance != null) + ? defaultFieldInstance.WeakCreateBuilderForType() + : builder.CreateBuilderForField(field); + if (!field.IsRepeated) + { + subBuilder.WeakMergeFrom((IMessageLite) builder[field]); + if (field.FieldType == FieldType.Group) + { + input.ReadGroup(field.FieldNumber, subBuilder, extensionRegistry); + } + else + { + input.ReadMessage(subBuilder, extensionRegistry); + } + builder[field] = subBuilder.WeakBuild(); + } + else + { + List list = new List(); + if (field.FieldType == FieldType.Group) + { + input.ReadGroupArray(tag, fieldName, list, subBuilder.WeakDefaultInstanceForType, + extensionRegistry); + } + else + { + input.ReadMessageArray(tag, fieldName, list, subBuilder.WeakDefaultInstanceForType, + extensionRegistry); + } + + foreach (IMessageLite m in list) + { + builder.WeakAddRepeatedField(field, m); + } + return true; + } + break; + } + case FieldType.Enum: + { + if (!field.IsRepeated) + { + object unknown; + IEnumLite value = null; + if (input.ReadEnum(ref value, out unknown, field.EnumType)) + { + builder[field] = value; + } + else if (unknown is int) + { + MergeVarintField(fieldNumber, (ulong) (int) unknown); + } + } + else + { + ICollection unknown; + List list = new List(); + input.ReadEnumArray(tag, fieldName, list, out unknown, field.EnumType); + + foreach (IEnumLite en in list) + { + builder.WeakAddRepeatedField(field, en); + } + + if (unknown != null) + { + foreach (object oval in unknown) + { + if (oval is int) + { + MergeVarintField(fieldNumber, (ulong) (int) oval); + } + } + } + } + break; + } + default: + { + if (!field.IsRepeated) + { + object value = null; + if (input.ReadPrimitiveField(field.FieldType, ref value)) + { + builder[field] = value; + } + } + else + { + List list = new List(); + input.ReadPrimitiveArray(field.FieldType, tag, fieldName, list); + foreach (object oval in list) + { + builder.WeakAddRepeatedField(field, oval); + } + } + break; + } + } + return true; + } + + /// + /// Called by MergeFieldFrom to parse a MessageSet extension. + /// + private void MergeMessageSetExtensionFromCodedStream(ICodedInputStream input, + ExtensionRegistry extensionRegistry, IBuilder builder) + { + MessageDescriptor type = builder.DescriptorForType; + + // The wire format for MessageSet is: + // message MessageSet { + // repeated group Item = 1 { + // required int32 typeId = 2; + // required bytes message = 3; + // } + // } + // "typeId" is the extension's field number. The extension can only be + // a message type, where "message" contains the encoded bytes of that + // message. + // + // In practice, we will probably never see a MessageSet item in which + // the message appears before the type ID, or where either field does not + // appear exactly once. However, in theory such cases are valid, so we + // should be prepared to accept them. + + int typeId = 0; + ByteString rawBytes = null; // If we encounter "message" before "typeId" + IBuilderLite subBuilder = null; + FieldDescriptor field = null; + + uint lastTag = WireFormat.MessageSetTag.ItemStart; + uint tag; + string name; + while (input.ReadTag(out tag, out name)) + { + if (tag == 0 && name != null) + { + if (name == "type_id") + { + tag = WireFormat.MessageSetTag.TypeID; + } + else if (name == "message") + { + tag = WireFormat.MessageSetTag.Message; + } + } + if (tag == 0) + { + if (input.SkipField()) + { + continue; //can't merge unknown without field tag + } + break; + } + + lastTag = tag; + if (tag == WireFormat.MessageSetTag.TypeID) + { + typeId = 0; + // Zero is not a valid type ID. + if (input.ReadInt32(ref typeId) && typeId != 0) + { + ExtensionInfo extension = extensionRegistry[type, typeId]; + if (extension != null) + { + field = extension.Descriptor; + subBuilder = extension.DefaultInstance.WeakCreateBuilderForType(); + IMessageLite originalMessage = (IMessageLite) builder[field]; + if (originalMessage != null) + { + subBuilder.WeakMergeFrom(originalMessage); + } + if (rawBytes != null) + { + // We already encountered the message. Parse it now. + // TODO(jonskeet): Check this is okay. It's subtly different from the Java, as it doesn't create an input stream from rawBytes. + // In fact, why don't we just call MergeFrom(rawBytes)? And what about the extension registry? + subBuilder.WeakMergeFrom(rawBytes.CreateCodedInput()); + rawBytes = null; + } + } + else + { + // Unknown extension number. If we already saw data, put it + // in rawBytes. + if (rawBytes != null) + { + MergeField(typeId, UnknownField.CreateBuilder().AddLengthDelimited(rawBytes).Build()); + rawBytes = null; + } + } + } + } + else if (tag == WireFormat.MessageSetTag.Message) + { + if (subBuilder != null) + { + // We already know the type, so we can parse directly from the input + // with no copying. Hooray! + input.ReadMessage(subBuilder, extensionRegistry); + } + else if (input.ReadBytes(ref rawBytes)) + { + if (typeId != 0) + { + // We don't know how to parse this. Ignore it. + MergeField(typeId, + UnknownField.CreateBuilder().AddLengthDelimited(rawBytes).Build()); + } + } + } + else + { + // Unknown tag. Skip it. + if (!input.SkipField()) + { + break; // end of group + } + } + } + + if (lastTag != WireFormat.MessageSetTag.ItemEnd) + { + throw InvalidProtocolBufferException.InvalidEndTag(); + } + + if (subBuilder != null) + { + builder[field] = subBuilder.WeakBuild(); + } + } + + #region IBuilderLite Members + + bool IBuilderLite.IsInitialized + { + get { return fields != null; } + } + + IBuilderLite IBuilderLite.WeakClear() + { + return Clear(); + } + + IBuilderLite IBuilderLite.WeakMergeFrom(IMessageLite message) + { + return MergeFrom((UnknownFieldSet) message); + } + + IBuilderLite IBuilderLite.WeakMergeFrom(ByteString data) + { + return MergeFrom(data); + } + + IBuilderLite IBuilderLite.WeakMergeFrom(ByteString data, ExtensionRegistry registry) + { + return MergeFrom(data); + } + + IBuilderLite IBuilderLite.WeakMergeFrom(ICodedInputStream input) + { + return MergeFrom(input); + } + + IBuilderLite IBuilderLite.WeakMergeFrom(ICodedInputStream input, ExtensionRegistry registry) + { + return MergeFrom(input); + } + + IMessageLite IBuilderLite.WeakBuild() + { + return Build(); + } + + IMessageLite IBuilderLite.WeakBuildPartial() + { + return Build(); + } + + IBuilderLite IBuilderLite.WeakClone() + { + return Build().WeakToBuilder(); + } + + IMessageLite IBuilderLite.WeakDefaultInstanceForType + { + get { return DefaultInstance; } + } + + #endregion + } + } +} \ No newline at end of file diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/WireFormat.cs b/build/source/HeuristicLab.Build/ProtocolBuffers/WireFormat.cs new file mode 100644 index 0000000000..09081b994c --- /dev/null +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/WireFormat.cs @@ -0,0 +1,192 @@ +#region Copyright notice and license + +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://github.com/jskeet/dotnet-protobufs/ +// Original C++/Java/Python code: +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#endregion + +using System; +using Google.ProtocolBuffers.Descriptors; + +namespace Google.ProtocolBuffers +{ + /// + /// This class is used internally by the Protocol Buffer Library and generated + /// message implementations. It is public only for the sake of those generated + /// messages. Others should not use this class directly. + /// + /// This class contains constants and helper functions useful for dealing with + /// the Protocol Buffer wire format. + /// + /// + public static class WireFormat + { + #region Fixed sizes. + + // TODO(jonskeet): Move these somewhere else. They're messy. Consider making FieldType a smarter kind of enum + public const int Fixed32Size = 4; + public const int Fixed64Size = 8; + public const int SFixed32Size = 4; + public const int SFixed64Size = 8; + public const int FloatSize = 4; + public const int DoubleSize = 8; + public const int BoolSize = 1; + + #endregion + + [CLSCompliant(false)] + public enum WireType : uint + { + Varint = 0, + Fixed64 = 1, + LengthDelimited = 2, + StartGroup = 3, + EndGroup = 4, + Fixed32 = 5 + } + + internal static class MessageSetField + { + internal const int Item = 1; + internal const int TypeID = 2; + internal const int Message = 3; + } + + internal static class MessageSetTag + { + internal static readonly uint ItemStart = MakeTag(MessageSetField.Item, WireType.StartGroup); + internal static readonly uint ItemEnd = MakeTag(MessageSetField.Item, WireType.EndGroup); + internal static readonly uint TypeID = MakeTag(MessageSetField.TypeID, WireType.Varint); + internal static readonly uint Message = MakeTag(MessageSetField.Message, WireType.LengthDelimited); + } + + private const int TagTypeBits = 3; + private const uint TagTypeMask = (1 << TagTypeBits) - 1; + + /// + /// Given a tag value, determines the wire type (lower 3 bits). + /// + [CLSCompliant(false)] + public static WireType GetTagWireType(uint tag) + { + return (WireType) (tag & TagTypeMask); + } + + [CLSCompliant(false)] + public static bool IsEndGroupTag(uint tag) + { + return (WireType) (tag & TagTypeMask) == WireType.EndGroup; + } + + /// + /// Given a tag value, determines the field number (the upper 29 bits). + /// + [CLSCompliant(false)] + public static int GetTagFieldNumber(uint tag) + { + return (int) tag >> TagTypeBits; + } + + /// + /// Makes a tag value given a field number and wire type. + /// TODO(jonskeet): Should we just have a Tag structure? + /// + [CLSCompliant(false)] + public static uint MakeTag(int fieldNumber, WireType wireType) + { + return (uint) (fieldNumber << TagTypeBits) | (uint) wireType; + } + +#if !LITE + [CLSCompliant(false)] + public static uint MakeTag(FieldDescriptor field) + { + return MakeTag(field.FieldNumber, GetWireType(field)); + } + + /// + /// Returns the wire type for the given field descriptor. This differs + /// from GetWireType(FieldType) for packed repeated fields. + /// + internal static WireType GetWireType(FieldDescriptor descriptor) + { + return descriptor.IsPacked ? WireType.LengthDelimited : GetWireType(descriptor.FieldType); + } + +#endif + + /// + /// Converts a field type to its wire type. Done with a switch for the sake + /// of speed - this is significantly faster than a dictionary lookup. + /// + [CLSCompliant(false)] + public static WireType GetWireType(FieldType fieldType) + { + switch (fieldType) + { + case FieldType.Double: + return WireType.Fixed64; + case FieldType.Float: + return WireType.Fixed32; + case FieldType.Int64: + case FieldType.UInt64: + case FieldType.Int32: + return WireType.Varint; + case FieldType.Fixed64: + return WireType.Fixed64; + case FieldType.Fixed32: + return WireType.Fixed32; + case FieldType.Bool: + return WireType.Varint; + case FieldType.String: + return WireType.LengthDelimited; + case FieldType.Group: + return WireType.StartGroup; + case FieldType.Message: + case FieldType.Bytes: + return WireType.LengthDelimited; + case FieldType.UInt32: + return WireType.Varint; + case FieldType.SFixed32: + return WireType.Fixed32; + case FieldType.SFixed64: + return WireType.Fixed64; + case FieldType.SInt32: + case FieldType.SInt64: + case FieldType.Enum: + return WireType.Varint; + default: + throw new ArgumentOutOfRangeException("No such field type"); + } + } + } +} \ No newline at end of file From 96aadcde94b8a5fd6b743d2267fca07ca736041d Mon Sep 17 00:00:00 2001 From: fHolz Date: Tue, 12 Apr 2022 20:00:14 +0200 Subject: [PATCH 18/39] Finalized ProtoGen in custom MSBuild Task (at least for windows for now), changed .csproj --- .../src/ProtoGen/ProtoGen-2.4.1.473.csproj | 14 +--------- ...Lab.Problems.ExternalEvaluation-3.4.csproj | 11 ++------ build/bin/HeuristicLab.Build.deps.json | 26 +++++++++++++++++- build/bin/HeuristicLab.Build.dll | Bin 14848 -> 15360 bytes .../HeuristicLab.Build/CreateProtoMessages.cs | 5 ++-- .../HeuristicLab.Build.csproj | 2 +- .../ProtoGen/ProtoGen-2.4.1.473.csproj | 2 +- .../ProtocolBuffers-2.4.1.473.csproj | 2 +- 8 files changed, 35 insertions(+), 27 deletions(-) diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProtoGen-2.4.1.473.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProtoGen-2.4.1.473.csproj index f069724da9..22e1e42753 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProtoGen-2.4.1.473.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProtoGen-2.4.1.473.csproj @@ -186,19 +186,7 @@ ProtocolBuffers-2.4.1.473 - - - - copy "$(TargetPath)" "$(SolutionDir)" - copy "$(TargetDir)Google.ProtocolBuffers-2.4.1.473.dll" "$(SolutionDir)" - copy "$(ProjectDir)..\..\lib\protoc.exe" "$(SolutionDir)" - - - cp "$(TargetPath)*" "$(SolutionDir)" - cp "$(TargetDir)Google.ProtocolBuffers-2.4.1.473.dll" "$(SolutionDir)" - cp "$(ProjectDir)../../lib/protoc.exe" "$(SolutionDir)" - - + - - set Path=%25Path%25;$(ProjectDir);$(SolutionDir) -set ProjectDir=$(ProjectDir) -set SolutionDir=$(SolutionDir) - -call "$(ProjectDir)\Protos\ProcessProtos.cmd" - - + + + \ No newline at end of file diff --git a/build/bin/HeuristicLab.Build.deps.json b/build/bin/HeuristicLab.Build.deps.json index 3df64778c4..e1366b0b04 100644 --- a/build/bin/HeuristicLab.Build.deps.json +++ b/build/bin/HeuristicLab.Build.deps.json @@ -10,7 +10,8 @@ "HeuristicLab.Build/1.0.0": { "dependencies": { "Microsoft.Build.Utilities.Core": "17.1.0", - "NETStandard.Library": "2.0.3" + "NETStandard.Library": "2.0.3", + "ProtoGen-2.4.1.473": "1.0.0" }, "runtime": { "HeuristicLab.Build.dll": {} @@ -296,6 +297,19 @@ "Microsoft.NETCore.Targets": "1.1.0", "System.Runtime": "4.3.0" } + }, + "ProtocolBuffers-2.4.1.473/1.0.0": { + "runtime": { + "ProtocolBuffers-2.4.1.473.dll": {} + } + }, + "ProtoGen-2.4.1.473/1.0.0": { + "dependencies": { + "ProtocolBuffers-2.4.1.473": "1.0.0" + }, + "runtime": { + "ProtoGen-2.4.1.473.dll": {} + } } } }, @@ -521,6 +535,16 @@ "sha512": "sha512-LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", "path": "system.threading.tasks/4.3.0", "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512" + }, + "ProtocolBuffers-2.4.1.473/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "ProtoGen-2.4.1.473/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" } } } \ No newline at end of file diff --git a/build/bin/HeuristicLab.Build.dll b/build/bin/HeuristicLab.Build.dll index e6c044a25677a0b817f387cce830da108e26bc90..ad6f15171ad50dd29f80f5d52e2c2dbe13701275 100644 GIT binary patch literal 15360 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 Di&XdK delta 4898 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 dQ netstandard2.0 - $(SolutionDir)..\bin + $(SolutionDir)\bin false diff --git a/build/source/HeuristicLab.Build/ProtoGen/ProtoGen-2.4.1.473.csproj b/build/source/HeuristicLab.Build/ProtoGen/ProtoGen-2.4.1.473.csproj index e8d02fab8e..634a4d234a 100644 --- a/build/source/HeuristicLab.Build/ProtoGen/ProtoGen-2.4.1.473.csproj +++ b/build/source/HeuristicLab.Build/ProtoGen/ProtoGen-2.4.1.473.csproj @@ -1,7 +1,7 @@  netstandard2.0 - $(SolutionDir)..\bin + $(SolutionDir)\bin false diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj b/build/source/HeuristicLab.Build/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj index 21058f095d..4641fce285 100644 --- a/build/source/HeuristicLab.Build/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj @@ -1,7 +1,7 @@  netstandard2.0 - $(SolutionDir)..\bin + $(SolutionDir)\bin false \ No newline at end of file From 74ff6e898c44ff38e5296651fadb0da21ac748f6 Mon Sep 17 00:00:00 2001 From: fHolz Date: Tue, 12 Apr 2022 20:22:52 +0200 Subject: [PATCH 19/39] Added latest version of compiled HeuristicLab.Build and referenced dlls --- build/bin/HeuristicLab.Build.dll | Bin 15360 -> 15360 bytes build/bin/ProtoGen-2.4.1.473.deps.json | 58 ++++++++++++++++++ build/bin/ProtoGen-2.4.1.473.dll | Bin 0 -> 96256 bytes build/bin/ProtocolBuffers-2.4.1.473.deps.json | 47 ++++++++++++++ build/bin/ProtocolBuffers-2.4.1.473.dll | Bin 0 -> 312320 bytes build/bin/protoc.exe | Bin 0 -> 1766414 bytes 6 files changed, 105 insertions(+) create mode 100644 build/bin/ProtoGen-2.4.1.473.deps.json create mode 100644 build/bin/ProtoGen-2.4.1.473.dll create mode 100644 build/bin/ProtocolBuffers-2.4.1.473.deps.json create mode 100644 build/bin/ProtocolBuffers-2.4.1.473.dll create mode 100644 build/bin/protoc.exe diff --git a/build/bin/HeuristicLab.Build.dll b/build/bin/HeuristicLab.Build.dll index ad6f15171ad50dd29f80f5d52e2c2dbe13701275..f0636cb058bced99c04bf59315d142349285a7fb 100644 GIT binary patch delta 105 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 O9}}?tAB>L%1OE#v%pw5* literal 0 HcmV?d00001 diff --git a/build/bin/ProtocolBuffers-2.4.1.473.deps.json b/build/bin/ProtocolBuffers-2.4.1.473.deps.json new file mode 100644 index 0000000000..2462bf111b --- /dev/null +++ b/build/bin/ProtocolBuffers-2.4.1.473.deps.json @@ -0,0 +1,47 @@ +{ + "runtimeTarget": { + "name": ".NETStandard,Version=v2.0/", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETStandard,Version=v2.0": {}, + ".NETStandard,Version=v2.0/": { + "ProtocolBuffers-2.4.1.473/1.0.0": { + "dependencies": { + "NETStandard.Library": "2.0.3" + }, + "runtime": { + "ProtocolBuffers-2.4.1.473.dll": {} + } + }, + "Microsoft.NETCore.Platforms/1.1.0": {}, + "NETStandard.Library/2.0.3": { + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0" + } + } + } + }, + "libraries": { + "ProtocolBuffers-2.4.1.473/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", + "path": "microsoft.netcore.platforms/1.1.0", + "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512" + }, + "NETStandard.Library/2.0.3": { + "type": "package", + "serviceable": true, + "sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", + "path": "netstandard.library/2.0.3", + "hashPath": "netstandard.library.2.0.3.nupkg.sha512" + } + } +} \ No newline at end of file diff --git a/build/bin/ProtocolBuffers-2.4.1.473.dll b/build/bin/ProtocolBuffers-2.4.1.473.dll new file mode 100644 index 0000000000000000000000000000000000000000..acf148f9cb9b625645538974faba8e02da615b20 GIT binary patch literal 312320 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

^M-dX zps(;$ACBN$X&FD4BwKTmMCDF~HXME*Sg|iMFD**H%g^%5yar-f^xe4<=rAUcDu5kp z#gxqJdzoj&axy~GF7d6{p4s?`@8+tx`(<7SIuxBU+Qbv|=uk~u z)weSgKIDsY+Xdq_1L{DBs{3AeX2< z{rH5?L2bdI@aZqWAFmE|z$_m)9w6cXpPEt3gHKNr>j0&n5AosCRP3sic0-205%JHr zW1AXm?r$$l47MaTcJh{Ce4v(Ld+;D%^~L(hlZ5J1Y{XG5bDuKIm?rL!CjNQrygwn1 zEr#+A_U`Z(aNaVUDkd$)iQOeC7>W$f7D-k|4Nu96Qkk9ij9~lo}Ti*+x@;vY^^^&AroM4|} zC0skgDo*%${0@8J4g_VtCK;uMOlqBrmwFDaehS>qUbvMHu*jn-iF0c>epe#J*hIPLVQW>x0T=N|o(hK`5PVS19 zhVi?sBBgDmpRClJ-57*DX;6%;{`o>3Zv%+zx@+RS0M;MnMdVWVMmd6vTs$UH{NJhq`Y=K;g5e;%7X z1FF;mN|Sl)jy#IC`ROvC7yai z{w~wj-=UOn?vG0TE_oQW5mAME~0 z-tunYPce|0!~<$rPHe02`qyf(KXMb*{p?J|;JlxeaV|&Q{>C zwTUxa3zZDG8lH)CV;AwfX^8i)iq#twAi(XBEE5YqAy9h_QD{=Dm$CjCm+d(6KN9T( z_`s0hL=;qH$akf@Pay_s#~?+XLmWHje#1`Y+=G_^5$KVD*b!|7f!I?5wK!eHcBLTM zm|WJRL2zPwDv|$>!M=`<-IXV*KA45h}59p0z^v&R^v@XL@dw23j5-dzl4n^Av+Nn;WO|LnNois zipZ-#ox}>_8^J1ig5GD?`P->oH~kvRQIH(ofH4T&+<^~kQ<%@SDxLT6Ba|9)d6GWE z(7K%%xz&se9wf_KBrr7KEfU$scls7dPybsac#^rumBqJA;>4gtL(gR9-VTV`puUBv99cH4yfR zO(web;e|vB2R}805vY3>rPW+&fJF8S#A-gRvJ_R#T#k0;lG^TE0xPz&Ul-RuImS1i z%NMBmJb+SaK13OYa@V462<9JaKEYhp7&g# ze=@#eFKb}MMhwUUioYI>k$K7fRIDl&_g0isz_=D)hWrNtaxo#nx8eB?!_YwO)9Afs z@5n&i>%bEM%IN@#gP(!AzahP$yh`4gskRH|6BOqFt%nsX2-L=-Hdx<$070x?4H}KWotY2l9F7k)comne+^6~X*)(@hbnl)vy zS@GcjQp{P8LLtr?FUkBB;!0kU*#-G3v*vA1A1!}L$&1S)1%ol~2HY(=y7e1;txv=+PWkZa2jroVuOT8iU1wq|jsqhc zR*(~@?WMXHj0F_~^QS4E1syPo3!05rmehh~n+46m2-Sj~jIZ_<^e1%dS;ZpW8d&{-%Rb3ys224{yyaySinBqxA0HA9WE4dcl_a3M#;H;mdl!j~Y$ zx7OWIiBJ`&H^_^?co|13q=awt^Mbcv)==y0c}L~%n7mnu@C|C6d$Lhyom)^%wuYDB zLon`DjH1!=j>(dKs@`iTAi4lwC6X~zbI_ZCz0gC{!%R#T*36uTvB;jcMTY2hEVlD7 zYI*eizB=z>=JDYg(NpdGt<*yX_aTm_hHt>YR61OJQxGFh(g%k>aMR_%h(t-R41b3{ zRQd7p=E+yR+0Or??MuL;Dzdh-G)V_CbikmfQBX4uQ5=b)Lkl{Q*vKH!utZUbI^({L zsNE2jkYFc}%cU_Y?#rOVC@Lx{gP@3Mh)Gxm14Idn5Sa{i+l(S0tCIhHPu+X_b`!ww z|Nh_Sk@T(Q)H$b4opY+{R8>j%+bDeTbDEhh_99#h-q>lc%vQ92i4&gTbAg-<=X;I3 z#mpo3g?o>ZXydJv>jBL)K^Jy~*g{Rn`^T@WLKi?&K0~J>{4M~Xm@IEP?Zv)@+eT+# zD(!W61e(AUr*2<#)pAo8b4inri=Ged2{=%k385NWj#E}Tv38_%^PR||8~ACGT2K;K zxX?(PD~a??t}s%bL5hlV`Ct3_|Gq|X^Z&1(UnBHq*tEoTZt(H{xt||C&C(X?t(u<^ ziF34{Kj`#!wM2VQJUVAwmpXx;-`ths;&^`kMJ^>W z(-UlG*s#}CpM1|qo{f`uj4pp=_=oH`Zi1?@0#4koVe1~NF=~tbGh{L5L`9&SfjlDu z<@bOc2|>neF(|O7(HN9>I!9wrjQ9XHuHpk~pE&-(JjnaTOE{XWtBW29b2;1=67a;U zKpG3J|7c4xf&h3>vHycA4j|RQyDqXGII1(CWWeAe3x_jR977(=By z5&Q_?3@LuDzMnt)@aKc_GlM^0e@HRxD{zBdTNjz5*8Qz`C9;g@tOhy(L7iHD0^7(R z!=ICXyoZ2sLKZ*Ma>sbRvGkZUPnitx|i3@KA0d=uK_7tp%@mn5DB`!cdD@?PYnh-T4k z##HTt$+lvuzU~w+&s98Vs^obumL3E7S-3W>K0kw<85JodFaxk=P@msNWtk$SvPR6DLwE$)1~fS&Sgvx+G4J2EC#L z>8774NQ7zdG9ZHV0KP&q??oTtz%qVbC_j7irx)B0j7aCtd-0RwG4Qx0NY?pT(LH1r zvFX>JawM&w6V4MkdVu|LKH=sM<g4DHM%>Cqh92m~g+DKr)!{78;ilB!&skn+c{IEkGYf<)|y#H00=&)>`A<_?rs25FYPB(hzhk)5T)Qi>_Ckg~UDi3|5 zm>rhh5N3ajN*1$E1^g)7Q7>Vb&cTW8jxFt8@SCkMv!cM%_X zNvX3)kf8R%rwAA~<4FG^sAU<#9Re?7P+N|&L`I=@Nffm~25RP5Hv8=nd%p!!;&5vi zZsGRJofdA7NDm5bBkZ`dO#XwTx??q}_|m7r7% z-$umX_Bje0eEaIBUxC{&12e2p>uCnO5>F(qTY(41F}P< zA15Y6RzZR6w#7~;{A5HZ{63sv;kRV!3GrJyGzP!7UX91E>KTRKOMC73P5q0)?+7?x z;rI38W8x>HLg9B(6u+z!{6@#%H^{(mDL7#9@8w0usH0Tt>A!#-=_#8w2xoQ){=W{tT&ip_@%!E0K?|KAY2sN zF%b|f9r*o|z}~WJUTMkZ4qS(_QQHwjVM7P5+tt1fyw7fP3)<4Gdw7%vG;quiA5P|A zQ?R>W;J8mXDL8KUrwzv;F*r7&RE(Z}8)c(7o)N|I_rC_mH;*VBqx0{%(fN1H6!z`0 zFXsWfgCk=4_DpP3#LR#LoK2!@Uq#5UItW0|-EVYlvLYtlpCbzF%hA)=m$DWzO!`uo zvj*!qRtH|dB?4qq>rTS;r6!Q zueP`ShnTjXMxG%nuYZ4Z+cE1fzct#9_JK66eCh$^C+q`lVN4&qz9y~@(tr#5;0z!V z?SmVN)$l4qClgcUQ{&7WRy><{YVp!bVTB#py;J^_5c+uiPi-s0SA7(XO`y%hpvD;? zcd&Gje$v`++zpckVS0^IKyY}qqSnxzKc^*V$q4Jx$)CcRx;i@fX(T3tF^}k*(^! z7xIiagkCtDW`x8Vcc7SkinlMi;Z1GxS`ME}bQMY)qs2U5d8X}rW!dI{XTNMV(6;PN zNrpe6G3-^Owk1!~uTRl%4Z{0>btJo(ioJvF>e)dm|yYM*ox_d*0HEGPI%! zy&zL7sM0;%HO~y)lcjkOYSB~k%+fuWR6nPCdTAbPu=mzHvvm(%&z+-tunRVK`bib* zyd!e=<<{h`h;+t!{FQlH-So_4q`J!wW&3uy7EZc2F)*%C+g*MrZCtK)$hCC0|NB1r z$bVMo6CAjI$yKoi*d!jzGb{S)D_8is2kzXfJh?*v*&D)kc`1o~n=83yKjR zfQmoLmiK_{(4k~Rq^AZ7_v(Z90>YKKHPbs)tne-jWcDF`kjXg^{$kfesN!bJQB2D^mXXUz*k0my8X9{3P-qjAemLAlXd|J!(rBA(J zpZ*8^I)}Ca2jS#1`36T`Awy4oUrG? z8vw5%qTgJlVm&L6#qYBQB8rpGFr&qP;x~&gVIICaFpmKe`2D<*x7x@HU-@%e0ONq+ z1jt^9PgXr>WUs_GCC~^Wzx`@_qBTES*FDXFQG2HxZhEOG!Bxo@CUwsiqD80s}Y14yJ5I!1ImCs09R30uHH@j^kN>0M<(kIBvjEp+wuz(}B`vW{yNAqU4rG zelXR{4ESF24fh!&?C#+3^Lw5T8F28m zWC(kGeou5K=Cc|6pld$2pro z&&ePiNB_7C$^FnUlvC9Yj%j7`W{Tc1Z41NVrEJ;Yt{`lu}T zdhlkwJ|>-v1mII~B5s8S?k2z)Ql}N$hGoDgz8vVAtBqkgTp@%uqPH?sGi@z~|KQ&_ zls;X4PZ8{EAkEo1LHF88r}iI_<;^6`&tc3GSu?)R{#&023s=?vf3W{GS>EM(ey_@! z60bWrX^cKmy5n2uMtgVQ6Z(8LS(bT)VtKE*U^%`=_6IAe=fUp~ezQ9&n1}Cv%#-f; zmY-{>wo&Cr_F8@~3Yva#ptMC#2^4LSkXU6e+6tZ6N&YKL6pZb5_;rYlNnECEQ56=5 z5`g%}s9ct_3~an5Fe?%Gm1`q1_HRn&7*1y%<+uz%f{AOjYn=L{+4_hq_il8+Zg=D4 zKjbuG4GR(T*Er`VhFifYybFnlU-nqO^jMTzi49N<`Uq#_Lzd~uGN?0O)q&(5h+|bU z3Iu#hNM{(*NOoNHreakNBD@qkAls!j9NXt>ij4St@=b2s`<`Krbv-gLjG zHPv6*I>=WYd4*cqsg+ zNe+}aqWRsT`A(JZ2$Xa%^R?0z6Z*-L%dFyp!Isoco~B?+chzaGIs3DMJFz}@_4$MT77 z2`;UgmK!>Rvp0!y4$p^F)O%V0KEV(o+=#7BaCE{og{SIRdc9JVnhJ>qEHKF|=WEeR zTdh`Gw9?kd@@h03*&0Q&9n|220cQ(AXv)anM5g^adj&kZI3i#Os32-YV!gQUVi!d! zV}9a_<+(M{`xOz4kNY=7rZBHum9yM`IBoKIl&8UoHevEztewd-IPZW)OfadV)m+ux z@Muc;__l=ct9jNiI-{j0Ng&b`zI~q7a_n zFsne`nB}UNC=e-%O@YB3g5PE_qX`**L59Dkqido2N>lQ$Ly|k_!#L+iRhXK4Fxk}d zM!1@{FV1mg@=!oYXB-G%z?ENaX2m%O;UWipDZ-#I=r1QI-r6c>v>FhK1&wMziY$V) zz!f3zecX+cI>BPNX61KBue@KE-#rn3-^9J!X55149bQ0!`Mf^Rsllfp({o%4a|1Uf zYP%qoY7F@<)sw0ivtROVAhpjI_8Gj!z8S zn4}$%A(fi8OR>iL4lS4dGQeQMbG2{0e$H|R* zRD$oq+;!RpEx2b+V!jQFyQ(!f>80w>u83`T8`KSWfU{|EqE>S{bJo{@cM5<+K0Qjl zMYd#2gA3~;XH{d>X)PMT5+S^MEJ|e{Hn5@wEb-=O2Xcxsh}Z}xoTs9Uvh`ZMUXXz) zz9%CFt0-?QzYg;a-aDj^5ua|i|4{1KVF4U_DRj6N4(bqWak>^>pAy`jk=BSG4*54V zxV^jlNDOXA_O(gDZ!*$Wx)yfkKi4J)zv-T~QacI8kjh2EsK`q)GvM20&h1Zyi!xQf z8o=bvdRP1G$+XYS(1{F)Yc?KUG&!x(lw_-W}4o>vf zBtgH)?<9XsviUn17Z+Lc7vAW^aVqo4-P(`ZVb{EkS;0t_RuIyPck1}}NbvjazFds^ z%Kw0+3O(1fU+^2KyQb1F5qG6k+gR_xj2*$KQaGQw7cpl%!~Dg5P(xayu~BsD5T(jDt+*411$}75u)N zDs^gL3}#ja&ybhMyi_9(bof`6S3w)KmY-dg*ubu3XJ9M_MmdSzHXxKn+_~#9yr}3*3Q66Jb=Vt~z5Y z^oUcYR#>aVP8p`KLse@!EFU7H>$DB7c}KE>KV)eefrEoVZB;D7F%sj7ld5CMHU*$SiX8(#GjUO$2dLdC#)M z@s6DF;HRRHxB=^F4G@&2ln7y-%+zohl9JscW#jH;hzZda31aLM&j017!J#!q)1j&n zX@Q9tjEx+O;j>YKmnro~7*`m`Pm!u3kY^!-GGE#xnP&&`lW@1Tr%@!hA2ahiNNE`% z36hX32{I~DBq3E2WFW{=bn|D#JbVf=qiYO|-GzAgCpsNvS4q!&Nb=SNe0%PyHss>u zfx%EJ#o>p*5G4!U_E7T88&i1p)vzd#-w_T~ts`rkN_E%~=WBBsVHHI}#qz*b2MrZG zBvE8z>_tow4Ll_2av9G9m?8>zNHS8Oe=iM&vZ@9;0s}il-esQv_>jcFz@*6RY8j}4 zclbt9D0xYNfyt2y^*cE*&=K|_D>^nt(=xyi7hqN0nd*AhvtjHcOb`PliBxXB1%WZi zn0P|}X};BgF&%JJSWU)c%2iXm(lcD<-RHXzXSUqg4>aG{BuIi*UAQ#7U zt5Wz257^dLB?rTpEY(zXE-&4X;2q!}=y3Y)b3)8UEA@zr={z+7-ww>hcr~V{0h>x} z+w*UnRSx*J6Q|N|uqYgPj5b&7yQf9mB{*5{A7(!&P}aH(9<6c0So=$y$wJ^Cu*(&I zd;2gQ*{Uv7;m#@-|728k4u01i(ofua`tuwP|2E1K>6nb=btI82p&Qkg)@m5F9R&5*>Q_LiD{v!Sdyu0LB zC2hQ!16?gkdYJ&p-wGS43ob&Q$NpBy>d8t#dt8pOl5uK{=?^TTCWEa<9EtkN@v3aU z@R+31df6uoK1>5mGrJb!2@GYy9;eNEn;Ch{^;$2K<&D${QGa zpw@)p;=I@AWpKs3E-y2& zF0UH^DBrEG_-^TNzFeFF+Sji0GoqUuDgN5N=tFb2;7r?YL0PN0DTz-1T{ETx>mf$= zZG!KHa8uI1JcAxL-2bn*Ux!5iOvYdQ!dx5WJ~O0`M6vnnklcmImP>Zz*C7@PzSLCSmv1+c50mHQ4nd@V+diz>$wFpZ;^zcp+Z0(@S$f^x6j3{OD>H$ih56jUC^nQX4jBn%hCkHXyu(!MpuD@J1 zGdI%duIkG=c}L~B>nC44Jw2uTU`O8%d0H@Mt?(xEWYJiZusNYIXa=+<>Yh2;GIxDh zBlXJ$&Ugb>xzIHzWZsU9{PrQ8i$Z{sr+MZl?$SI9TuYPHTG9fNb5%t$FYTy6JVind zvgZYgb^wj^^F8x9S=I{{u*10Dhr;>T(Zo#_U<$-GmtsbZB6BNr!l%EWp`v*MQ6eyS z@05dT7uAI#IFUxb)wm~v(<``YLjoNV`g`VjAJ+3SZER+DJ_<;Y1+rgUga+79%(%eK z5VR}js&TOp<061q2f+OP9CK*MO8PWNcmS7+0QEU2ta}z%&$9ldJ-D747QNAc`vu{u zEA*ZLT=Oy(l(^k$MmAP^N;6XTa?}m)2gh^Qg$wWpo1zNYY-EtM2Ub~|qQ2|(E1l?& z!5aQF`b!rixE|jQ%FW}D>6qNl2|c?WJTIEVLw(5OCaZMC$hH(w23dfIM65c4{Lg;- zb6aF9*k#jQfT0!44)q#@%|OorK++3lM`Zu+2F&`(FR#X}$*`-CcJ?>xK8F-T*iS~2 zur?SLhz4QF&;#G3L0-I#AHRgJ#oYhPt--AJt$OPA1g+Z~Bx~K~;$O4IGushA;>ccd z>yU)dp!q+w$=Wx@*Q>Kx6zw6CO@@kc(r6W;dgy^b=@O#}G~ijy76P6n7#YqO zuOG|3xD|To{5`L`o(;O5^!)w2g1@_#{#d!s=g_{&*;=`8e1o0`3*%b_`NmjsFZ2FE z_ifQ{*{e^$HJp33pu5>MtqUaGy~2bs|Ga|vCJZd=W5S`$2LAP)W*RXf3(^Cnjr0|M zAkJ8yMzBLbDdew_!oiOAs1yRlizqw~{T9(jSeIxDlxARN(x{tUj z@j3{;n&r!TiM9QH5KZe>I|GB;wCg~9+3BW`VL7X4Zs?-56tcMyM>SefTgwjrvP_P$ z{+l`Gw?xBy9xz0O!`={+AK;jP+oXtS&iEZ;fF2O1N82bbZ))|Rk5u$U{K3zlR)v<# z#82&j+HAb27l=dlkOqWw6)%c}@u+FDX|8`~iy?A7K7q;v&L`VL4R0eh_i@W#TjZay zvLCt#yH$~Y#U_&8(~u5&!@H?KFYk8}hJf!@8-HAn^U@RZ8hFK{&S-^oUa{2~6jO(< zYpU=WStdj~o4!zWMkD8FEM^T9EFzB|oi*Obnk(y#b3=bFb)pyMYV~1W)1jgvh8+g; zwt-b)UZr7;8x=DZD4k^+I&;wdkhxhZh6>S82!)CtJ>m#-i*WSJ(w;5>J9W=$TRkbOl1CI_L!zIYBH-RSiLYz*DVB zlco$WmrdSr@aZ^eqOm9N-y|xeJYwyqB8AH(y7VG7i!Oab4nR$d*&l)vFMv0U6q@`I^9!iFSSpS7@p$rD~@;AK#nuUNY&fus^lA= zYD7U}_Y^cet7&gv#e$lMns*c?sEXZ@4C?AikwQ_|$K^A-<2>n|WAa%bNd%#LIds2o zHFUozUf3@Z3t+15^79JHqtYs>Tk*I?@p!f3@m%t_FE$+l#Wjk@^GMFwNKrgyo3T88 zw};~KJUjOqMP<*m^Ee_&HTF_{Fe6X_K_-u1{gQlJZRats+A!3!F5`fh8cKQyRX?=>4ut!}=|i+aypGo-2jSua_|S*Xn?DprBe)vJMM%@;(rv4&-;jPi+?j z-$MFL4g?em2H{$vY7IYHe?koZ{THxTEdxmr<`?wLmqNi-TFjti>k zAr;Mtbi$tRjAPC-s!c=VKd-v=rBAvI0>$C&?1=Gy%Qga%T0!oEOFXHH$#5B)}bksam zinc#Qou65BQ)bzmA5WAxaeHRL?Wt34&kDU5oU4E#zL>5aCSgSuWpTFH?(PU#<0oMv zD3(c9lwg@8hU^`7N%3lBnPevZB2vUMd8$Z|UNnRD?t<>hAknm19?d+lwoB~Rc9kSy zbv;^Yha}mZoStjQ9ee0>Wk0cIGL_Z~W^n1mu)eGROY1vNQ1Q&5>AdSSnqJDFm|oa0 zFfe>R#vyi8lrz6Bq@%UwZw${m0y-|9X%$-xEd>xb~SY= zwVM%G4h3=ZGN5XU+4tQaqfSnj(v~{8fTdHBW-7JeF{Klvw50;uf+)Qcq{k_l&-z07 zFj6Wm{SBl?w7A44nfMyi@)29Jm&91AcZK^(mx5JQZ1x4F3A4k0M@5;E#zF2!$e$Ss z-z4a~7|0#P^jOCgeox5zXhN?8%s6o2ivezBTw)Uv!<&GM2|v~lz9g7irfp3P;8)p7 z#~Q-hr1XC%$y^ed&C)}W7T4x&L?qr2Uc*Gg5dPt>VhG2gs*<7eaQ=mckg^%R70Fz? zWn4A(#+>>s4#XLCp%C8naB@N+f81M#1uHC<(G=WyAo}K%s)Oa;YaFB-o2 zN@*)fuS-tkhB^RlMEVHxT#?yc0s+>m7H6YCp*GPGS*#WZ=6tRi`*~qf0_c_X>Hnv~- zk8nPk!q~g<@&dy4X7qyGdj2{1#Cj>Uvb+F$A@mYa@xCjN&&;9eAF1brb-ARax6%b3iPAf7)TNzXg zIe8GayB%0>4;5HDFm_E?y#H0fT8LlK`wanPq=5oa=oH&Jkll71tEV@mez_L)$|22ijm7Gy(guw`68S|d&rgSIP!>NdkooM z5#GZQ8B@lo4|kZkbhE9o(pv(QoO%XtI>!A733^9ti{~`>54c=2r{OzybM8L$MdHTk zS0>klIzV>)2OQ%@L6{QW!kxW(Vz4FI-;gAPU{SB2H5AweEDKt(5Rbi{yuC(FXskWi zw$(HM=PI_K2F6XsUDY`7nK?-Bh;2bZBY42!uAB5&^vtKUXKSoy6zVX#2o5j|w@PP+ zzBOS+<{3E377f?_fMa+o1`$I36`s@v5%LyTD|#Fz)-@<7sD&9mi*cdy6KyEG%p!{3 zSQN^M8_AORdaG^+Tirifb+8+B1Dba?N+>qjmm6j&VbAuX3jJ(FmvBDfmsYe?=0)u3Xb9Fp?3>hMxY@UP*Y_ zNazYAaNWO^=(5W~(x^^}&d<3gQ0vn^83?i4hNl$yGS{yE6Elv#PKI z|7KJbrXW(IYH%uEH&l?jpk3%clV=@-MYtM)JOfmTqCgCsgi#DOpd#>37!__pr!kgC zLZE&?rRhLvRXO8Cnu3v3po7@K@U3VJaVS8)il=i;+eQ51V1#iY3gyDW=j~(RGYV}0ABm3~H^vB`M3hxkA<Y|DGCJ(wy*^VCRAvzt&cNoP^Gm4F5F;6RY_J?yP zUVOGZBh9{RPLT5<25chTsM}r2QP+$X*)sRiZF<9dx$frRJw%<6OIi`h7sFusqR5=7wiapjVYNq(xJz2{Ls@>m(Zy$FEK+4`h!V&S4A0y={QeS zVG@hiB-bUJhG0>IU=QERjKPL9or3{zrO}$D7ug!^RsEzF5bM-vlMw|wQDA?B4pXp4 zCOIQDy2|Syd7Vt~fssj$$Q&atS@KRt9!|sHUoP4~KWarS5@V4Ji79F!rV5lpiZ`3h zBra3K7Z-4Fe5yhuaw zFtPD$DsQeQXn_42OQ5YZ7#>!p3&p-x#7sdh0)d#JVttMDd+qIQCp1-lm}*ZJSgVb+ z%cC&9LP^B^uZ#ACIVMC-#Nqjv+`NpQ#sQI&xA4t@foOCY7ngBd3~}Tf3?6j2*OYci z+&2BXsljAP>*47y^TEvMVnfGW28?p!~uR| zTj5}>9=<7~>HXVNahr4h%*vW~ZbYtpI>>Z$|N}mrvNwva)h#Z>WBH5^ZYY(hh z%zBFdK-aOi(-7(a`LOgAh5u61g3GvV>S@G`LZP?N zg>RPt85xV-FrxP-0VIe%J+1bPATeOO^*(qj;Kr-9dvz)L~+BO#>fMO>$gVNu~7fbft& zkPTTwjGkJpSi~hZ1;JrJXygVvfeejhQQ=#% zS$0@Qkxj|C5V+#_ty=6w43F4Sqc6JQA|Jk+aR&NV;r2WTKwn6y*uE%Hmv|W0dQ?QP z#APg4xhg*-79*U2fmo(MTrQ;J@kPjw-r!#4nH|b}Hzi@ZXSVDw85{5C$g*~y9@dY51kH?!qbr_;j@(@bu#hJ3i;hOo&p|&(bpnlOou8Q-RW_z9oA;B#N{0%f) z{ReW@DLe>>nu3nFFwY`(y3s?UE>ePi0K8FHeSu$8I*Z~3uP{!~`7nef=toFgte}5! zfP%gw+?DeU%{NCYo~8RTxeD2~1S?l~$?b2DWE{4{lXWit)fW3MH`!;|tD+hmZ=foZ zhDYs)U5$TxqE|U4YBll&tF7v|w%Tih#+Yr? zd@Kz6SRMh3Y2$Utam^fLYvX#WjiIq^xNQE2X`&H}BpMO@^Mu*lFxA|9a@SIncb6G$ zaf8C-T}P{}1l3mV3Y)1DCJJGO6}B@_#1F*%d$ADrPWUmv#oWn~hn14ynt316ZK8JJ z=Sm*VIdmLRGfA1Mfa3_Yj7bajUk%uu1-2z?`Lzmm{Xqr$c(P{Ve~xNmad;U7RAC=E z_pWNY9JSZCEk@tAE>fzYg5oU_iS>RyR=L!+Lj34w3a<-^S5b3hp3%;wSkE^u<^m_X z8Q9BPGshZ)X1fnayJa=uPDI-`ADSw11!T({c~A_Oz)7dVT@1a(L2c)T>PfkKOU8C9 z$w8fN3hd(Wg2NWrT<{`RE~wH>xi}W2RUawF+z&uXXBv!o--cq!5{2T)L{Sio{39ws zRR)M&1fh6)2YFj^OSE@@hG7yzSB|AU^nM<-*S68|667q0UryX=TKicu&Vwb=m@g-ddU_BL;n^m3A+Kv@-0-^zZ#&nWrnCSl|Sv{Ej-~w6lI^rlsVUcvmIrCQutdGA{;wj?_#VIuccB(@PdQ- z6k3dhwaMWBGX|_=^g}#O3ym_57-e?sKDxatjP|aLX>Y^c`1bBIV4Z8gnr!e}jbO;% zPZ*6vyaNl!q)E;9!i#{JZLFMS0QwpvkqItn6Z=?7H1a<+@^6mI|HkOJmyP_tseDV5 zJZRuiD*0q!m`{Ddz8=fV{h1?ZdAJ)Z9Is4x14+YhJj!3G-U|@nTfsB}pm!hRx2xi{pKzP> z)6sLN>K3332V)k>sa&`*7?Lrw?rJI*6ncn-+M8cKNn?xx*9sI4vuDX5yS|FNdu;I3 z^)z(7oQr{@?V3_ce9ibH99paFjdWu!VmeJ<0uAMG zGAb&@6gkz6WF|fzeyp@vI)K>XTnqofIH~9n54kzY#!qs7D6`(LWgj#5;w z6mM4&fN`A-iIGif>rxxgOt)s?LU6pO0vptw2oqAA{w}~P>Vntej9M9FHtMlan3n#N z4R}Y;yqpEzSa#76r&lE3Rq-Th>ZQ$LzQ+##m$No?b}R;8Ld*op;n6HEN?63ueb`l5 z2NH7k$@&<=&9PhC$>71=?~n(4pO4i~C7#)+Zb*u67&a545x`dn1u9?&WA>q!ASLG^ zjYs6wjddZ9&{zZu&pW>)CPV_A)z)`tx;>L5b3von$$EBhT1R~v%@e^JgTNPJs zb7urT4Yy(TI}5YieGF8e^)tE4fJ&JYu744@l_M<<&QpLB`IohC-aAHd43+(bs2cHX zF?_;%#3%fVYvFF~(M%&KzV zxQs*8TsvLFo`VHkx;rGgj1a@K&-WtI7{g<(_f1OW4m9j7q<}o=Ve%e}MHB@d z;eP5<)g2isDdfkueuKHV7V;X|vfl~exr5o%wq6ym)NIwb)F3PTra1Vhun`0|8S`ix$2y{SLkUh;; z8{B~_Cz>KJSIZhy8QwfnZ3N~M~0~T=QW}c0j7JRLE0q1>13q-+V*JwVN%RZJ~ zpbSt|he+30(&V+(W0Lm#+Lqj9*i9b0lB4fhG#B|C*KHv1 zBRmXH4PL&*wn}SxVw`6ethUf^?LrnR4H7N`Op}DQ;h%rO5aO0lWoZ;9A3i-HOqw;5 zEju8VQJ8Zrn2QLLeeRk$-44^}_vOfrWe#Jv+9!b)QX6o5+cj(iTKCPia$U&F=*cZJq|bsKH$X!P`lVtNbou zOT`Uv25@7&XpVScEF6Vv2N=1)4ttp$_A=&F5)cr13b8}NSBhyjus%^0@SXni13RVCmAV2;a1H{&Pnwo=WrN#k#k_*M#Z{r?y+J zk2Ut*V^^*-3U7ijIU0e!T2NcBZ4Mspp>0g8>9S5+lUt`X=Qcv2Q=5mHjM^_9qqZ>^ z-!Y2$+ATJ~9A8t7V%JJB%bdg!I?@yy=|?Sj0f(2MB)fDDCJy0CAZPRe@I8y)7obIcOykEmC}z_u`)$l&0bZ=B4$VkN(8ed> z`P_>%T3=K$XKc@RfamiCye#FfPF<>8v}>o^?;)8K;|~qiJhRIu_Dt|1%q3gTQ*J}$ zdDx8bPvkau4$Ld=HqaC8W+6S+Vm9gd{if$-S9#XcrI^dZtp!b$D<)G?|8w}XfxqIT9E%uz(S59gi$+t1doffbQCneO1$PZFg!i>UYYQS23s>ki z;EG|2s9w;(7=YCfQdVJ*QfUTbtzP;7Og7tdJ$?bcB0BAw@aVD=(1GI?2{LkMAbGC> zI{dx`F%UOHU?h@;ydvM1a+mBlG~7oT=m?MGuou3Z1isjiqzr~-(r4m{D$kprL)AeXm!dC@6Qj+Z=+ zF*=Gh1c4zY0+wnb1~!==$*Z!^nKsJq0|qwAKEi;PZADW?z9Y=`WMqKRpWs)VjI4hz zrUULE$j_);Oc{9{j%K?s3l+>|^jCOx+*Nf0hM8ciB>Fi_wQbm@5j5c|`ezc?_VkF+ zw>(&QGzaD)%EborpRh{d3=8H2;>u2yac<+KqQ7#f_!aC|D=u6&WCrsS8{A^TWrTvl zb*#yQn7*>_mun;UCYlmS+g2#Ag{@VCIKHzVjYWG5+gOEv&;|}l;w;I`Pw@rGh@N9$FJKIRj^!QGeqgrx z`j0Ty(7A@beFM4SQ>AKm|A5NdDsM>W=&Jl2TMUZT-;*6mtwbHO(EGbkYba_7B*lfx z=f`ki4M2o*P^8-8mKtKYv7`5OmP=&0_6a{3VK_GCj$`q4_=ocV(KQ&zf`u9spCM|> zR(vpv{~iC3Pf*{SX_^K{Rd_2F{wb{Rh#kHS__gpOY``PffCvv#W!r_l9X8)q{u7qx z{+@-q4fgl3upejH@9+=G3T!)(b+FYoxVN+HQdL&uJ)XwzV#{C5@-tO=#Y5A;DVF5N zvc$pSx8fg>HE1e$EbW+|YOWWD>p>pNQ9bAg964G&$Xq=92Ls-5%FQ9XYt%TB5vd|S zl)5n#84PPRms+iH6#fvJmHdV0q~l;8)h5-GZ7pC1;XY*G$&r2xxSaWh#~JN&^eVH9 zY0MnhxEM5GebqE(0>B=RcFw}W{u9$A<=(ULQmNXEc32OMtJ3&+C)Gd4 z;ZGIIxuBkZO+Q|YEj$@p$L6E7`;pP^ar#^Moodibez!v`87=T!M!Ux;C;fc80q;2U z&H}y4ZiJUp5w@rNu`1RS-h{0`j#!?Pgi9{E|LQklv|clcgfGU%5qKhsrjBb(@bwJe zv3qRsH(A^v`%Ii8Lt8)lzMAgbS{lElgizm5>49W8Hnri6po;6zE%d_gFsk%!x5^Ns z%9&tT^o#+{mZoF2%Q^O7EKuUK%D_y{v9FdJcl8w0X+VznbBr3Miy1rj9G9);orjap zVAy!Tk!;>xO1w(&vMny^`hdS5!0*V0X#29BjreY30ahk&e1b4v_FTpoaS)b3* zH4-$ZZtmq`Npz93Uc6M8wDs6b01^59%1g2nybs{1AsqS?L&yUHcrV*HsgTu&SB_7k zo>FTk#8<6YV~yNeyVgg*5XJJvNd15#6n(#$7K^{f9dG zlGe7k-m6cvfL6y5(H*yST>;39_YW1m1yBmNsdpfe)58HslOr&cBc2mz4doyStKyNr zVIA9e`$_aX&TkOPj;9k5_Ue1sk7GVw@6rb_L1ibNzKv(0{?v?5RJj)*jAxmJC36~s zp(Iy@9|YyDz-b4;U3W|;x=+IqPpr?!qh4mw14-`Xk9^IYbhWF16H{0sOcD_yP~qWg zYtRz|`k@lG$9UQ=R8obr(g$p3hK{b}LF9I11vWfhT#7VZ43KVyN7s zZ*Dq({F*5FwOA?9JWKQ&aB(V*12lsutZHsie_Hql!(LAcNI0Sl27H^`XvQX*aKoEJ zPQW&+5{efqzHe(2P8h|&iRN*e8DnYguShH>!P~gOtsgM58gabX>^{F}NiudIu1-Jy zYA0?uyor*v8KQ*0mSn-ll^dWy_eJZK^z@mhBxUJeJq~26eO?^*lzs7BsoNI#*yG4TdQxRTMM)( zq!ZrAVggZauTt?y`-e&s$=36FDP7Xm5*=T?4dqnoM4S*_F@rx4MeAng(M;c$*F|51k4bW8)bg)6@X$%d}5N(9V zncy~^%=fS+?5%`}Z}g4edstYwvOS44z>GDs-Rt6cLLyK4(_C8l0B=3yG5;wVJ(Z>2 z%#y1&|NAhSJsAx}o=0RxxTwvpFaNhR-Bb0yqUqu46VS8;cD5awPCX$_uyw{kkay4v zDlYHu_$8*i)o#iktb+FOG$BR{Qqx;wc>3f#!)F*N_WxSO5cyi95@fO{UHp)%9sRF% z;$6{Gw7!q!X;+KT{THxs1}4ZD6H^eMKpH&`tIv#Bb2j(z+@lf?`^?cCp;7# zSDhzN2V{qqzlPcG)s9HH?rV`tokdRTJ8B0}a4QK5)N6y3A@BxRfD_`$}Upf~^CDuvB zd~I8_p1XN$pWwHS#6#-N0gMtHEB1YE)Y|tT++%NwT&(1b)L|^$`S7B_|76@S5KtBEKXjvDzl2o0Z<*;W^T!z zX$z+;TVXzK0W~pshX1Xf1P#=iNJ4S7>8FFNGxcQ4|DS-l7p*ZI z>+lcw0MBgin~1%Tb%cv?GW;*t2ve6gUw0nO1F9c1XNtOiF`53;M)3sV2bHqmH{Pat_+|))@Tz#bEH0gCDiA! zF#agDmn@s##yJM{ATdaL^JXWvJ|c@mr}J(x6@HcqI{WB&3wp5Az1BMf&8Jyyvtc~i z_8oj>(4T>a$imN{A?(8#IP^Rg4yibv!mUNx63A+AHlB)BA|H_NQ5(zF`{Rm^Jjgum z448bOTpH4Kke?Tz8ZLoUNl3O_1PTQpv$x3c7QudVZ zsG0n~V?6p5%Qdp1%{78f)mZa-l!VHSYG%0sQcjI!Tj@)HL!?pNo3^n;U1gSgpSm|q zjUQiny=N~w#(domZT#^=Y8`Kn^2s<5dnygIK@xApk^tyP2N{!;#+!bDdc??-v7}~^ zS2GE4>hCqzGn7Atcy5?SC9|m6^fQWyE1{?f-wkZl_<_vd!Qe&D665r{8NXBraI4;_-qD%vY4d+L=Ly22qK3=EL!i`nJ0gCsV{@_B_yOvCD4h|ItZ}9 zgfpk}ijpOexXvh4e|BPl3iD-Lj=31oDazMK7M-w(( zBX$~ZBdVzlSzN&3GRisS8-VPAOA_>g<|*HR>XuHtgTA@^&dohwv*4n+H+k;`dFl4? zY>cU>O)|!kR?rw)JC-Uz_!l>%@qn{x4zbTuwzDlfTUlgl3h$~Ji!yZjK*eHgDMy|= zE*(Y3r(=4-X8$)m{44UR3N~BxJp4bQC-Hwu&-9|r{_Q>dEAy&~j3$qw>znIASGA2U z(Y>Y8KkS^L22tO#bF7|8JBW@k3F@f`LhsylENawptflAr`Hs~wQ&c-vuN*?Jm{jys zR2)UZnIz#wQx6LMonZS#OMFccHCpt|5di*!J??`kaZ>8jHD0jw*s%& zi{3TusIihStIQO_w&5ApdKC0reL~f>qfCEDzVn7#-+XUn2|OrtA)rfTy#5JY2tHju z0($lXH+BiTP19%u&3ji_n?mRw- zq|#JzKo|?(%0AqR1lor;ZZ~z9*avMn*xEzCD3XRXxtr;?b;bM>@L2Yo)A_)X z?^~_eFnv+KbTo`%!2?Rz}oQycBw)=F~AWzQ?Usg=IQ;SdHo&JT@|bNi7P`r^O^Z6 zzKF~x;7b&Hg!l{guF5L_#6XgKZbL&Bjee_Cca{Rue{yIA3)rjKz}4QXYCEHbz4+-8 z)pM;zul}-FeRq3L_2hr?jSz8J%|yq3j8E0EJJ`?T$VotX7Er>kg2`;{q;^|tWV!2% z*5(+kJx=Jjy}@^Js3%{A*TOxZ*JJ@u)= z>pJEwkL-+&dn|e9;UUVlwm**hJ!ADjM8`33lGC4a2fZ2Evg&#=C&9nW;a=<8Q=gcS zfe%@v4&8N58hlBNOX`ny;4FLS*TFf{28ZvglbEhM&}Aoyh|`DI+cx|vJR<9tCzY)> zQPy0BQ2}hq7ew_hP+eiEbP0V6ZbD*>f@{V*SIascbis;nPlS4iZo%)-2#+y;Cm`0y zppEUIzS3$#DV-d8Xy&;}xSSYvm|84zC|-zfJd}GhSUWPesOk+ghq~)s72G&9zeUn( z^)jsO)KFBeL7rVOMctG(u?w?5R)UyKLB#hRAF1!rhG34ww>m2-8t5z|`xztq63MPL zzB+0t!Lb#Xf^Fd z=w_I_@U74M67|Qq2UMTT3|6=bS=M~B>;cp6V2t!t^JF|c$%Oe60x<{1WcIDexaBfo*S3xk2+E~He;kyG>V_Mf22%vFkuG2e?G=erO& zwj*=1??5o%=}6062QzgBq2`W`kCq4x-vGu1K{n1ag|5U569*e2>pw`0tcn~GcGia8 zhIoB|XB2BAA1Qrt2S+df12frL=c{DEb#rRWgyxPHe&H-C3&$C75@{BV59d&Bl(NsE zLek2D&{;?~=1|jbj?STu(bhw;ZPl1<6*S<)k=53}Qrd6ppGY^_I@4^6e#mW@q?)v` zV~m$;{)&6vZ8J6fc_Hi^*$LQpRZ3`8;q2{Dj!#!)(0ILjlR?{Y z+B<@HT3dVnK2Cd|Bp#!^*O0;Xt}xpJdB@=856+n8=DdpWt@_G?9ILO4e#%9f!Mp9a z$IY}=$AJA*EbNz}u)}saFkpWfm4T@yZ1SnF{eHPNmQRt{(l0##EVTRx#tnCB^wBAq zm75_F{@OxziCW8@gKRFAOOooKCy+#j{RRyiHvedv*v+90u{1THStL`o3jiaYUv6Te z)&@QpW$;VvaysIfFrF+M({4CJptxB{LORFq(+FLwPmv`#EM8H~TufC0oYr?b0)w$d zFK))H@l1vU@3${}X8V^r+?#wmwIe72?^;}t<#%CK2wt&RK$v$^tDJ|mPiTX|+8`(1 zZBHm$ZtS?I>#0J6Z-bJ+qC!z)cP78NHDt-H9YYzp|pFx^y>H!qj8nNvDoqj2{Qn2Vz)Vl4# zmaoCFr#mMnY%JY+m+slRApI`Qvt{FhTeg+9Y;XvS=N%KNQ^Pv)AagdH%8_ymoDz?Z(^cA|eSy>cf>R&u3{FSE zwBDcNUC^%ZD9jaDoZmcvdCJ3h@4PK%1CB*L&U>oE2kA*83p}#t6`=pZ591#!HYysw z!h7R<@E#I(&c4)y`ee>ADP>RGfu2Fvh4D%nx^6T6-)@W*`nC1R?6N?9FV=MLNyX1> z{+t?xxBe#+o?l$u05-jFTexR$Xt9+8KbW;D&`8ujW%JnZiFzI#fD79;#!sm;^a-M^ zF_uda^#m`tWqK;Fg;_vuAL813ApJ$x(&off1Gzir`w_>}*6kmQsavf+C|$?1okd$h z4F4!{*_b(o^lkyFFyrYFrXOmp zi>$<^H{^Q~<@;LqPil=s`nxy$^)=WaFuna}p_KcG8iyLes&1m+;}JS$j>_ z*}EWjr@fwXAM^>*cwLz7~*Q)y28V}64xr1`QdIET%xQ(&bs{v z9TO9Fr`FoBhhhXG+AB&RBG$Z{jZj4Hy5_Dh4LweYe0OnUS##t)Av+WL=T`0o4B zhH>|EB6j_>qSZzm@oIfYcO04=BJr4wh&`%{q+RV_KG;3E`{axDL0O5-{*tUD-%hKf2iOjcDpKL{NsPnFBTzSwqc^yje5DEcCakrn&2239WXA2glJA=1Xp4Fk<#c8-@ zcD30>paWM|Z$lZl;mznU^%7N_i=P0+FtF7jF#aE{NS41gLU(nbz-I z&|=whQ`Q2b73%k1Yss2%2e>EQ?Qyy)X7j|CHH3%q1}5|Rlc9JlP6ARdMMqKxr9<~n zTc{P^`BXNq&Q%(}&`?X?{6l?L@f%33#Wy99vrK&6MCi8hO{d1J56 zkT1i{)$xov;&dCyEMt5k$qdzP)UhUHisx$-Pw0#1@E5+6o;6)Xz00jfQE?o1kM59z zSqKze0EFYkQe6N7c@t$JR~6*-!$Z!3iKSPf5^SO~QpO%cqv$1^mmy|tp6B#}=ghIu z;F`vpR|HHPB~Eleidwl-D+?58@vEMd-i9Vpz1{C-tR&vK_h#&1vqlL93)q9gvZyC4 z;$a#GhjS*RYG|Rl97+ukEczi23cYQEx+ln7E1+v<*bP_ZMLdpp^m;+7kcVCzGZGd| z=#y0g*dV=Rl8Hxr9~GjOYFsS=NaNwJ;bF3x_gK{iBibWU%OVdPt4Q8PP)#kNmy9`9 znXA4=8PN^))^9ahzvo!h1_;u)Yc3*8zT;Ts`i0MAhXRA!j#Z>@6vkzA2B`p8XoQEa+T%N;+8S`6bumjI|E`gzbCa z6gy}vA*}w{z!dH#2G}eUV*?klwMY|G=dvg?itd>WjnY;$OSQ5S%nLt`R%pXPyUgRF zw6_Ooj)D{~7Dcla#1{zha)q~E&KLk2FWZC1RcuD^LCzy@69+~SoS@Du6ruP^fD7yF zJaHXrwRXhW#Ctm=BwTq|_^p>Spy32KRI>;NC*}MtgMTe2t~Uck!k>Uk#Cyw$%U7XD z5dO`8PpP>WANU(*gJgB(jMtRS>0{WS;=h?TM;1o+%~3YzWE2Z`!8tTF zi%7*MJ=*K8hDQr?*+TpD$V5Jh*~p(GutQ8!bs_T6u+2r*imF2eIO(nzRfiqiQN#Ua zRI;JIs2!<^EgU)rCBvU#83vn7b0U7sKRFje3^KPv+*`e;v60ttXj6ri8qqDoa1O27 zjN6IMSz`^g-SK|3JC7=_A(zyH7PyzN3wS-qk98UMqupIIKR_OqWRvr=#8ccMH&t4m zBCHipfcd`A^Rsl!a2+x6Cq;6EZs#A<5{BWNfv#TMsMw3S5bTjl-9jT)>iPRQsmbu? zIWR!&wW%8k$IThw;l83?;-YpAStUSxaYN);W5zI66#_{gNM7&1+^6AB@j}YdGoFc@9XB&u+Xl+5nrcn&qEJ9Jrq4K z2}HtKb~601VR+QvQ2i}44D-H{dz}ekEGWwCpS&@b_ZEfD`HUlFQREe~O;3zVLA`An z4h)1d*lsh@IH=?;+il}GBv+G;nqg{4zLXz7BtxGr#jN!`j$@f(y@g7V6@(#z`yxI$ z%x*_T48!@cLlg(YLZzq=EaiSg&TX+I0?#aYV5Si}5&tc7fK07ur&bWsRu17~Z#@#% zu0>4FE_cCBS3vF?!0M^5CE}>oidt}UUSM?Bq`-(aJ-u4*`<&)$)yHSLCudG_Xg_M3 zF#FWfpX*<=Yts6Co=~Fq&Ol$h4zSBzw6nB#;HEZhBftl;PF;H#RXH~tpV@zM=46g< z>`J3et#7rvc;}?9qE&Wj7jyrWo*~w-MzmST>3yrvV(BJrleQ{S2Opv!EW_NC*xpEhqcmqGM=DLV@HRYH$sAz;*9nC`c!O>~ozaO3y!E zH0CiZ#u)R+G;I!9NuI|4j${C}AH67Z<1r0pyXG}zh!dn76fj!{8S zK~af`V@zydfIwIRD58!!=r}H@X+R(>cA~jl8={E&E-Egg%z%ivB@hW9O28;VwxCh^ z+NcPOAcN$8-#Yi+zTHW)IN$et|2&UF=bo*qPMtb+s_N8%dR(ytL%_>`rEUGe&DwKY zVwx;{JeDRY0-ZfKyB~?2^>6UEMUw?)nMIRomYFnp)GW(3k$xS2JDm4VnZ*y7#Scia z%`nCI(?OFHp2DA?$wh!QmL?haLYmzAC-XgG?)KG5H;eHC=WF_vLwKK8hVQSiA{lRNRtI3Qa-OMh(Or#9L$jrpkSI zI;SDj^Ip7d7&H)RRI8tgBw7bGt|Noxs% z5+0Ge$EVsLq*H1Z?-@-24ojKSy^%vY0Xs;ckb!V-< z>{f@YJwYGhi>!iShbc_!!n{?f)phkZ2omc!q}YXS*GAWi;t_>u|Kw7@RoqL*-R@&} zv8JVd3|7=&pH^wyjBbdjoH`koI;0Ag$9=vL^T@=Y;YO=tB==P4rD}9l4HmD)G2{+tAnpdVzfXiS|Kg zwDssL=&yHW25JNESi_?}N=##IQF{hdL5&yTw+nZ)plh77I|VZigIArF2IpU0WPVI6 zEEHwL!t$z?kJ)*9yE5}KirQm8K%@{fv4vP9?>>Y73o~1u*cVS?A>NOW@;bZxSd{Di zVT=@k&;}cqT@A7enOx`^lb#To*vQNYflKwgjIJX)RQ@M5%gFuW_oPlqms_C{hHDJ@o^~l~PH>;r!m(NG z+AaikgE+5}EKDQ2+IX~%!vl%Oh=;V<4U7ek%%jA^+IDGY$iaoySR7QF5u%1TN*lh)@V|!R6Y%MQ2Jtw`z|0GD zbU2P7j`yRP!f{T_Jf_6qh$9kllr~*4_rHT5hqZEnCu8PPA9{tk{5+gf@I4tbJ0raK zCx&||WvdCk0>o#?bE58zS$vE8n-eVJJQyer|H zO8HupN9QyFEu`jD%>MuS`kV;U>XGlCi;1Dv#L!z3yMMNfn^*Y5xIU%L0+96R*XM>f znVVq$9JjsM^(g~i4^z(XS)Y}}^b9mkus)@{1?@z({*VBFsks0&`yG5O>vO}A=s~N# zJ(_u3N9_6_W=E~h2QgDoJX*xfBYan!M`;rQ#z#Moo8#s&;oeyRBYVQNDF8f#s2h2^ z)z*iOY;A5L#)W8{U_Pb%LX;nt4pQ?Q(C+un=Vn)py>BMeYmfWpXy)@rVmBUHl+=92 zuFF<&^T|8rm``bQvW3S{>9sSQ^XXlbP_b?CbrN$1MUN1o*UG@Fe)xUs@)u$nLgNJU zDCM`IJUWjF@Ryn=W5$2)JkD^X9ey6Ks&~%gk@0HFw}IoUI}+k3PPI3_r|NX?7E z7rz(BBRYe9aY|^EL`1y zKL1WGiLpIBp(zW~5>zv8M1P2~L#@~GCk;uvyCUi&O5+aZ1%2d=YL>?RN#mQoPsl-1 z-UsD}F!VGLCPdL+#spF z(>YBA8^xI_%^rwr7S%%$JA}*aiRdtzbhy^AcunG{?EN~ynvpiC7RLEUkFka8`aw-` zg{W)}SC0eN=i-_*k)HzKj4=4FdlMa%(YFmW@gUPyvz&1gDUy%IYNvQTX7weoA)rmcJ!?tof0R1GU8Ke3Xq;d#k@C|}e%MtaHP?WuvP$keVxCFO zF4sr6kXSKu>E!dW`gn?lBV~;{oSB6&@!hMr9?aG7gK7eA7h2@K@e(+PTVY+XG*U0| zzSxJI3(2%b?D`SX>mzcVETlD==(&$O@>o=s$e!fno5FOu*_!2^$)uQ<_aB*Ww5fGa z%6~$H>R~A+HJ=7;g<}2T;)ZGOi0KB*#Xy*%yB0ghlAqZ!sT{6>s4x+>gfRIC>J$yu zF;qMi)uVJc+`cuFxE~MP65uZ7yBnOiC)mxT=JTMU;64giAMI|&hvAh_HTSgLxalH$ zT9?>84c4TnyfIl~D`HL~%VfWLBJqCJc3SLyHMlrtzxw`OwO_SCwTP}ZtAkV3X4U%) zr{CITU;+`2P7w){twNJ{+#QdueCSuhU1vm(!p@ZMwR~ z&Ljlc>#w6X0vrTn5}s4ejX8HVp+mD$q=LAwL=ZSuke&>E_3#cA zOmu!j>OfqzM;g4VD)+Ytb$C##oW89iE>BGuvV_+E&%bVcJh{PlFZ^=JpG%&g9BT*0 z{%hO=C8No{E1{&R3;{pFEY@O~fnYx7coM@x;o8Am^-ALi;W!0^0{|N$jy|44VydIMjOmMzHP>tBjMZ^ z;6!YlQJR_ig!)wn;{4X8gg8t2ER;uaPGEJEnwNqTlnxE%$ zi1T|J6XGo8Pog}Ea{`Nw)ci9z;&_HHF7=WV(b`? z0aSC0gQ$4)V|X~m{ni*M$%UIN%xAUa-h+5dD_93-NTk!Q$sC01IC3Atfh+va796=p z3kSm{eC?4*q2&I9;6rsuFNf2{Wc@DVPJE4}ZBem_^L-$3b2v94DnfUBk5VuI1y5U$ zopc<8%M18XpXJN+mM|(*ZrjP0P^15rLX=V)msd?ItW zjGQpUZCrxkn)1mh(J^jHK(iy@MVvf# zqmkr-)V;dvaZ}C8NnW0pb*+1HgtrF;SWNikuH@oP##%(-V1CoO4(<*k>91JgpOQRX z)@b_?f)nz!4`r|APj8p~A>UfHz6lZ7KD#|~6_U;Sxs9=44aA|YGbS83RDZbVAK#_1 z5G{l+6Tr}1n|*-VWXgX;ne{sWVSXJiKaZlvT=dwZ(U^zc@DJY>PDqsI0Gf5E2JtAP z1LGtC`zQch2{Qd2z2R2wq2p^4?x9jX0_D*?G{NavYPR_DckZENouk#0=dF*^mF%-s zA&#D4!u00#hGOCz{5&DfQho!k`sK z%7>zy7XLps&U%+t2>nnB66k zi~YpD5jqb|@b?j%S8WyaidL{hDA!D^H)aMdu~;Q4TDuG*(p6H^E*h_VxcHP>(yGr| zMJsQ~bO=M4*CX<8c$R6%bTpw)<-Qgn*Zrxz)6Dbqx#oGgGz~e4EH5_kc1A6#h`%IY zq0Y*ml!q?w7+FZ!81E+)AYZ7#8JkhDv3xK(ZHC`h=HK4@(%4M&ZbnNQSiB`?azn9A zDG8KkY2&fk;~8$4Q^1%>~37>oR22wyJqb{-*QU6_{^G;)R-wr;E9qp z_h1@@Hzys*0>Zg$%y?96a~Vwcny*#rlr#|{S1C3$IsFQY)4}HoGn3C5 zvE7u-%_-;zQ?#SLqWjxX9#@^;^J3)Nrm+};$e&h&-fkyPA5MP$N}9Dovji4gDc}A{ zlsqsV52~AH<*RQ6Ch|I;{e_luSLKp&V3L( zfRrZskUdZUB-a-|@VI_5-t{#u0jZ8+Ka1-h>N+w3=OT7Q5U}zjt2-fb?Ti8XaGT>A z0hGw*C46^~EPUT8i)j&{>R{RghCpd^HYQD&_GTsB4;zzj^X=$*UjM*4?|?_xQe4UF zg@OMP!@&I=44iG=n}h6trA+ifP!THRx*<`nt-cch@JlwDYxzF3qit zw4FV$p}_rm2s0P=@82_a93FBX^=SLSWg1sXYGK2SHZ#)8PAYR7vpK_2o10^fo0adk za$ZMOTT3NYz9%{bu}$NOsQfxS+3j`mKQ7-#$f~gSgQJq~g8Vhhp%ZcyV3Hkhc{fYRw7Q zi8j$O-f1G6UusS^3nE`FOTdGh{l3lETAC%>{UqCSXsNglZdk`Im%!O0ZLYu!3E8ec z%3W?VH!9EO4k;$(66_7xjV_1u#+^^eR22Lj1vrh5@k(A+eJ2Cntk6hw>iEPgmWuFTR!vI zoX*fJQ$9}G9)o72fw#0ZXsf9Fjc5c%c3yVXIL>M0YaWq&4^rQ20}aLU(R<5Qq0F)? zz&br~@4C}r6N5jht>X>o@i*u`c@4TTW6oTFcjS5kb<=BIr5mTD<0TTI1{~#E+x;CWY&!L z;Q6`CrQ=&L-9)*byKklW&Whxz@bLU?CXsJg{~zX>@aP4&44IZH!arPZNZ-TUwYoo}I+a)EdAfiV4DWdkh2zVo4MpmZbZuywUf4k! ziX%}c4R4tjcGHG-z`$NDuaoZYtmS0{C7o^f8@M^*zQG*8{I-ujj@eL|ZC^W>Y{&9U z-@!yv06x?2@s^wg&lX)WW(v+M=Jb1&<;W6pxeI!8w9tCMB@1gGB#sUDR_4-mBbB-I z0G0)f677bozk4pm-#AF7;BPCz!MZ|KHqtEn4u4w-4i=eZ&zWVbScXY3lUUp^3V)*e zAcoUnM`o%^g=J=ThF^y%#4O;CWtjjkISgOEN&&xo1c7(!SEj-FnY@1?lk5&in(A;&XqIyCl9b)Etia zbD4&x2L=WDu6*DW^3Ua*+zxOp&{Hf>VcYU$g#U9T(lV=t>4a9`Ltdfa^1hiP;e&sg zi~=A0F8biTCF$fP`0mvO`Cwxk@BOzy0ySoQa3h9;?Eviud6X0W0p^XI*cqv!OCHD1 zt|MZd@WmyS+gobIXi}0|Tpr5akKdKsy>C3<#dDx8n)^+7J=2-ET(*7Hm7 ziY4CIX|D~!LWHCLVGuE&t)GdY}!qnJaqRUCy!#Zj!))?fyce~pWwz*+x6tk~qWoVQCj!I|16oVT{d z%kVSC@<>_~pFQ~b-{2F=BgQ37#<~u>tI3ajk8Ui-9O|CT)O^q8YeqakIaC z^GU{M@NNRHT&xR87K(K-?r&Iwp4*yRrYdj$jG>NYil>pV7OM-Q%XHLWQ=;U5%SAm5 zQZ-b(kT*^4L_=YEmoZ$%#o{Z+;sfhIo||j0O4g|azzid8y_v3Nd+4dNn;>J)iO=xx3 ze>KK}C?4-4<%E+~^P)i@KLDlQk4O7+Z9GQCjnOMQ#>4;B7&mma$Jm3k5>7l;fT2x+ z;Qg=0I4jCm<#A(-jE=DgDE)p~oetB#$-CV+#>9-SBRUx4@w43geKAOg-)UV(bl28b zHsZ?NZ;<~X()I#h?>+u_LBwgjVy*nABqy65k`jRnT1dEw*M+`hW zq`-uL^gSv9(^!QrAV(CO%*STw^Xk2;KE3<07Uf5l{?+R8c>3K}7SX&`N#1Fc7B1ga1p;OGxvon&1%o%V`P229oddONpyeieQY7&WB;iv zE6v=1lJXzs14P@0nBeY$)O_+^OiAS}c^1n_Y%0Y#q8`OQT4{ZxEejgp=%&{VF2{2Wyo+aC zNlmhqKC~OvN68iHjyxDoLnv<0;G4CbRFisZ-bzS4DSr#)QR*eI&`ZtHm`YNJ!2>XuRM;V|s-hh8L z&PQfdhY>+R{CZEtw>~)8rUDR|}`c9O5<%)h-wo^|B{qkIq=cDwy zntoASCr;6FT{w|s4#e4aLTIz6}5Pt38d)*U0FnRJbFX=*c2@p0jWHt z4RTo{PrVOgFzqg4%1^<%!wh)zft{e8N@h4yJ-rU`ChTvVO9M*9X?jQGOP<_ii?*wB ze~R~mb-`U77voM)5^}J4U<6r>#D0Zbr3aCium;~llX8$juP&T~1(#X8y6AGQlV6cf z*IyIrb3h+)00{;4yM38=`KEdd-m+$SrB;XBb|abFjs-vIfg0oztahP;z*6f$*fGk_ zYrHJys?a?h4cfbi(+OC1Oo}B(Qsmbkl8(2ePQ`OxNRMg+QHeC_o5s2AZge#N29HQe z<)WJ**;+6#B@Om0s0|uSIOue^%jnDg1;z8ROe{FGeGc%vr5!N`k~StJF(>kZ2klZg ze&pa;COv}x-)V%NwbFB|L;)PBFsFIVTC?}CI64#%WYF96HDRHUXAK*3^S=vS<8%z(=>e z-5eji*XgMF=-;GK)+-5VB;_ZgJW8Vk9$Tro64d-Z)kz8#L^oBNk5W%Q1RovB1$&Ux zIpyVq)RFSvUUE_=fn!!`z79GHb&lwsvh9jdk|-= zj?u)1LKFM7%##wYi%s9&h|L)L(;-L`Rmb+f8ReWY4t?wd&W63iu^{*`bx_WRt=g#o6He6V|9*111`@=OIn`O7XP*5!Wy_m|^BHA#iJ6;DzZg^xG#`lNdvzVW3eN+B5X`e?rp91SW&N~C3 zA3`01erTEY@dm>X_wu|nv!$i4NRIhby{|aHoDAqIj>yNfL*2&J9keQ6m1;@x~gB#GDgkYtGq2 zy^u8H2ljHmOZ5WP5=YVqb6B%elUS#Wh8?&i$#XZ{J9^7tuNFo1q>@rWtU1ckhq^<# z@E^L7|9;)n(oo@da>nK3vbEuw?_1z?vs&Zt08-f&9y$So0_>~4PNo;lIf0XK*4CCr z-f^6Z2dI4g06#6b-{mdgIU=|p=Y%JL1Dl`l-iRa<;K|R+>|V#uC*iYhP5TW};4MLZ zS$M4Yz=TcCz$U_SLQB9zw;YIa5w%>rR55ao`5;y4MHrJL9bnE=H9QpVh};TOZRCwPc_yFEhyKZM8bpx{kx0odpk z1Z;RPTBdr!p6QLXSV)0ex87ERcL)&@a@FQj6)4MxI6-m1y3d65rI-qU)db@o@YGqI zOqV(m+B~Mbu0_VO5lQyz8Q#)IfIfmt_=xuiH{#`IjRP{)3mO1Imw@H{k`;eX$F1SJScM<=)VfH!bHzrG2d3>_tWvOqB<`x zM^zq@om8z25819(-yp|aT!<7CoVnqcxv8_QSp!sOpmOA1i$~S#DdF&yLh5JYKCi{+ z$VZC)m58O_L}^=K7u=!NF5ef*A*qGJxgq~AF^g^osqlPClnRx!v-)>979EsSS#&w- z{p)Ify->y9z<<>1FV=dR%Jsz0Ch>2DxKitBZ_IiM;Ej@u@Y#-G`^m67qr^X%XEK;F z(-hq&4pMX%AS`B{>LlQrkpJK08ur}qEeQCbRqdR(+36v(!?<|G^R?lHs88A09wl+~ zy>q0H{bNPpYuhRcpS773j;q=mRgJsQ1$kV(u?v$Aq;(4S4xs>#*W~QcJ2_8XlF^&F zcl?=lYX44~?t$*)Y)7I@W+ziu3;s3O%YbkB@Icj}T*;V(9- z4dImyM71IEVjS?=2*Go;+8V~E0WuKsGTa4@@=MAPEog3uDo1;q^28$1Hg znfIyP`Vfy+;F35WOFxlqEje&PWGLkbXzPZNU2S&BMVAHlw+wtwik*t>fK&HJB^#Jo|zvS09MZStp?(*^$C(Xx6oI8b&*_|MX5QQK->@4^G9 zmSvr>D6VtNN*StBT6HQsgN{n9bCFpmN!7ut-tg=tMc#G@;2c!pL&)HvGY_^6manxbLxlCvN2P)JU4RY6*~g8lkCMmO2O4v#?Q+!b{+-l!Kg}^s z6gs0vaNrww`4}6pwMlwQhLN_`TW&9)qnLTR2&Imlt$#h{>5up(I5in}G32mu7MqMq zT96!h#G3mvVsxC3sk4}`lYwpaZbhSi;u|qQTWhA@8G@N!1BO7ISB_B(amV^*)kX^sz=4{*Q#@U_>~mOb!oXCEjLZx>54mlSbM}j00RW>vGbFy$6i4vllfT3 ze7A5NxHVL~Nxk4H$Bch*9zlj1*SM30azaC+>j?I~|EPK93MKVEFnO#yq^vdQd?JpQ z>&EVRkBV;QmH-UcWPr@w&?ZG+!msOkR9GhA1 zaqvugR<&7SpgvpEMetf`ki-++g zvMr8hf(5c^%vHO~oouu_vNp0auG-b8W}FRI_W2ba`#+Hrtp@~t6H5Sx*uO-@3&|96>g7uwlT`11f>F? zn6m%ueWvUOC-&Q^1f+G=3y5Vv9pWr05T_Z`JI}W@;hh^f?KOPpkK*)gp3Bj3@#jsp zfM*6O%^*5Qw_*rwWE7_Y%Hs@*qh~No8`lB9KnLD*DruR=C2C% z7BwwYyn+n&B+vu} z(UXa{bO<@ezrrDgM_~f&<@6ehqlXLcEb^ps1Ib=f^%X>B7k-1TgW*HC-w)1Mi)GKz z`w~6U@IkT=@(_V9rcG)G@89S6g$5#23JAV>VbSx6JE=gu6%Qd)$G)E4t3*o|v|yh_ ztgRk#TnB-z=hx_X#}S?|G0Sv9z&m7<70WFe^w`M5@nXsfbK?MdA8r5@=HgrVf@I^VXxl)c-Hxpu zmR8?dOQ4Lcrr{eOl$1v)`@t??65=wN2+;M#{1-fM9{&Xw?yYIUh3NyZJw1yDDESnh zbKh$04 zoO($3<V1GZMpkd1w}i@Ij@CO3m)Q&OE!=7=9^YJs&5=`m@1qCh zq5yck10ymJ@!r4y`vMp4WmM-XwJJ}Aa@6o`F|@hH1%oWA<$CZ2SZc0Y@9(MHmZIP7 z)~a{U)$=^bxqNaHvAb#dM4UO?`beZc@0OLPg7w#6{1sF)ZNj16oe4!9^jEZx@P2^U(nERjy@KD(;W74D zjvdkLwt_+5ZNR#Bn(-}XN@8{XwHZXg^bd-N$LK1kt&%o16> zirOImdkz$Wkn4V?-_BkrRp- zU?U~w`MHx4%dTfAkI?E{IZ_1V%-D(62=l%lnA^>Rh;_PF=7mY;RK7iuMp51Eu$_@_nC1c%P$}2M7lI7?^G)aKJ3cC(U zQAB89-v~)SaFS^45-3!p=6=>-yO5)iwWQQz$1ugA? zvV}&y)i+O;*Xgm=d0X<3WDn2Q`oRD1-0B zo|%)tc*g0VhVp%d@?>2;wTXtC~GIWC1xl37uu+^iR?s!*I_4m2H%haMa}XZfPgFM7@7dE*gjv$pvTA# z+}cpgaebY7;dzM^m>)CIDzbu*19R)BxB3cfXEUPfs~guBR%0uDBzG2lD3a1mzAI}e z7T5=vDKM11lU>R|u#d?CTU;JpV2BkFDTfH5@h%9-er|K8xkB5mPwA|A?&n^k--RVC zf_jisP+R9ftkj+}F4y{dV*3cZucW5zLbxj#9`suZ_zR<4i-%?)$m=6dIrpRPEQSn! z3VdzKewo**uK@4RG@~m>L9)qq+;zPoTX2QEUjP{enUC44fVm?4<=w5|^ussH?ga(` zEjbVU&xQLl&jrC=ohOPs#ZaD{P963uYyYr(XJH?jneSrL=9x}GKRTV%_wS@Y_U{S# zcXAB#&fSU`DUeDyIN$9^i3WKk7^E#>4Av0B6CgAu~~!D?sAVmC+kXIac8`{U8jxS6lcAL zP=iQ;yFk?9U%R@o?fbL>1O%mP1syC!qFm4ML}sf!Ex4nz(hPDu7`=-=#H9~`QIReO zY@}3Q8DoW%D}dG7Q!{~-wWo^RZGhxR@%$2`f|XKqi^G7l0qYTmcS_VYun1WeoU^~- z`Dl~FfHWD>8k>R0*`m|1Ae5ffT*j9!aOnhJ_H0!-5^L4nBfkox=+mVT(XF7g-HI%y+9&2X(cK!~jhBOE}oY94eMe;3pRSsUa@ z?2@9NAV~vs@XqIuvrzM`$LYPL%UQ!;XPudBixlAxv-hHbaXouWc~8v}SEFlfA)Dth zhN6UfgG))^oR~s-Mk!03r;HCVyov8eP!6aJs6%N?y}+$zohMO;_=rLQ5HG;aVzscu zn9GoPJ{>x7mXO1clM_clODp45BSHFaCnhCy!|pNrB#uYR!7M6CjO(L z($Pfe=o@P_Z^Jz{gS(AY`;wU2ou#%q)L`u|U~O)(vBQS%#+Z@k<33))k4vn6FOIRz z-6B$-j$Kg-MzP=Fl=@BJL1h6^uiavW;SPCsBIyztx*=qarEA!@3&4LDFnwnb$; z;%SxJ3EXUomXCKRc6%B;9J=oTOr7SRZ_qYk>I3BM5H=S;7sBZi40nk+VP}6}_tIyp z>Lmi^gn<=A>1bB|09!iV6Uf!@K5-vOdpO7)T#>5v@o6LAVR+x6OI=P7)HZfMT9JY| z(IFbPs3GbwgnnN+0mWjlR~^-?@N+a7Kf*HoK0b`i^H>h*XWd7ut+%8KzjHJx0y~Sc zc;{M3{$+T-9?kDTV5ikwD8ZwdbO%^u-H9DgftW#M!2iCr$k1~vnL_^eaa0cCrjeb4-eX3Xh=>kvPW_6^a3~ zqb@jhSb@6b6eCxgF$}WL>;Czq;GT8Z&t*!D(*TvV#A1*5FUbk1chHxH?Ka$$~H!uSBOpB2uh@ZJn_A#HsqVMWYGsCXW6swELE z$UyKtq|0dRn<%>(mQNCuTcB;D&6*-dx4&Bj6ouQjlNFId!5jf&(n5wV0&(5X!QXJz zJkPS$=su*tJBa-rX&|sTK!Km}M_JwUDo%%RqKVoDeCMc^iStf1YPGedil1Yz%W(W4 z0jLuQx$$kQDN1)>E(ver28>X8BiKqmK6pvXaYYM~*>nO1Fw7&3=X$7m>}Mp}a8zo3 zA^$W2I4oV=nw?D6D4a(6KKKXqX+B3lmFf6fs0^DP{ygbq+?-W4FGgcS(k!PmW|TI3 zsCt*_0tlx8glQiTGMF@H5d?pgCHt13ZpdGy3E=FUsO$hLlvXet!EZ5!i)WLgOuS1q-i|Ie-;+mN(P`;Iz%xrn4jnDI+r8^X@G@*wHDl<`ybN_pW0g& zT$i->D-7w@diT7}c6vBJm<>TTqlv0~8MGQ@v|K{WrHL7+^ys^;4!#>8z-~ z4UL`D?@a1@K5K^hv^Uw*-vIFAsDFdV)Xf(4=Pm>F2k{&IYYq4;7Vpj^J8pnrer|^i zTNocSnz^3n*I>S_*)DB^A$n{yJm>I> z;AK|30oBmwVw~_vPI2`t6{Ydmi6Sko;AdHppz@{Ag+Q#F=~D(MVtqzA*?WM+Go!y1 zqRv@n+=LE;D;l+>#vY-pGiYkVAo=WL&Hq!RYuVk|-$#{z;THKutyyOHIvH*?iyv?d_r@1Qd3Ee?=Q)S_ zb5oSP()AV#Xa1ID=DG9SLfH&bPw7?Fo#26TE;tmiR zEcBVdsgT`b8Ge!n&qIPMa+#xx0(S8vyTCQgQl@zhXQBgLenMk-JF?%L6u66HC*%hl zEJOaS7KP5O0EITF!=`hDAJ4}KOn4tR@|XCI?(dI09tlR~7?Uw{WM*8Qf3a;ks0{>d zR(l)=YsuvlSGkmxZv)Mh9<-}17T#{-XN+uIfX=mL#t%X&66c>de46{}%lK)0E+vs2 zk$MZ;0Ws&i!O#s%6`0(f`w>966yMb0rWKF+pzoSR)UwPS@Gg#zk4x||7E*1F(D{oV zI1$Rv$WykRMC|PWydjdtHc20;&G@ygT<+?uFGludPJQG$Y~4^TzOMFr^#0ScfZPc$-8#dkpLVJA%E1e>u5t3WHl#pcAVor0@} zp`j}D>w2z4Yn89Wc>`eG$p$<veF``SU{1I zTiMF-?ICQE!TueRp|+crbgH4O<>de%2nTr>I}dkfo+H^)2Y^aqiM1c)3pcCs@!(#z zMHkk5u==Iuz_O2&aQYEmG1g1PU zCzqpd!svii-tzR<(3SoT;o|F_FmsqR&4YBp(sXk|H)2BBkZ&OxMIfR&BV2($ql|>L zcEZo__a8ZtzWM+RF>HiTcX+qx&5~0pA|Ncg^V`^%(SMnLHSS_i6s?Yv8I+?A zI7$IWuzyc_r6KPic+XNSWrykP#3mZ~2W*)blt~gWA|hin@{LH!z5-zlg(dd;DQ-*) zpy>}MvF$sSNaGv99KhB%6`aU3zEuC@L!bw0yanSfC+_6=oH*=!`%wkmz=1apRU#Xm z`vz?Ha&MTFx7OSVa;hr2UG@rl#jW^6mcwK(X3Z z_hx`Xv4O+wo#8>X;kEBbR2XwWDjsm|RSy2Y*}?xXM%(-ksGQ!?KxuS6DmJ|Waajb+ z^H%(B9X=`eZQnE#z;3s>A@*tUZDF`1+teC8LFNjYLMS;C% zTmx|qwy^h%q5{@c5Wp`WOcWNWIpI?`#e}@HR=#g1x!@7xIb{n zoyg;AAwP@CR<2u99Z+{W-m8y813*3sp&#s@ZlmEXX`zI&yV61h zpgmqgT6s&pAOXlGk>rsbHCiV-|yIfFiW*>I$g=pWygoLEF=y9yMor*;ReVwxs z77hP;4x=oEJQ<1wW;VnlL`?r_#p{y-0XX7-Knnb4gzWw;v4loPZ-~C-ExD=DAwTim zg=38|3?DJ?Y&rlWnlaV24CPyP9|M9OQlaZbZTSpiJYm2p9?gLbZmXV!kMgVVyUu_~ITc2@g z8JUMM*>u}FLH$T%%px@xwZv;tk#-lGI52!FHMJGPRdG^E;R7)e#Q3y85q z3>v1U{ux9nRFvQfC`aA&p?FLD;pzL8G3xKAH_wfS3X%DCU%PRw<|jwa!g#RNx+;<1 zkUh~9sQVwbrsdUDoE9A0Lh6Dh_}zu96m|cR+hW-#F7% zIc$0Lr0eMSITzzdlo*DLvj>`Nc;alF~5-Kr< zqeS!?1yvM}=P`g-69BPmkxBg8r2?uv5o%Gd&I_7BAC|@^LbzdYxS-`O$yufsJ|J^K12G0TM?{ggn+K| zj~FscB>^om++8V)`gDA=V-8qm!j!WB3&LNP94vg`@EB)d=~44|9bktL!`TGmb$DcQ zumj_D=pDMV1LI?z74F1Jz5Tbw;g0TaSwwnNIJ*B02OzuqJ9*T$)|uh}w{*YRnC%3EG08Ep2M70Ka6ER5 zd8hKa^>vuozQ?zy-c;}}Y8?-oL3eo_Af1c=t)jAireghYuP~OHWPi_Go)>;3WWSKK zrLBZh!ZMS4W`d)!G;gpw;zE>;?jqcNMp?+ptCW>j#g%t%b#&zoMECR;*(>!{pUeTbujVoTOimQNwF&M>>HzJGUs=TSH48g1#=d#M9 zaTP+U!gIjZxCIrAyYYY4IZbSyD%2##=K0ul&D%VwZdiMxSQx`!f?^!evU#2=TUnrw z!8~r|(+75&#wJrb(VNW+{gxG!r(V!$8MaZ%8`>M#jb#aa_I=^XLHx#D+_uIZyq1s! zUbZwBy2H`Wti7xsc%SRjHhq4NUEN{&L>arYY^6mw@W`ec`INSUVSoVVTcx>6l*tWL z++h(N-pS|P|v^^A8a=DjesTdY*7xxKNz`urdO<(61Rd`veDeAa$PbJ%x#avD6E)~u12YKVKF-+Jcc9n#Wxj$O~ya@Egllx29xPw zjhT2wp5R)H<{BA^1z_IHJPzJMZkb#U=e|pppsp|NGWU8*H-W@(mX3&m6_^qO(t6-x zg%tv%&*uW9W%vfKhGL?hVHD-ugXO;CPybx9%+wliMBygRP7#0RFJ^_m;U}@^@l+F$ zKcqdjo0;gCi~wk?ZRiqyrx>N#P!!mQU&DDf1QD;{Kk>*osvpDZyu%A0+hq1)rYp&` zky38tF@lyIUU=X|pf!ZexQ{##u8_!!2e6Ag83)g6NB|Xi&ywk8{4MKP29Uw;h&09B zS}R`Dl!XssQfxc%i&rTd$XlR4Tk}+E7v84|OWO&Ug$sk!mCQsD&u)4ksxSvt8GUfD`sC=z``gW?*t`iM_v(b zhaqP8S2%Fd^9n48C^D=qN?EoC2}A{Y-Y`PM8x&c2Bk^tvK!Zpd28b3DqO=%@hSyQ1 zq0s;vqJlVx7GNmjZIwc zm4i%Xzyw!R+4KGlQ7aq-gXO7+Qdto31eXl}c_GVJQ^-Q?gIg6XWleME8l7fa=ipx951?$AsPdNE1P> zwLP@`jbe~Z|MHRGcO>?=El`%Y2r!+t{cQ;h<%<1n`+m`2R{E0toBZ^_Vv)sXaBBZt zO{8Mn6#c*&QJ;j&KPok6gS&37y}#$VBaf-`$6n}xB;5^jVr+2KGZ9jba9tJOJlBeE zE}X~h@KX>PJ2+4EyN11?-87QH#c}XzIJB z&i`#f#{v5FZ47hSA)MO`5kXZPPuQrn7AfEx3R6Y>P*EsAx3in1fYlftkZgD7`#sk-%TxI%Pcw`l#~jksc69l zebAuCI%6H=C@CTPU6ergfXWu#thkv%>@ob74m_!=NBJ-!g3DX-9)JN5DKPkH2q(rU z+i3U{=92ImlTr3UqadSj3;m^cH+NB+;FOFu-jYhR#|SFGT~V;_ds21IQh6uNVQ;*K zPy{4|uNN#o1kxmW;hS9BjN;1-Oe;FuCiAN_Wm}g}sqv6Mt)FOtx7-16cN$U$ zoAh<5c!;sj+3OuQD!&KCqPCx5jxwKd5z5rDS zj!I%~kx>|aGru5r-C&n~InOT-48ht!m8@JG1uO77hxfp8c^VYe>5FHvRaI-H)NZ*w zp16j)owP?-H1=9_gqz_~9xS7Nkc_)*=DI6zth;W|dF=_u2_aOxm?H2_&L57zya@3a zF?dSOjpYI_%I|>%l+Dm_l0HYEFr&xM;^v7OTg@6={?-b_=k&vL+zHLt{5kxqI!4@^ zo-`vVJI6b#J64|KfYY6~}Tj0Xm5ABg2pE>*_wP%UMNAT4y zEEYGimrDHjre(ZEjMYEfji*~Ihk^$KAzQ$N12CeLZ4?YjDCzn=h+*&;7mD^ISL=Nb zAVK4?T<|?ufET%vGxrspFe7c+{+uaortQCKYK!2~PGxC1nbm>s)nw=s+!)Rw1n)=h zmJodQd3E89_5ryTXvULFLZmoEYU#fZfH+i^LPBxAw}iw9nEw0rs)cnv_>kOuJs9v` z$zssUzRElEWN?X`*YspjI0w5F=NM4A8wC~P3RD4e@pKWM@N|^#ea5wpl50=`0^8S& z7jsWAYO!prw%K-D6UfWmMma_i<%^WM7IramD!w!9$6lqp^AaNrFN3lj@>{k=Qy5

e9F+>*SzBRJw2s}73_s053z``zm_P#a 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

?KEmciCU4A_lmjtt(|1ww8r4ZHVH{LAUbkVx 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�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 a6XyAw;Qvkwybx+%)Yjg#x3dLPjQ<1lbTo+o literal 0 HcmV?d00001 From 34c01af274da0ba4bb2985f03e9c8f78fbb3f7a6 Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 15 Apr 2022 07:47:59 +0200 Subject: [PATCH 20/39] Removed references to local file system (CodeAnalysis) --- .../HeuristicLab.Algorithms.GradientDescent-3.3.csproj | 8 -------- .../3.3/HeuristicLab.Clients.Common-3.3.csproj | 8 -------- .../3.3/HeuristicLab.Clients.Hive-3.3.csproj | 8 -------- .../3.3/HeuristicLab.DebugEngine.Views-3.3.csproj | 8 -------- .../3.3/HeuristicLab.DebugEngine-3.3.csproj | 4 ---- ...uristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj | 8 -------- .../HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj | 8 -------- .../1.0/AutoDiff-1.0/AutoDiff-1.0.csproj | 8 -------- .../4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj | 1 - .../ProtobufCS/src/ProtoGen/ProtoGen-2.4.1.473.csproj | 8 -------- .../src/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj | 8 -------- .../HeuristicLab.Operators.Programmable.Views-3.3.csproj | 8 -------- ...ab.Operators.Views.GraphVisualization.Views-3.3.csproj | 8 -------- .../3.3/HeuristicLab.ParallelEngine-3.3.csproj | 8 -------- .../HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj | 1 - ...HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj | 8 -------- ...euristicLab.Problems.Instances.DataAnalysis-3.3.csproj | 8 -------- ...HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj | 8 -------- .../3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj | 8 -------- .../HeuristicLab.Problems.Instances.Scheduling-3.3.csproj | 8 -------- ...euristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj | 8 -------- .../3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj | 8 -------- ...Lab.Problems.Instances.VehicleRouting.Views-3.4.csproj | 8 -------- ...risticLab.Problems.Instances.VehicleRouting-3.4.csproj | 8 -------- .../3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj | 8 -------- .../3.3/HeuristicLab.Problems.Instances-3.3.csproj | 8 -------- ...euristicLab.Problems.LinearAssignment.Views-3.3.csproj | 8 -------- .../3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj | 8 -------- .../3.3/HeuristicLab.Problems.NK-3.3.csproj | 8 -------- ...Lab.Problems.QuadraticAssignment.Algorithms-3.3.csproj | 8 -------- ...isticLab.Problems.QuadraticAssignment.Views-3.3.csproj | 8 -------- .../HeuristicLab.Problems.QuadraticAssignment-3.3.csproj | 8 -------- .../3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj | 8 -------- .../3.3/HeuristicLab.Problems.Scheduling-3.3.csproj | 8 -------- .../3.3/HeuristicLab.Services.OKB-3.3.csproj | 8 -------- HeuristicLab.Tests/HeuristicLab.Tests.csproj | 8 -------- 36 files changed, 270 deletions(-) diff --git a/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj b/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj index c99f986a14..b36b293881 100644 --- a/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj +++ b/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -67,8 +65,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -83,9 +79,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -100,9 +94,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false false diff --git a/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj b/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj index 37f22146aa..2ef9749984 100644 --- a/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj +++ b/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj @@ -52,9 +52,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false false @@ -70,9 +68,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -87,8 +83,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -103,9 +97,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false diff --git a/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj b/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj index 9f7d2c7978..73ca2982d9 100644 --- a/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj +++ b/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -67,9 +65,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -84,9 +80,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false @@ -100,8 +94,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false diff --git a/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj b/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj index a56294d652..6021450db2 100644 --- a/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj +++ b/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj @@ -44,9 +44,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -61,9 +59,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false false @@ -79,9 +75,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false false @@ -97,9 +91,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false diff --git a/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj b/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj index a1dd0bc86e..fd9852a9d7 100644 --- a/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj +++ b/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj @@ -53,9 +53,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false false @@ -71,9 +69,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false diff --git a/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj b/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj index 773949df12..ff8a4aaeb3 100644 --- a/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj +++ b/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -67,9 +65,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -84,9 +80,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -101,9 +95,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false diff --git a/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj b/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj index 19d3d3a50e..17cec563a0 100644 --- a/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -67,9 +65,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false false @@ -85,9 +81,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -102,9 +96,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/AutoDiff-1.0/AutoDiff-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/AutoDiff-1.0/AutoDiff-1.0.csproj index 2dab6d061c..ffd4b58430 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/AutoDiff-1.0/AutoDiff-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/AutoDiff-1.0/AutoDiff-1.0.csproj @@ -105,9 +105,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false false @@ -123,9 +121,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -140,8 +136,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false @@ -155,9 +149,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj b/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj index 363b139283..e784bb7cee 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj @@ -114,7 +114,6 @@ - C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProtoGen-2.4.1.473.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProtoGen-2.4.1.473.csproj index 22e1e42753..ff55f4bc3e 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProtoGen-2.4.1.473.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProtoGen-2.4.1.473.csproj @@ -69,9 +69,7 @@ GlobalSuppressions.cs prompt AllRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -86,9 +84,7 @@ GlobalSuppressions.cs prompt AllRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -103,9 +99,7 @@ GlobalSuppressions.cs prompt AllRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -120,9 +114,7 @@ GlobalSuppressions.cs prompt AllRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj index 12a74d674d..9359c764dd 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj @@ -57,9 +57,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -76,9 +74,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -95,9 +91,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -114,9 +108,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false diff --git a/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj b/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj index 27fd6952a7..65c8764bc2 100644 --- a/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj +++ b/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj @@ -50,8 +50,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false @@ -65,8 +63,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false false @@ -82,9 +78,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -99,9 +93,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false diff --git a/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj b/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj index 9a369dca91..2be70cf698 100644 --- a/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj +++ b/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -67,8 +65,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -83,9 +79,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -100,9 +94,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false false diff --git a/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj b/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj index bac1476b6b..eeb422da74 100644 --- a/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj +++ b/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj @@ -51,9 +51,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -68,9 +66,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -85,9 +81,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -102,9 +96,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false diff --git a/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj b/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj index c93cb4e527..be80123c1b 100644 --- a/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj +++ b/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj @@ -44,7 +44,6 @@ False obj\$(Configuration)\ False - C:\Users\Sabine\AppData\Roaming\ICSharpCode/SharpDevelop4\Settings.SourceAnalysis true diff --git a/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj b/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj index 5aa38c69ae..5a2b4c5198 100644 --- a/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj +++ b/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -67,8 +65,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -83,9 +79,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -100,9 +94,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false false diff --git a/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj b/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj index eee82c2284..f73c8466db 100644 --- a/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj +++ b/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj @@ -52,8 +52,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false 7.3 @@ -68,9 +66,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false 7.3 @@ -86,8 +82,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false 7.3 @@ -102,9 +96,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false 7.3 diff --git a/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj b/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj index 4557b2a0aa..342a51ce83 100644 --- a/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj +++ b/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -67,9 +65,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -84,9 +80,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -101,9 +95,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false diff --git a/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj b/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj index f6fa164c6f..484dec1ac9 100644 --- a/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj +++ b/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -67,9 +65,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -84,9 +80,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -101,9 +95,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false diff --git a/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj b/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj index 8eaeae4245..3e2f4688f7 100644 --- a/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -67,8 +65,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -83,9 +79,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -100,9 +94,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false false diff --git a/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj b/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj index 0406f90b7c..f9f3ae4a6b 100644 --- a/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj +++ b/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -67,9 +65,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -84,9 +80,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -101,9 +95,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false diff --git a/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj b/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj index 825cc196e1..be1194a88d 100644 --- a/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj +++ b/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -67,9 +65,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -84,9 +80,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -101,9 +95,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false diff --git a/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj b/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj index c1258969fb..d3e816e812 100644 --- a/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj +++ b/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -67,9 +65,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -84,9 +80,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -101,9 +95,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false diff --git a/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj b/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj index 719961dea1..8ace684057 100644 --- a/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj +++ b/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -67,9 +65,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -84,9 +80,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -101,9 +95,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false diff --git a/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj b/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj index 06a37fdc0b..030e16398f 100644 --- a/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -67,8 +65,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false false @@ -84,9 +80,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -101,9 +95,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false diff --git a/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj b/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj index b5dd1a2bf0..88d0c6b5f7 100644 --- a/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj +++ b/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false false @@ -68,9 +66,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false false @@ -86,9 +82,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false false @@ -104,9 +98,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false diff --git a/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj b/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj index 8c79aacc52..6d3c5e8793 100644 --- a/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj +++ b/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -67,8 +65,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -83,9 +79,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -100,9 +94,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false false diff --git a/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj b/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj index c90f9b2138..093a9b9547 100644 --- a/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj +++ b/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -67,8 +65,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -83,9 +79,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -100,9 +94,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false false diff --git a/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj b/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj index fdaa2be7e6..ff5538b934 100644 --- a/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj +++ b/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -67,9 +65,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -84,9 +80,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -101,9 +95,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false diff --git a/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj index 28fcf80c6f..e110e55fff 100644 --- a/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -67,8 +65,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -83,9 +79,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -100,9 +94,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false false diff --git a/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj index 2325fff0e3..eba4a1f563 100644 --- a/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -67,8 +65,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -83,9 +79,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -100,9 +94,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false false diff --git a/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj index 765610e30a..d6ccf33ed0 100644 --- a/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj @@ -50,9 +50,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -67,8 +65,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false @@ -83,9 +79,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -100,9 +94,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true false false diff --git a/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj b/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj index 9f21044213..8542514f74 100644 --- a/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj +++ b/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj @@ -44,8 +44,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -60,8 +58,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false false @@ -77,8 +73,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false false @@ -94,8 +88,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false false diff --git a/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj b/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj index 1bf7e53a2d..d8434520bd 100644 --- a/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj +++ b/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj @@ -50,8 +50,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false false @@ -67,8 +65,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false false @@ -84,8 +80,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false false @@ -101,8 +95,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false diff --git a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj index 331b78155d..dff1e4413b 100644 --- a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj +++ b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj @@ -96,9 +96,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -113,9 +111,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false false @@ -131,9 +127,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -148,9 +142,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false diff --git a/HeuristicLab.Tests/HeuristicLab.Tests.csproj b/HeuristicLab.Tests/HeuristicLab.Tests.csproj index c29a9e3580..5bab272ad3 100644 --- a/HeuristicLab.Tests/HeuristicLab.Tests.csproj +++ b/HeuristicLab.Tests/HeuristicLab.Tests.csproj @@ -52,9 +52,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -69,9 +67,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -86,9 +82,7 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false false @@ -103,8 +97,6 @@ GlobalSuppressions.cs prompt MinimumRecommendedRules.ruleset - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets - ;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false From cf00d82eb42912311534ddc9070d0cafac6edb24 Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 15 Apr 2022 08:47:52 +0200 Subject: [PATCH 21/39] Unified all to $(SolutionDir)/bin/ instead of the old ..\..\..\bin\ cascade --- ...Algorithms.CMAEvolutionStrategy-3.4.csproj | 12 +++++------ ...thms.DataAnalysis.DecisionTrees-3.4.csproj | 4 ++-- ....Algorithms.DataAnalysis.Glmnet-3.4.csproj | 12 +++++------ ...cLab.Algorithms.GradientDescent-3.3.csproj | 12 +++++------ ...lients.Hive.Slave.ConsoleClient-3.3.csproj | 12 +++++------ ...Lab.Clients.Hive.Slave.TrayIcon-3.3.csproj | 12 +++++------ ...ients.Hive.Slave.WindowsService-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Clients.Hive-3.3.csproj | 12 +++++------ .../HeuristicLab.DebugEngine.Views-3.3.csproj | 12 +++++------ .../1.0/AutoDiff-1.0/AutoDiff-1.0.csproj | 12 +++++------ .../DotNetScilab-1.0/DotNetScilab-1.0.csproj | 12 +++++------ .../DotNetScilab-1.0Example/cs_example.csproj | 12 +++++------ .../HeuristicLab.DotNetScilab-1.0.csproj | 12 +++++------ .../4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj | 12 +++++------ .../HeuristicLab.EPPlus-4.0.3.csproj | 12 +++++------ .../1.12/HeuristicLab.GeoIP.csproj | 12 +++++------ .../HeuristicLab.IGraph-0.8.0-pre.csproj | 4 ++-- .../HeuristicLab.MatlabConnector-1.0.csproj | 12 +++++------ .../HeuristicLab.NativeInterpreter-0.1.csproj | 4 ++-- .../HeuristicLab.OrTools-7.0.0.csproj | 12 +++++------ .../src/ProtoGen/ProtoGen-2.4.1.473.csproj | 12 +++++------ .../ProtocolBuffers-2.4.1.473.csproj | 12 +++++------ .../ProtocolBuffersLite.csproj | 4 ++-- ...ab.Operators.Programmable.Views-3.3.csproj | 12 +++++------ ...uristicLab.ParallelEngine.Views-3.3.csproj | 12 +++++------ ...icLab.Problems.BinPacking.Views-3.3.csproj | 12 +++++------ ...euristicLab.Problems.BinPacking-3.3.csproj | 12 +++++------ ...bolic.TimeSeriesPrognosis.Views-3.4.csproj | 4 ++-- ...lems.DataAnalysis.Trading.Views-3.4.csproj | 12 +++++------ ...b.Problems.DataAnalysis.Trading-3.4.csproj | 12 +++++------ ...blems.ExternalEvaluation.Matlab-3.3.csproj | 12 +++++------ ...blems.ExternalEvaluation.Scilab-3.3.csproj | 12 +++++------ ...b.Problems.GrammaticalEvolution-3.4.csproj | 12 +++++------ ...isticLab.Problems.GraphColoring-3.3.csproj | 12 +++++------ ....Problems.Instances.CordeauGQAP-3.3.csproj | 12 +++++------ ...icLab.Problems.Instances.DIMACS-3.3.csproj | 12 +++++------ ...ms.Instances.DataAnalysis.Views-3.3.csproj | 12 +++++------ ...Problems.Instances.DataAnalysis-3.3.csproj | 12 +++++------ ....Problems.Instances.ElloumiCTAP-3.3.csproj | 12 +++++------ ...Problems.Instances.Orienteering-3.3.csproj | 12 +++++------ ...icLab.Problems.Instances.QAPLIB-3.3.csproj | 12 +++++------ ...b.Problems.Instances.Scheduling-3.3.csproj | 12 +++++------ ...Problems.Instances.TSPLIB.Views-3.3.csproj | 12 +++++------ ...icLab.Problems.Instances.TSPLIB-3.3.csproj | 12 +++++------ ....Instances.VehicleRouting.Views-3.4.csproj | 12 +++++------ ...oblems.Instances.VehicleRouting-3.4.csproj | 12 +++++------ ...ticLab.Problems.Instances.Views-3.3.csproj | 12 +++++------ ...HeuristicLab.Problems.Instances-3.3.csproj | 12 +++++------ ...Problems.LinearAssignment.Views-3.3.csproj | 12 +++++------ ...icLab.Problems.LinearAssignment-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Problems.NK-3.3.csproj | 12 +++++------ ...Lab.Problems.Orienteering.Views-3.3.csproj | 12 +++++------ ...risticLab.Problems.Orienteering-3.3.csproj | 12 +++++------ ....Problems.ParameterOptimization-3.3.csproj | 12 +++++------ ...ms.TestFunctions.MultiObjective-3.3.csproj | 12 +++++------ ...b.Problems.VehicleRouting.Views-3.4.csproj | 12 +++++------ ...sticLab.Problems.VehicleRouting-3.4.csproj | 12 +++++------ .../HeuristicLab.Scripting.Views-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Scripting-3.3.csproj | 12 +++++------ ...cLab.Services.Access.DataAccess-3.3.csproj | 12 +++++------ .../HeuristicLab.Services.Access-3.3.csproj | 12 +++++------ ....Services.Deployment.DataAccess-3.3.csproj | 12 +++++------ ...euristicLab.Services.Deployment-3.3.csproj | 12 +++++------ ...icLab.Services.Deployment-3.3.Tests.csproj | 12 +++++------ ...ticLab.Services.Hive.DataAccess-3.3.csproj | 12 +++++------ ...ab.Services.Hive.JanitorService-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Services.Hive-3.3.csproj | 12 +++++------ ...sticLab.Services.OKB.DataAccess-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Services.OKB-3.3.csproj | 20 +++++++++---------- ...Lab.Services.WebApp.Maintenance-3.3.csproj | 12 +++++------ ...cLab.Services.WebApp.Statistics-3.3.csproj | 12 +++++------ ...isticLab.Services.WebApp.Status-3.3.csproj | 12 +++++------ .../HeuristicLab.Services.WebApp-3.3.csproj | 12 +++++------ HeuristicLab.Tests/HeuristicLab.Tests.csproj | 12 +++++------ ...ization.ChartControlsExtensions-3.3.csproj | 2 +- .../HeuristicLab.Build.csproj | 2 +- .../ProtoGen/ProtoGen-2.4.1.473.csproj | 2 +- .../ProtocolBuffers-2.4.1.473.csproj | 2 +- 78 files changed, 432 insertions(+), 432 deletions(-) diff --git a/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj b/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj index f105e4f248..eadf9b3e0f 100644 --- a/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj +++ b/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj @@ -40,7 +40,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -50,7 +50,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -59,7 +59,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -68,7 +68,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -79,7 +79,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -88,7 +88,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj index b4355478d1..224de03e6b 100644 --- a/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj @@ -19,7 +19,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -29,7 +29,7 @@ AnyCPU pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 diff --git a/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj index c7134adb81..e9fddf9c9a 100644 --- a/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj @@ -19,7 +19,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -29,7 +29,7 @@ AnyCPU pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -45,7 +45,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE true full @@ -53,7 +53,7 @@ prompt - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -62,7 +62,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE true full @@ -70,7 +70,7 @@ prompt - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj b/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj index b36b293881..9603110045 100644 --- a/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj +++ b/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -55,7 +55,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -70,7 +70,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -84,7 +84,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj index fb4a9b55c5..544fdf7bb8 100644 --- a/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj @@ -18,7 +18,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -28,7 +28,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -39,7 +39,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -48,7 +48,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE @@ -61,7 +61,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -70,7 +70,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE diff --git a/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj index 87cdbf91a6..de36c955e2 100644 --- a/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj @@ -19,7 +19,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -29,7 +29,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -40,7 +40,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -49,7 +49,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE @@ -62,7 +62,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -71,7 +71,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE diff --git a/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj index f93b46968e..463b813624 100644 --- a/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj @@ -33,7 +33,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -43,7 +43,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -54,7 +54,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -63,7 +63,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE @@ -76,7 +76,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -85,7 +85,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE diff --git a/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj b/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj index 73ca2982d9..56b7f4edae 100644 --- a/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj +++ b/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -55,7 +55,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -71,7 +71,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -84,7 +84,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj b/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj index 6021450db2..28c5db9df1 100644 --- a/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj +++ b/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -35,7 +35,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -49,7 +49,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -66,7 +66,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -81,7 +81,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/AutoDiff-1.0/AutoDiff-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/AutoDiff-1.0/AutoDiff-1.0.csproj index ffd4b58430..65fdc33788 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/AutoDiff-1.0/AutoDiff-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/AutoDiff-1.0/AutoDiff-1.0.csproj @@ -27,7 +27,7 @@ true full false - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -58,7 +58,7 @@ pdbonly true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -96,7 +96,7 @@ true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -111,7 +111,7 @@ false - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -127,7 +127,7 @@ true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -139,7 +139,7 @@ false - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0/DotNetScilab-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0/DotNetScilab-1.0.csproj index 0ee4abbedb..59ced7961e 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0/DotNetScilab-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0/DotNetScilab-1.0.csproj @@ -23,7 +23,7 @@ true full false - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -34,7 +34,7 @@ pdbonly true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -44,7 +44,7 @@ true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE true false @@ -54,7 +54,7 @@ false - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE true true @@ -66,7 +66,7 @@ true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE true false @@ -76,7 +76,7 @@ false - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE true true diff --git a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0Example/cs_example.csproj b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0Example/cs_example.csproj index 20ce77b4aa..4d2523b8c4 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0Example/cs_example.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0Example/cs_example.csproj @@ -23,7 +23,7 @@ true full false - bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -32,7 +32,7 @@ pdbonly true - bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -40,7 +40,7 @@ true - bin\ + $(SolutionDir)\bin\ DEBUG;TRACE true full @@ -48,7 +48,7 @@ prompt - bin\ + $(SolutionDir)\bin\ TRACE true true @@ -58,7 +58,7 @@ true - bin\ + $(SolutionDir)\bin\ DEBUG;TRACE true full @@ -66,7 +66,7 @@ prompt - bin\ + $(SolutionDir)\bin\ TRACE true true diff --git a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj index 8ad11e3227..af34fbd234 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj @@ -17,7 +17,7 @@ true full false - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -26,7 +26,7 @@ pdbonly true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -40,7 +40,7 @@ true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -49,7 +49,7 @@ false - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -60,7 +60,7 @@ true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -69,7 +69,7 @@ false - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj b/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj index e784bb7cee..21fe460401 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj @@ -48,7 +48,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -63,7 +63,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -75,7 +75,7 @@ true - bin\x86\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -83,7 +83,7 @@ AllRules.ruleset - bin\x86\Release\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -93,7 +93,7 @@ true - bin\x64\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -101,7 +101,7 @@ AllRules.ruleset - bin\x64\Release\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/HeuristicLab.EPPlus-4.0.3.csproj b/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/HeuristicLab.EPPlus-4.0.3.csproj index 604a20b7d4..b9fec930b6 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/HeuristicLab.EPPlus-4.0.3.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/HeuristicLab.EPPlus-4.0.3.csproj @@ -17,7 +17,7 @@ true full false - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -26,7 +26,7 @@ pdbonly true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -40,7 +40,7 @@ true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -49,7 +49,7 @@ false - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -60,7 +60,7 @@ true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -69,7 +69,7 @@ false - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/HeuristicLab.GeoIP.csproj b/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/HeuristicLab.GeoIP.csproj index ac41d1b7c6..7adcb66b70 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/HeuristicLab.GeoIP.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/HeuristicLab.GeoIP.csproj @@ -18,7 +18,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -28,7 +28,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -39,7 +39,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -48,7 +48,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE @@ -61,7 +61,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -70,7 +70,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE diff --git a/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/HeuristicLab.IGraph-0.8.0-pre.csproj b/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/HeuristicLab.IGraph-0.8.0-pre.csproj index f3c6ef1b9c..0cc6e9ee22 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/HeuristicLab.IGraph-0.8.0-pre.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/HeuristicLab.IGraph-0.8.0-pre.csproj @@ -16,7 +16,7 @@ true full false - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -25,7 +25,7 @@ pdbonly true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 diff --git a/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj index 4e0ec05092..a2d07319f3 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj @@ -17,7 +17,7 @@ true full false - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -26,7 +26,7 @@ pdbonly true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -40,7 +40,7 @@ true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -49,7 +49,7 @@ false - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -60,7 +60,7 @@ true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -69,7 +69,7 @@ false - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/HeuristicLab.NativeInterpreter-0.1/HeuristicLab.NativeInterpreter-0.1.csproj b/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/HeuristicLab.NativeInterpreter-0.1/HeuristicLab.NativeInterpreter-0.1.csproj index aa0609cfe8..88d37bbc54 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/HeuristicLab.NativeInterpreter-0.1/HeuristicLab.NativeInterpreter-0.1.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/HeuristicLab.NativeInterpreter-0.1/HeuristicLab.NativeInterpreter-0.1.csproj @@ -18,7 +18,7 @@ true full false - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -26,7 +26,7 @@ pdbonly true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 diff --git a/HeuristicLab.ExtLibs/HeuristicLab.OrTools/7.0.0/HeuristicLab.OrTools-7.0.0/HeuristicLab.OrTools-7.0.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.OrTools/7.0.0/HeuristicLab.OrTools-7.0.0/HeuristicLab.OrTools-7.0.0.csproj index 88d01725ee..61bade2b91 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.OrTools/7.0.0/HeuristicLab.OrTools-7.0.0/HeuristicLab.OrTools-7.0.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.OrTools/7.0.0/HeuristicLab.OrTools-7.0.0/HeuristicLab.OrTools-7.0.0.csproj @@ -18,7 +18,7 @@ true full false - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -28,7 +28,7 @@ pdbonly true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -42,7 +42,7 @@ true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE true full @@ -51,7 +51,7 @@ MinimumRecommendedRules.ruleset - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE true true @@ -62,7 +62,7 @@ true - ..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE true full @@ -71,7 +71,7 @@ MinimumRecommendedRules.ruleset - ..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE true true diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProtoGen-2.4.1.473.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProtoGen-2.4.1.473.csproj index ff55f4bc3e..e06a56e0d8 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProtoGen-2.4.1.473.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProtoGen-2.4.1.473.csproj @@ -41,7 +41,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -51,7 +51,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -60,7 +60,7 @@ true - bin\x64\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -74,7 +74,7 @@ false - bin\x64\Release\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -90,7 +90,7 @@ true - bin\x86\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -104,7 +104,7 @@ false - bin\x86\Release\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj index 9359c764dd..b0cd8a8de1 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj @@ -21,7 +21,7 @@ true full false - ..\..\..\..\..\..\bin\ + $(SolutionDir)\bin\ 1591, 1570, 1571, 1572, 1573, 1574 @@ -34,7 +34,7 @@ pdbonly true - ..\..\..\..\..\..\bin\ + $(SolutionDir)\bin\ 1591, 1570, 1571, 1572, 1573, 1574 @@ -46,7 +46,7 @@ true - ..\..\..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE 1591, 1570, 1571, 1572, 1573, 1574 true @@ -62,7 +62,7 @@ false - ..\..\..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE true 1591, 1570, 1571, 1572, 1573, 1574 @@ -80,7 +80,7 @@ true - ..\..\..\..\..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE 1591, 1570, 1571, 1572, 1573, 1574 true @@ -96,7 +96,7 @@ false - ..\..\..\..\..\..\bin\ + $(SolutionDir)\bin\ TRACE true 1591, 1570, 1571, 1572, 1573, 1574 diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffersLite.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffersLite.csproj index 23414d955f..5b691c61e8 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffersLite.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffersLite.csproj @@ -20,7 +20,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ $(OutputPath)\$(AssemblyName).xml 1591, 1570, 1571, 1572, 1573, 1574 DEBUG;TRACE;LITE @@ -31,7 +31,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ $(OutputPath)\$(AssemblyName).xml 1591, 1570, 1571, 1572, 1573, 1574 TRACE;LITE diff --git a/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj b/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj index 65c8764bc2..79ad1d0bf4 100644 --- a/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj +++ b/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -53,7 +53,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -69,7 +69,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -83,7 +83,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj b/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj index 47dc0499d1..dc1eb158a4 100644 --- a/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj +++ b/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj @@ -17,7 +17,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -26,7 +26,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -34,7 +34,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -43,7 +43,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -54,7 +54,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -63,7 +63,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.BinPacking.Views/3.3/HeuristicLab.Problems.BinPacking.Views-3.3.csproj b/HeuristicLab.Problems.BinPacking.Views/3.3/HeuristicLab.Problems.BinPacking.Views-3.3.csproj index df4701ca40..dd919d891d 100644 --- a/HeuristicLab.Problems.BinPacking.Views/3.3/HeuristicLab.Problems.BinPacking.Views-3.3.csproj +++ b/HeuristicLab.Problems.BinPacking.Views/3.3/HeuristicLab.Problems.BinPacking.Views-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -26,21 +26,21 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 prompt - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -49,14 +49,14 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 prompt - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj b/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj index a71a7e07ce..4b9661d4d3 100644 --- a/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj +++ b/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -26,21 +26,21 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 prompt - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -50,14 +50,14 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 prompt - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj index 18acc5898e..9d8632d3f4 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj @@ -79,7 +79,7 @@ true - ../../bin/ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -88,7 +88,7 @@ false - ../../bin/ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj index a4da331c1f..d4f23e6847 100644 --- a/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj @@ -40,7 +40,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -50,7 +50,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -59,7 +59,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -68,7 +68,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -79,7 +79,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -88,7 +88,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj index 36d27a18bd..1a4a9025af 100644 --- a/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj @@ -40,7 +40,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -50,7 +50,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -59,7 +59,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -68,7 +68,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -79,7 +79,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -88,7 +88,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj b/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj index 95edd1cfd6..11c0b7ba0e 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj @@ -17,7 +17,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -26,7 +26,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -40,7 +40,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -49,7 +49,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -60,7 +60,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -69,7 +69,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj b/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj index e64dd26bf4..5d8ad671f5 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj @@ -17,7 +17,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -26,7 +26,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -40,7 +40,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -49,7 +49,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -60,7 +60,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -69,7 +69,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj b/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj index be80123c1b..5da1738659 100644 --- a/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj +++ b/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj @@ -49,7 +49,7 @@ true Full False - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -59,7 +59,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -68,7 +68,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full prompt @@ -76,7 +76,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -86,7 +86,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full prompt @@ -94,7 +94,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj b/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj index caac2155bb..d9f6f9b014 100644 --- a/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj +++ b/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj @@ -17,7 +17,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -25,7 +25,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -38,7 +38,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -46,7 +46,7 @@ MinimumRecommendedRules.ruleset - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -56,7 +56,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -64,7 +64,7 @@ MinimumRecommendedRules.ruleset - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj b/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj index 5a2b4c5198..969b1b0476 100644 --- a/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj +++ b/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -55,7 +55,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -70,7 +70,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -84,7 +84,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj b/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj index 78a23ba068..c2621fdb62 100644 --- a/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj +++ b/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj @@ -17,7 +17,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -25,7 +25,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -38,7 +38,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -46,7 +46,7 @@ MinimumRecommendedRules.ruleset - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -56,7 +56,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -64,7 +64,7 @@ MinimumRecommendedRules.ruleset - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj b/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj index 1aeaac2d53..b77c702d16 100644 --- a/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj +++ b/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -35,7 +35,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -43,7 +43,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -53,7 +53,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -61,7 +61,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj b/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj index f73c8466db..fd78ee77d5 100644 --- a/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj +++ b/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -28,7 +28,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -43,7 +43,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -56,7 +56,7 @@ 7.3 - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -73,7 +73,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -86,7 +86,7 @@ 7.3 - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj b/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj index 342a51ce83..5c18e3b570 100644 --- a/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj +++ b/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -55,7 +55,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -71,7 +71,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -85,7 +85,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj b/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj index eaa953c6cb..a80e3217ee 100644 --- a/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj @@ -17,7 +17,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -26,7 +26,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -40,7 +40,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -49,7 +49,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -60,7 +60,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -69,7 +69,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj b/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj index 484dec1ac9..d18f5f7e15 100644 --- a/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj +++ b/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -55,7 +55,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -71,7 +71,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -85,7 +85,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj b/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj index 3e2f4688f7..5036c300d1 100644 --- a/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -55,7 +55,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -70,7 +70,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -84,7 +84,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj b/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj index f9f3ae4a6b..28768bb3d9 100644 --- a/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj +++ b/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -55,7 +55,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -71,7 +71,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -85,7 +85,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj b/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj index be1194a88d..9aa7ce8a38 100644 --- a/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj +++ b/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -55,7 +55,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -71,7 +71,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -85,7 +85,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj b/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj index d3e816e812..0285949107 100644 --- a/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj +++ b/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -55,7 +55,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -71,7 +71,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -85,7 +85,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj b/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj index 8ace684057..bc18631a21 100644 --- a/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj +++ b/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -55,7 +55,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -71,7 +71,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -85,7 +85,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj b/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj index 030e16398f..082c4c1cd6 100644 --- a/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -55,7 +55,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -71,7 +71,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -85,7 +85,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj b/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj index 88d0c6b5f7..b343697901 100644 --- a/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj +++ b/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -56,7 +56,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -73,7 +73,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -88,7 +88,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj b/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj index 6d3c5e8793..830a1d4ada 100644 --- a/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj +++ b/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -55,7 +55,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -70,7 +70,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -84,7 +84,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj b/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj index 093a9b9547..10892509ff 100644 --- a/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj +++ b/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -55,7 +55,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -70,7 +70,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -84,7 +84,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj b/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj index ff5538b934..538f59a3ac 100644 --- a/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj +++ b/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj @@ -18,7 +18,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -55,7 +55,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -71,7 +71,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -85,7 +85,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj b/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj index c1c09641a5..aacb2aab21 100644 --- a/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj +++ b/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj @@ -17,7 +17,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -26,7 +26,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -40,7 +40,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -49,7 +49,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -60,7 +60,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -69,7 +69,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj b/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj index 8ba82247f4..00e15f53ef 100644 --- a/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj +++ b/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj @@ -17,7 +17,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -26,7 +26,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -43,7 +43,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -52,7 +52,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -63,7 +63,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -72,7 +72,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj b/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj index 85a6a89b35..8b9813795d 100644 --- a/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj +++ b/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj @@ -17,7 +17,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -26,7 +26,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -40,7 +40,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -49,7 +49,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -60,7 +60,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -69,7 +69,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj b/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj index 21392c6b51..3d1c3b02c6 100644 --- a/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj +++ b/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj @@ -16,7 +16,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -26,7 +26,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -42,7 +42,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ CODE_ANALYSIS;DEBUG;TRACE full x64 @@ -51,7 +51,7 @@ MinimumRecommendedRules.ruleset - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -61,7 +61,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ CODE_ANALYSIS;DEBUG;TRACE full x86 @@ -70,7 +70,7 @@ MinimumRecommendedRules.ruleset - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj b/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj index e232bc20d9..f5639f158d 100644 --- a/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj +++ b/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj @@ -39,7 +39,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -49,7 +49,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -60,7 +60,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -69,7 +69,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE @@ -82,7 +82,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -91,7 +91,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE bin\x64\Release\HeuristicLab.Problems.VehicleRouting.Views-3.4.xml true diff --git a/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj b/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj index 0e37df3faa..8f508c5a85 100644 --- a/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj +++ b/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj @@ -39,7 +39,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -51,7 +51,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -63,7 +63,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -72,7 +72,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE @@ -85,7 +85,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -94,7 +94,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE bin\x64\Release\HeuristicLab.Routing.TSP-3.3.XML true diff --git a/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj b/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj index 14622fef61..3ea9605bda 100644 --- a/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj +++ b/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj @@ -17,7 +17,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -50,7 +50,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -61,7 +61,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -70,7 +70,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj b/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj index d18eed9d42..5aae37d7bd 100644 --- a/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj +++ b/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj @@ -17,7 +17,7 @@ true full false - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -27,7 +27,7 @@ pdbonly true - ..\..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -50,7 +50,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -61,7 +61,7 @@ true - ..\..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -70,7 +70,7 @@ false - ..\..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj b/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj index 61515b9fe6..f6ffc8b63e 100644 --- a/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj @@ -18,7 +18,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -28,7 +28,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -39,7 +39,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -48,7 +48,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE @@ -61,7 +61,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -70,7 +70,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE diff --git a/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj b/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj index 99a2753c5f..b39086925d 100644 --- a/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj +++ b/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj @@ -20,7 +20,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -30,7 +30,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -50,7 +50,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE @@ -63,7 +63,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -72,7 +72,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE diff --git a/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj b/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj index d582acbd10..3ef7f3e76d 100644 --- a/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj @@ -40,7 +40,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -50,7 +50,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -59,7 +59,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -68,7 +68,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -79,7 +79,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -88,7 +88,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj b/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj index 951bb7085b..57d8fb3167 100644 --- a/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj +++ b/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj @@ -26,7 +26,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -36,7 +36,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -45,7 +45,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -54,7 +54,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -65,7 +65,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -74,7 +74,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj b/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj index 23220aaae5..5fa4e3fbf0 100644 --- a/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj +++ b/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj @@ -38,7 +38,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -48,7 +48,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -57,7 +57,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -66,7 +66,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -77,7 +77,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -86,7 +86,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj b/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj index 93a8b03f80..631a50b48b 100644 --- a/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj @@ -18,7 +18,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -28,7 +28,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -39,7 +39,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -48,7 +48,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE @@ -61,7 +61,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -70,7 +70,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE diff --git a/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj b/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj index c1fae52128..ac4bd509f9 100644 --- a/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj +++ b/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj @@ -19,7 +19,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -29,7 +29,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -40,7 +40,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -49,7 +49,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE @@ -62,7 +62,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -71,7 +71,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE diff --git a/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj b/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj index 329560f767..a25b57bdac 100644 --- a/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj +++ b/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj @@ -19,7 +19,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -29,7 +29,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -40,7 +40,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -49,7 +49,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE @@ -62,7 +62,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -71,7 +71,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE diff --git a/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj b/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj index b2900eb90b..c92037e78b 100644 --- a/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj @@ -37,7 +37,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -47,7 +47,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -58,7 +58,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -67,7 +67,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE @@ -80,7 +80,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -89,7 +89,7 @@ false - bin\Release\ + $(SolutionDir)\bin\ TRACE diff --git a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj index dff1e4413b..0640097a39 100644 --- a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj +++ b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj @@ -20,7 +20,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -30,7 +30,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -41,7 +41,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -49,7 +49,7 @@ AllRules.ruleset - bin\Release\ + $(SolutionDir)\bin\ TRACE @@ -61,7 +61,7 @@ true - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -69,7 +69,7 @@ AllRules.ruleset - bin\Release\ + $(SolutionDir)\bin\ TRACE @@ -87,7 +87,7 @@ true - bin\x64\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -101,7 +101,7 @@ false - bin\x64\Release\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -118,7 +118,7 @@ true - bin\x86\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -132,7 +132,7 @@ false - bin\x86\Release\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj b/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj index 27707b282c..a615b272c4 100644 --- a/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj @@ -17,7 +17,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -25,7 +25,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -38,7 +38,7 @@ true - bin\x64\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -46,7 +46,7 @@ MinimumRecommendedRules.ruleset - bin\x64\Release\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -56,7 +56,7 @@ true - bin\x86\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -64,7 +64,7 @@ MinimumRecommendedRules.ruleset - bin\x86\Release\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj b/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj index 0e45a7dcc6..9a82af14e7 100644 --- a/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj @@ -18,7 +18,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -26,7 +26,7 @@ pdbonly true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -39,7 +39,7 @@ true - bin\x64\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -47,7 +47,7 @@ MinimumRecommendedRules.ruleset - bin\x64\Release\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -57,7 +57,7 @@ true - bin\x86\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -65,7 +65,7 @@ MinimumRecommendedRules.ruleset - bin\x86\Release\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj b/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj index f6f8385d35..f2ba790ae0 100644 --- a/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj @@ -18,7 +18,7 @@ true full false - bin\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -26,7 +26,7 @@ none true - bin\Release\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -39,7 +39,7 @@ true - bin\x64\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -47,7 +47,7 @@ MinimumRecommendedRules.ruleset - bin\x64\Release\ + $(SolutionDir)\bin\ TRACE true x64 @@ -56,7 +56,7 @@ true - bin\x86\Debug\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -64,7 +64,7 @@ MinimumRecommendedRules.ruleset - bin\x86\Release\ + $(SolutionDir)\bin\ TRACE true x86 diff --git a/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj b/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj index a894edbb15..5ac284136a 100644 --- a/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj +++ b/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj @@ -28,7 +28,7 @@ true full false - bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -37,7 +37,7 @@ pdbonly true - bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -279,7 +279,7 @@ true - bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -287,7 +287,7 @@ MinimumRecommendedRules.ruleset - bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -297,7 +297,7 @@ true - bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -305,7 +305,7 @@ MinimumRecommendedRules.ruleset - bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Tests/HeuristicLab.Tests.csproj b/HeuristicLab.Tests/HeuristicLab.Tests.csproj index 5bab272ad3..620d890c61 100644 --- a/HeuristicLab.Tests/HeuristicLab.Tests.csproj +++ b/HeuristicLab.Tests/HeuristicLab.Tests.csproj @@ -20,7 +20,7 @@ true full false - ..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE prompt 4 @@ -29,7 +29,7 @@ pdbonly true - ..\bin\ + $(SolutionDir)\bin\ TRACE prompt 4 @@ -43,7 +43,7 @@ true - ..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x64 @@ -57,7 +57,7 @@ false - ..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly @@ -73,7 +73,7 @@ true - ..\bin\ + $(SolutionDir)\bin\ DEBUG;TRACE full x86 @@ -87,7 +87,7 @@ false - ..\bin\ + $(SolutionDir)\bin\ TRACE true pdbonly diff --git a/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj b/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj index b8e6bad3e1..2dc48a1e74 100644 --- a/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj +++ b/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj @@ -76,7 +76,7 @@ true - $(SolutionDir)\bin + $(SolutionDir)\bin\ DEBUG;TRACE full x64 diff --git a/build/source/HeuristicLab.Build/HeuristicLab.Build/HeuristicLab.Build.csproj b/build/source/HeuristicLab.Build/HeuristicLab.Build/HeuristicLab.Build.csproj index 04e94a449e..fb4334577f 100644 --- a/build/source/HeuristicLab.Build/HeuristicLab.Build/HeuristicLab.Build.csproj +++ b/build/source/HeuristicLab.Build/HeuristicLab.Build/HeuristicLab.Build.csproj @@ -1,7 +1,7 @@  netstandard2.0 - $(SolutionDir)\bin + $(SolutionDir)\bin\ false diff --git a/build/source/HeuristicLab.Build/ProtoGen/ProtoGen-2.4.1.473.csproj b/build/source/HeuristicLab.Build/ProtoGen/ProtoGen-2.4.1.473.csproj index 634a4d234a..e4f5981213 100644 --- a/build/source/HeuristicLab.Build/ProtoGen/ProtoGen-2.4.1.473.csproj +++ b/build/source/HeuristicLab.Build/ProtoGen/ProtoGen-2.4.1.473.csproj @@ -1,7 +1,7 @@  netstandard2.0 - $(SolutionDir)\bin + $(SolutionDir)\bin\ false diff --git a/build/source/HeuristicLab.Build/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj b/build/source/HeuristicLab.Build/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj index 4641fce285..2ef38133cc 100644 --- a/build/source/HeuristicLab.Build/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj +++ b/build/source/HeuristicLab.Build/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj @@ -1,7 +1,7 @@  netstandard2.0 - $(SolutionDir)\bin + $(SolutionDir)\bin\ false \ No newline at end of file From ececfafefe1f4a805d3217a53e1c97e3fc0077fd Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 15 Apr 2022 09:09:25 +0200 Subject: [PATCH 22/39] Removed ProtoGen from ExtLibs (as it is only used for the build process and moved into /build) --- .../ProtoGen/DependencyResolutionException.cs | 55 -- .../ProtobufCS/src/ProtoGen/DescriptorUtil.cs | 106 --- .../src/ProtoGen/EnumFieldGenerator.cs | 148 --- .../ProtobufCS/src/ProtoGen/EnumGenerator.cs | 64 -- .../src/ProtoGen/ExtensionGenerator.cs | 183 ---- .../src/ProtoGen/FieldGeneratorBase.cs | 389 -------- .../ProtobufCS/src/ProtoGen/Generator.cs | 248 ----- .../src/ProtoGen/GeneratorOptions.cs | 330 ------- .../2.4.1/ProtobufCS/src/ProtoGen/Helpers.cs | 45 - .../src/ProtoGen/IFieldSourceGenerator.cs | 53 -- .../src/ProtoGen/ISourceGenerator.cs | 43 - .../src/ProtoGen/InvalidOptionsException.cs | 77 -- .../src/ProtoGen/MessageFieldGenerator.cs | 174 ---- .../src/ProtoGen/MessageGenerator.cs | 891 ------------------ .../src/ProtoGen/PrimitiveFieldGenerator.cs | 140 --- .../2.4.1/ProtobufCS/src/ProtoGen/Program.cs | 78 -- .../src/ProtoGen/ProgramPreprocess.cs | 256 ----- .../src/ProtoGen/Properties/AssemblyInfo.cs | 39 - .../src/ProtoGen/ProtoGen-2.4.1.473.csproj | 189 ---- .../ProtoGen/RepeatedEnumFieldGenerator.cs | 212 ----- .../ProtoGen/RepeatedMessageFieldGenerator.cs | 184 ---- .../RepeatedPrimitiveFieldGenerator.cs | 207 ---- .../src/ProtoGen/ServiceGenerator.cs | 194 ---- .../src/ProtoGen/ServiceInterfaceGenerator.cs | 308 ------ .../src/ProtoGen/SourceGeneratorBase.cs | 157 --- .../src/ProtoGen/SourceGenerators.cs | 87 -- .../src/ProtoGen/UmbrellaClassGenerator.cs | 294 ------ .../2.4.1/ProtobufCS/src/ProtoGen/app.config | 4 - 28 files changed, 5155 deletions(-) delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/DependencyResolutionException.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/DescriptorUtil.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/EnumFieldGenerator.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/EnumGenerator.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ExtensionGenerator.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/FieldGeneratorBase.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/Generator.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/GeneratorOptions.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/Helpers.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/IFieldSourceGenerator.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ISourceGenerator.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/InvalidOptionsException.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/MessageFieldGenerator.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/MessageGenerator.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/PrimitiveFieldGenerator.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/Program.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProgramPreprocess.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/Properties/AssemblyInfo.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProtoGen-2.4.1.473.csproj delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/RepeatedEnumFieldGenerator.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/RepeatedMessageFieldGenerator.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/RepeatedPrimitiveFieldGenerator.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ServiceGenerator.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ServiceInterfaceGenerator.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/SourceGeneratorBase.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/SourceGenerators.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/UmbrellaClassGenerator.cs delete mode 100644 HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/app.config diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/DependencyResolutionException.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/DependencyResolutionException.cs deleted file mode 100644 index aef192e052..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/DependencyResolutionException.cs +++ /dev/null @@ -1,55 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using System; - -namespace Google.ProtocolBuffers.ProtoGen -{ - ///

- /// Exception thrown when dependencies within a descriptor set can't be resolved. - /// - public sealed class DependencyResolutionException : Exception - { - public DependencyResolutionException(string message) : base(message) - { - } - - public DependencyResolutionException(string format, params object[] args) - : base(string.Format(format, args)) - { - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/DescriptorUtil.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/DescriptorUtil.cs deleted file mode 100644 index 0666bb9336..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/DescriptorUtil.cs +++ /dev/null @@ -1,106 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using System; -using Google.ProtocolBuffers.DescriptorProtos; -using Google.ProtocolBuffers.Descriptors; - -namespace Google.ProtocolBuffers.ProtoGen -{ - /// - /// Utility class for determining namespaces etc. - /// - internal static class DescriptorUtil - { - internal static string GetFullUmbrellaClassName(IDescriptor descriptor) - { - CSharpFileOptions options = descriptor.File.CSharpOptions; - string result = options.Namespace; - if (result != "") - { - result += '.'; - } - result += GetQualifiedUmbrellaClassName(options); - return "global::" + result; - } - - /// - /// Evaluates the options and returns the qualified name of the umbrella class - /// relative to the descriptor type's namespace. Basically concatenates the - /// UmbrellaNamespace + UmbrellaClassname fields. - /// - internal static string GetQualifiedUmbrellaClassName(CSharpFileOptions options) - { - string fullName = options.UmbrellaClassname; - if (!options.NestClasses && options.UmbrellaNamespace != "") - { - fullName = String.Format("{0}.{1}", options.UmbrellaNamespace, options.UmbrellaClassname); - } - return fullName; - } - - internal static string GetMappedTypeName(MappedType type) - { - switch (type) - { - case MappedType.Int32: - return "int"; - case MappedType.Int64: - return "long"; - case MappedType.UInt32: - return "uint"; - case MappedType.UInt64: - return "ulong"; - case MappedType.Single: - return "float"; - case MappedType.Double: - return "double"; - case MappedType.Boolean: - return "bool"; - case MappedType.String: - return "string"; - case MappedType.ByteString: - return "pb::ByteString"; - case MappedType.Enum: - return null; - case MappedType.Message: - return null; - default: - throw new ArgumentOutOfRangeException("Unknown mapped type " + type); - } - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/EnumFieldGenerator.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/EnumFieldGenerator.cs deleted file mode 100644 index 8d70bc6765..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/EnumFieldGenerator.cs +++ /dev/null @@ -1,148 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using Google.ProtocolBuffers.Descriptors; - -namespace Google.ProtocolBuffers.ProtoGen -{ - internal class EnumFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator - { - internal EnumFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal) - : base(descriptor, fieldOrdinal) - { - } - - public void GenerateMembers(TextGenerator writer) - { - writer.WriteLine("private bool has{0};", PropertyName); - writer.WriteLine("private {0} {1}_ = {2};", TypeName, Name, DefaultValue); - AddDeprecatedFlag(writer); - writer.WriteLine("public bool Has{0} {{", PropertyName); - writer.WriteLine(" get {{ return has{0}; }}", PropertyName); - writer.WriteLine("}"); - AddPublicMemberAttributes(writer); - writer.WriteLine("public {0} {1} {{", TypeName, PropertyName); - writer.WriteLine(" get {{ return {0}_; }}", Name); - writer.WriteLine("}"); - } - - public void GenerateBuilderMembers(TextGenerator writer) - { - AddDeprecatedFlag(writer); - writer.WriteLine("public bool Has{0} {{", PropertyName); - writer.WriteLine(" get {{ return result.has{0}; }}", PropertyName); - writer.WriteLine("}"); - AddPublicMemberAttributes(writer); - writer.WriteLine("public {0} {1} {{", TypeName, PropertyName); - writer.WriteLine(" get {{ return result.{0}; }}", PropertyName); - writer.WriteLine(" set {{ Set{0}(value); }}", PropertyName); - writer.WriteLine("}"); - AddPublicMemberAttributes(writer); - writer.WriteLine("public Builder Set{0}({1} value) {{", PropertyName, TypeName); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.has{0} = true;", PropertyName); - writer.WriteLine(" result.{0}_ = value;", Name); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public Builder Clear{0}() {{", PropertyName); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.has{0} = false;", PropertyName); - writer.WriteLine(" result.{0}_ = {1};", Name, DefaultValue); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - } - - public void GenerateMergingCode(TextGenerator writer) - { - writer.WriteLine("if (other.Has{0}) {{", PropertyName); - writer.WriteLine(" {0} = other.{0};", PropertyName); - writer.WriteLine("}"); - } - - public void GenerateBuildingCode(TextGenerator writer) - { - // Nothing to do here for enum types - } - - public void GenerateParsingCode(TextGenerator writer) - { - writer.WriteLine("object unknown;"); - writer.WriteLine("if(input.ReadEnum(ref result.{0}_, out unknown)) {{", Name); - writer.WriteLine(" result.has{0} = true;", PropertyName); - writer.WriteLine("} else if(unknown is int) {"); - if (!UseLiteRuntime) - { - writer.WriteLine(" if (unknownFields == null) {"); // First unknown field - create builder now - writer.WriteLine(" unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);"); - writer.WriteLine(" }"); - writer.WriteLine(" unknownFields.MergeVarintField({0}, (ulong)(int)unknown);", Number); - } - writer.WriteLine("}"); - } - - public void GenerateSerializationCode(TextGenerator writer) - { - writer.WriteLine("if (has{0}) {{", PropertyName); - writer.WriteLine(" output.WriteEnum({0}, field_names[{2}], (int) {1}, {1});", Number, PropertyName, - FieldOrdinal); - writer.WriteLine("}"); - } - - public void GenerateSerializedSizeCode(TextGenerator writer) - { - writer.WriteLine("if (has{0}) {{", PropertyName); - writer.WriteLine(" size += pb::CodedOutputStream.ComputeEnumSize({0}, (int) {1});", Number, PropertyName); - writer.WriteLine("}"); - } - - public override void WriteHash(TextGenerator writer) - { - writer.WriteLine("if (has{0}) hash ^= {1}_.GetHashCode();", PropertyName, Name); - } - - public override void WriteEquals(TextGenerator writer) - { - writer.WriteLine("if (has{0} != other.has{0} || (has{0} && !{1}_.Equals(other.{1}_))) return false;", - PropertyName, Name); - } - - public override void WriteToString(TextGenerator writer) - { - writer.WriteLine("PrintField(\"{0}\", has{1}, {2}_, writer);", Descriptor.Name, PropertyName, Name); - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/EnumGenerator.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/EnumGenerator.cs deleted file mode 100644 index 35fda7ed6b..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/EnumGenerator.cs +++ /dev/null @@ -1,64 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using Google.ProtocolBuffers.Descriptors; - -namespace Google.ProtocolBuffers.ProtoGen -{ - internal class EnumGenerator : SourceGeneratorBase, ISourceGenerator - { - internal EnumGenerator(EnumDescriptor descriptor) : base(descriptor) - { - } - - // TODO(jonskeet): Write out enum descriptors? Can be retrieved from file... - public void Generate(TextGenerator writer) - { - writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); - writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", - GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); - writer.WriteLine("{0} enum {1} {{", ClassAccessLevel, Descriptor.Name); - writer.Indent(); - foreach (EnumValueDescriptor value in Descriptor.Values) - { - writer.WriteLine("{0} = {1},", value.Name, value.Number); - } - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine(); - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ExtensionGenerator.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ExtensionGenerator.cs deleted file mode 100644 index a862a7a0ad..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ExtensionGenerator.cs +++ /dev/null @@ -1,183 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using System; -using Google.ProtocolBuffers.Descriptors; - -namespace Google.ProtocolBuffers.ProtoGen -{ - internal class ExtensionGenerator : FieldGeneratorBase, ISourceGenerator - { - private readonly string extends; - private readonly string scope; - private readonly string type; - private readonly string name; - - internal ExtensionGenerator(FieldDescriptor descriptor) - : base(descriptor, 0) - { - if (Descriptor.ExtensionScope != null) - { - scope = GetClassName(Descriptor.ExtensionScope); - } - else - { - scope = DescriptorUtil.GetFullUmbrellaClassName(Descriptor.File); - } - switch (Descriptor.MappedType) - { - case MappedType.Message: - type = GetClassName(Descriptor.MessageType); - break; - case MappedType.Enum: - type = GetClassName(Descriptor.EnumType); - break; - default: - type = DescriptorUtil.GetMappedTypeName(Descriptor.MappedType); - break; - } - extends = GetClassName(Descriptor.ContainingType); - name = Descriptor.CSharpOptions.PropertyName; - } - - public void Generate(TextGenerator writer) - { - if (Descriptor.File.CSharpOptions.ClsCompliance && GetFieldConstantName(Descriptor).StartsWith("_")) - { - writer.WriteLine("[global::System.CLSCompliant(false)]"); - } - - writer.WriteLine("public const int {0} = {1};", GetFieldConstantName(Descriptor), Descriptor.FieldNumber); - - if (UseLiteRuntime) - { - if (Descriptor.MappedType == MappedType.Message && Descriptor.MessageType.Options.MessageSetWireFormat) - { - throw new ArgumentException( - "option message_set_wire_format = true; is not supported in Lite runtime extensions."); - } - if (!Descriptor.IsCLSCompliant && Descriptor.File.CSharpOptions.ClsCompliance) - { - writer.WriteLine("[global::System.CLSCompliant(false)]"); - } - writer.WriteLine("{0} static pb::{4}<{1}, {2}> {3};", ClassAccessLevel, extends, type, name, - Descriptor.IsRepeated ? "GeneratedRepeatExtensionLite" : "GeneratedExtensionLite"); - } - else if (Descriptor.IsRepeated) - { - if (!Descriptor.IsCLSCompliant && Descriptor.File.CSharpOptions.ClsCompliance) - { - writer.WriteLine("[global::System.CLSCompliant(false)]"); - } - writer.WriteLine("{0} static pb::GeneratedExtensionBase> {2};", ClassAccessLevel, type, - name); - } - else - { - if (!Descriptor.IsCLSCompliant && Descriptor.File.CSharpOptions.ClsCompliance) - { - writer.WriteLine("[global::System.CLSCompliant(false)]"); - } - writer.WriteLine("{0} static pb::GeneratedExtensionBase<{1}> {2};", ClassAccessLevel, type, name); - } - } - - internal void GenerateStaticVariableInitializers(TextGenerator writer) - { - if (UseLiteRuntime) - { - writer.WriteLine("{0}.{1} = ", scope, name); - writer.Indent(); - writer.WriteLine("new pb::{0}<{1}, {2}>(", - Descriptor.IsRepeated ? "GeneratedRepeatExtensionLite" : "GeneratedExtensionLite", - extends, type); - writer.Indent(); - writer.WriteLine("\"{0}\",", Descriptor.FullName); - writer.WriteLine("{0}.DefaultInstance,", extends); - if (!Descriptor.IsRepeated) - { - writer.WriteLine("{0},", - Descriptor.HasDefaultValue - ? DefaultValue - : IsNullableType ? "null" : "default(" + type + ")"); - } - writer.WriteLine("{0},", - (Descriptor.MappedType == MappedType.Message) ? type + ".DefaultInstance" : "null"); - writer.WriteLine("{0},", - (Descriptor.MappedType == MappedType.Enum) ? "new EnumLiteMap<" + type + ">()" : "null"); - writer.WriteLine("{0}.{1}FieldNumber,", scope, name); - writer.Write("pbd::FieldType.{0}", Descriptor.FieldType); - if (Descriptor.IsRepeated) - { - writer.WriteLine(","); - writer.Write(Descriptor.IsPacked ? "true" : "false"); - } - writer.Outdent(); - writer.WriteLine(");"); - writer.Outdent(); - } - else if (Descriptor.IsRepeated) - { - writer.WriteLine( - "{0}.{1} = pb::GeneratedRepeatExtension<{2}>.CreateInstance({0}.Descriptor.Extensions[{3}]);", scope, - name, type, Descriptor.Index); - } - else - { - writer.WriteLine( - "{0}.{1} = pb::GeneratedSingleExtension<{2}>.CreateInstance({0}.Descriptor.Extensions[{3}]);", scope, - name, type, Descriptor.Index); - } - } - - internal void GenerateExtensionRegistrationCode(TextGenerator writer) - { - writer.WriteLine("registry.Add({0}.{1});", scope, name); - } - - public override void WriteHash(TextGenerator writer) - { - } - - public override void WriteEquals(TextGenerator writer) - { - } - - public override void WriteToString(TextGenerator writer) - { - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/FieldGeneratorBase.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/FieldGeneratorBase.cs deleted file mode 100644 index 93aee6cad9..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/FieldGeneratorBase.cs +++ /dev/null @@ -1,389 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using System; -using System.Globalization; -using System.Text; -using Google.ProtocolBuffers.Descriptors; - -namespace Google.ProtocolBuffers.ProtoGen -{ - internal abstract class FieldGeneratorBase : SourceGeneratorBase - { - private readonly int _fieldOrdinal; - - protected FieldGeneratorBase(FieldDescriptor descriptor, int fieldOrdinal) - : base(descriptor) - { - _fieldOrdinal = fieldOrdinal; - } - - public abstract void WriteHash(TextGenerator writer); - public abstract void WriteEquals(TextGenerator writer); - public abstract void WriteToString(TextGenerator writer); - - public int FieldOrdinal - { - get { return _fieldOrdinal; } - } - - private static bool AllPrintableAscii(string text) - { - foreach (char c in text) - { - if (c < 0x20 || c > 0x7e) - { - return false; - } - } - return true; - } - - /// - /// This returns true if the field has a non-default default value. For instance this returns - /// false for numerics with a default of zero '0', or booleans with a default of false. - /// - protected bool HasDefaultValue - { - get - { - switch (Descriptor.FieldType) - { - case FieldType.Float: - case FieldType.Double: - case FieldType.Int32: - case FieldType.Int64: - case FieldType.SInt32: - case FieldType.SInt64: - case FieldType.SFixed32: - case FieldType.SFixed64: - case FieldType.UInt32: - case FieldType.UInt64: - case FieldType.Fixed32: - case FieldType.Fixed64: - { - IConvertible value = (IConvertible) Descriptor.DefaultValue; - return value.ToString(CultureInfo.InvariantCulture) != "0"; - } - case FieldType.Bool: - return ((bool) Descriptor.DefaultValue) == true; - default: - return true; - } - } - } - - /// Copy exists in ExtensionGenerator.cs - protected string DefaultValue - { - get - { - string suffix = ""; - switch (Descriptor.FieldType) - { - case FieldType.Float: - suffix = "F"; - break; - case FieldType.Double: - suffix = "D"; - break; - case FieldType.Int64: - suffix = "L"; - break; - case FieldType.UInt64: - suffix = "UL"; - break; - } - switch (Descriptor.FieldType) - { - case FieldType.Float: - case FieldType.Double: - case FieldType.Int32: - case FieldType.Int64: - case FieldType.SInt32: - case FieldType.SInt64: - case FieldType.SFixed32: - case FieldType.SFixed64: - case FieldType.UInt32: - case FieldType.UInt64: - case FieldType.Fixed32: - case FieldType.Fixed64: - { - // The simple Object.ToString converts using the current culture. - // We want to always use the invariant culture so it's predictable. - IConvertible value = (IConvertible) Descriptor.DefaultValue; - //a few things that must be handled explicitly - if (Descriptor.FieldType == FieldType.Double && value is double) - { - if (double.IsNaN((double) value)) - { - return "double.NaN"; - } - if (double.IsPositiveInfinity((double) value)) - { - return "double.PositiveInfinity"; - } - if (double.IsNegativeInfinity((double) value)) - { - return "double.NegativeInfinity"; - } - } - else if (Descriptor.FieldType == FieldType.Float && value is float) - { - if (float.IsNaN((float) value)) - { - return "float.NaN"; - } - if (float.IsPositiveInfinity((float) value)) - { - return "float.PositiveInfinity"; - } - if (float.IsNegativeInfinity((float) value)) - { - return "float.NegativeInfinity"; - } - } - return value.ToString(CultureInfo.InvariantCulture) + suffix; - } - case FieldType.Bool: - return (bool) Descriptor.DefaultValue ? "true" : "false"; - - case FieldType.Bytes: - if (!Descriptor.HasDefaultValue) - { - return "pb::ByteString.Empty"; - } - if (UseLiteRuntime && Descriptor.DefaultValue is ByteString) - { - string temp = (((ByteString) Descriptor.DefaultValue).ToBase64()); - return String.Format("pb::ByteString.FromBase64(\"{0}\")", temp); - } - return string.Format("(pb::ByteString) {0}.Descriptor.Fields[{1}].DefaultValue", - GetClassName(Descriptor.ContainingType), Descriptor.Index); - case FieldType.String: - if (AllPrintableAscii(Descriptor.Proto.DefaultValue)) - { - // All chars are ASCII and printable. In this case we only - // need to escape quotes and backslashes. - return "\"" + Descriptor.Proto.DefaultValue - .Replace("\\", "\\\\") - .Replace("'", "\\'") - .Replace("\"", "\\\"") - + "\""; - } - if (UseLiteRuntime && Descriptor.DefaultValue is String) - { - string temp = Convert.ToBase64String( - Encoding.UTF8.GetBytes((String) Descriptor.DefaultValue)); - return String.Format("pb::ByteString.FromBase64(\"{0}\").ToStringUtf8()", temp); - } - return string.Format("(string) {0}.Descriptor.Fields[{1}].DefaultValue", - GetClassName(Descriptor.ContainingType), Descriptor.Index); - case FieldType.Enum: - return TypeName + "." + ((EnumValueDescriptor) Descriptor.DefaultValue).Name; - case FieldType.Message: - case FieldType.Group: - return TypeName + ".DefaultInstance"; - default: - throw new InvalidOperationException("Invalid field descriptor type"); - } - } - } - - protected string PropertyName - { - get { return Descriptor.CSharpOptions.PropertyName; } - } - - protected string Name - { - get { return NameHelpers.UnderscoresToCamelCase(GetFieldName(Descriptor)); } - } - - protected int Number - { - get { return Descriptor.FieldNumber; } - } - - protected void AddNullCheck(TextGenerator writer) - { - AddNullCheck(writer, "value"); - } - - protected void AddNullCheck(TextGenerator writer, string name) - { - if (IsNullableType) - { - writer.WriteLine(" pb::ThrowHelper.ThrowIfNull({0}, \"{0}\");", name); - } - } - - protected void AddPublicMemberAttributes(TextGenerator writer) - { - AddDeprecatedFlag(writer); - AddClsComplianceCheck(writer); - } - - protected void AddClsComplianceCheck(TextGenerator writer) - { - if (!Descriptor.IsCLSCompliant && Descriptor.File.CSharpOptions.ClsCompliance) - { - writer.WriteLine("[global::System.CLSCompliant(false)]"); - } - } - - protected bool IsObsolete { get { return Descriptor.Options.Deprecated; } } - - /// - /// Writes [global::System.ObsoleteAttribute()] if the member is obsolete - /// - protected void AddDeprecatedFlag(TextGenerator writer) - { - if (IsObsolete) - { - writer.WriteLine("[global::System.ObsoleteAttribute()]"); - } - } - - /// - /// For encodings with fixed sizes, returns that size in bytes. Otherwise - /// returns -1. TODO(jonskeet): Make this less ugly. - /// - protected int FixedSize - { - get - { - switch (Descriptor.FieldType) - { - case FieldType.UInt32: - case FieldType.UInt64: - case FieldType.Int32: - case FieldType.Int64: - case FieldType.SInt32: - case FieldType.SInt64: - case FieldType.Enum: - case FieldType.Bytes: - case FieldType.String: - case FieldType.Message: - case FieldType.Group: - return -1; - case FieldType.Float: - return WireFormat.FloatSize; - case FieldType.SFixed32: - return WireFormat.SFixed32Size; - case FieldType.Fixed32: - return WireFormat.Fixed32Size; - case FieldType.Double: - return WireFormat.DoubleSize; - case FieldType.SFixed64: - return WireFormat.SFixed64Size; - case FieldType.Fixed64: - return WireFormat.Fixed64Size; - case FieldType.Bool: - return WireFormat.BoolSize; - default: - throw new InvalidOperationException("Invalid field descriptor type"); - } - } - } - - protected bool IsNullableType - { - get - { - switch (Descriptor.FieldType) - { - case FieldType.Float: - case FieldType.Double: - case FieldType.Int32: - case FieldType.Int64: - case FieldType.SInt32: - case FieldType.SInt64: - case FieldType.SFixed32: - case FieldType.SFixed64: - case FieldType.UInt32: - case FieldType.UInt64: - case FieldType.Fixed32: - case FieldType.Fixed64: - case FieldType.Bool: - case FieldType.Enum: - return false; - case FieldType.Bytes: - case FieldType.String: - case FieldType.Message: - case FieldType.Group: - return true; - default: - throw new InvalidOperationException("Invalid field descriptor type"); - } - } - } - - protected string TypeName - { - get - { - switch (Descriptor.FieldType) - { - case FieldType.Enum: - return GetClassName(Descriptor.EnumType); - case FieldType.Message: - case FieldType.Group: - return GetClassName(Descriptor.MessageType); - default: - return DescriptorUtil.GetMappedTypeName(Descriptor.MappedType); - } - } - } - - protected string MessageOrGroup - { - get { return Descriptor.FieldType == FieldType.Group ? "Group" : "Message"; } - } - - /// - /// Returns the type name as used in CodedInputStream method names: SFixed32, UInt32 etc. - /// - protected string CapitalizedTypeName - { - get - { - // Our enum names match perfectly. How serendipitous. - return Descriptor.FieldType.ToString(); - } - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/Generator.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/Generator.cs deleted file mode 100644 index 516018ef16..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/Generator.cs +++ /dev/null @@ -1,248 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using System.Collections.Generic; -using System.IO; -using System.Text; -using Google.ProtocolBuffers.Collections; -using Google.ProtocolBuffers.DescriptorProtos; -using Google.ProtocolBuffers.Descriptors; - -namespace Google.ProtocolBuffers.ProtoGen -{ - /// - /// Code generator for protocol buffers. Only C# is supported at the moment. - /// - public sealed class Generator - { - private readonly GeneratorOptions options; - - private Generator(GeneratorOptions options) - { - options.Validate(); - this.options = options; - } - - /// - /// Returns a generator configured with the specified options. - /// - public static Generator CreateGenerator(GeneratorOptions options) - { - return new Generator(options); - } - - public void Generate() - { - List descriptorProtos = new List(); - foreach (string inputFile in options.InputFiles) - { - ExtensionRegistry extensionRegistry = ExtensionRegistry.CreateInstance(); - CSharpOptions.RegisterAllExtensions(extensionRegistry); - using (Stream inputStream = File.OpenRead(inputFile)) - { - descriptorProtos.Add(FileDescriptorSet.ParseFrom(inputStream, extensionRegistry)); - } - } - - IList descriptors = ConvertDescriptors(options.FileOptions, descriptorProtos.ToArray()); - - // Combine with options from command line - foreach (FileDescriptor descriptor in descriptors) - { - descriptor.ConfigureWithDefaultOptions(options.FileOptions); - } - - foreach (FileDescriptor descriptor in descriptors) - { - // Optionally exclude descriptors in google.protobuf - if (descriptor.CSharpOptions.IgnoreGoogleProtobuf && descriptor.Package == "google.protobuf") - { - continue; - } - Generate(descriptor); - } - } - - /// - /// Generates code for a particular file. All dependencies must - /// already have been resolved. - /// - private void Generate(FileDescriptor descriptor) - { - UmbrellaClassGenerator ucg = new UmbrellaClassGenerator(descriptor); - using (TextWriter textWriter = File.CreateText(GetOutputFile(descriptor))) - { - TextGenerator writer = new TextGenerator(textWriter, options.LineBreak); - ucg.Generate(writer); - } - } - - private string GetOutputFile(FileDescriptor descriptor) - { - CSharpFileOptions fileOptions = descriptor.CSharpOptions; - - string filename = descriptor.CSharpOptions.UmbrellaClassname + descriptor.CSharpOptions.FileExtension; - - string outputDirectory = descriptor.CSharpOptions.OutputDirectory; - if (fileOptions.ExpandNamespaceDirectories) - { - string package = fileOptions.Namespace; - if (!string.IsNullOrEmpty(package)) - { - string[] bits = package.Split('.'); - foreach (string bit in bits) - { - outputDirectory = Path.Combine(outputDirectory, bit); - } - } - } - - // As the directory can be explicitly specified in options, we need to make sure it exists - Directory.CreateDirectory(outputDirectory); - return Path.Combine(outputDirectory, filename); - } - - /// - /// Resolves any dependencies and converts FileDescriptorProtos into FileDescriptors. - /// The list returned is in the same order as the protos are listed in the descriptor set. - /// Note: this method is internal rather than private to allow testing. - /// - /// Not all dependencies could be resolved. - public static IList ConvertDescriptors(CSharpFileOptions options, - params FileDescriptorSet[] descriptorProtos) - { - // Simple strategy: Keep going through the list of protos to convert, only doing ones where - // we've already converted all the dependencies, until we get to a stalemate - List fileList = new List(); - foreach (FileDescriptorSet set in descriptorProtos) - { - fileList.AddRange(set.FileList); - } - - FileDescriptor[] converted = new FileDescriptor[fileList.Count]; - - Dictionary convertedMap = new Dictionary(); - - int totalConverted = 0; - - bool madeProgress = true; - while (madeProgress && totalConverted < converted.Length) - { - madeProgress = false; - for (int i = 0; i < converted.Length; i++) - { - if (converted[i] != null) - { - // Already done this one - continue; - } - FileDescriptorProto candidate = fileList[i]; - FileDescriptor[] dependencies = new FileDescriptor[candidate.DependencyList.Count]; - - - CSharpFileOptions.Builder builder = options.ToBuilder(); - if (candidate.Options.HasExtension(CSharpOptions.CSharpFileOptions)) - { - builder.MergeFrom( - candidate.Options.GetExtension(CSharpOptions.CSharpFileOptions)); - } - CSharpFileOptions localOptions = builder.Build(); - - bool foundAllDependencies = true; - for (int j = 0; j < dependencies.Length; j++) - { - if (!convertedMap.TryGetValue(candidate.DependencyList[j], out dependencies[j])) - { - // We can auto-magically resolve these since we already have their description - // This way if the file is only referencing options it does not need to be built with the - // --include_imports definition. - if (localOptions.IgnoreGoogleProtobuf && - (candidate.DependencyList[j] == "google/protobuf/csharp_options.proto")) - { - dependencies[j] = CSharpOptions.Descriptor; - continue; - } - if (localOptions.IgnoreGoogleProtobuf && - (candidate.DependencyList[j] == "google/protobuf/descriptor.proto")) - { - dependencies[j] = DescriptorProtoFile.Descriptor; - continue; - } - foundAllDependencies = false; - break; - } - } - if (!foundAllDependencies) - { - continue; - } - madeProgress = true; - totalConverted++; - converted[i] = FileDescriptor.BuildFrom(candidate, dependencies); - convertedMap[candidate.Name] = converted[i]; - } - } - if (!madeProgress) - { - StringBuilder remaining = new StringBuilder(); - for (int i = 0; i < converted.Length; i++) - { - if (converted[i] == null) - { - if (remaining.Length != 0) - { - remaining.Append(", "); - } - FileDescriptorProto failure = fileList[i]; - remaining.Append(failure.Name); - remaining.Append(":"); - foreach (string dependency in failure.DependencyList) - { - if (!convertedMap.ContainsKey(dependency)) - { - remaining.Append(" "); - remaining.Append(dependency); - } - } - remaining.Append(";"); - } - } - throw new DependencyResolutionException("Unable to resolve all dependencies: " + remaining); - } - return Lists.AsReadOnly(converted); - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/GeneratorOptions.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/GeneratorOptions.cs deleted file mode 100644 index ec500d82ef..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/GeneratorOptions.cs +++ /dev/null @@ -1,330 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using System; -using System.Collections.Generic; -using System.IO; -using System.Text.RegularExpressions; -using Google.ProtocolBuffers.DescriptorProtos; -using Google.ProtocolBuffers.Descriptors; - -namespace Google.ProtocolBuffers.ProtoGen -{ - /// - /// All the configuration required for the generator - where to generate - /// output files, the location of input files etc. While this isn't immutable - /// in practice, the contents shouldn't be changed after being passed to - /// the generator. - /// - public sealed class GeneratorOptions - { - private static Dictionary LineBreaks = - new Dictionary(StringComparer.InvariantCultureIgnoreCase) - { - {"Windows", "\r\n"}, - {"Unix", "\n"}, - {"Default", Environment.NewLine} - }; - - public IList InputFiles { get; set; } - - public GeneratorOptions() - { - LineBreak = Environment.NewLine; - } - - /// - /// Attempts to validate the options, but doesn't throw an exception if they're invalid. - /// Instead, when this method returns false, the output variable will contain a collection - /// of reasons for the validation failure. - /// - /// Variable to receive a list of reasons in case of validation failure. - /// true if the options are valid; false otherwise - public bool TryValidate(out IList reasons) - { - List tmpReasons = new List(); - - ParseArguments(tmpReasons); - - // Output directory validation - if (string.IsNullOrEmpty(FileOptions.OutputDirectory)) - { - tmpReasons.Add("No output directory specified"); - } - else - { - if (!Directory.Exists(FileOptions.OutputDirectory)) - { - tmpReasons.Add("Specified output directory (" + FileOptions.OutputDirectory + " doesn't exist."); - } - } - - // Input file validation (just in terms of presence) - if (InputFiles == null || InputFiles.Count == 0) - { - tmpReasons.Add("No input files specified"); - } - else - { - foreach (string input in InputFiles) - { - FileInfo fi = new FileInfo(input); - if (!fi.Exists) - { - tmpReasons.Add("Input file " + input + " doesn't exist."); - } - } - } - - if (tmpReasons.Count != 0) - { - reasons = tmpReasons; - return false; - } - - reasons = null; - return true; - } - - /// - /// Validates that all the options have been set and are valid, - /// throwing an exception if they haven't. - /// - /// The options are invalid. - public void Validate() - { - IList reasons; - if (!TryValidate(out reasons)) - { - throw new InvalidOptionsException(reasons); - } - } - - // Raw arguments, used to provide defaults for proto file options - public IList Arguments { get; set; } - - [Obsolete("Please use GeneratorOptions.FileOptions.OutputDirectory instead")] - public string OutputDirectory - { - get { return FileOptions.OutputDirectory; } - set - { - CSharpFileOptions.Builder bld = FileOptions.ToBuilder(); - bld.OutputDirectory = value; - FileOptions = bld.Build(); - } - } - - private static readonly Regex ArgMatch = new Regex(@"^[-/](?[\w_]+?)[:=](?.*)$"); - private CSharpFileOptions fileOptions; - - public CSharpFileOptions FileOptions - { - get { return fileOptions ?? (fileOptions = CSharpFileOptions.DefaultInstance); } - set { fileOptions = value; } - } - - public string LineBreak { get; set; } - - private void ParseArguments(IList tmpReasons) - { - bool doHelp = Arguments.Count == 0; - - InputFiles = new List(); - CSharpFileOptions.Builder builder = FileOptions.ToBuilder(); - Dictionary fields = - new Dictionary(StringComparer.OrdinalIgnoreCase); - foreach (FieldDescriptor fld in builder.DescriptorForType.Fields) - { - fields.Add(fld.Name, fld); - } - - foreach (string argument in Arguments) - { - if (StringComparer.OrdinalIgnoreCase.Equals("-help", argument) || - StringComparer.OrdinalIgnoreCase.Equals("/help", argument) || - StringComparer.OrdinalIgnoreCase.Equals("-?", argument) || - StringComparer.OrdinalIgnoreCase.Equals("/?", argument)) - { - doHelp = true; - break; - } - - Match m = ArgMatch.Match(argument); - if (m.Success) - { - FieldDescriptor fld; - string name = m.Groups["name"].Value; - string value = m.Groups["value"].Value; - - if (fields.TryGetValue(name, out fld)) - { - object obj; - if (TryCoerceType(value, fld, out obj, tmpReasons)) - { - builder[fld] = obj; - } - } - else if (name == "line_break") - { - string tmp; - if (LineBreaks.TryGetValue(value, out tmp)) - { - LineBreak = tmp; - } - else - { - tmpReasons.Add("Invalid value for 'line_break': " + value + "."); - } - } - else if (!File.Exists(argument)) - { - doHelp = true; - tmpReasons.Add("Unknown argument '" + name + "'."); - } - else - { - InputFiles.Add(argument); - } - } - else - { - InputFiles.Add(argument); - } - } - - if (doHelp || InputFiles.Count == 0) - { - tmpReasons.Add("Arguments:"); - foreach (KeyValuePair field in fields) - { - tmpReasons.Add(String.Format("-{0}=[{1}]", field.Key, field.Value.FieldType)); - } - tmpReasons.Add("-line_break=[" + string.Join("|", new List(LineBreaks.Keys).ToArray()) + "]"); - tmpReasons.Add("followed by one or more file paths."); - } - else - { - FileOptions = builder.Build(); - } - } - - private static bool TryCoerceType(string text, FieldDescriptor field, out object value, IList tmpReasons) - { - value = null; - - switch (field.FieldType) - { - case FieldType.Int32: - case FieldType.SInt32: - case FieldType.SFixed32: - value = Int32.Parse(text); - break; - - case FieldType.Int64: - case FieldType.SInt64: - case FieldType.SFixed64: - value = Int64.Parse(text); - break; - - case FieldType.UInt32: - case FieldType.Fixed32: - value = UInt32.Parse(text); - break; - - case FieldType.UInt64: - case FieldType.Fixed64: - value = UInt64.Parse(text); - break; - - case FieldType.Float: - value = float.Parse(text); - break; - - case FieldType.Double: - value = Double.Parse(text); - break; - - case FieldType.Bool: - value = Boolean.Parse(text); - break; - - case FieldType.String: - value = text; - break; - - case FieldType.Enum: - { - EnumDescriptor enumType = field.EnumType; - - int number; - if (int.TryParse(text, out number)) - { - value = enumType.FindValueByNumber(number); - if (value == null) - { - tmpReasons.Add( - "Enum type \"" + enumType.FullName + - "\" has no value with number " + number + "."); - return false; - } - } - else - { - value = enumType.FindValueByName(text); - if (value == null) - { - tmpReasons.Add( - "Enum type \"" + enumType.FullName + - "\" has no value named \"" + text + "\"."); - return false; - } - } - - break; - } - - case FieldType.Bytes: - case FieldType.Message: - case FieldType.Group: - tmpReasons.Add("Unhandled field type " + field.FieldType.ToString() + "."); - return false; - } - - return true; - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/Helpers.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/Helpers.cs deleted file mode 100644 index 3c00115043..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/Helpers.cs +++ /dev/null @@ -1,45 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -namespace Google.ProtocolBuffers.ProtoGen -{ - /// - /// Helpers to resolve class names etc. - /// - internal static class Helpers - { - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/IFieldSourceGenerator.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/IFieldSourceGenerator.cs deleted file mode 100644 index f53ae5e4dc..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/IFieldSourceGenerator.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -namespace Google.ProtocolBuffers.ProtoGen -{ - internal interface IFieldSourceGenerator - { - void GenerateMembers(TextGenerator writer); - void GenerateBuilderMembers(TextGenerator writer); - void GenerateMergingCode(TextGenerator writer); - void GenerateBuildingCode(TextGenerator writer); - void GenerateParsingCode(TextGenerator writer); - void GenerateSerializationCode(TextGenerator writer); - void GenerateSerializedSizeCode(TextGenerator writer); - - void WriteHash(TextGenerator writer); - void WriteEquals(TextGenerator writer); - void WriteToString(TextGenerator writer); - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ISourceGenerator.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ISourceGenerator.cs deleted file mode 100644 index 452d854a1c..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ISourceGenerator.cs +++ /dev/null @@ -1,43 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -namespace Google.ProtocolBuffers.ProtoGen -{ - internal interface ISourceGenerator - { - void Generate(TextGenerator writer); - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/InvalidOptionsException.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/InvalidOptionsException.cs deleted file mode 100644 index fb698495ea..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/InvalidOptionsException.cs +++ /dev/null @@ -1,77 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using System; -using System.Collections.Generic; -using System.Text; -using Google.ProtocolBuffers.Collections; - -namespace Google.ProtocolBuffers.ProtoGen -{ - /// - /// Exception thrown to indicate that the options passed were invalid. - /// - public sealed class InvalidOptionsException : Exception - { - private readonly IList reasons; - - /// - /// An immutable list of reasons why the options were invalid. - /// - public IList Reasons - { - get { return reasons; } - } - - public InvalidOptionsException(IList reasons) - : base(BuildMessage(reasons)) - { - this.reasons = Lists.AsReadOnly(reasons); - } - - private static string BuildMessage(IEnumerable reasons) - { - StringBuilder builder = new StringBuilder("Invalid options:"); - builder.AppendLine(); - foreach (string reason in reasons) - { - builder.Append(" "); - builder.AppendLine(reason); - } - return builder.ToString(); - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/MessageFieldGenerator.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/MessageFieldGenerator.cs deleted file mode 100644 index 25b58a6057..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/MessageFieldGenerator.cs +++ /dev/null @@ -1,174 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using Google.ProtocolBuffers.Descriptors; - -namespace Google.ProtocolBuffers.ProtoGen -{ - internal class MessageFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator - { - internal MessageFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal) - : base(descriptor, fieldOrdinal) - { - } - - public void GenerateMembers(TextGenerator writer) - { - writer.WriteLine("private bool has{0};", PropertyName); - writer.WriteLine("private {0} {1}_;", TypeName, Name); - AddDeprecatedFlag(writer); - writer.WriteLine("public bool Has{0} {{", PropertyName); - writer.WriteLine(" get {{ return has{0}; }}", PropertyName); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public {0} {1} {{", TypeName, PropertyName); - writer.WriteLine(" get {{ return {0}_ ?? {1}; }}", Name, DefaultValue); - writer.WriteLine("}"); - } - - public void GenerateBuilderMembers(TextGenerator writer) - { - AddDeprecatedFlag(writer); - writer.WriteLine("public bool Has{0} {{", PropertyName); - writer.WriteLine(" get {{ return result.has{0}; }}", PropertyName); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public {0} {1} {{", TypeName, PropertyName); - writer.WriteLine(" get {{ return result.{0}; }}", PropertyName); - writer.WriteLine(" set {{ Set{0}(value); }}", PropertyName); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public Builder Set{0}({1} value) {{", PropertyName, TypeName); - AddNullCheck(writer); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.has{0} = true;", PropertyName); - writer.WriteLine(" result.{0}_ = value;", Name); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public Builder Set{0}({1}.Builder builderForValue) {{", PropertyName, TypeName); - AddNullCheck(writer, "builderForValue"); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.has{0} = true;", PropertyName); - writer.WriteLine(" result.{0}_ = builderForValue.Build();", Name); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public Builder Merge{0}({1} value) {{", PropertyName, TypeName); - AddNullCheck(writer); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" if (result.has{0} &&", PropertyName); - writer.WriteLine(" result.{0}_ != {1}) {{", Name, DefaultValue); - writer.WriteLine(" result.{0}_ = {1}.CreateBuilder(result.{0}_).MergeFrom(value).BuildPartial();", Name, - TypeName); - writer.WriteLine(" } else {"); - writer.WriteLine(" result.{0}_ = value;", Name); - writer.WriteLine(" }"); - writer.WriteLine(" result.has{0} = true;", PropertyName); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public Builder Clear{0}() {{", PropertyName); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.has{0} = false;", PropertyName); - writer.WriteLine(" result.{0}_ = null;", Name); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - } - - public void GenerateMergingCode(TextGenerator writer) - { - writer.WriteLine("if (other.Has{0}) {{", PropertyName); - writer.WriteLine(" Merge{0}(other.{0});", PropertyName); - writer.WriteLine("}"); - } - - public void GenerateBuildingCode(TextGenerator writer) - { - // Nothing to do for singular fields - } - - public void GenerateParsingCode(TextGenerator writer) - { - writer.WriteLine("{0}.Builder subBuilder = {0}.CreateBuilder();", TypeName); - writer.WriteLine("if (result.has{0}) {{", PropertyName); - writer.WriteLine(" subBuilder.MergeFrom({0});", PropertyName); - writer.WriteLine("}"); - if (Descriptor.FieldType == FieldType.Group) - { - writer.WriteLine("input.ReadGroup({0}, subBuilder, extensionRegistry);", Number); - } - else - { - writer.WriteLine("input.ReadMessage(subBuilder, extensionRegistry);"); - } - writer.WriteLine("{0} = subBuilder.BuildPartial();", PropertyName); - } - - public void GenerateSerializationCode(TextGenerator writer) - { - writer.WriteLine("if (has{0}) {{", PropertyName); - writer.WriteLine(" output.Write{0}({1}, field_names[{3}], {2});", MessageOrGroup, Number, PropertyName, - FieldOrdinal); - writer.WriteLine("}"); - } - - public void GenerateSerializedSizeCode(TextGenerator writer) - { - writer.WriteLine("if (has{0}) {{", PropertyName); - writer.WriteLine(" size += pb::CodedOutputStream.Compute{0}Size({1}, {2});", - MessageOrGroup, Number, PropertyName); - writer.WriteLine("}"); - } - - public override void WriteHash(TextGenerator writer) - { - writer.WriteLine("if (has{0}) hash ^= {1}_.GetHashCode();", PropertyName, Name); - } - - public override void WriteEquals(TextGenerator writer) - { - writer.WriteLine("if (has{0} != other.has{0} || (has{0} && !{1}_.Equals(other.{1}_))) return false;", - PropertyName, Name); - } - - public override void WriteToString(TextGenerator writer) - { - writer.WriteLine("PrintField(\"{2}\", has{0}, {1}_, writer);", PropertyName, Name, - Descriptor.FieldType == FieldType.Group ? Descriptor.MessageType.Name : Descriptor.Name); - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/MessageGenerator.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/MessageGenerator.cs deleted file mode 100644 index 119bd045e1..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/MessageGenerator.cs +++ /dev/null @@ -1,891 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using System; -using System.Collections.Generic; -using Google.ProtocolBuffers.DescriptorProtos; -using Google.ProtocolBuffers.Descriptors; - -namespace Google.ProtocolBuffers.ProtoGen -{ - internal class MessageGenerator : SourceGeneratorBase, ISourceGenerator - { - private string[] _fieldNames; - - internal MessageGenerator(MessageDescriptor descriptor) : base(descriptor) - { - } - - private string ClassName - { - get { return Descriptor.Name; } - } - - private string FullClassName - { - get { return GetClassName(Descriptor); } - } - - /// - /// Get an identifier that uniquely identifies this type within the file. - /// This is used to declare static variables related to this type at the - /// outermost file scope. - /// - private static string GetUniqueFileScopeIdentifier(IDescriptor descriptor) - { - return "static_" + descriptor.FullName.Replace(".", "_"); - } - - internal void GenerateStaticVariables(TextGenerator writer) - { - // Because descriptor.proto (Google.ProtocolBuffers.DescriptorProtos) is - // used in the construction of descriptors, we have a tricky bootstrapping - // problem. To help control static initialization order, we make sure all - // descriptors and other static data that depends on them are members of - // the proto-descriptor class. This way, they will be initialized in - // a deterministic order. - - string identifier = GetUniqueFileScopeIdentifier(Descriptor); - - if (!UseLiteRuntime) - { - // The descriptor for this type. - string access = Descriptor.File.CSharpOptions.NestClasses ? "private" : "internal"; - writer.WriteLine("{0} static pbd::MessageDescriptor internal__{1}__Descriptor;", access, identifier); - writer.WriteLine( - "{0} static pb::FieldAccess.FieldAccessorTable<{1}, {1}.Builder> internal__{2}__FieldAccessorTable;", - access, FullClassName, identifier); - } - // Generate static members for all nested types. - foreach (MessageDescriptor nestedMessage in Descriptor.NestedTypes) - { - new MessageGenerator(nestedMessage).GenerateStaticVariables(writer); - } - } - - internal void GenerateStaticVariableInitializers(TextGenerator writer) - { - string identifier = GetUniqueFileScopeIdentifier(Descriptor); - - if (!UseLiteRuntime) - { - writer.Write("internal__{0}__Descriptor = ", identifier); - if (Descriptor.ContainingType == null) - { - writer.WriteLine("Descriptor.MessageTypes[{0}];", Descriptor.Index); - } - else - { - writer.WriteLine("internal__{0}__Descriptor.NestedTypes[{1}];", - GetUniqueFileScopeIdentifier(Descriptor.ContainingType), Descriptor.Index); - } - - writer.WriteLine("internal__{0}__FieldAccessorTable = ", identifier); - writer.WriteLine( - " new pb::FieldAccess.FieldAccessorTable<{1}, {1}.Builder>(internal__{0}__Descriptor,", - identifier, FullClassName); - writer.Print(" new string[] { "); - foreach (FieldDescriptor field in Descriptor.Fields) - { - writer.Write("\"{0}\", ", field.CSharpOptions.PropertyName); - } - writer.WriteLine("});"); - } - - // Generate static member initializers for all nested types. - foreach (MessageDescriptor nestedMessage in Descriptor.NestedTypes) - { - new MessageGenerator(nestedMessage).GenerateStaticVariableInitializers(writer); - } - - foreach (FieldDescriptor extension in Descriptor.Extensions) - { - new ExtensionGenerator(extension).GenerateStaticVariableInitializers(writer); - } - } - - public string[] FieldNames - { - get - { - if (_fieldNames == null) - { - List names = new List(); - foreach (FieldDescriptor fieldDescriptor in Descriptor.Fields) - { - names.Add(fieldDescriptor.Name); - } - //if you change this, the search must also change in GenerateBuilderParsingMethods - names.Sort(StringComparer.Ordinal); - _fieldNames = names.ToArray(); - } - return _fieldNames; - } - } - - internal int FieldOrdinal(FieldDescriptor field) - { - return Array.BinarySearch(FieldNames, field.Name, StringComparer.Ordinal); - } - - private IFieldSourceGenerator CreateFieldGenerator(FieldDescriptor fieldDescriptor) - { - return SourceGenerators.CreateFieldGenerator(fieldDescriptor, FieldOrdinal(fieldDescriptor)); - } - - public void Generate(TextGenerator writer) - { - if (Descriptor.File.CSharpOptions.AddSerializable) - { - writer.WriteLine("[global::System.SerializableAttribute()]"); - } - writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); - writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); - writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", - GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); - writer.WriteLine("{0} sealed partial class {1} : pb::{2}Message{3}<{1}, {1}.Builder> {{", - ClassAccessLevel, ClassName, - Descriptor.Proto.ExtensionRangeCount > 0 ? "Extendable" : "Generated", - RuntimeSuffix); - writer.Indent(); - if (Descriptor.File.CSharpOptions.GeneratePrivateCtor) - { - writer.WriteLine("private {0}() {{ }}", ClassName); - } - // Must call MakeReadOnly() to make sure all lists are made read-only - writer.WriteLine("private static readonly {0} defaultInstance = new {0}().MakeReadOnly();", ClassName); - - if (OptimizeSpeed) - { - writer.WriteLine("private static readonly string[] _{0}FieldNames = new string[] {{ {2}{1}{2} }};", - NameHelpers.UnderscoresToCamelCase(ClassName), String.Join("\", \"", FieldNames), - FieldNames.Length > 0 ? "\"" : ""); - List tags = new List(); - foreach (string name in FieldNames) - { - tags.Add(WireFormat.MakeTag(Descriptor.FindFieldByName(name)).ToString()); - } - - writer.WriteLine("private static readonly uint[] _{0}FieldTags = new uint[] {{ {1} }};", - NameHelpers.UnderscoresToCamelCase(ClassName), String.Join(", ", tags.ToArray())); - } - writer.WriteLine("public static {0} DefaultInstance {{", ClassName); - writer.WriteLine(" get { return defaultInstance; }"); - writer.WriteLine("}"); - writer.WriteLine(); - writer.WriteLine("public override {0} DefaultInstanceForType {{", ClassName); - writer.WriteLine(" get { return DefaultInstance; }"); - writer.WriteLine("}"); - writer.WriteLine(); - writer.WriteLine("protected override {0} ThisMessage {{", ClassName); - writer.WriteLine(" get { return this; }"); - writer.WriteLine("}"); - writer.WriteLine(); - if (!UseLiteRuntime) - { - writer.WriteLine("public static pbd::MessageDescriptor Descriptor {"); - writer.WriteLine(" get {{ return {0}.internal__{1}__Descriptor; }}", - DescriptorUtil.GetFullUmbrellaClassName(Descriptor), - GetUniqueFileScopeIdentifier(Descriptor)); - writer.WriteLine("}"); - writer.WriteLine(); - writer.WriteLine( - "protected override pb::FieldAccess.FieldAccessorTable<{0}, {0}.Builder> InternalFieldAccessors {{", - ClassName); - writer.WriteLine(" get {{ return {0}.internal__{1}__FieldAccessorTable; }}", - DescriptorUtil.GetFullUmbrellaClassName(Descriptor), - GetUniqueFileScopeIdentifier(Descriptor)); - writer.WriteLine("}"); - writer.WriteLine(); - } - - // Extensions don't need to go in an extra nested type - WriteChildren(writer, null, Descriptor.Extensions); - - if (Descriptor.EnumTypes.Count + Descriptor.NestedTypes.Count > 0) - { - writer.WriteLine("#region Nested types"); - writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); - writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); - writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", - GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); - writer.WriteLine("public static class Types {"); - writer.Indent(); - WriteChildren(writer, null, Descriptor.EnumTypes); - WriteChildren(writer, null, Descriptor.NestedTypes); - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine("#endregion"); - writer.WriteLine(); - } - - foreach (FieldDescriptor fieldDescriptor in Descriptor.Fields) - { - if (Descriptor.File.CSharpOptions.ClsCompliance && GetFieldConstantName(fieldDescriptor).StartsWith("_")) - { - writer.WriteLine("[global::System.CLSCompliant(false)]"); - } - - // Rats: we lose the debug comment here :( - writer.WriteLine("public const int {0} = {1};", GetFieldConstantName(fieldDescriptor), - fieldDescriptor.FieldNumber); - CreateFieldGenerator(fieldDescriptor).GenerateMembers(writer); - writer.WriteLine(); - } - - if (OptimizeSpeed) - { - GenerateIsInitialized(writer); - GenerateMessageSerializationMethods(writer); - } - if (UseLiteRuntime) - { - GenerateLiteRuntimeMethods(writer); - } - - GenerateParseFromMethods(writer); - GenerateBuilder(writer); - - // Force the static initialization code for the file to run, since it may - // initialize static variables declared in this class. - writer.WriteLine("static {0}() {{", ClassName); - // We call object.ReferenceEquals() just to make it a valid statement on its own. - // Another option would be GetType(), but that causes problems in DescriptorProtoFile, - // where the bootstrapping is somewhat recursive - type initializers call - // each other, effectively. We temporarily see Descriptor as null. - writer.WriteLine(" object.ReferenceEquals({0}.Descriptor, null);", - DescriptorUtil.GetFullUmbrellaClassName(Descriptor)); - writer.WriteLine("}"); - - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine(); - } - - private void GenerateLiteRuntimeMethods(TextGenerator writer) - { - bool callbase = Descriptor.Proto.ExtensionRangeCount > 0; - writer.WriteLine("#region Lite runtime methods"); - writer.WriteLine("public override int GetHashCode() {"); - writer.Indent(); - writer.WriteLine("int hash = GetType().GetHashCode();"); - foreach (FieldDescriptor fieldDescriptor in Descriptor.Fields) - { - CreateFieldGenerator(fieldDescriptor).WriteHash(writer); - } - if (callbase) - { - writer.WriteLine("hash ^= base.GetHashCode();"); - } - writer.WriteLine("return hash;"); - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine(); - - writer.WriteLine("public override bool Equals(object obj) {"); - writer.Indent(); - writer.WriteLine("{0} other = obj as {0};", ClassName); - writer.WriteLine("if (other == null) return false;"); - foreach (FieldDescriptor fieldDescriptor in Descriptor.Fields) - { - CreateFieldGenerator(fieldDescriptor).WriteEquals(writer); - } - if (callbase) - { - writer.WriteLine("if (!base.Equals(other)) return false;"); - } - writer.WriteLine("return true;"); - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine(); - - writer.WriteLine("public override void PrintTo(global::System.IO.TextWriter writer) {"); - writer.Indent(); - List sorted = new List(Descriptor.Fields); - sorted.Sort( - new Comparison( - delegate(FieldDescriptor a, FieldDescriptor b) { return a.FieldNumber.CompareTo(b.FieldNumber); })); - foreach (FieldDescriptor fieldDescriptor in sorted) - { - CreateFieldGenerator(fieldDescriptor).WriteToString(writer); - } - if (callbase) - { - writer.WriteLine("base.PrintTo(writer);"); - } - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine("#endregion"); - writer.WriteLine(); - } - - private void GenerateMessageSerializationMethods(TextGenerator writer) - { - List sortedFields = new List(Descriptor.Fields); - sortedFields.Sort((f1, f2) => f1.FieldNumber.CompareTo(f2.FieldNumber)); - - List sortedExtensions = - new List(Descriptor.Proto.ExtensionRangeList); - sortedExtensions.Sort((r1, r2) => (r1.Start.CompareTo(r2.Start))); - - writer.WriteLine("public override void WriteTo(pb::ICodedOutputStream output) {"); - writer.Indent(); - // Make sure we've computed the serialized length, so that packed fields are generated correctly. - writer.WriteLine("int size = SerializedSize;"); - writer.WriteLine("string[] field_names = _{0}FieldNames;", NameHelpers.UnderscoresToCamelCase(ClassName)); - if (Descriptor.Proto.ExtensionRangeList.Count > 0) - { - writer.WriteLine( - "pb::ExtendableMessage{1}<{0}, {0}.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);", - ClassName, RuntimeSuffix); - } - - // Merge the fields and the extension ranges, both sorted by field number. - for (int i = 0, j = 0; i < Descriptor.Fields.Count || j < sortedExtensions.Count;) - { - if (i == Descriptor.Fields.Count) - { - GenerateSerializeOneExtensionRange(writer, sortedExtensions[j++]); - } - else if (j == sortedExtensions.Count) - { - GenerateSerializeOneField(writer, sortedFields[i++]); - } - else if (sortedFields[i].FieldNumber < sortedExtensions[j].Start) - { - GenerateSerializeOneField(writer, sortedFields[i++]); - } - else - { - GenerateSerializeOneExtensionRange(writer, sortedExtensions[j++]); - } - } - - if (!UseLiteRuntime) - { - if (Descriptor.Proto.Options.MessageSetWireFormat) - { - writer.WriteLine("UnknownFields.WriteAsMessageSetTo(output);"); - } - else - { - writer.WriteLine("UnknownFields.WriteTo(output);"); - } - } - - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine(); - writer.WriteLine("private int memoizedSerializedSize = -1;"); - writer.WriteLine("public override int SerializedSize {"); - writer.Indent(); - writer.WriteLine("get {"); - writer.Indent(); - writer.WriteLine("int size = memoizedSerializedSize;"); - writer.WriteLine("if (size != -1) return size;"); - writer.WriteLine(); - writer.WriteLine("size = 0;"); - foreach (FieldDescriptor field in Descriptor.Fields) - { - CreateFieldGenerator(field).GenerateSerializedSizeCode(writer); - } - if (Descriptor.Proto.ExtensionRangeCount > 0) - { - writer.WriteLine("size += ExtensionsSerializedSize;"); - } - - if (!UseLiteRuntime) - { - if (Descriptor.Options.MessageSetWireFormat) - { - writer.WriteLine("size += UnknownFields.SerializedSizeAsMessageSet;"); - } - else - { - writer.WriteLine("size += UnknownFields.SerializedSize;"); - } - } - writer.WriteLine("memoizedSerializedSize = size;"); - writer.WriteLine("return size;"); - writer.Outdent(); - writer.WriteLine("}"); - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine(); - } - - private void GenerateSerializeOneField(TextGenerator writer, FieldDescriptor fieldDescriptor) - { - CreateFieldGenerator(fieldDescriptor).GenerateSerializationCode(writer); - } - - private static void GenerateSerializeOneExtensionRange(TextGenerator writer, - DescriptorProto.Types.ExtensionRange extensionRange) - { - writer.WriteLine("extensionWriter.WriteUntil({0}, output);", extensionRange.End); - } - - private void GenerateParseFromMethods(TextGenerator writer) - { - // Note: These are separate from GenerateMessageSerializationMethods() - // because they need to be generated even for messages that are optimized - // for code size. - - writer.WriteLine("public static {0} ParseFrom(pb::ByteString data) {{", ClassName); - writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();"); - writer.WriteLine("}"); - writer.WriteLine( - "public static {0} ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {{", - ClassName); - writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();"); - writer.WriteLine("}"); - writer.WriteLine("public static {0} ParseFrom(byte[] data) {{", ClassName); - writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();"); - writer.WriteLine("}"); - writer.WriteLine("public static {0} ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {{", - ClassName); - writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();"); - writer.WriteLine("}"); - writer.WriteLine("public static {0} ParseFrom(global::System.IO.Stream input) {{", ClassName); - writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();"); - writer.WriteLine("}"); - writer.WriteLine( - "public static {0} ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {{", - ClassName); - writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();"); - writer.WriteLine("}"); - writer.WriteLine("public static {0} ParseDelimitedFrom(global::System.IO.Stream input) {{", ClassName); - writer.WriteLine(" return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();"); - writer.WriteLine("}"); - writer.WriteLine( - "public static {0} ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {{", - ClassName); - writer.WriteLine(" return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();"); - writer.WriteLine("}"); - writer.WriteLine("public static {0} ParseFrom(pb::ICodedInputStream input) {{", ClassName); - writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();"); - writer.WriteLine("}"); - writer.WriteLine( - "public static {0} ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {{", - ClassName); - writer.WriteLine(" return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();"); - writer.WriteLine("}"); - } - - /// - /// Returns whether or not the specified message type has any required fields. - /// If it doesn't, calls to check for initialization can be optimised. - /// TODO(jonskeet): Move this into MessageDescriptor? - /// - private static bool HasRequiredFields(MessageDescriptor descriptor, - Dictionary alreadySeen) - { - if (alreadySeen.ContainsKey(descriptor)) - { - // The type is already in cache. This means that either: - // a. The type has no required fields. - // b. We are in the midst of checking if the type has required fields, - // somewhere up the stack. In this case, we know that if the type - // has any required fields, they'll be found when we return to it, - // and the whole call to HasRequiredFields() will return true. - // Therefore, we don't have to check if this type has required fields - // here. - return false; - } - alreadySeen[descriptor] = descriptor; // Value is irrelevant - - // If the type has extensions, an extension with message type could contain - // required fields, so we have to be conservative and assume such an - // extension exists. - if (descriptor.Extensions.Count > 0) - { - return true; - } - - foreach (FieldDescriptor field in descriptor.Fields) - { - if (field.IsRequired) - { - return true; - } - // Message or group - if (field.MappedType == MappedType.Message) - { - if (HasRequiredFields(field.MessageType, alreadySeen)) - { - return true; - } - } - } - return false; - } - - private void GenerateBuilder(TextGenerator writer) - { - writer.WriteLine("private {0} MakeReadOnly() {{", ClassName); - writer.Indent(); - foreach (FieldDescriptor field in Descriptor.Fields) - { - CreateFieldGenerator(field).GenerateBuildingCode(writer); - } - writer.WriteLine("return this;"); - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine(); - - writer.WriteLine("public static Builder CreateBuilder() { return new Builder(); }"); - writer.WriteLine("public override Builder ToBuilder() { return CreateBuilder(this); }"); - writer.WriteLine("public override Builder CreateBuilderForType() { return new Builder(); }"); - writer.WriteLine("public static Builder CreateBuilder({0} prototype) {{", ClassName); - writer.WriteLine(" return new Builder(prototype);"); - writer.WriteLine("}"); - writer.WriteLine(); - if (Descriptor.File.CSharpOptions.AddSerializable) - { - writer.WriteLine("[global::System.SerializableAttribute()]"); - } - writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); - writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); - writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", - GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); - writer.WriteLine("{0} sealed partial class Builder : pb::{2}Builder{3}<{1}, Builder> {{", - ClassAccessLevel, ClassName, - Descriptor.Proto.ExtensionRangeCount > 0 ? "Extendable" : "Generated", RuntimeSuffix); - writer.Indent(); - writer.WriteLine("protected override Builder ThisBuilder {"); - writer.WriteLine(" get { return this; }"); - writer.WriteLine("}"); - GenerateCommonBuilderMethods(writer); - if (OptimizeSpeed) - { - GenerateBuilderParsingMethods(writer); - } - foreach (FieldDescriptor field in Descriptor.Fields) - { - writer.WriteLine(); - // No field comment :( - CreateFieldGenerator(field).GenerateBuilderMembers(writer); - } - writer.Outdent(); - writer.WriteLine("}"); - } - - private void GenerateCommonBuilderMethods(TextGenerator writer) - { - //default constructor - writer.WriteLine("public Builder() {"); - //Durring static initialization of message, DefaultInstance is expected to return null. - writer.WriteLine(" result = DefaultInstance;"); - writer.WriteLine(" resultIsReadOnly = true;"); - writer.WriteLine("}"); - //clone constructor - writer.WriteLine("internal Builder({0} cloneFrom) {{", ClassName); - writer.WriteLine(" result = cloneFrom;"); - writer.WriteLine(" resultIsReadOnly = true;"); - writer.WriteLine("}"); - writer.WriteLine(); - writer.WriteLine("private bool resultIsReadOnly;"); - writer.WriteLine("private {0} result;", ClassName); - writer.WriteLine(); - writer.WriteLine("private {0} PrepareBuilder() {{", ClassName); - writer.WriteLine(" if (resultIsReadOnly) {"); - writer.WriteLine(" {0} original = result;", ClassName); - writer.WriteLine(" result = new {0}();", ClassName); - writer.WriteLine(" resultIsReadOnly = false;"); - writer.WriteLine(" MergeFrom(original);"); - writer.WriteLine(" }"); - writer.WriteLine(" return result;"); - writer.WriteLine("}"); - writer.WriteLine(); - writer.WriteLine("public override bool IsInitialized {"); - writer.WriteLine(" get { return result.IsInitialized; }"); - writer.WriteLine("}"); - writer.WriteLine(); - writer.WriteLine("protected override {0} MessageBeingBuilt {{", ClassName); - writer.WriteLine(" get { return PrepareBuilder(); }"); - writer.WriteLine("}"); - writer.WriteLine(); - //Not actually expecting that DefaultInstance would ever be null here; however, we will ensure it does not break - writer.WriteLine("public override Builder Clear() {"); - writer.WriteLine(" result = DefaultInstance;", ClassName); - writer.WriteLine(" resultIsReadOnly = true;"); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - writer.WriteLine(); - writer.WriteLine("public override Builder Clone() {"); - writer.WriteLine(" if (resultIsReadOnly) {"); - writer.WriteLine(" return new Builder(result);"); - writer.WriteLine(" } else {"); - writer.WriteLine(" return new Builder().MergeFrom(result);"); - writer.WriteLine(" }"); - writer.WriteLine("}"); - writer.WriteLine(); - if (!UseLiteRuntime) - { - writer.WriteLine("public override pbd::MessageDescriptor DescriptorForType {"); - writer.WriteLine(" get {{ return {0}.Descriptor; }}", FullClassName); - writer.WriteLine("}"); - writer.WriteLine(); - } - writer.WriteLine("public override {0} DefaultInstanceForType {{", ClassName); - writer.WriteLine(" get {{ return {0}.DefaultInstance; }}", FullClassName); - writer.WriteLine("}"); - writer.WriteLine(); - - writer.WriteLine("public override {0} BuildPartial() {{", ClassName); - writer.Indent(); - writer.WriteLine("if (resultIsReadOnly) {"); - writer.WriteLine(" return result;"); - writer.WriteLine("}"); - writer.WriteLine("resultIsReadOnly = true;"); - writer.WriteLine("return result.MakeReadOnly();"); - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine(); - - if (OptimizeSpeed) - { - writer.WriteLine("public override Builder MergeFrom(pb::IMessage{0} other) {{", RuntimeSuffix); - writer.WriteLine(" if (other is {0}) {{", ClassName); - writer.WriteLine(" return MergeFrom(({0}) other);", ClassName); - writer.WriteLine(" } else {"); - writer.WriteLine(" base.MergeFrom(other);"); - writer.WriteLine(" return this;"); - writer.WriteLine(" }"); - writer.WriteLine("}"); - writer.WriteLine(); - writer.WriteLine("public override Builder MergeFrom({0} other) {{", ClassName); - // Optimization: If other is the default instance, we know none of its - // fields are set so we can skip the merge. - writer.Indent(); - writer.WriteLine("if (other == {0}.DefaultInstance) return this;", FullClassName); - writer.WriteLine("PrepareBuilder();"); - foreach (FieldDescriptor field in Descriptor.Fields) - { - CreateFieldGenerator(field).GenerateMergingCode(writer); - } - // if message type has extensions - if (Descriptor.Proto.ExtensionRangeCount > 0) - { - writer.WriteLine(" this.MergeExtensionFields(other);"); - } - if (!UseLiteRuntime) - { - writer.WriteLine("this.MergeUnknownFields(other.UnknownFields);"); - } - writer.WriteLine("return this;"); - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine(); - } - } - - private void GenerateBuilderParsingMethods(TextGenerator writer) - { - List sortedFields = new List(Descriptor.Fields); - sortedFields.Sort((f1, f2) => f1.FieldNumber.CompareTo(f2.FieldNumber)); - - writer.WriteLine("public override Builder MergeFrom(pb::ICodedInputStream input) {"); - writer.WriteLine(" return MergeFrom(input, pb::ExtensionRegistry.Empty);"); - writer.WriteLine("}"); - writer.WriteLine(); - writer.WriteLine( - "public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {"); - writer.Indent(); - writer.WriteLine("PrepareBuilder();"); - if (!UseLiteRuntime) - { - writer.WriteLine("pb::UnknownFieldSet.Builder unknownFields = null;"); - } - writer.WriteLine("uint tag;"); - writer.WriteLine("string field_name;"); - writer.WriteLine("while (input.ReadTag(out tag, out field_name)) {"); - writer.Indent(); - writer.WriteLine("if(tag == 0 && field_name != null) {"); - writer.Indent(); - //if you change from StringComparer.Ordinal, the array sort in FieldNames { get; } must also change - writer.WriteLine( - "int field_ordinal = global::System.Array.BinarySearch(_{0}FieldNames, field_name, global::System.StringComparer.Ordinal);", - NameHelpers.UnderscoresToCamelCase(ClassName)); - writer.WriteLine("if(field_ordinal >= 0)"); - writer.WriteLine(" tag = _{0}FieldTags[field_ordinal];", NameHelpers.UnderscoresToCamelCase(ClassName)); - writer.WriteLine("else {"); - if (!UseLiteRuntime) - { - writer.WriteLine(" if (unknownFields == null) {"); // First unknown field - create builder now - writer.WriteLine(" unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);"); - writer.WriteLine(" }"); - } - writer.WriteLine(" ParseUnknownField(input, {0}extensionRegistry, tag, field_name);", - UseLiteRuntime ? "" : "unknownFields, "); - writer.WriteLine(" continue;"); - writer.WriteLine("}"); - writer.Outdent(); - writer.WriteLine("}"); - - writer.WriteLine("switch (tag) {"); - writer.Indent(); - writer.WriteLine("case 0: {"); // 0 signals EOF / limit reached - writer.WriteLine(" throw pb::InvalidProtocolBufferException.InvalidTag();"); - writer.WriteLine("}"); - writer.WriteLine("default: {"); - writer.WriteLine(" if (pb::WireFormat.IsEndGroupTag(tag)) {"); - if (!UseLiteRuntime) - { - writer.WriteLine(" if (unknownFields != null) {"); - writer.WriteLine(" this.UnknownFields = unknownFields.Build();"); - writer.WriteLine(" }"); - } - writer.WriteLine(" return this;"); // it's an endgroup tag - writer.WriteLine(" }"); - if (!UseLiteRuntime) - { - writer.WriteLine(" if (unknownFields == null) {"); // First unknown field - create builder now - writer.WriteLine(" unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);"); - writer.WriteLine(" }"); - } - writer.WriteLine(" ParseUnknownField(input, {0}extensionRegistry, tag, field_name);", - UseLiteRuntime ? "" : "unknownFields, "); - writer.WriteLine(" break;"); - writer.WriteLine("}"); - foreach (FieldDescriptor field in sortedFields) - { - WireFormat.WireType wt = WireFormat.GetWireType(field.FieldType); - uint tag = WireFormat.MakeTag(field.FieldNumber, wt); - - if (field.IsRepeated && - (wt == WireFormat.WireType.Varint || wt == WireFormat.WireType.Fixed32 || - wt == WireFormat.WireType.Fixed64)) - { - writer.WriteLine("case {0}:", - WireFormat.MakeTag(field.FieldNumber, WireFormat.WireType.LengthDelimited)); - } - - writer.WriteLine("case {0}: {{", tag); - writer.Indent(); - CreateFieldGenerator(field).GenerateParsingCode(writer); - writer.WriteLine("break;"); - writer.Outdent(); - writer.WriteLine("}"); - } - writer.Outdent(); - writer.WriteLine("}"); - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine(); - if (!UseLiteRuntime) - { - writer.WriteLine("if (unknownFields != null) {"); - writer.WriteLine(" this.UnknownFields = unknownFields.Build();"); - writer.WriteLine("}"); - } - writer.WriteLine("return this;"); - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine(); - } - - private void GenerateIsInitialized(TextGenerator writer) - { - writer.WriteLine("public override bool IsInitialized {"); - writer.Indent(); - writer.WriteLine("get {"); - writer.Indent(); - - // Check that all required fields in this message are set. - // TODO(kenton): We can optimize this when we switch to putting all the - // "has" fields into a single bitfield. - foreach (FieldDescriptor field in Descriptor.Fields) - { - if (field.IsRequired) - { - writer.WriteLine("if (!has{0}) return false;", field.CSharpOptions.PropertyName); - } - } - - // Now check that all embedded messages are initialized. - foreach (FieldDescriptor field in Descriptor.Fields) - { - if (field.FieldType != FieldType.Message || - !HasRequiredFields(field.MessageType, new Dictionary())) - { - continue; - } - string propertyName = NameHelpers.UnderscoresToPascalCase(GetFieldName(field)); - if (field.IsRepeated) - { - writer.WriteLine("foreach ({0} element in {1}List) {{", GetClassName(field.MessageType), - propertyName); - writer.WriteLine(" if (!element.IsInitialized) return false;"); - writer.WriteLine("}"); - } - else if (field.IsOptional) - { - writer.WriteLine("if (Has{0}) {{", propertyName); - writer.WriteLine(" if (!{0}.IsInitialized) return false;", propertyName); - writer.WriteLine("}"); - } - else - { - writer.WriteLine("if (!{0}.IsInitialized) return false;", propertyName); - } - } - - if (Descriptor.Proto.ExtensionRangeCount > 0) - { - writer.WriteLine("if (!ExtensionsAreInitialized) return false;"); - } - writer.WriteLine("return true;"); - writer.Outdent(); - writer.WriteLine("}"); - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine(); - } - - internal void GenerateExtensionRegistrationCode(TextGenerator writer) - { - foreach (FieldDescriptor extension in Descriptor.Extensions) - { - new ExtensionGenerator(extension).GenerateExtensionRegistrationCode(writer); - } - foreach (MessageDescriptor nestedMessage in Descriptor.NestedTypes) - { - new MessageGenerator(nestedMessage).GenerateExtensionRegistrationCode(writer); - } - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/PrimitiveFieldGenerator.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/PrimitiveFieldGenerator.cs deleted file mode 100644 index 69e0d4d933..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/PrimitiveFieldGenerator.cs +++ /dev/null @@ -1,140 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using Google.ProtocolBuffers.Descriptors; - -namespace Google.ProtocolBuffers.ProtoGen -{ - // TODO(jonskeet): Refactor this. There's loads of common code here. - internal class PrimitiveFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator - { - internal PrimitiveFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal) - : base(descriptor, fieldOrdinal) - { - } - - public void GenerateMembers(TextGenerator writer) - { - writer.WriteLine("private bool has{0};", PropertyName); - writer.WriteLine("private {0} {1}_{2};", TypeName, Name, HasDefaultValue ? " = " + DefaultValue : ""); - AddDeprecatedFlag(writer); - writer.WriteLine("public bool Has{0} {{", PropertyName); - writer.WriteLine(" get {{ return has{0}; }}", PropertyName); - writer.WriteLine("}"); - AddPublicMemberAttributes(writer); - writer.WriteLine("public {0} {1} {{", TypeName, PropertyName); - writer.WriteLine(" get {{ return {0}_; }}", Name); - writer.WriteLine("}"); - } - - public void GenerateBuilderMembers(TextGenerator writer) - { - AddDeprecatedFlag(writer); - writer.WriteLine("public bool Has{0} {{", PropertyName); - writer.WriteLine(" get {{ return result.has{0}; }}", PropertyName); - writer.WriteLine("}"); - AddPublicMemberAttributes(writer); - writer.WriteLine("public {0} {1} {{", TypeName, PropertyName); - writer.WriteLine(" get {{ return result.{0}; }}", PropertyName); - writer.WriteLine(" set {{ Set{0}(value); }}", PropertyName); - writer.WriteLine("}"); - AddPublicMemberAttributes(writer); - writer.WriteLine("public Builder Set{0}({1} value) {{", PropertyName, TypeName); - AddNullCheck(writer); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.has{0} = true;", PropertyName); - writer.WriteLine(" result.{0}_ = value;", Name); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public Builder Clear{0}() {{", PropertyName); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.has{0} = false;", PropertyName); - writer.WriteLine(" result.{0}_ = {1};", Name, DefaultValue); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - } - - public void GenerateMergingCode(TextGenerator writer) - { - writer.WriteLine("if (other.Has{0}) {{", PropertyName); - writer.WriteLine(" {0} = other.{0};", PropertyName); - writer.WriteLine("}"); - } - - public void GenerateBuildingCode(TextGenerator writer) - { - // Nothing to do here for primitive types - } - - public void GenerateParsingCode(TextGenerator writer) - { - writer.WriteLine("result.has{0} = input.Read{1}(ref result.{2}_);", PropertyName, CapitalizedTypeName, Name); - } - - public void GenerateSerializationCode(TextGenerator writer) - { - writer.WriteLine("if (has{0}) {{", PropertyName); - writer.WriteLine(" output.Write{0}({1}, field_names[{3}], {2});", CapitalizedTypeName, Number, PropertyName, - FieldOrdinal); - writer.WriteLine("}"); - } - - public void GenerateSerializedSizeCode(TextGenerator writer) - { - writer.WriteLine("if (has{0}) {{", PropertyName); - writer.WriteLine(" size += pb::CodedOutputStream.Compute{0}Size({1}, {2});", - CapitalizedTypeName, Number, PropertyName); - writer.WriteLine("}"); - } - - public override void WriteHash(TextGenerator writer) - { - writer.WriteLine("if (has{0}) hash ^= {1}_.GetHashCode();", PropertyName, Name); - } - - public override void WriteEquals(TextGenerator writer) - { - writer.WriteLine("if (has{0} != other.has{0} || (has{0} && !{1}_.Equals(other.{1}_))) return false;", - PropertyName, Name); - } - - public override void WriteToString(TextGenerator writer) - { - writer.WriteLine("PrintField(\"{0}\", has{1}, {2}_, writer);", Descriptor.Name, PropertyName, Name); - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/Program.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/Program.cs deleted file mode 100644 index 4bd6c46316..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/Program.cs +++ /dev/null @@ -1,78 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using System; -using System.Collections.Generic; -using Google.ProtocolBuffers.DescriptorProtos; - -namespace Google.ProtocolBuffers.ProtoGen -{ - /// - /// Entry point for the Protocol Buffers generator. - /// - internal class Program - { - internal static int Main(string[] args) - { - try - { - // Hack to make sure everything's initialized - DescriptorProtoFile.Descriptor.ToString(); - GeneratorOptions options = new GeneratorOptions {Arguments = args}; - - IList validationFailures; - if (!options.TryValidate(out validationFailures)) - { - // We've already got the message-building logic in the exception... - InvalidOptionsException exception = new InvalidOptionsException(validationFailures); - Console.WriteLine(exception.Message); - return 1; - } - - Generator generator = Generator.CreateGenerator(options); - generator.Generate(); - return 0; - } - catch (Exception e) - { - Console.Error.WriteLine("Error: {0}", e.Message); - Console.Error.WriteLine(); - Console.Error.WriteLine("Detailed exception information: {0}", e); - return 1; - } - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProgramPreprocess.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProgramPreprocess.cs deleted file mode 100644 index 011035eb46..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProgramPreprocess.cs +++ /dev/null @@ -1,256 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; - -namespace Google.ProtocolBuffers.ProtoGen -{ - /// - /// Preprocesses any input files with an extension of '.proto' by running protoc.exe. If arguments - /// are supplied with '--' prefix they are provided to protoc.exe, otherwise they are assumed to - /// be used for ProtoGen.exe which is run on the resulting output proto buffer. If the option - /// --descriptor_set_out= is specified the proto buffer file is kept, otherwise it will be removed - /// after code generation. - /// - public class ProgramPreprocess - { - private const string ProtocExecutable = "protoc.exe"; - private const string ProtocDirectoryArg = "--protoc_dir="; - - private static int Main(string[] args) - { - try - { - return Environment.ExitCode = Run(args); - } - catch (Exception ex) - { - Console.Error.WriteLine(ex); - return Environment.ExitCode = 2; - } - } - - public static int Run(params string[] args) - { - bool deleteFile = false; - string tempFile = null; - int result; - bool doHelp = args.Length == 0; - try - { - List protocArgs = new List(); - List protoGenArgs = new List(); - - string protocFile = GuessProtocFile(args); - - foreach (string arg in args) - { - doHelp |= StringComparer.OrdinalIgnoreCase.Equals(arg, "/?"); - doHelp |= StringComparer.OrdinalIgnoreCase.Equals(arg, "/help"); - doHelp |= StringComparer.OrdinalIgnoreCase.Equals(arg, "-?"); - doHelp |= StringComparer.OrdinalIgnoreCase.Equals(arg, "-help"); - - if (arg.StartsWith("--descriptor_set_out=")) - { - tempFile = arg.Substring("--descriptor_set_out=".Length); - protoGenArgs.Add(tempFile); - } - } - - if (doHelp) - { - Console.WriteLine(); - Console.WriteLine("PROTOC.exe: Use any of the following options that begin with '--':"); - Console.WriteLine(); - try - { - RunProtoc(protocFile, "--help"); - } - catch (Exception ex) - { - Console.Error.WriteLine(ex.Message); - } - Console.WriteLine(); - Console.WriteLine(); - Console.WriteLine( - "PROTOGEN.exe: The following options are used to specify defaults for code generation."); - Console.WriteLine(); - Program.Main(new string[0]); - Console.WriteLine(); - Console.WriteLine("The following option enables PROTOGEN.exe to find PROTOC.exe"); - Console.WriteLine("{0}", ProtocDirectoryArg); - return 0; - } - - foreach (string arg in args) - { - if (arg.StartsWith(ProtocDirectoryArg)) - { - // Handled earlier - continue; - } - if (arg.StartsWith("--")) - { - protocArgs.Add(arg); - } - else if (File.Exists(arg) && - StringComparer.OrdinalIgnoreCase.Equals(".proto", Path.GetExtension(arg))) - { - if (tempFile == null) - { - deleteFile = true; - tempFile = Path.GetTempFileName(); - protocArgs.Add(String.Format("--descriptor_set_out={0}", tempFile)); - protoGenArgs.Add(tempFile); - } - protocArgs.Add(arg); - } - else - { - protoGenArgs.Add(arg); - } - } - - if (tempFile != null) - { - result = RunProtoc(protocFile, protocArgs.ToArray()); - if (result != 0) - { - return result; - } - } - - result = Program.Main(protoGenArgs.ToArray()); - } - finally - { - if (deleteFile && tempFile != null && File.Exists(tempFile)) - { - File.Delete(tempFile); - } - } - return result; - } - - /// - /// Tries to work out where protoc is based on command line arguments, the current - /// directory, the directory containing protogen, and the path. - /// - /// The path to protoc.exe, or null if it can't be found. - private static string GuessProtocFile(params string[] args) - { - // Why oh why is this not in System.IO.Path or Environment...? - List searchPath = new List(); - foreach (string arg in args) - { - if (arg.StartsWith("--protoc_dir=")) - { - searchPath.Add(arg.Substring(ProtocDirectoryArg.Length)); - } - } - searchPath.Add(Environment.CurrentDirectory); - searchPath.Add(AppDomain.CurrentDomain.BaseDirectory); - searchPath.AddRange((Environment.GetEnvironmentVariable("PATH") ?? String.Empty).Split(Path.PathSeparator)); - - foreach (string path in searchPath) - { - string exeFile = Path.Combine(path, ProtocExecutable); - if (File.Exists(exeFile)) - { - return exeFile; - } - } - return null; - } - - private static int RunProtoc(string exeFile, params string[] args) - { - if (exeFile == null) - { - throw new FileNotFoundException( - "Unable to locate " + ProtocExecutable + - " make sure it is in the PATH, cwd, or exe dir, or use --protoc_dir=..."); - } - - ProcessStartInfo psi = new ProcessStartInfo(exeFile); - psi.Arguments = EscapeArguments(args); - psi.RedirectStandardError = true; - psi.RedirectStandardInput = false; - psi.RedirectStandardOutput = true; - psi.ErrorDialog = false; - psi.CreateNoWindow = true; - psi.UseShellExecute = false; - psi.WorkingDirectory = Environment.CurrentDirectory; - - Process process = Process.Start(psi); - if (process == null) - { - return 1; - } - - process.WaitForExit(); - - string tmp = process.StandardOutput.ReadToEnd(); - if (tmp.Trim().Length > 0) - { - Console.Out.WriteLine(tmp); - } - tmp = process.StandardError.ReadToEnd(); - if (tmp.Trim().Length > 0) - { - Console.Error.WriteLine(tmp); - } - return process.ExitCode; - } - - /// - /// Quotes all arguments that contain whitespace, or begin with a quote and returns a single - /// argument string for use with Process.Start(). - /// - /// http://csharptest.net/?p=529 - /// A list of strings for arguments, may not contain null, '\0', '\r', or '\n' - /// The combined list of escaped/quoted strings - /// Raised when one of the arguments is null - /// Raised if an argument contains '\0', '\r', or '\n' - public static string EscapeArguments(params string[] args) - { - StringBuilder arguments = new StringBuilder(); - Regex invalidChar = new Regex("[\x00\x0a\x0d]");// these can not be escaped - Regex needsQuotes = new Regex(@"\s|""");// contains whitespace or two quote characters - Regex escapeQuote = new Regex(@"(\\*)(""|$)");// one or more '\' followed with a quote or end of string - for (int carg = 0; args != null && carg < args.Length; carg++) - { - if (args[carg] == null) - { - throw new ArgumentNullException("args[" + carg + "]"); - } - if (invalidChar.IsMatch(args[carg])) - { - throw new ArgumentOutOfRangeException("args[" + carg + "]"); - } - if (args[carg] == String.Empty) - { - arguments.Append("\"\""); - } - else if (!needsQuotes.IsMatch(args[carg])) { arguments.Append(args[carg]); } - else - { - arguments.Append('"'); - arguments.Append(escapeQuote.Replace(args[carg], - m => - m.Groups[1].Value + m.Groups[1].Value + - (m.Groups[2].Value == "\"" ? "\\\"" : "") - )); - arguments.Append('"'); - } - if (carg + 1 < args.Length) - { - arguments.Append(' '); - } - } - return arguments.ToString(); - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/Properties/AssemblyInfo.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/Properties/AssemblyInfo.cs deleted file mode 100644 index 2a20b0f655..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("ProtoGen")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ProtoGen")] -[assembly: AssemblyCopyright("Copyright © 2008")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. - -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM - -[assembly: Guid("7101763b-7a38-41be-87f5-7ede4c554509")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("2.4.1.473")] - -[assembly: AssemblyVersion("2.4.1.473")] -[assembly: AssemblyFileVersion("2.4.1.473")] \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProtoGen-2.4.1.473.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProtoGen-2.4.1.473.csproj deleted file mode 100644 index e06a56e0d8..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ProtoGen-2.4.1.473.csproj +++ /dev/null @@ -1,189 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {250ADE34-82FD-4BAE-86D5-985FBE589C4A} - Exe - Properties - Google.ProtocolBuffers.ProtoGen - ProtoGen - v4.7.2 - 512 - true - ..\..\keys\Google.ProtocolBuffers.snk - - - - - 3.5 - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - Google.ProtocolBuffers.ProtoGen.ProgramPreprocess - - - - true - full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false - - - pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - - - true - $(SolutionDir)\bin\ - DEBUG;TRACE - full - x64 - bin\Debug\ProtoGen-2.4.1.473.exe.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - AllRules.ruleset - true - true - false - - - $(SolutionDir)\bin\ - TRACE - true - pdbonly - x64 - bin\Release\ProtoGen-2.4.1.473.exe.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - AllRules.ruleset - true - true - false - - - true - $(SolutionDir)\bin\ - DEBUG;TRACE - full - x86 - bin\Debug\ProtoGen-2.4.1.473.exe.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - AllRules.ruleset - true - true - false - - - $(SolutionDir)\bin\ - TRACE - true - pdbonly - x86 - bin\Release\ProtoGen-2.4.1.473.exe.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - AllRules.ruleset - true - true - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - {6908BDCE-D925-43F3-94AC-A531E6DF2591} - ProtocolBuffers-2.4.1.473 - - - - - \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/RepeatedEnumFieldGenerator.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/RepeatedEnumFieldGenerator.cs deleted file mode 100644 index 8c9f17b8dc..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/RepeatedEnumFieldGenerator.cs +++ /dev/null @@ -1,212 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using Google.ProtocolBuffers.Descriptors; - -namespace Google.ProtocolBuffers.ProtoGen -{ - internal class RepeatedEnumFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator - { - internal RepeatedEnumFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal) - : base(descriptor, fieldOrdinal) - { - } - - public void GenerateMembers(TextGenerator writer) - { - if (Descriptor.IsPacked && OptimizeSpeed) - { - writer.WriteLine("private int {0}MemoizedSerializedSize;", Name); - } - writer.WriteLine("private pbc::PopsicleList<{0}> {1}_ = new pbc::PopsicleList<{0}>();", TypeName, Name); - AddDeprecatedFlag(writer); - writer.WriteLine("public scg::IList<{0}> {1}List {{", TypeName, PropertyName); - writer.WriteLine(" get {{ return pbc::Lists.AsReadOnly({0}_); }}", Name); - writer.WriteLine("}"); - - // TODO(jonskeet): Redundant API calls? Possibly - include for portability though. Maybe create an option. - AddDeprecatedFlag(writer); - writer.WriteLine("public int {0}Count {{", PropertyName); - writer.WriteLine(" get {{ return {0}_.Count; }}", Name); - writer.WriteLine("}"); - - AddDeprecatedFlag(writer); - writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName); - writer.WriteLine(" return {0}_[index];", Name); - writer.WriteLine("}"); - } - - public void GenerateBuilderMembers(TextGenerator writer) - { - // Note: We can return the original list here, because we make it unmodifiable when we build - // We return it via IPopsicleList so that collection initializers work more pleasantly. - AddDeprecatedFlag(writer); - writer.WriteLine("public pbc::IPopsicleList<{0}> {1}List {{", TypeName, PropertyName); - writer.WriteLine(" get {{ return PrepareBuilder().{0}_; }}", Name); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public int {0}Count {{", PropertyName); - writer.WriteLine(" get {{ return result.{0}Count; }}", PropertyName); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName); - writer.WriteLine(" return result.Get{0}(index);", PropertyName); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public Builder Set{0}(int index, {1} value) {{", PropertyName, TypeName); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.{0}_[index] = value;", Name); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public Builder Add{0}({1} value) {{", PropertyName, TypeName); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.{0}_.Add(value);", Name, TypeName); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public Builder AddRange{0}(scg::IEnumerable<{1}> values) {{", PropertyName, TypeName); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.{0}_.Add(values);", Name); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public Builder Clear{0}() {{", PropertyName); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.{0}_.Clear();", Name); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - } - - public void GenerateMergingCode(TextGenerator writer) - { - writer.WriteLine("if (other.{0}_.Count != 0) {{", Name); - writer.WriteLine(" result.{0}_.Add(other.{0}_);", Name); - writer.WriteLine("}"); - } - - public void GenerateBuildingCode(TextGenerator writer) - { - writer.WriteLine("{0}_.MakeReadOnly();", Name); - } - - public void GenerateParsingCode(TextGenerator writer) - { - writer.WriteLine("scg::ICollection unknownItems;"); - writer.WriteLine("input.ReadEnumArray<{0}>(tag, field_name, result.{1}_, out unknownItems);", TypeName, Name); - if (!UseLiteRuntime) - { - writer.WriteLine("if (unknownItems != null) {"); - writer.WriteLine(" if (unknownFields == null) {"); - writer.WriteLine(" unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);"); - writer.WriteLine(" }"); - writer.WriteLine(" foreach (object rawValue in unknownItems)"); - writer.WriteLine(" if (rawValue is int)"); - writer.WriteLine(" unknownFields.MergeVarintField({0}, (ulong)(int)rawValue);", Number); - writer.WriteLine("}"); - } - } - - public void GenerateSerializationCode(TextGenerator writer) - { - writer.WriteLine("if ({0}_.Count > 0) {{", Name); - writer.Indent(); - if (Descriptor.IsPacked) - { - writer.WriteLine( - "output.WritePackedEnumArray({0}, field_names[{2}], {1}MemoizedSerializedSize, {1}_);", Number, Name, - FieldOrdinal, Descriptor.FieldType); - } - else - { - writer.WriteLine("output.WriteEnumArray({0}, field_names[{2}], {1}_);", Number, Name, FieldOrdinal, - Descriptor.FieldType); - } - writer.Outdent(); - writer.WriteLine("}"); - } - - public void GenerateSerializedSizeCode(TextGenerator writer) - { - writer.WriteLine("{"); - writer.Indent(); - writer.WriteLine("int dataSize = 0;"); - writer.WriteLine("if ({0}_.Count > 0) {{", Name); - writer.Indent(); - writer.WriteLine("foreach ({0} element in {1}_) {{", TypeName, Name); - writer.WriteLine(" dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);"); - writer.WriteLine("}"); - writer.WriteLine("size += dataSize;"); - int tagSize = CodedOutputStream.ComputeTagSize(Descriptor.FieldNumber); - if (Descriptor.IsPacked) - { - writer.WriteLine("size += {0};", tagSize); - writer.WriteLine("size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);"); - } - else - { - writer.WriteLine("size += {0} * {1}_.Count;", tagSize, Name); - } - writer.Outdent(); - writer.WriteLine("}"); - // cache the data size for packed fields. - if (Descriptor.IsPacked) - { - writer.WriteLine("{0}MemoizedSerializedSize = dataSize;", Name); - } - writer.Outdent(); - writer.WriteLine("}"); - } - - public override void WriteHash(TextGenerator writer) - { - writer.WriteLine("foreach({0} i in {1}_)", TypeName, Name); - writer.WriteLine(" hash ^= i.GetHashCode();"); - } - - public override void WriteEquals(TextGenerator writer) - { - writer.WriteLine("if({0}_.Count != other.{0}_.Count) return false;", Name); - writer.WriteLine("for(int ix=0; ix < {0}_.Count; ix++)", Name); - writer.WriteLine(" if(!{0}_[ix].Equals(other.{0}_[ix])) return false;", Name); - } - - public override void WriteToString(TextGenerator writer) - { - writer.WriteLine("PrintField(\"{0}\", {1}_, writer);", Descriptor.Name, Name); - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/RepeatedMessageFieldGenerator.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/RepeatedMessageFieldGenerator.cs deleted file mode 100644 index a9a0143ca8..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/RepeatedMessageFieldGenerator.cs +++ /dev/null @@ -1,184 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using Google.ProtocolBuffers.Descriptors; - -namespace Google.ProtocolBuffers.ProtoGen -{ - internal class RepeatedMessageFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator - { - internal RepeatedMessageFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal) - : base(descriptor, fieldOrdinal) - { - } - - public void GenerateMembers(TextGenerator writer) - { - writer.WriteLine("private pbc::PopsicleList<{0}> {1}_ = new pbc::PopsicleList<{0}>();", TypeName, Name); - AddDeprecatedFlag(writer); - writer.WriteLine("public scg::IList<{0}> {1}List {{", TypeName, PropertyName); - writer.WriteLine(" get {{ return {0}_; }}", Name); - writer.WriteLine("}"); - - // TODO(jonskeet): Redundant API calls? Possibly - include for portability though. Maybe create an option. - AddDeprecatedFlag(writer); - writer.WriteLine("public int {0}Count {{", PropertyName); - writer.WriteLine(" get {{ return {0}_.Count; }}", Name); - writer.WriteLine("}"); - - AddDeprecatedFlag(writer); - writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName); - writer.WriteLine(" return {0}_[index];", Name); - writer.WriteLine("}"); - } - - public void GenerateBuilderMembers(TextGenerator writer) - { - // Note: We can return the original list here, because we make it unmodifiable when we build - // We return it via IPopsicleList so that collection initializers work more pleasantly. - AddDeprecatedFlag(writer); - writer.WriteLine("public pbc::IPopsicleList<{0}> {1}List {{", TypeName, PropertyName); - writer.WriteLine(" get {{ return PrepareBuilder().{0}_; }}", Name); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public int {0}Count {{", PropertyName); - writer.WriteLine(" get {{ return result.{0}Count; }}", PropertyName); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName); - writer.WriteLine(" return result.Get{0}(index);", PropertyName); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public Builder Set{0}(int index, {1} value) {{", PropertyName, TypeName); - AddNullCheck(writer); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.{0}_[index] = value;", Name); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - // Extra overload for builder (just on messages) - AddDeprecatedFlag(writer); - writer.WriteLine("public Builder Set{0}(int index, {1}.Builder builderForValue) {{", PropertyName, TypeName); - AddNullCheck(writer, "builderForValue"); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.{0}_[index] = builderForValue.Build();", Name); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public Builder Add{0}({1} value) {{", PropertyName, TypeName); - AddNullCheck(writer); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.{0}_.Add(value);", Name, TypeName); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - // Extra overload for builder (just on messages) - AddDeprecatedFlag(writer); - writer.WriteLine("public Builder Add{0}({1}.Builder builderForValue) {{", PropertyName, TypeName); - AddNullCheck(writer, "builderForValue"); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.{0}_.Add(builderForValue.Build());", Name); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public Builder AddRange{0}(scg::IEnumerable<{1}> values) {{", PropertyName, TypeName); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.{0}_.Add(values);", Name); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public Builder Clear{0}() {{", PropertyName); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.{0}_.Clear();", Name); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - } - - public void GenerateMergingCode(TextGenerator writer) - { - writer.WriteLine("if (other.{0}_.Count != 0) {{", Name); - writer.WriteLine(" result.{0}_.Add(other.{0}_);", Name); - writer.WriteLine("}"); - } - - public void GenerateBuildingCode(TextGenerator writer) - { - writer.WriteLine("{0}_.MakeReadOnly();", Name); - } - - public void GenerateParsingCode(TextGenerator writer) - { - writer.WriteLine( - "input.Read{0}Array(tag, field_name, result.{1}_, {2}.DefaultInstance, extensionRegistry);", - MessageOrGroup, Name, TypeName); - } - - public void GenerateSerializationCode(TextGenerator writer) - { - writer.WriteLine("if ({0}_.Count > 0) {{", Name); - writer.Indent(); - writer.WriteLine("output.Write{0}Array({1}, field_names[{3}], {2}_);", MessageOrGroup, Number, Name, - FieldOrdinal, Descriptor.FieldType); - writer.Outdent(); - writer.WriteLine("}"); - } - - public void GenerateSerializedSizeCode(TextGenerator writer) - { - writer.WriteLine("foreach ({0} element in {1}List) {{", TypeName, PropertyName); - writer.WriteLine(" size += pb::CodedOutputStream.Compute{0}Size({1}, element);", MessageOrGroup, Number); - writer.WriteLine("}"); - } - - public override void WriteHash(TextGenerator writer) - { - writer.WriteLine("foreach({0} i in {1}_)", TypeName, Name); - writer.WriteLine(" hash ^= i.GetHashCode();"); - } - - public override void WriteEquals(TextGenerator writer) - { - writer.WriteLine("if({0}_.Count != other.{0}_.Count) return false;", Name); - writer.WriteLine("for(int ix=0; ix < {0}_.Count; ix++)", Name); - writer.WriteLine(" if(!{0}_[ix].Equals(other.{0}_[ix])) return false;", Name); - } - - public override void WriteToString(TextGenerator writer) - { - writer.WriteLine("PrintField(\"{0}\", {1}_, writer);", - Descriptor.FieldType == FieldType.Group ? Descriptor.MessageType.Name : Descriptor.Name, - Name); - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/RepeatedPrimitiveFieldGenerator.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/RepeatedPrimitiveFieldGenerator.cs deleted file mode 100644 index b795f3b64f..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/RepeatedPrimitiveFieldGenerator.cs +++ /dev/null @@ -1,207 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using Google.ProtocolBuffers.Descriptors; - -namespace Google.ProtocolBuffers.ProtoGen -{ - internal class RepeatedPrimitiveFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator - { - internal RepeatedPrimitiveFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal) - : base(descriptor, fieldOrdinal) - { - } - - public void GenerateMembers(TextGenerator writer) - { - if (Descriptor.IsPacked && OptimizeSpeed) - { - writer.WriteLine("private int {0}MemoizedSerializedSize;", Name); - } - writer.WriteLine("private pbc::PopsicleList<{0}> {1}_ = new pbc::PopsicleList<{0}>();", TypeName, Name); - AddPublicMemberAttributes(writer); - writer.WriteLine("public scg::IList<{0}> {1}List {{", TypeName, PropertyName); - writer.WriteLine(" get {{ return pbc::Lists.AsReadOnly({0}_); }}", Name); - writer.WriteLine("}"); - - // TODO(jonskeet): Redundant API calls? Possibly - include for portability though. Maybe create an option. - AddDeprecatedFlag(writer); - writer.WriteLine("public int {0}Count {{", PropertyName); - writer.WriteLine(" get {{ return {0}_.Count; }}", Name); - writer.WriteLine("}"); - - AddPublicMemberAttributes(writer); - writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName); - writer.WriteLine(" return {0}_[index];", Name); - writer.WriteLine("}"); - } - - public void GenerateBuilderMembers(TextGenerator writer) - { - // Note: We can return the original list here, because we make it unmodifiable when we build - // We return it via IPopsicleList so that collection initializers work more pleasantly. - AddPublicMemberAttributes(writer); - writer.WriteLine("public pbc::IPopsicleList<{0}> {1}List {{", TypeName, PropertyName); - writer.WriteLine(" get {{ return PrepareBuilder().{0}_; }}", Name); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public int {0}Count {{", PropertyName); - writer.WriteLine(" get {{ return result.{0}Count; }}", PropertyName); - writer.WriteLine("}"); - AddPublicMemberAttributes(writer); - writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName); - writer.WriteLine(" return result.Get{0}(index);", PropertyName); - writer.WriteLine("}"); - AddPublicMemberAttributes(writer); - writer.WriteLine("public Builder Set{0}(int index, {1} value) {{", PropertyName, TypeName); - AddNullCheck(writer); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.{0}_[index] = value;", Name); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - AddPublicMemberAttributes(writer); - writer.WriteLine("public Builder Add{0}({1} value) {{", PropertyName, TypeName); - AddNullCheck(writer); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.{0}_.Add(value);", Name, TypeName); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - AddPublicMemberAttributes(writer); - writer.WriteLine("public Builder AddRange{0}(scg::IEnumerable<{1}> values) {{", PropertyName, TypeName); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.{0}_.Add(values);", Name); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - AddDeprecatedFlag(writer); - writer.WriteLine("public Builder Clear{0}() {{", PropertyName); - writer.WriteLine(" PrepareBuilder();"); - writer.WriteLine(" result.{0}_.Clear();", Name); - writer.WriteLine(" return this;"); - writer.WriteLine("}"); - } - - public void GenerateMergingCode(TextGenerator writer) - { - writer.WriteLine("if (other.{0}_.Count != 0) {{", Name); - writer.WriteLine(" result.{0}_.Add(other.{0}_);", Name); - writer.WriteLine("}"); - } - - public void GenerateBuildingCode(TextGenerator writer) - { - writer.WriteLine("{0}_.MakeReadOnly();", Name); - } - - public void GenerateParsingCode(TextGenerator writer) - { - writer.WriteLine("input.Read{0}Array(tag, field_name, result.{1}_);", CapitalizedTypeName, Name, - Descriptor.FieldType); - } - - public void GenerateSerializationCode(TextGenerator writer) - { - writer.WriteLine("if ({0}_.Count > 0) {{", Name); - writer.Indent(); - if (Descriptor.IsPacked) - { - writer.WriteLine("output.WritePacked{0}Array({1}, field_names[{3}], {2}MemoizedSerializedSize, {2}_);", - CapitalizedTypeName, Number, Name, FieldOrdinal, Descriptor.FieldType); - } - else - { - writer.WriteLine("output.Write{0}Array({1}, field_names[{3}], {2}_);", CapitalizedTypeName, Number, Name, - FieldOrdinal, Descriptor.FieldType); - } - writer.Outdent(); - writer.WriteLine("}"); - } - - public void GenerateSerializedSizeCode(TextGenerator writer) - { - writer.WriteLine("{"); - writer.Indent(); - writer.WriteLine("int dataSize = 0;"); - if (FixedSize == -1) - { - writer.WriteLine("foreach ({0} element in {1}List) {{", TypeName, PropertyName); - writer.WriteLine(" dataSize += pb::CodedOutputStream.Compute{0}SizeNoTag(element);", - CapitalizedTypeName, Number); - writer.WriteLine("}"); - } - else - { - writer.WriteLine("dataSize = {0} * {1}_.Count;", FixedSize, Name); - } - writer.WriteLine("size += dataSize;"); - int tagSize = CodedOutputStream.ComputeTagSize(Descriptor.FieldNumber); - if (Descriptor.IsPacked) - { - writer.WriteLine("if ({0}_.Count != 0) {{", Name); - writer.WriteLine(" size += {0} + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);", tagSize); - writer.WriteLine("}"); - } - else - { - writer.WriteLine("size += {0} * {1}_.Count;", tagSize, Name); - } - // cache the data size for packed fields. - if (Descriptor.IsPacked) - { - writer.WriteLine("{0}MemoizedSerializedSize = dataSize;", Name); - } - writer.Outdent(); - writer.WriteLine("}"); - } - - public override void WriteHash(TextGenerator writer) - { - writer.WriteLine("foreach({0} i in {1}_)", TypeName, Name); - writer.WriteLine(" hash ^= i.GetHashCode();"); - } - - public override void WriteEquals(TextGenerator writer) - { - writer.WriteLine("if({0}_.Count != other.{0}_.Count) return false;", Name); - writer.WriteLine("for(int ix=0; ix < {0}_.Count; ix++)", Name); - writer.WriteLine(" if(!{0}_[ix].Equals(other.{0}_[ix])) return false;", Name); - } - - public override void WriteToString(TextGenerator writer) - { - writer.WriteLine("PrintField(\"{0}\", {1}_, writer);", Descriptor.Name, Name); - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ServiceGenerator.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ServiceGenerator.cs deleted file mode 100644 index ac84d3d86f..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ServiceGenerator.cs +++ /dev/null @@ -1,194 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using Google.ProtocolBuffers.Descriptors; - -namespace Google.ProtocolBuffers.ProtoGen -{ - internal class GenericServiceGenerator : SourceGeneratorBase, ISourceGenerator - { - private enum RequestOrResponse - { - Request, - Response - } - - internal GenericServiceGenerator(ServiceDescriptor descriptor) - : base(descriptor) - { - } - - public void Generate(TextGenerator writer) - { - writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); - writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); - writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", - GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); - writer.WriteLine("{0} abstract class {1} : pb::IService {{", ClassAccessLevel, Descriptor.Name); - writer.Indent(); - - foreach (MethodDescriptor method in Descriptor.Methods) - { - writer.WriteLine("{0} abstract void {1}(", ClassAccessLevel, - NameHelpers.UnderscoresToPascalCase(method.Name)); - writer.WriteLine(" pb::IRpcController controller,"); - writer.WriteLine(" {0} request,", GetClassName(method.InputType)); - writer.WriteLine(" global::System.Action<{0}> done);", GetClassName(method.OutputType)); - } - - // Generate Descriptor and DescriptorForType. - writer.WriteLine(); - writer.WriteLine("{0} static pbd::ServiceDescriptor Descriptor {{", ClassAccessLevel); - writer.WriteLine(" get {{ return {0}.Descriptor.Services[{1}]; }}", - DescriptorUtil.GetQualifiedUmbrellaClassName(Descriptor.File.CSharpOptions), - Descriptor.Index); - writer.WriteLine("}"); - writer.WriteLine("public pbd::ServiceDescriptor DescriptorForType {"); - writer.WriteLine(" get { return Descriptor; }"); - writer.WriteLine("}"); - - GenerateCallMethod(writer); - GenerateGetPrototype(RequestOrResponse.Request, writer); - GenerateGetPrototype(RequestOrResponse.Response, writer); - GenerateStub(writer); - - writer.Outdent(); - writer.WriteLine("}"); - } - - private void GenerateCallMethod(TextGenerator writer) - { - writer.WriteLine(); - writer.WriteLine("public void CallMethod("); - writer.WriteLine(" pbd::MethodDescriptor method,"); - writer.WriteLine(" pb::IRpcController controller,"); - writer.WriteLine(" pb::IMessage request,"); - writer.WriteLine(" global::System.Action done) {"); - writer.Indent(); - writer.WriteLine("if (method.Service != Descriptor) {"); - writer.WriteLine(" throw new global::System.ArgumentException("); - writer.WriteLine(" \"Service.CallMethod() given method descriptor for wrong service type.\");"); - writer.WriteLine("}"); - writer.WriteLine("switch(method.Index) {"); - writer.Indent(); - foreach (MethodDescriptor method in Descriptor.Methods) - { - writer.WriteLine("case {0}:", method.Index); - writer.WriteLine(" this.{0}(controller, ({1}) request,", - NameHelpers.UnderscoresToPascalCase(method.Name), GetClassName(method.InputType)); - writer.WriteLine(" pb::RpcUtil.SpecializeCallback<{0}>(", GetClassName(method.OutputType)); - writer.WriteLine(" done));"); - writer.WriteLine(" return;"); - } - writer.WriteLine("default:"); - writer.WriteLine(" throw new global::System.InvalidOperationException(\"Can't get here.\");"); - writer.Outdent(); - writer.WriteLine("}"); - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine(); - } - - private void GenerateGetPrototype(RequestOrResponse which, TextGenerator writer) - { - writer.WriteLine("public pb::IMessage Get{0}Prototype(pbd::MethodDescriptor method) {{", which); - writer.Indent(); - writer.WriteLine("if (method.Service != Descriptor) {"); - writer.WriteLine(" throw new global::System.ArgumentException("); - writer.WriteLine(" \"Service.Get{0}Prototype() given method descriptor for wrong service type.\");", - which); - writer.WriteLine("}"); - writer.WriteLine("switch(method.Index) {"); - writer.Indent(); - - foreach (MethodDescriptor method in Descriptor.Methods) - { - writer.WriteLine("case {0}:", method.Index); - writer.WriteLine(" return {0}.DefaultInstance;", - GetClassName(which == RequestOrResponse.Request ? method.InputType : method.OutputType)); - } - writer.WriteLine("default:"); - writer.WriteLine(" throw new global::System.InvalidOperationException(\"Can't get here.\");"); - writer.Outdent(); - writer.WriteLine("}"); - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine(); - } - - private void GenerateStub(TextGenerator writer) - { - writer.WriteLine("public static Stub CreateStub(pb::IRpcChannel channel) {"); - writer.WriteLine(" return new Stub(channel);"); - writer.WriteLine("}"); - writer.WriteLine(); - writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); - writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); - writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", - GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); - writer.WriteLine("{0} class Stub : {1} {{", ClassAccessLevel, GetClassName(Descriptor)); - writer.Indent(); - writer.WriteLine("internal Stub(pb::IRpcChannel channel) {"); - writer.WriteLine(" this.channel = channel;"); - writer.WriteLine("}"); - writer.WriteLine(); - writer.WriteLine("private readonly pb::IRpcChannel channel;"); - writer.WriteLine(); - writer.WriteLine("public pb::IRpcChannel Channel {"); - writer.WriteLine(" get { return channel; }"); - writer.WriteLine("}"); - - foreach (MethodDescriptor method in Descriptor.Methods) - { - writer.WriteLine(); - writer.WriteLine("{0} override void {1}(", ClassAccessLevel, - NameHelpers.UnderscoresToPascalCase(method.Name)); - writer.WriteLine(" pb::IRpcController controller,"); - writer.WriteLine(" {0} request,", GetClassName(method.InputType)); - writer.WriteLine(" global::System.Action<{0}> done) {{", GetClassName(method.OutputType)); - writer.Indent(); - writer.WriteLine("channel.CallMethod(Descriptor.Methods[{0}],", method.Index); - writer.WriteLine(" controller, request, {0}.DefaultInstance,", GetClassName(method.OutputType)); - writer.WriteLine(" pb::RpcUtil.GeneralizeCallback<{0}, {0}.Builder>(done, {0}.DefaultInstance));", - GetClassName(method.OutputType)); - writer.Outdent(); - writer.WriteLine("}"); - } - writer.Outdent(); - writer.WriteLine("}"); - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ServiceInterfaceGenerator.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ServiceInterfaceGenerator.cs deleted file mode 100644 index 64b6d69be9..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/ServiceInterfaceGenerator.cs +++ /dev/null @@ -1,308 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using System; -using Google.ProtocolBuffers.DescriptorProtos; -using Google.ProtocolBuffers.Descriptors; - -namespace Google.ProtocolBuffers.ProtoGen -{ - internal class ServiceGenerator : SourceGeneratorBase, ISourceGenerator - { - private readonly CSharpServiceType svcType; - private ISourceGenerator _generator; - - internal ServiceGenerator(ServiceDescriptor descriptor) - : base(descriptor) - { - svcType = descriptor.File.CSharpOptions.ServiceGeneratorType; - switch (svcType) - { - case CSharpServiceType.NONE: - _generator = new NoServicesGenerator(descriptor); - break; - case CSharpServiceType.GENERIC: - _generator = new GenericServiceGenerator(descriptor); - break; - case CSharpServiceType.INTERFACE: - _generator = new ServiceInterfaceGenerator(descriptor); - break; - case CSharpServiceType.IRPCDISPATCH: - _generator = new RpcServiceGenerator(descriptor); - break; - default: - throw new ApplicationException("Unknown ServiceGeneratorType = " + svcType.ToString()); - } - } - - public void Generate(TextGenerator writer) - { - _generator.Generate(writer); - } - - private class NoServicesGenerator : SourceGeneratorBase, ISourceGenerator - { - public NoServicesGenerator(ServiceDescriptor descriptor) - : base(descriptor) - { - } - - public virtual void Generate(TextGenerator writer) - { - writer.WriteLine("/*"); - writer.WriteLine("* Service generation is now disabled by default, use the following option to enable:"); - writer.WriteLine("* option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;"); - writer.WriteLine("*/"); - } - } - - private class ServiceInterfaceGenerator : SourceGeneratorBase, ISourceGenerator - { - public ServiceInterfaceGenerator(ServiceDescriptor descriptor) - : base(descriptor) - { - } - - public virtual void Generate(TextGenerator writer) - { - CSharpServiceOptions options = Descriptor.Options.GetExtension(CSharpOptions.CsharpServiceOptions); - if (options != null && options.HasInterfaceId) - { - writer.WriteLine("[global::System.Runtime.InteropServices.GuidAttribute(\"{0}\")]", - new Guid(options.InterfaceId)); - } - writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); - writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", - GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); - writer.WriteLine("{0} partial interface I{1} {{", ClassAccessLevel, Descriptor.Name); - writer.Indent(); - - foreach (MethodDescriptor method in Descriptor.Methods) - { - CSharpMethodOptions mth = method.Options.GetExtension(CSharpOptions.CsharpMethodOptions); - if (mth.HasDispatchId) - { - writer.WriteLine("[global::System.Runtime.InteropServices.DispId({0})]", mth.DispatchId); - } - writer.WriteLine("{0} {1}({2} {3});", GetClassName(method.OutputType), - NameHelpers.UnderscoresToPascalCase(method.Name), GetClassName(method.InputType), - NameHelpers.UnderscoresToCamelCase(method.InputType.Name)); - } - - writer.Outdent(); - writer.WriteLine("}"); - } - } - - private class RpcServiceGenerator : ServiceInterfaceGenerator - { - public RpcServiceGenerator(ServiceDescriptor descriptor) - : base(descriptor) - { - } - - public override void Generate(TextGenerator writer) - { - base.Generate(writer); - - writer.WriteLine(); - - // CLIENT Proxy - { - if (Descriptor.File.CSharpOptions.ClsCompliance) - { - writer.WriteLine("[global::System.CLSCompliant(false)]"); - } - writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); - writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); - writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", - GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); - writer.WriteLine("{0} partial class {1} : I{1}, pb::IRpcDispatch, global::System.IDisposable {{", - ClassAccessLevel, Descriptor.Name); - writer.Indent(); - writer.WriteLine("private readonly bool dispose;"); - writer.WriteLine("private readonly pb::IRpcDispatch dispatch;"); - - writer.WriteLine("public {0}(pb::IRpcDispatch dispatch) : this(dispatch, true) {{", Descriptor.Name); - writer.WriteLine("}"); - writer.WriteLine("public {0}(pb::IRpcDispatch dispatch, bool dispose) {{", Descriptor.Name); - writer.WriteLine(" pb::ThrowHelper.ThrowIfNull(this.dispatch = dispatch, \"dispatch\");"); - writer.WriteLine(" this.dispose = dispose && dispatch is global::System.IDisposable;"); - writer.WriteLine("}"); - writer.WriteLine(); - - writer.WriteLine("public void Dispose() {"); - writer.WriteLine(" if (dispose) ((global::System.IDisposable)dispatch).Dispose();"); - writer.WriteLine("}"); - writer.WriteLine(); - writer.WriteLine( - "TMessage pb::IRpcDispatch.CallMethod(string method, pb::IMessageLite request, pb::IBuilderLite response) {"); - writer.WriteLine(" return dispatch.CallMethod(method, request, response);"); - writer.WriteLine("}"); - writer.WriteLine(); - - foreach (MethodDescriptor method in Descriptor.Methods) - { - writer.WriteLine("public {0} {1}({2} {3}) {{", GetClassName(method.OutputType), - NameHelpers.UnderscoresToPascalCase(method.Name), - GetClassName(method.InputType), - NameHelpers.UnderscoresToCamelCase(method.InputType.Name)); - writer.WriteLine(" return dispatch.CallMethod(\"{0}\", {1}, {2}.CreateBuilder());", - method.Name, - NameHelpers.UnderscoresToCamelCase(method.InputType.Name), - GetClassName(method.OutputType) - ); - writer.WriteLine("}"); - writer.WriteLine(); - } - } - // SERVER - DISPATCH - { - if (Descriptor.File.CSharpOptions.ClsCompliance) - { - writer.WriteLine("[global::System.CLSCompliant(false)]"); - } - writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); - writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); - writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", - GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); - writer.WriteLine("public partial class Dispatch : pb::IRpcDispatch, global::System.IDisposable {"); - writer.Indent(); - writer.WriteLine("private readonly bool dispose;"); - writer.WriteLine("private readonly I{0} implementation;", Descriptor.Name); - - writer.WriteLine("public Dispatch(I{0} implementation) : this(implementation, true) {{", - Descriptor.Name); - writer.WriteLine("}"); - writer.WriteLine("public Dispatch(I{0} implementation, bool dispose) {{", Descriptor.Name); - writer.WriteLine(" pb::ThrowHelper.ThrowIfNull(this.implementation = implementation, \"implementation\");"); - writer.WriteLine(" this.dispose = dispose && implementation is global::System.IDisposable;"); - writer.WriteLine("}"); - writer.WriteLine(); - - writer.WriteLine("public void Dispose() {"); - writer.WriteLine(" if (dispose) ((global::System.IDisposable)implementation).Dispose();"); - writer.WriteLine("}"); - writer.WriteLine(); - - writer.WriteLine( - "public TMessage CallMethod(string methodName, pb::IMessageLite request, pb::IBuilderLite response)"); - writer.WriteLine(" where TMessage : pb::IMessageLite"); - writer.WriteLine(" where TBuilder : pb::IBuilderLite {"); - writer.Indent(); - writer.WriteLine("switch(methodName) {"); - writer.Indent(); - - foreach (MethodDescriptor method in Descriptor.Methods) - { - writer.WriteLine( - "case \"{0}\": return response.MergeFrom(implementation.{1}(({2})request)).Build();", - method.Name, NameHelpers.UnderscoresToPascalCase(method.Name), - GetClassName(method.InputType)); - } - writer.WriteLine("default: throw pb::ThrowHelper.CreateMissingMethod(typeof(I{0}), methodName);", Descriptor.Name); - writer.Outdent(); - writer.WriteLine("}"); //end switch - writer.Outdent(); - writer.WriteLine("}"); //end invoke - writer.Outdent(); - writer.WriteLine("}"); //end server - } - // SERVER - STUB - { - if (Descriptor.File.CSharpOptions.ClsCompliance) - { - writer.WriteLine("[global::System.CLSCompliant(false)]"); - } - writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); - writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); - writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", - GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); - writer.WriteLine( - "public partial class ServerStub : pb::IRpcServerStub, global::System.IDisposable {"); - writer.Indent(); - writer.WriteLine("private readonly bool dispose;"); - writer.WriteLine("private readonly pb::IRpcDispatch implementation;", Descriptor.Name); - - writer.WriteLine("public ServerStub(I{0} implementation) : this(implementation, true) {{", - Descriptor.Name); - writer.WriteLine("}"); - writer.WriteLine( - "public ServerStub(I{0} implementation, bool dispose) : this(new Dispatch(implementation, dispose), dispose) {{", - Descriptor.Name); - writer.WriteLine("}"); - - writer.WriteLine("public ServerStub(pb::IRpcDispatch implementation) : this(implementation, true) {"); - writer.WriteLine("}"); - writer.WriteLine("public ServerStub(pb::IRpcDispatch implementation, bool dispose) {"); - writer.WriteLine(" pb::ThrowHelper.ThrowIfNull(this.implementation = implementation, \"implementation\");"); - writer.WriteLine(" this.dispose = dispose && implementation is global::System.IDisposable;"); - writer.WriteLine("}"); - writer.WriteLine(); - - writer.WriteLine("public void Dispose() {"); - writer.WriteLine(" if (dispose) ((global::System.IDisposable)implementation).Dispose();"); - writer.WriteLine("}"); - writer.WriteLine(); - - writer.WriteLine( - "public pb::IMessageLite CallMethod(string methodName, pb::ICodedInputStream input, pb::ExtensionRegistry registry) {{", - Descriptor.Name); - writer.Indent(); - writer.WriteLine("switch(methodName) {"); - writer.Indent(); - - foreach (MethodDescriptor method in Descriptor.Methods) - { - writer.WriteLine( - "case \"{0}\": return implementation.CallMethod(methodName, {1}.ParseFrom(input, registry), {2}.CreateBuilder());", - method.Name, GetClassName(method.InputType), GetClassName(method.OutputType)); - } - writer.WriteLine("default: throw pb::ThrowHelper.CreateMissingMethod(typeof(I{0}), methodName);", Descriptor.Name); - writer.Outdent(); - writer.WriteLine("}"); //end switch - writer.Outdent(); - writer.WriteLine("}"); //end invoke - writer.Outdent(); - writer.WriteLine("}"); //end server - } - - writer.Outdent(); - writer.WriteLine("}"); - } - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/SourceGeneratorBase.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/SourceGeneratorBase.cs deleted file mode 100644 index fd833373e2..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/SourceGeneratorBase.cs +++ /dev/null @@ -1,157 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using System.Collections.Generic; -using Google.ProtocolBuffers.DescriptorProtos; -using Google.ProtocolBuffers.Descriptors; - -namespace Google.ProtocolBuffers.ProtoGen -{ - internal abstract class SourceGeneratorBase where T : IDescriptor - { - private readonly T descriptor; - - protected readonly bool OptimizeSpeed; - protected readonly bool OptimizeSize; - protected readonly bool UseLiteRuntime; - protected readonly string RuntimeSuffix; - - protected SourceGeneratorBase(T descriptor) - { - this.descriptor = descriptor; - - OptimizeSize = descriptor.File.Options.OptimizeFor == - FileOptions.Types.OptimizeMode.CODE_SIZE; - OptimizeSpeed = descriptor.File.Options.OptimizeFor == - FileOptions.Types.OptimizeMode.SPEED; - UseLiteRuntime = descriptor.File.Options.OptimizeFor == - FileOptions.Types.OptimizeMode.LITE_RUNTIME; - //Lite runtime uses OptimizeSpeed code branches - OptimizeSpeed |= UseLiteRuntime; - RuntimeSuffix = UseLiteRuntime ? "Lite" : ""; - } - - protected T Descriptor - { - get { return descriptor; } - } - - internal static string GetClassName(IDescriptor descriptor) - { - return ToCSharpName(descriptor.FullName, descriptor.File); - } - - // Groups are hacky: The name of the field is just the lower-cased name - // of the group type. In C#, though, we would like to retain the original - // capitalization of the type name. - internal static string GetFieldName(FieldDescriptor descriptor) - { - if (descriptor.FieldType == FieldType.Group) - { - return descriptor.MessageType.Name; - } - else - { - return descriptor.Name; - } - } - - internal static string GetFieldConstantName(FieldDescriptor field) - { - return field.CSharpOptions.PropertyName + "FieldNumber"; - } - - private static string ToCSharpName(string name, FileDescriptor file) - { - string result = file.CSharpOptions.Namespace; - if (file.CSharpOptions.NestClasses) - { - if (result != "") - { - result += "."; - } - result += file.CSharpOptions.UmbrellaClassname; - } - if (result != "") - { - result += '.'; - } - string classname; - if (file.Package == "") - { - classname = name; - } - else - { - // Strip the proto package from full_name since we've replaced it with - // the C# namespace. - classname = name.Substring(file.Package.Length + 1); - } - result += classname.Replace(".", ".Types."); - return "global::" + result; - } - - protected string ClassAccessLevel - { - get { return descriptor.File.CSharpOptions.PublicClasses ? "public" : "internal"; } - } - - protected void WriteChildren(TextGenerator writer, string region, IEnumerable children) - where TChild : IDescriptor - { - // Copy the set of children; makes access easier - List copy = new List(children); - if (copy.Count == 0) - { - return; - } - - if (region != null) - { - writer.WriteLine("#region {0}", region); - } - foreach (TChild child in children) - { - SourceGenerators.CreateGenerator(child).Generate(writer); - } - if (region != null) - { - writer.WriteLine("#endregion"); - writer.WriteLine(); - } - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/SourceGenerators.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/SourceGenerators.cs deleted file mode 100644 index bf7218b67d..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/SourceGenerators.cs +++ /dev/null @@ -1,87 +0,0 @@ -#region Copyright notice and license - -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#endregion - -using System; -using System.Collections.Generic; -using Google.ProtocolBuffers.Descriptors; - -namespace Google.ProtocolBuffers.ProtoGen -{ - public delegate TResult Func(T arg); - - internal static class SourceGenerators - { - private static readonly Dictionary> GeneratorFactories = - new Dictionary> - { - {typeof (FileDescriptor), descriptor => new UmbrellaClassGenerator((FileDescriptor) descriptor)}, - {typeof (EnumDescriptor), descriptor => new EnumGenerator((EnumDescriptor) descriptor)}, - {typeof (ServiceDescriptor), descriptor => new ServiceGenerator((ServiceDescriptor) descriptor)}, - {typeof (MessageDescriptor), descriptor => new MessageGenerator((MessageDescriptor) descriptor)}, - // For other fields, we have IFieldSourceGenerators. - {typeof (FieldDescriptor), descriptor => new ExtensionGenerator((FieldDescriptor) descriptor)} - }; - - public static IFieldSourceGenerator CreateFieldGenerator(FieldDescriptor field, int fieldOrdinal) - { - switch (field.MappedType) - { - case MappedType.Message: - return field.IsRepeated - ? (IFieldSourceGenerator) new RepeatedMessageFieldGenerator(field, fieldOrdinal) - : new MessageFieldGenerator(field, fieldOrdinal); - case MappedType.Enum: - return field.IsRepeated - ? (IFieldSourceGenerator) new RepeatedEnumFieldGenerator(field, fieldOrdinal) - : new EnumFieldGenerator(field, fieldOrdinal); - default: - return field.IsRepeated - ? (IFieldSourceGenerator) new RepeatedPrimitiveFieldGenerator(field, fieldOrdinal) - : new PrimitiveFieldGenerator(field, fieldOrdinal); - } - } - - public static ISourceGenerator CreateGenerator(T descriptor) where T : IDescriptor - { - Func factory; - if (!GeneratorFactories.TryGetValue(typeof (T), out factory)) - { - throw new ArgumentException("No generator registered for " + typeof (T).Name); - } - return factory(descriptor); - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/UmbrellaClassGenerator.cs b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/UmbrellaClassGenerator.cs deleted file mode 100644 index e425045876..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/UmbrellaClassGenerator.cs +++ /dev/null @@ -1,294 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// http://github.com/jskeet/dotnet-protobufs/ -// Original C++/Java/Python code: -// http://code.google.com/p/protobuf/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -using System; -using System.Collections; -using System.Collections.Generic; -using Google.ProtocolBuffers.Descriptors; - -namespace Google.ProtocolBuffers.ProtoGen -{ - /// - /// Generator for the class describing the .proto file in general, - /// containing things like the message descriptor. - /// - internal sealed class UmbrellaClassGenerator : SourceGeneratorBase, ISourceGenerator - { - internal UmbrellaClassGenerator(FileDescriptor descriptor) - : base(descriptor) - { - } - - // Recursively searches the given message to see if it contains any extensions. - private static bool UsesExtensions(IMessage message) - { - // We conservatively assume that unknown fields are extensions. - if (message.UnknownFields.FieldDictionary.Count > 0) - { - return true; - } - - foreach (KeyValuePair keyValue in message.AllFields) - { - FieldDescriptor field = keyValue.Key; - if (field.IsExtension) - { - return true; - } - if (field.MappedType == MappedType.Message) - { - if (field.IsRepeated) - { - foreach (IMessage subMessage in (IEnumerable) keyValue.Value) - { - if (UsesExtensions(subMessage)) - { - return true; - } - } - } - else - { - if (UsesExtensions((IMessage) keyValue.Value)) - { - return true; - } - } - } - } - return false; - } - - public void Generate(TextGenerator writer) - { - WriteIntroduction(writer); - WriteExtensionRegistration(writer); - WriteChildren(writer, "Extensions", Descriptor.Extensions); - writer.WriteLine("#region Static variables"); - foreach (MessageDescriptor message in Descriptor.MessageTypes) - { - new MessageGenerator(message).GenerateStaticVariables(writer); - } - writer.WriteLine("#endregion"); - if (!UseLiteRuntime) - { - WriteDescriptor(writer); - } - else - { - WriteLiteExtensions(writer); - } - // The class declaration either gets closed before or after the children are written. - if (!Descriptor.CSharpOptions.NestClasses) - { - writer.Outdent(); - writer.WriteLine("}"); - - // Close the namespace around the umbrella class if defined - if (!Descriptor.CSharpOptions.NestClasses && Descriptor.CSharpOptions.UmbrellaNamespace != "") - { - writer.Outdent(); - writer.WriteLine("}"); - } - } - WriteChildren(writer, "Enums", Descriptor.EnumTypes); - WriteChildren(writer, "Messages", Descriptor.MessageTypes); - WriteChildren(writer, "Services", Descriptor.Services); - if (Descriptor.CSharpOptions.NestClasses) - { - writer.Outdent(); - writer.WriteLine("}"); - } - if (Descriptor.CSharpOptions.Namespace != "") - { - writer.Outdent(); - writer.WriteLine("}"); - } - writer.WriteLine(); - writer.WriteLine("#endregion Designer generated code"); - } - - private void WriteIntroduction(TextGenerator writer) - { - writer.WriteLine("// Generated by {0}. DO NOT EDIT!", this.GetType().Assembly.FullName); - writer.WriteLine("#pragma warning disable 1591, 0612"); - writer.WriteLine("#region Designer generated code"); - - writer.WriteLine(); - writer.WriteLine("using pb = global::Google.ProtocolBuffers;"); - writer.WriteLine("using pbc = global::Google.ProtocolBuffers.Collections;"); - writer.WriteLine("using pbd = global::Google.ProtocolBuffers.Descriptors;"); - writer.WriteLine("using scg = global::System.Collections.Generic;"); - - if (Descriptor.CSharpOptions.Namespace != "") - { - writer.WriteLine("namespace {0} {{", Descriptor.CSharpOptions.Namespace); - writer.Indent(); - writer.WriteLine(); - } - // Add the namespace around the umbrella class if defined - if (!Descriptor.CSharpOptions.NestClasses && Descriptor.CSharpOptions.UmbrellaNamespace != "") - { - writer.WriteLine("namespace {0} {{", Descriptor.CSharpOptions.UmbrellaNamespace); - writer.Indent(); - writer.WriteLine(); - } - - if (Descriptor.CSharpOptions.CodeContracts) - { - writer.WriteLine("[global::System.Diagnostics.Contracts.ContractVerificationAttribute(false)]"); - } - writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]"); - writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]"); - writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]", - GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version); - writer.WriteLine("{0} static partial class {1} {{", ClassAccessLevel, - Descriptor.CSharpOptions.UmbrellaClassname); - writer.WriteLine(); - writer.Indent(); - } - - private void WriteExtensionRegistration(TextGenerator writer) - { - writer.WriteLine("#region Extension registration"); - writer.WriteLine("public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {"); - writer.Indent(); - foreach (FieldDescriptor extension in Descriptor.Extensions) - { - new ExtensionGenerator(extension).GenerateExtensionRegistrationCode(writer); - } - foreach (MessageDescriptor message in Descriptor.MessageTypes) - { - new MessageGenerator(message).GenerateExtensionRegistrationCode(writer); - } - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine("#endregion"); - } - - private void WriteDescriptor(TextGenerator writer) - { - writer.WriteLine("#region Descriptor"); - - writer.WriteLine("public static pbd::FileDescriptor Descriptor {"); - writer.WriteLine(" get { return descriptor; }"); - writer.WriteLine("}"); - writer.WriteLine("private static pbd::FileDescriptor descriptor;"); - writer.WriteLine(); - writer.WriteLine("static {0}() {{", Descriptor.CSharpOptions.UmbrellaClassname); - writer.Indent(); - writer.WriteLine("byte[] descriptorData = global::System.Convert.FromBase64String("); - writer.Indent(); - writer.Indent(); - - // TODO(jonskeet): Consider a C#-escaping format here instead of just Base64. - byte[] bytes = Descriptor.Proto.ToByteArray(); - string base64 = Convert.ToBase64String(bytes); - - while (base64.Length > 60) - { - writer.WriteLine("\"{0}\" + ", base64.Substring(0, 60)); - base64 = base64.Substring(60); - } - writer.WriteLine("\"{0}\");", base64); - writer.Outdent(); - writer.Outdent(); - writer.WriteLine( - "pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {"); - writer.Indent(); - writer.WriteLine("descriptor = root;"); - foreach (MessageDescriptor message in Descriptor.MessageTypes) - { - new MessageGenerator(message).GenerateStaticVariableInitializers(writer); - } - foreach (FieldDescriptor extension in Descriptor.Extensions) - { - new ExtensionGenerator(extension).GenerateStaticVariableInitializers(writer); - } - - if (UsesExtensions(Descriptor.Proto)) - { - // Must construct an ExtensionRegistry containing all possible extensions - // and return it. - writer.WriteLine("pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();"); - writer.WriteLine("RegisterAllExtensions(registry);"); - foreach (FileDescriptor dependency in Descriptor.Dependencies) - { - writer.WriteLine("{0}.RegisterAllExtensions(registry);", - DescriptorUtil.GetFullUmbrellaClassName(dependency)); - } - writer.WriteLine("return registry;"); - } - else - { - writer.WriteLine("return null;"); - } - writer.Outdent(); - writer.WriteLine("};"); - - // ----------------------------------------------------------------- - // Invoke internalBuildGeneratedFileFrom() to build the file. - writer.WriteLine("pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,"); - writer.WriteLine(" new pbd::FileDescriptor[] {"); - foreach (FileDescriptor dependency in Descriptor.Dependencies) - { - writer.WriteLine(" {0}.Descriptor, ", DescriptorUtil.GetFullUmbrellaClassName(dependency)); - } - writer.WriteLine(" }, assigner);"); - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine("#endregion"); - writer.WriteLine(); - } - - private void WriteLiteExtensions(TextGenerator writer) - { - writer.WriteLine("#region Extensions"); - writer.WriteLine("internal static readonly object Descriptor;"); - writer.WriteLine("static {0}() {{", Descriptor.CSharpOptions.UmbrellaClassname); - writer.Indent(); - writer.WriteLine("Descriptor = null;"); - - foreach (MessageDescriptor message in Descriptor.MessageTypes) - { - new MessageGenerator(message).GenerateStaticVariableInitializers(writer); - } - foreach (FieldDescriptor extension in Descriptor.Extensions) - { - new ExtensionGenerator(extension).GenerateStaticVariableInitializers(writer); - } - writer.Outdent(); - writer.WriteLine("}"); - writer.WriteLine("#endregion"); - writer.WriteLine(); - } - } -} \ No newline at end of file diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/app.config b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/app.config deleted file mode 100644 index 1caf141818..0000000000 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtoGen/app.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - From 4d9ca6164b09379716eabe3e529d384b9d03cc2f Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 15 Apr 2022 09:15:50 +0200 Subject: [PATCH 23/39] Removed ProtoGen as project reference --- HeuristicLab.ExtLibs.sln | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/HeuristicLab.ExtLibs.sln b/HeuristicLab.ExtLibs.sln index e2384a2898..7b19b97e32 100644 --- a/HeuristicLab.ExtLibs.sln +++ b/HeuristicLab.ExtLibs.sln @@ -18,8 +18,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers-2.4.1.473", "HeuristicLab.ExtLibs\HeuristicLab.ProtobufCS\2.4.1\ProtobufCS\src\ProtocolBuffers\ProtocolBuffers-2.4.1.473.csproj", "{6908BDCE-D925-43F3-94AC-A531E6DF2591}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtoGen-2.4.1.473", "HeuristicLab.ExtLibs\HeuristicLab.ProtobufCS\2.4.1\ProtobufCS\src\ProtoGen\ProtoGen-2.4.1.473.csproj", "{250ADE34-82FD-4BAE-86D5-985FBE589C4A}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.ProtobufCS-2.4.1.473", "HeuristicLab.ExtLibs\HeuristicLab.ProtobufCS\2.4.1\HeuristicLab.ProtobufCS\HeuristicLab.ProtobufCS-2.4.1.473.csproj", "{236459CE-80CF-4991-972F-DE74C826BCCC}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibSVM-3.12", "HeuristicLab.ExtLibs\HeuristicLab.LibSVM\3.12\LibSVM-3.12\LibSVM-3.12.csproj", "{4C41E3A3-B2FD-46EA-98FB-F21433E58FBE}" @@ -159,19 +157,7 @@ Global {6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|x64.ActiveCfg = Release|x64 {6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|x64.Build.0 = Release|x64 {6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|x86.ActiveCfg = Release|x86 - {6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|x86.Build.0 = Release|x86 - {250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Debug|x64.ActiveCfg = Debug|x64 - {250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Debug|x64.Build.0 = Debug|x64 - {250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Debug|x86.ActiveCfg = Debug|x86 - {250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Debug|x86.Build.0 = Debug|x86 - {250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Release|Any CPU.Build.0 = Release|Any CPU - {250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Release|x64.ActiveCfg = Release|x64 - {250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Release|x64.Build.0 = Release|x64 - {250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Release|x86.ActiveCfg = Release|x86 - {250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Release|x86.Build.0 = Release|x86 + {6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|x86.Build.0 = Release|x86 {236459CE-80CF-4991-972F-DE74C826BCCC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {236459CE-80CF-4991-972F-DE74C826BCCC}.Debug|Any CPU.Build.0 = Debug|Any CPU {236459CE-80CF-4991-972F-DE74C826BCCC}.Debug|x64.ActiveCfg = Debug|x64 From dee936a20a794202e83917e79540389c2127c324 Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 15 Apr 2022 09:22:34 +0200 Subject: [PATCH 24/39] Removed old build files from SolutionItem --- HeuristicLab 3.3 Services.sln | 2 -- HeuristicLab 3.3.sln | 3 --- HeuristicLab.ExtLibs.sln | 5 ----- 3 files changed, 10 deletions(-) diff --git a/HeuristicLab 3.3 Services.sln b/HeuristicLab 3.3 Services.sln index 879e3fe3ab..75b13545c9 100644 --- a/HeuristicLab 3.3 Services.sln +++ b/HeuristicLab 3.3 Services.sln @@ -5,11 +5,9 @@ VisualStudioVersion = 12.0.31101.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{96396439-A764-4022-A8D2-BE021449B8D1}" ProjectSection(SolutionItems) = preProject - ConfigMerger.exe = ConfigMerger.exe ..\documentation\License\gpl-3.0.txt = ..\documentation\License\gpl-3.0.txt HeuristicLab 3.3 Services.vsmdi = HeuristicLab 3.3 Services.vsmdi LocalTestRun.testrunconfig = LocalTestRun.testrunconfig - PreBuildEvent.cmd = PreBuildEvent.cmd EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Services.Deployment-3.3", "HeuristicLab.Services.Deployment\3.3\HeuristicLab.Services.Deployment-3.3.csproj", "{30D8C5F1-CD3A-4EC1-907F-430177A03FBE}" diff --git a/HeuristicLab 3.3.sln b/HeuristicLab 3.3.sln index f8e9363351..fcc8fc51b9 100644 --- a/HeuristicLab 3.3.sln +++ b/HeuristicLab 3.3.sln @@ -7,10 +7,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution ProjectSection(SolutionItems) = preProject .editorconfig = .editorconfig Build.cmd = Build.cmd - ConfigMerger.exe = ConfigMerger.exe ..\documentation\License\gpl-3.0.txt = ..\documentation\License\gpl-3.0.txt - MergeConfigs.cmd = MergeConfigs.cmd - PreBuildEvent.cmd = PreBuildEvent.cmd EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab-3.3", "HeuristicLab\3.3\HeuristicLab-3.3.csproj", "{B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF}" diff --git a/HeuristicLab.ExtLibs.sln b/HeuristicLab.ExtLibs.sln index 7b19b97e32..129a617403 100644 --- a/HeuristicLab.ExtLibs.sln +++ b/HeuristicLab.ExtLibs.sln @@ -11,11 +11,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Netron.Diagramming.Core-3.0 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.PluginInfrastructure-3.3", "HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj", "{94186A6A-5176-4402-AE83-886557B53CCA}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{E7640329-47FE-480E-AE79-13C5D760123F}" - ProjectSection(SolutionItems) = preProject - PreBuildEvent.cmd = PreBuildEvent.cmd - EndProjectSection -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers-2.4.1.473", "HeuristicLab.ExtLibs\HeuristicLab.ProtobufCS\2.4.1\ProtobufCS\src\ProtocolBuffers\ProtocolBuffers-2.4.1.473.csproj", "{6908BDCE-D925-43F3-94AC-A531E6DF2591}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.ProtobufCS-2.4.1.473", "HeuristicLab.ExtLibs\HeuristicLab.ProtobufCS\2.4.1\HeuristicLab.ProtobufCS\HeuristicLab.ProtobufCS-2.4.1.473.csproj", "{236459CE-80CF-4991-972F-DE74C826BCCC}" From 3fa83886a83c315bf25a1a92009eb17808efefec Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 15 Apr 2022 09:31:17 +0200 Subject: [PATCH 25/39] Ignored the generated proto file --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 18fcbbf191..c47396552e 100644 --- a/.gitignore +++ b/.gitignore @@ -400,3 +400,4 @@ FodyWeavers.xsd # JetBrains Rider *.sln.iml +HeuristicLab.Problems.ExternalEvaluation/3.4/Protos/ExternalEvaluationMessages.cs From dcbb7e51cd3e106b5fb69ebd6916e8e6b8218fca Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 15 Apr 2022 11:28:31 +0200 Subject: [PATCH 26/39] Converted all projects of the HeuristicLab solution to sdk style projects I utilized https://github.com/hvanbakel/CsprojToVs2017 for the rough conversion and fine-tuned the rest --- .../HeuristicLab.Algorithms.ALPS-3.3.csproj | 170 +----- ...Lab.Algorithms.Benchmarks.Views-3.3.csproj | 144 +----- ...risticLab.Algorithms.Benchmarks-3.3.csproj | 153 +----- ...Algorithms.CMAEvolutionStrategy-3.4.csproj | 214 +------- ...thms.DataAnalysis.DecisionTrees-3.4.csproj | 178 +------ ....Algorithms.DataAnalysis.Glmnet-3.4.csproj | 149 +----- ...b.Algorithms.DataAnalysis.Views-3.4.csproj | 268 +++------- ...sticLab.Algorithms.DataAnalysis-3.4.csproj | 479 ++--------------- ...ab.Algorithms.EvolutionStrategy-3.3.csproj | 194 +------ ...Lab.Algorithms.GeneticAlgorithm-3.3.csproj | 204 +------- ...cLab.Algorithms.GradientDescent-3.3.csproj | 159 +----- ...isticLab.Algorithms.LocalSearch-3.3.csproj | 194 +------ ...gorithms.MOCMAEvolutionStrategy-3.3.csproj | 166 +----- ...lgorithms.MultiObjectiveLocalSearch.csproj | 138 +---- .../HeuristicLab.Algorithms.NSGA2-3.3.csproj | 191 +------ ...pringSelectionEvolutionStrategy-3.3.csproj | 194 +------ ...springSelectionGeneticAlgorithm-3.3.csproj | 199 +------ ....ParameterlessPopulationPyramid-3.3.csproj | 148 +----- ...ithms.ParticleSwarmOptimization-3.3.csproj | 201 +------- .../HeuristicLab.Algorithms.RAPGA-3.3.csproj | 179 +------ ...sticLab.Algorithms.RandomSearch-3.3.csproj | 127 +---- ...ticLab.Algorithms.ScatterSearch-3.3.csproj | 165 +----- ...b.Algorithms.SimulatedAnnealing-3.3.csproj | 188 +------ ...risticLab.Algorithms.TabuSearch-3.3.csproj | 200 +------- ...thms.VariableNeighborhoodSearch-3.3.csproj | 193 +------ ...icLab.Analysis.Statistics.Views-3.3.csproj | 230 ++------- .../HeuristicLab.Analysis.Views-3.3.csproj | 260 +++------- .../3.3/HeuristicLab.Analysis-3.3.csproj | 243 +-------- ...b.Clients.Access.Administration-3.3.csproj | 257 +++------- ...uristicLab.Clients.Access.Views-3.3.csproj | 225 ++------ .../HeuristicLab.Clients.Access-3.3.csproj | 186 +------ .../HeuristicLab.Clients.Common-3.3.csproj | 90 +--- ...cLab.Clients.Hive.Administrator-3.3.csproj | 266 +++------- ...sticLab.Clients.Hive.JobManager-3.3.csproj | 235 ++------- ...isticLab.Clients.Hive.Slave.App-3.3.csproj | 6 +- ...lients.Hive.Slave.ConsoleClient-3.3.csproj | 6 +- ...Lab.Clients.Hive.Slave.TrayIcon-3.3.csproj | 6 +- ...ticLab.Clients.Hive.Slave.Views-3.3.csproj | 6 +- ...ients.Hive.Slave.WindowsService-3.3.csproj | 6 +- ...HeuristicLab.Clients.Hive.Slave-3.3.csproj | 9 +- ...HeuristicLab.Clients.Hive.Views-3.3.csproj | 241 ++------- .../3.3/HeuristicLab.Clients.Hive-3.3.csproj | 220 +------- .../HeuristicLab.Clients.OKB.Views-3.3.csproj | 325 ++++-------- .../3.3/HeuristicLab.Clients.OKB-3.3.csproj | 256 ++------- .../3.4/HeuristicLab.CodeEditor-3.4.csproj | 163 ++---- .../3.3/HeuristicLab.Collections-3.3.csproj | 172 +------ .../HeuristicLab.Common.Resources-3.3.csproj | 123 +---- .../3.3/HeuristicLab.Common-3.3.csproj | 159 +----- .../3.3/HeuristicLab.Core.Views-3.3.csproj | 307 ++++------- .../3.3/HeuristicLab.Core-3.3.csproj | 254 +-------- .../3.3/HeuristicLab.Data.Views-3.3.csproj | 238 +++------ .../3.3/HeuristicLab.Data-3.3.csproj | 201 +------- ...sticLab.DataPreprocessing.Views-3.4.csproj | 304 +++-------- .../HeuristicLab.DataPreprocessing-3.4.csproj | 173 +------ .../HeuristicLab.DebugEngine.Views-3.3.csproj | 145 +----- .../3.3/HeuristicLab.DebugEngine-3.3.csproj | 123 +---- ....Encodings.BinaryVectorEncoding-3.3.csproj | 205 +------- ...Encodings.IntegerVectorEncoding-3.3.csproj | 219 +------- ...Encodings.LinearLinkageEncoding-3.4.csproj | 204 +------- ...dings.PermutationEncoding.Views-3.3.csproj | 201 +------- ...b.Encodings.PermutationEncoding-3.3.csproj | 273 +--------- ...ab.Encodings.RealVectorEncoding-3.3.csproj | 262 +--------- .../3.3/GanttChart.cs | 2 +- ...ncodings.ScheduleEncoding.Views-3.3.csproj | 144 +----- .../3.3/ScheduleView.cs | 2 +- ...cLab.Encodings.ScheduleEncoding-3.3.csproj | 186 +------ ...licExpressionTreeEncoding.Views-3.4.csproj | 244 ++------- ....SymbolicExpressionTreeEncoding-3.4.csproj | 278 +--------- ...sticLab.ExactOptimization.Views-3.3.csproj | 177 ++----- .../HeuristicLab.ExactOptimization-3.3.csproj | 188 ++----- .../3.3/HeuristicLab.Hive-3.3.csproj | 117 +---- ...risticLab.MainForm.WindowsForms-3.3.csproj | 215 ++------ .../3.3/HeuristicLab.MainForm-3.3.csproj | 152 +----- ...ab.Operators.Programmable.Views-3.3.csproj | 139 +---- ...isticLab.Operators.Programmable-3.3.csproj | 173 +------ ....Views.GraphVisualization.Views-3.3.csproj | 162 +----- ...rators.Views.GraphVisualization-3.3.csproj | 174 +------ .../HeuristicLab.Operators.Views-3.3.csproj | 220 ++------ .../3.3/HeuristicLab.Operators-3.3.csproj | 204 +------- ...isticLab.Optimization.Operators-3.3.csproj | 220 +------- ...HeuristicLab.Optimization.Views-3.3.csproj | 380 ++++---------- .../3.3/HeuristicLab.Optimization-3.3.csproj | 312 +---------- .../3.3/HeuristicLab.Optimizer-3.3.csproj | 273 ++-------- ...uristicLab.ParallelEngine.Views-3.3.csproj | 128 +---- .../HeuristicLab.ParallelEngine-3.3.csproj | 102 +--- .../HeuristicLab.Parameters.Views-3.3.csproj | 212 ++------ .../3.3/HeuristicLab.Parameters-3.3.csproj | 167 +----- .../HeuristicLab.Persistence.GUI-3.3.csproj | 142 +---- .../3.3/HeuristicLab.Persistence-3.3.csproj | 248 +-------- ...uristicLab.PluginInfrastructure-3.3.csproj | 259 ++-------- ...icLab.Problems.BinPacking.Views-3.3.csproj | 129 +---- ...euristicLab.Problems.BinPacking-3.3.csproj | 226 +------- .../HeuristicLab.Problems.Binary-3.3.csproj | 146 +----- ...s.Symbolic.Classification.Views-3.4.csproj | 259 ++-------- ...nalysis.Symbolic.Classification-3.4.csproj | 252 +-------- ...lysis.Symbolic.Regression.Views-3.4.csproj | 273 ++-------- ...ataAnalysis.Symbolic.Regression-3.4.csproj | 271 ++-------- ...bolic.TimeSeriesPrognosis.Views-3.4.csproj | 219 ++------ ...is.Symbolic.TimeSeriesPrognosis-3.4.csproj | 214 +------- ...ems.DataAnalysis.Symbolic.Views-3.4.csproj | 267 +++------- ....Problems.DataAnalysis.Symbolic-3.4.csproj | 409 ++------------- ...lems.DataAnalysis.Trading.Views-3.4.csproj | 200 +------- ...b.Problems.DataAnalysis.Trading-3.4.csproj | 210 +------- ...Lab.Problems.DataAnalysis.Views-3.4.csproj | 484 ++++++------------ ...risticLab.Problems.DataAnalysis-3.4.csproj | 318 +----------- ....Problems.ExternalEvaluation.GP-3.5.csproj | 162 +----- ...blems.ExternalEvaluation.Matlab-3.3.csproj | 144 +----- ...blems.ExternalEvaluation.Scilab-3.3.csproj | 148 +----- ...oblems.ExternalEvaluation.Views-3.4.csproj | 204 ++------ ...Lab.Problems.ExternalEvaluation-3.4.csproj | 226 +------- ...oblems.GeneticProgramming.Views-3.3.csproj | 208 ++------ ...Lab.Problems.GeneticProgramming-3.3.csproj | 210 +------- ...b.Problems.GrammaticalEvolution-3.4.csproj | 234 ++------- ...isticLab.Problems.GraphColoring-3.3.csproj | 153 +----- ....Problems.Instances.CordeauGQAP-3.3.csproj | 98 +--- ...icLab.Problems.Instances.DIMACS-3.3.csproj | 86 +--- ...ms.Instances.DataAnalysis.Views-3.3.csproj | 183 ++----- ...Problems.Instances.DataAnalysis-3.3.csproj | 396 +------------- ....Problems.Instances.ElloumiCTAP-3.3.csproj | 99 +--- ...Problems.Instances.Orienteering-3.3.csproj | 85 +-- ...icLab.Problems.Instances.QAPLIB-3.3.csproj | 102 +--- ...b.Problems.Instances.Scheduling-3.3.csproj | 93 +--- ...Problems.Instances.TSPLIB.Views-3.3.csproj | 134 +---- ...icLab.Problems.Instances.TSPLIB-3.3.csproj | 106 +--- ....Instances.VehicleRouting.Views-3.4.csproj | 134 +---- ...oblems.Instances.VehicleRouting-3.4.csproj | 127 +---- ...ticLab.Problems.Instances.Views-3.3.csproj | 140 +---- ...HeuristicLab.Problems.Instances-3.3.csproj | 112 +--- ...sticLab.Problems.Knapsack.Views-3.3.csproj | 167 +----- .../HeuristicLab.Problems.Knapsack-3.3.csproj | 201 +------- ...Problems.LinearAssignment.Views-3.3.csproj | 154 +----- ...icLab.Problems.LinearAssignment-3.3.csproj | 159 +----- .../3.3/HeuristicLab.Problems.NK-3.3.csproj | 176 +------ ...Lab.Problems.Orienteering.Views-3.3.csproj | 155 +----- ...risticLab.Problems.Orienteering-3.3.csproj | 180 +------ ...euristicLab.Problems.PTSP.Views-3.3.csproj | 164 +----- .../3.3/HeuristicLab.Problems.PTSP-3.3.csproj | 197 +------ ....Problems.ParameterOptimization-3.3.csproj | 153 +----- ...Lab.Problems.Programmable.Views-3.3.csproj | 164 +----- ...risticLab.Problems.Programmable-3.3.csproj | 189 +------ ....QuadraticAssignment.Algorithms-3.3.csproj | 174 +------ ...blems.QuadraticAssignment.Views-3.3.csproj | 175 ++----- ...ab.Problems.QuadraticAssignment-3.3.csproj | 193 +------ ...icLab.Problems.Scheduling.Views-3.3.csproj | 165 +----- ...euristicLab.Problems.Scheduling-3.3.csproj | 179 +------ ...ms.TestFunctions.MultiObjective-3.3.csproj | 193 +------ ...ab.Problems.TestFunctions.Views-3.3.csproj | 208 ++------ ...isticLab.Problems.TestFunctions-3.3.csproj | 245 +-------- ...roblems.TravelingSalesman.Views-3.3.csproj | 210 ++------ ...cLab.Problems.TravelingSalesman-3.3.csproj | 240 ++------- ...b.Problems.VehicleRouting.Views-3.4.csproj | 268 ++-------- ...sticLab.Problems.VehicleRouting-3.4.csproj | 478 ++--------------- .../3.3/HeuristicLab.Random-3.3.csproj | 186 +------ .../HeuristicLab.Scripting.Views-3.3.csproj | 159 ++---- .../3.3/HeuristicLab.Scripting-3.3.csproj | 122 +---- .../3.3/HeuristicLab.Selection-3.3.csproj | 199 +------ .../HeuristicLab.SequentialEngine-3.3.csproj | 142 +---- ...cLab.Services.Access.DataAccess-3.3.csproj | 6 +- .../HeuristicLab.Services.Access-3.3.csproj | 6 +- ....Services.Deployment.DataAccess-3.3.csproj | 6 +- ...euristicLab.Services.Deployment-3.3.csproj | 6 +- ...icLab.Services.Deployment-3.3.Tests.csproj | 3 + ...ticLab.Services.Hive.DataAccess-3.3.csproj | 6 +- ...ab.Services.Hive.JanitorService-3.3.csproj | 6 +- .../3.3/HeuristicLab.Services.Hive-3.3.csproj | 6 +- ...sticLab.Services.OKB.DataAccess-3.3.csproj | 6 +- .../3.3/HeuristicLab.Services.OKB-3.3.csproj | 6 +- ...Lab.Services.WebApp.Maintenance-3.3.csproj | 6 +- ...cLab.Services.WebApp.Statistics-3.3.csproj | 6 +- ...isticLab.Services.WebApp.Status-3.3.csproj | 6 +- .../HeuristicLab.Services.WebApp-3.3.csproj | 6 +- HeuristicLab.Tests/HeuristicLab.Tests.csproj | 3 + .../3.3/HeuristicLab.Tracing-3.3.csproj | 125 +---- ...ization.ChartControlsExtensions-3.3.csproj | 92 +--- HeuristicLab/3.3/HeuristicLab-3.3.csproj | 134 +---- 175 files changed, 4540 insertions(+), 25765 deletions(-) diff --git a/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj b/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj index 67b49a4088..a7be06ce4f 100644 --- a/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj +++ b/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj @@ -1,76 +1,34 @@ - - - + - Debug - AnyCPU - {59F354CB-FE13-4253-AED2-AD86372BEC27} - Library - Properties HeuristicLab.Algorithms.ALPS - HeuristicLab.Algorithms.ALPS-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt MinimumRecommendedRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt MinimumRecommendedRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - false true @@ -78,119 +36,33 @@ HeuristicLab.snk - - - - - - - - - - - - - - - - - - - - - - - - - - - - {887425b4-4348-49ed-a457-b7d2c26ddbf9} - HeuristicLab.Analysis-3.3 - False - - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {23da7ff4-d5b8-41b6-aa96-f0561d24f3ee} - HeuristicLab.Operators-3.3 - False - - - {25087811-f74c-4128-bc86-8324271da13e} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {56f9106a-079f-4c61-92f6-86a84c2d84b7} - HeuristicLab.Parameters-3.3 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {f4539fb6-4708-40c9-be64-0a1390aea197} - HeuristicLab.Random-3.3 - False - - - {2c36cd4f-e5f5-43a4-801a-201ea895fe17} - HeuristicLab.Selection-3.3 - False - + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj b/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj index fe893db2aa..cc0c414ffb 100644 --- a/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj +++ b/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj @@ -1,85 +1,35 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {3C906172-E044-4DF0-B4FD-AA21192D5D3E} - Library - Properties HeuristicLab.Algorithms.Benchmarks.Views - HeuristicLab.Algorithms.Benchmarks.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false true @@ -88,21 +38,15 @@ HeuristicLab.snk - - - - - + UserControl - + BenchmarkAlgorithmView.cs - - @@ -110,60 +54,16 @@ - - {068C70A7-8CAF-4AB6-8721-4564D62292BC} - HeuristicLab.Algorithms.Benchmarks-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2} - HeuristicLab.Optimization.Views-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj b/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj index b1c194c6a1..c71d1cedbc 100644 --- a/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj +++ b/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj @@ -1,85 +1,35 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {068C70A7-8CAF-4AB6-8721-4564D62292BC} - Library - Properties HeuristicLab.Algorithms.Benchmarks - HeuristicLab.Algorithms.Benchmarks-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false true @@ -87,90 +37,29 @@ HeuristicLab.snk - - - - - - - - - - - - - - - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj b/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj index eadf9b3e0f..3ce60a65a2 100644 --- a/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj +++ b/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {291010E4-2F4E-4D29-A795-753CFF293FDB} - Library - Properties HeuristicLab.Algorithms.CMAEvolutionStrategy - HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,106 +22,38 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - False ..\..\bin\ALGLIB-3.17.0.dll False + False - - - 3.5 - - - - 3.5 - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - + @@ -142,109 +61,28 @@ - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - {887425b4-4348-49ed-a457-b7d2c26ddbf9} - HeuristicLab.Analysis-3.3 - False - - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {bb6d334a-4bb6-4674-9883-31a6ebb32cab} - HeuristicLab.Encodings.RealVectorEncoding-3.3 - False - - - {23da7ff4-d5b8-41b6-aa96-f0561d24f3ee} - HeuristicLab.Operators-3.3 - False - - - {25087811-f74c-4128-bc86-8324271da13e} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {56f9106a-079f-4c61-92f6-86a84c2d84b7} - HeuristicLab.Parameters-3.3 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {f4539fb6-4708-40c9-be64-0a1390aea197} - HeuristicLab.Random-3.3 - False - - - {2c36cd4f-e5f5-43a4-801a-201ea895fe17} - HeuristicLab.Selection-3.3 - False - + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj index 224de03e6b..1add6453f0 100644 --- a/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj @@ -1,38 +1,20 @@ - - - + - Debug - AnyCPU - {541A53F3-E6A7-402F-91BB-D76041CDD9FD} - Library - Properties HeuristicLab.Algorithms.DataAnalysis - HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4 - v4.7.2 - 512 + net472 true - + false + $(SolutionDir)\bin\ + true + false + false - AnyCPU - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 true - AnyCPU pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 true @@ -45,20 +27,14 @@ - False ..\..\bin\ALGLIB-3.17.0.dll False + False - - - - - - @@ -66,135 +42,29 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {4c7f6d8a-b279-4898-acd6-7be39111def9} - HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4 - False - - - {2e782078-fa81-4b70-b56f-74ce38dac6c8} - HeuristicLab.Algorithms.DataAnalysis-3.4 - False - - - {887425b4-4348-49ed-a457-b7d2c26ddbf9} - HeuristicLab.Analysis-3.3 - False - - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {dbecb8b0-b166-4133-baf1-ed67c3fd7fca} - HeuristicLab.Encodings.PermutationEncoding-3.3 - False - - - {06D4A186-9319-48A0-BADE-A2058D462EEA} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {df87c13e-a889-46ff-8153-66dcaa8c5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - {3540e29e-4793-49e7-8ee2-fea7f61c3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {f4539fb6-4708-40c9-be64-0a1390aea197} - HeuristicLab.Random-3.3 - False - + + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj index e9fddf9c9a..18d5cd6495 100644 --- a/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj @@ -1,38 +1,20 @@ - - - + - Debug - AnyCPU - {4C7F6D8A-B279-4898-ACD6-7BE39111DEF9} - Library - Properties HeuristicLab.Algorithms.DataAnalysis.Glmnet - HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4 - v4.7.2 - 512 + net472 true - + false + $(SolutionDir)\bin\ + true + false + false - AnyCPU - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 true - AnyCPU pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 true @@ -44,50 +26,24 @@ - true - $(SolutionDir)\bin\ - DEBUG;TRACE true full - x64 - prompt - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - true - $(SolutionDir)\bin\ - DEBUG;TRACE true full - x86 - prompt - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - - - - - - @@ -106,88 +62,29 @@ - - - - - - - - {2e782078-fa81-4b70-b56f-74ce38dac6c8} - HeuristicLab.Algorithms.DataAnalysis-3.4 - - - {887425b4-4348-49ed-a457-b7d2c26ddbf9} - HeuristicLab.Analysis-3.3 - - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - - - {06D4A186-9319-48A0-BADE-A2058D462EEA} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - - - {5AC82412-911B-4FA2-A013-EDC5E3F3FCC2} - HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4 - - - {3D28463F-EC96-4D82-AFEE-38BE91A0CA00} - HeuristicLab.Problems.DataAnalysis.Symbolic-3.4 - - - {df87c13e-a889-46ff-8153-66dcaa8c5674} - HeuristicLab.Problems.DataAnalysis-3.4 - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - + + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj index cb341f4a8e..fdccc26ced 100644 --- a/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj @@ -1,38 +1,19 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {A2330DB0-413D-4424-B4E6-591118E2B9F8} - Library - Properties HeuristicLab.Algorithms.DataAnalysis.Views - HeuristicLab.Algorithms.DataAnalysis.Views-3.4 - v4.7.2 - - - 512 + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -41,191 +22,159 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\HeuristicLab.Algorithms.DataAnalysis.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 $(SolutionDir)\bin\HeuristicLab.Algorithms.DataAnalysis.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 bin\Debug\HeuristicLab.Algorithms.DataAnalysis.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 $(SolutionDir)\bin\HeuristicLab.Algorithms.DataAnalysis.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true - false ..\..\bin\LibSVM-3.12.dll False - - - - - - - + UserControl - + GradientBoostedTreesModelEvaluationView.cs - + UserControl - + GradientBoostedTreesModelView.cs - + UserControl - + OneFactorClassificationModelView.cs - + UserControl - + LinearRegressionModelView.cs - + UserControl - + RandomForestModelView.cs - + UserControl - + RandomForestModelEvaluationView.cs - + UserControl - + MeanProdView.cs - + UserControl - + MeanSumView.cs - + UserControl - + CovarianceProdView.cs - + UserControl - + CovarianceSumView.cs - + UserControl - + GaussianProcessModelView.cs - + UserControl - + KMeansClusteringModelView.cs - + UserControl - + NcaDimensionReductionView.cs - + UserControl - + OneRClassificationModelView.cs - - + UserControl - + SupportVectorMachineModelSupportVectorsView.cs - + UserControl - + CrossValidationView.cs - - + UserControl - + SupportVectorMachineModelView.cs @@ -235,120 +184,29 @@ - - {2E782078-FA81-4B70-B56F-74CE38DAC6C8} - HeuristicLab.Algorithms.DataAnalysis-3.4 - False - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {72104A0B-90E7-42F3-9ABE-9BBBADD4B943} - HeuristicLab.Data.Views-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {06D4A186-9319-48A0-BADE-A2058D462EEA} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2} - HeuristicLab.Optimization.Views-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {05BAE4E1-A9FA-4644-AA77-42558720159E} - HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4 - - - {5AC82412-911B-4FA2-A013-EDC5E3F3FCC2} - HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4 - - - {7a2531ce-3f7c-4f13-bcca-ed6dc27a7086} - HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4 - - - {3d28463f-ec96-4d82-afee-38be91a0ca00} - HeuristicLab.Problems.DataAnalysis.Symbolic-3.4 - - - {3E9E8944-44FF-40BB-A622-3A4A7DD0F198} - HeuristicLab.Problems.DataAnalysis.Views-3.4 - False - - - {DF87C13E-A889-46FF-8153-66DCAA8C5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - {315BDA09-3F4F-49B3-9790-B37CFC1C5750} - HeuristicLab.Visualization.ChartControlsExtensions-3.3 - False - + + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj index a9794825af..7de430c9f0 100644 --- a/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj @@ -1,27 +1,13 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {2E782078-FA81-4B70-B56F-74CE38DAC6C8} - Library - Properties HeuristicLab.Algorithms.DataAnalysis - HeuristicLab.Algorithms.DataAnalysis-3.4 true HeuristicLab.snk - - - 3.5 - - - - - v4.7.2 - - + + + + net472 publish\ true Disk @@ -37,467 +23,88 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - False ..\..\bin\ALGLIB-3.17.0.dll - global False + False - False ..\..\bin\ALGLIB-3.7.0.dll - alglib_3_7 False + False + alglib_3_7 ..\..\bin\LibSVM-3.12.dll False - - - 3.5 - - - - - - - - - - Code - - - - - - - - - - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - Code - - - - Code - - - - - - - - - Code - - - Code - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - Code - - - Code - - - - - - - - - - - - - - - - - - - {1256B945-EEA9-4BE4-9880-76B5B113F089} - HeuristicLab.Algorithms.GradientDescent-3.3 - False - - - {F409DD9E-1E9C-4EB1-AA3A-9F6E987C6E58} - HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3 - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {BB6D334A-4BB6-4674-9883-31A6EBB32CAB} - HeuristicLab.Encodings.RealVectorEncoding-3.3 - False - - - {06D4A186-9319-48A0-BADE-A2058D462EEA} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {05BAE4E1-A9FA-4644-AA77-42558720159E} - HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4 - False - - - {5AC82412-911B-4FA2-A013-EDC5E3F3FCC2} - HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4 - False - - - {07486E68-1517-4B9D-A58D-A38E99AE71AB} - HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4 - - - {3D28463F-EC96-4D82-AFEE-38BE91A0CA00} - HeuristicLab.Problems.DataAnalysis.Symbolic-3.4 - False - - - {DF87C13E-A889-46FF-8153-66DCAA8C5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - {2C36CD4F-E5F5-43A4-801A-201EA895FE17} - HeuristicLab.Selection-3.3 - + + + + + + + + + + + + + + + + + + + + + + + - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - False ..\..\bin\HEAL.Attic.dll False + False - - - - + + \ No newline at end of file diff --git a/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj b/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj index 3c2e6731d9..f9b3e57984 100644 --- a/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj +++ b/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {E0B45023-CB84-48A1-A1B7-8295B64B7BAD} - Library - Properties HeuristicLab.Algorithms.EvolutionStrategy - HeuristicLab.Algorithms.EvolutionStrategy-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,89 +22,33 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - - - - - - - - + @@ -125,104 +56,27 @@ - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - {2C36CD4F-E5F5-43A4-801A-201EA895FE17} - HeuristicLab.Selection-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj b/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj index 6fa9c93e3c..d6298e3fe4 100644 --- a/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj +++ b/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj @@ -1,27 +1,13 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {A51DA44F-CB35-4F6F-99F5-2A2E904AB93B} - Library - Properties HeuristicLab.Algorithms.GeneticAlgorithm - HeuristicLab.Algorithms.GeneticAlgorithm-3.3 true HeuristicLab.snk - - - 3.5 - - - - - v4.7.2 - - + + + + net472 publish\ true Disk @@ -37,195 +23,61 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - - - 3.5 - - - - - - - - - - - - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - {2C36CD4F-E5F5-43A4-801A-201EA895FE17} - HeuristicLab.Selection-3.3 - False - + + + + + + + + + + + + + - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj b/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj index 9603110045..a14b6b0041 100644 --- a/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj +++ b/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj @@ -1,37 +1,20 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {1256B945-EEA9-4BE4-9880-76B5B113F089} - Library - Properties HeuristicLab.Algorithms.GradientDescent - HeuristicLab.Algorithms.GradientDescent-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,171 +23,79 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true false - false + + + - False ..\..\bin\ALGLIB-3.17.0.dll False + False - - - - - - - - - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {BB6D334A-4BB6-4674-9883-31A6EBB32CAB} - HeuristicLab.Encodings.RealVectorEncoding-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj b/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj index 0fb3a45e59..2cc5bbf60c 100644 --- a/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {4AE3FC69-C575-42D2-BC46-0FAD5850EFC5} - Library - Properties HeuristicLab.Algorithms.LocalSearch - HeuristicLab.Algorithms.LocalSearch-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,89 +22,33 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - - - - - - - - + @@ -125,104 +56,27 @@ - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - {2C36CD4F-E5F5-43A4-801A-201EA895FE17} - HeuristicLab.Selection-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj b/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj index d5a8dabe3b..2d15c2e86f 100644 --- a/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj +++ b/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj @@ -1,188 +1,70 @@ - - - + - Debug - AnyCPU - {0E2E224F-E9B2-41F3-B510-09183EEBA2AF} - Library - Properties HeuristicLab.Algorithms.MOCMAEvolutionStrategy - HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3 - v4.7.2 - 512 + net472 + false + 7.3 + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - 7.3 pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - 7.3 - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - 7.3 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - 7.3 - prompt MinimumRecommendedRules.ruleset - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - 7.3 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - 7.3 - prompt MinimumRecommendedRules.ruleset - False ..\..\bin\ALGLIB-3.17.0.dll False + False - - - - - - - - - - - - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {BB6D334A-4BB6-4674-9883-31A6EBB32CAB} - HeuristicLab.Encodings.RealVectorEncoding-3.3 - False - - - {23da7ff4-d5b8-41b6-aa96-f0561d24f3ee} - HeuristicLab.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540e29e-4793-49e7-8ee2-fea7f61c3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {D53E8E48-CFAA-4F57-AC35-63BEF4476159} - HeuristicLab.Problems.TestFunctions.MultiObjective-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.MultiObjectiveLocalSearch/3.3/HeuristicLab.Algorithms.MultiObjectiveLocalSearch.csproj b/HeuristicLab.Algorithms.MultiObjectiveLocalSearch/3.3/HeuristicLab.Algorithms.MultiObjectiveLocalSearch.csproj index e02e5f9799..0131377e32 100644 --- a/HeuristicLab.Algorithms.MultiObjectiveLocalSearch/3.3/HeuristicLab.Algorithms.MultiObjectiveLocalSearch.csproj +++ b/HeuristicLab.Algorithms.MultiObjectiveLocalSearch/3.3/HeuristicLab.Algorithms.MultiObjectiveLocalSearch.csproj @@ -1,35 +1,18 @@ - - - + - Debug - AnyCPU - {4CCDD23A-9FA3-4B36-9469-87D67E99225F} - Library - Properties - HeuristicLab.Algorithms.MultiObjectiveLocalSearch HeuristicLab.Algorithms.MultiObjectiveLocalSearch-3.3 - v4.7.2 - 512 - true - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 true @@ -38,133 +21,52 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 7.3 - prompt - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 7.3 - prompt - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 7.3 - prompt - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 7.3 - prompt $(SolutionDir)\bin\HEAL.Attic.dll False - - - - - - - - - - {887425b4-4348-49ed-a457-b7d2c26ddbf9} - HeuristicLab.Analysis-3.3 - False - - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {23da7ff4-d5b8-41b6-aa96-f0561d24f3ee} - HeuristicLab.Operators-3.3 - False - - - {25087811-f74c-4128-bc86-8324271da13e} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {56f9106a-079f-4c61-92f6-86a84c2d84b7} - HeuristicLab.Parameters-3.3 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {f4539fb6-4708-40c9-be64-0a1390aea197} - HeuristicLab.Random-3.3 - False - - - {2c36cd4f-e5f5-43a4-801a-201ea895fe17} - HeuristicLab.Selection-3.3 - False - + + + + + + + + + + + + + - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj b/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj index a335ac89e0..5b5ba08b0d 100644 --- a/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj +++ b/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj @@ -1,22 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {15452B9F-A436-4139-8EE7-DA72FB8D3664} - Library - Properties HeuristicLab.Algorithms.NSGA2 - HeuristicLab.Algorithms.NSGA2-3.3 - v4.7.2 - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -33,188 +22,62 @@ false false true - + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false + + + - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - {2C36CD4F-E5F5-43A4-801A-201EA895FE17} - HeuristicLab.Selection-3.3 - False - - - - 3.5 - - - - + + + + + + + + + + + + + - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj b/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj index 13bcb30265..2aaf05132c 100644 --- a/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj +++ b/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {1D41EAE6-CC79-41D4-858C-589C4DB5E50D} - Library - Properties HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy - HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,89 +22,33 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - - - - - - - - + @@ -125,104 +56,27 @@ - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - {887425b4-4348-49ed-a457-b7d2c26ddbf9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {23da7ff4-d5b8-41b6-aa96-f0561d24f3ee} - HeuristicLab.Operators-3.3 - False - - - {25087811-f74c-4128-bc86-8324271da13e} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {56f9106a-079f-4c61-92f6-86a84c2d84b7} - HeuristicLab.Parameters-3.3 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {f4539fb6-4708-40c9-be64-0a1390aea197} - HeuristicLab.Random-3.3 - False - - - {2c36cd4f-e5f5-43a4-801a-201ea895fe17} - HeuristicLab.Selection-3.3 - False - + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj b/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj index 04d077bffa..481052d9e0 100644 --- a/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj +++ b/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {F409DD9E-1E9C-4EB1-AA3A-9F6E987C6E58} - Library - Properties HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm - HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,94 +22,33 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - - - - - - - - - - - - - + @@ -130,104 +56,27 @@ - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - {2C36CD4F-E5F5-43A4-801A-201EA895FE17} - HeuristicLab.Selection-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj b/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj index 01e6d54473..351f1461f7 100644 --- a/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj +++ b/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj @@ -1,33 +1,18 @@ - - - + - Debug - AnyCPU - {9319C447-8183-4DBC-8145-0E3CF98084CC} - Library - Properties HeuristicLab.Algorithms.ParameterlessPopulationPyramid - HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3 - v4.7.2 - 512 + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 true @@ -36,61 +21,24 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - - - - - - - - - - - - - - - - - @@ -98,82 +46,26 @@ - - {887425b4-4348-49ed-a457-b7d2c26ddbf9} - HeuristicLab.Analysis-3.3 - False - - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {66d249c3-a01d-42a8-82a2-919bc8ec3d83} - HeuristicLab.Encodings.BinaryVectorEncoding-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {56f9106a-079f-4c61-92f6-86a84c2d84b7} - HeuristicLab.Parameters-3.3 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {fc627be5-0f93-47d8-bd2e-530ea2b8aa5f} - HeuristicLab.Problems.Binary-3.3 - False - - - {f4539fb6-4708-40c9-be64-0a1390aea197} - HeuristicLab.Random-3.3 - False - + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj b/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj index 613662fd28..1710e856ac 100644 --- a/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj +++ b/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj @@ -1,22 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {2C429157-9C34-4DD3-9D5F-B444B751E39A} - Library - Properties HeuristicLab.Algorithms.ParticleSwarmOptimization - HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3 - v4.7.2 - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -33,96 +22,37 @@ false false true - + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false + + + - - - 3.5 - - - - 3.5 - - - 3.5 - - - - - - - - - - - - - - - - + @@ -130,103 +60,26 @@ - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj b/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj index be87789e0e..7ea6f8322d 100644 --- a/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj +++ b/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj @@ -1,194 +1,65 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {B03C4E41-1D01-4C60-B0F4-DBB257D98CA8} - Library - Properties HeuristicLab.Algorithms.RAPGA - HeuristicLab.Algorithms.RAPGA-3.3 - v4.7.2 - 512 + net472 true HeuristicLab.snk - + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - - - - - - - - - - - - - - - - - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - {2C36CD4F-E5F5-43A4-801A-201EA895FE17} - HeuristicLab.Selection-3.3 - False - + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj b/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj index ab8c2201d4..48c646b9ad 100644 --- a/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj @@ -1,68 +1,33 @@ - - - + - Debug - AnyCPU - {4A15DC1A-51EE-4CB7-AC05-F5AFDDECE1B1} - Library - Properties HeuristicLab.Algorithms.RandomSearch - HeuristicLab.Algorithms.RandomSearch-3.3 - v4.7.2 - 512 + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset @@ -72,83 +37,31 @@ HeuristicLab.snk - - - - - - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj b/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj index 710fa1e864..465f40737c 100644 --- a/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj @@ -1,79 +1,32 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {5FEE5DB4-7FD9-4CBD-BEC2-3FEE17B31A94} - Library - Properties HeuristicLab.Algorithms.ScatterSearch - HeuristicLab.Algorithms.ScatterSearch-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false true @@ -82,110 +35,36 @@ HeuristicLab.snk - - - - - - - - - - - - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - {2C36CD4F-E5F5-43A4-801A-201EA895FE17} - HeuristicLab.Selection-3.3 - False - + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj b/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj index f7f7d5a395..cfba8926b4 100644 --- a/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj +++ b/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {96E5ED5B-187D-4012-9CDA-D85CDAD38342} - Library - Properties HeuristicLab.Algorithms.SimulatedAnnealing - HeuristicLab.Algorithms.SimulatedAnnealing-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,89 +22,33 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - - - - - - - - + @@ -125,99 +56,26 @@ - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj b/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj index 7063f1631c..5de6052389 100644 --- a/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {D58A232D-04BA-4186-B73E-0EC86FD31ABE} - Library - Properties HeuristicLab.Algorithms.TabuSearch - HeuristicLab.Algorithms.TabuSearch-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,202 +22,63 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - - - - Code - - - - Code - - - - Code - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - {2C36CD4F-E5F5-43A4-801A-201EA895FE17} - HeuristicLab.Selection-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj b/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj index a1c7c49c8c..47f9bccc8b 100644 --- a/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {E4CFB0C3-0589-4893-B38E-8BEDF885C765} - Library - Properties HeuristicLab.Algorithms.VariableNeighborhoodSearch - HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,88 +22,33 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - - - - - - - + @@ -124,104 +56,27 @@ - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - {2C36CD4F-E5F5-43A4-801A-201EA895FE17} - HeuristicLab.Selection-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj b/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj index 628bfbe5ed..3dd11a80ca 100644 --- a/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj +++ b/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {052881B5-4D5D-41C5-9555-FECA01E0BAC8} - Library - Properties HeuristicLab.Analysis.Statistics.Views - HeuristicLab.Analysis.Statistics.Views-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,132 +22,78 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - False ..\..\bin\ALGLIB-3.17.0.dll False + False - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - - - + UserControl - + SampleSizeInfluenceView.cs - + UserControl - + StatisticalTestsView.cs - + UserControl - + CorrelationView.cs - + UserControl - + ChartAnalysisView.cs - + Form - + StatisticalTestsConfigurationDialog.cs @@ -169,107 +102,22 @@ - - {76945d76-ca61-4147-9dc2-0acdcddf87f9} - HeuristicLab.Analysis.Views-3.3 - False - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {72104a0b-90e7-42f3-9abe-9bbbadd4b943} - HeuristicLab.Data.Views-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {662b4b15-8f4d-4ae5-b3eb-d91c215f5af2} - HeuristicLab.Optimization.Views-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {315BDA09-3F4F-49B3-9790-B37CFC1C5750} - HeuristicLab.Visualization.ChartControlsExtensions-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj b/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj index 978b3b392b..1d8eaaca98 100644 --- a/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj +++ b/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {76945D76-CA61-4147-9DC2-0ACDCDDF87F9} - Library - Properties HeuristicLab.Analysis.Views - HeuristicLab.Analysis.Views-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,206 +22,152 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - False ..\..\bin\ALGLIB-3.17.0.dll False + False - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - + UserControl - + DataTableView.cs - + UserControl - + GanttDataView.cs - + UserControl - + IndexedDataTableView.cs - + UserControl - + ScatterPlotView.cs - + Form - + ScatterPlotVisualPropertiesDialog.cs - + UserControl - + ScatterPlotVisualPropertiesControl.cs - + UserControl - + ScatterPlotDataRowVisualPropertiesControl.cs - + UserControl - + ScatterPlotHistoryView.cs - + UserControl - + AlleleFrequencyCollectionView.cs - + UserControl - + DataRowVisualPropertiesControl.cs - + UserControl - + DataTableVisualPropertiesControl.cs - + Form - + DataTableVisualPropertiesDialog.cs - + UserControl - + HeatMapHistoryView.cs - + UserControl - + DataTableHistoryView.cs - + UserControl - + HeatMapView.cs - + UserControl - + AlleleFrequencyView.cs - + UserControl - + AlleleFrequencyCollectionHistoryView.cs - - - + UserControl - + HistogramControl.cs @@ -243,92 +176,23 @@ - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {315BDA09-3F4F-49B3-9790-B37CFC1C5750} - HeuristicLab.Visualization.ChartControlsExtensions-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + - + HeatMapView.cs - - \ No newline at end of file diff --git a/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj b/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj index abacfc3553..3922581ab0 100644 --- a/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj +++ b/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - Library - Properties HeuristicLab.Analysis - HeuristicLab.Analysis-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,247 +22,69 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - False ..\..\bin\ALGLIB-3.17.0.dll False + False - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj b/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj index f5f636dd6d..4473b85be2 100644 --- a/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj +++ b/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj @@ -1,19 +1,9 @@ - - + - Debug x86 8.0.30703 - 2.0 - {C9CF6AE8-4637-4A75-9141-042F479B5D50} - Library - Properties HeuristicLab.Clients.Access.Administration - HeuristicLab.Clients.Access.Administration-3.3 - v4.7.2 - - - 512 + net472 publish\ true Disk @@ -29,73 +19,34 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false true @@ -103,107 +54,99 @@ HeuristicLab.snk + + + - - - - - - - - - - - - + Form - + PasswordDisplayDialog.cs - + UserControl - + RefreshableRoleSelectionListView.cs - + UserControl - + RoleSelectionListView.cs - + UserControl - + RefreshableRoleListView.cs - + UserControl - + RoleListView.cs - + UserControl - + UserGroupListView.cs - + UserControl - + RefreshableUserGroupListView.cs - + UserControl - + UserGroupView.cs - + UserControl - + RoleView.cs - + UserControl - + RefreshableUserListView.cs - + UserControl - + RefreshableView.cs - + Form - + UserAdministrationDialog.cs - + UserControl - + UserListView.cs - + UserControl - + UserView.cs @@ -211,113 +154,27 @@ - - False - Microsoft .NET Framework 4 %28x86 and x64%29 - true - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - false - - - False - Windows Installer 3.1 - true - - - - - {FE856595-64CD-46DA-9CD2-FFF3E6B0D4F2} - HeuristicLab.Clients.Access.Views-3.3 - True - - - {494F87F4-0F25-4D33-A382-10CDB2174D48} - HeuristicLab.Clients.Access-3.3 - True - - - {730A9104-D4D1-4360-966B-E49B7571DDA3} - HeuristicLab.Clients.Common-3.3 - True - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - True - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - True - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - True - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - True - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - True - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - True - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - True - - - {C664305E-497C-4533-A140-967DEDB05C19} - HeuristicLab.Optimizer-3.3 - True - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - True - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - True - + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj b/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj index 0d04a4a0d7..e163687f48 100644 --- a/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj +++ b/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj @@ -1,85 +1,36 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {FE856595-64CD-46DA-9CD2-FFF3E6B0D4F2} - Library - Properties HeuristicLab.Clients.Access.Views - HeuristicLab.Clients.Access.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false HeuristicLab.snk @@ -87,99 +38,91 @@ true + + + - - - - - - - - + Form - + ClientInformationDialog.cs - + Form - + ClientRegistrationDialog.cs - + UserControl - + ClientView.cs - - - - - + Form - + ChangePasswordDialog.cs - + Form - + LightweightUserGroupSelectionDialog.cs - + UserControl - + LightweightUserGroupSelectionView.cs - + UserControl - + LightweightUserInformationView.cs - + UserControl - + RefreshableLightweightAccessClientInformationView.cs - + UserControl - + LightweightUserView.cs - + UserControl - + RefreshableLightweightAccessClientView.cs - + UserControl - + RefreshableLightweightUserInformationView.cs - + UserControl - + RefreshableView.cs - + Form - + UserInformationDialog.cs @@ -190,86 +133,26 @@ - - {494F87F4-0F25-4D33-A382-10CDB2174D48} - HeuristicLab.Clients.Access-3.3 - False - - - {730A9104-D4D1-4360-966B-E49B7571DDA3} - HeuristicLab.Clients.Common-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {C664305E-497C-4533-A140-967DEDB05C19} - HeuristicLab.Optimizer-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj b/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj index 65868476ad..c94a4a605b 100644 --- a/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj +++ b/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj @@ -1,85 +1,36 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {494F87F4-0F25-4D33-A382-10CDB2174D48} - Library - Properties HeuristicLab.Clients.Access - HeuristicLab.Clients.Access-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false true @@ -87,55 +38,24 @@ HeuristicLab.snk + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + True True Settings.settings - - - Designer - @@ -146,76 +66,24 @@ - - {068C70A7-8CAF-4AB6-8721-4564D62292BC} - HeuristicLab.Algorithms.Benchmarks-3.3 - False - - - {730A9104-D4D1-4360-966B-E49B7571DDA3} - HeuristicLab.Clients.Common-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj b/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj index 2ef9749984..ace33cc995 100644 --- a/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj +++ b/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj @@ -1,39 +1,19 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {730A9104-D4D1-4360-966B-E49B7571DDA3} - Library - Properties HeuristicLab.Clients.Common - HeuristicLab.Clients.Common-3.3 - v4.7.2 - - - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -42,96 +22,60 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 bin\Debug\HeuristicLab.Clients.Common-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false true false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 $(SolutionDir)\bin\HeuristicLab.Clients.Common-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\HeuristicLab.Clients.Common-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 $(SolutionDir)\bin\HeuristicLab.Clients.Common-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true - false - - - - - - - - - + Form - + PasswordDialog.cs - - - + True True Settings.settings - - PublicSettingsSingleFileGenerator @@ -143,20 +87,8 @@ - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + - - \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj b/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj index fdf0ea44ed..217b28cf9c 100644 --- a/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj @@ -1,85 +1,36 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {5211F1AD-BBA2-4C62-8749-DCA0A25CF5D8} - Library - Properties HeuristicLab.Clients.Hive.Administrator - HeuristicLab.Clients.Hive.Administrator-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false true @@ -87,6 +38,9 @@ HeuristicLab.snk + + + ..\..\bin\Calendar.DayView.dll @@ -96,222 +50,124 @@ ..\..\bin\HeuristicLab.DayView-1.0.dll False - - - - - - - - + Form - + DowntimeTypeDialog.cs - + UserControl - + DowntimeTypeView.cs - + UserControl - + HiveAdministratorView.cs - - Code - - - + UserControl - + ProjectJobsView.cs - + UserControl - + ProjectPermissionsView.cs - + UserControl - + ProjectResourcesView.cs - + UserControl - + ProjectsView.cs - + UserControl - + ProjectView.cs - + Form - + Recurrence.cs - - + UserControl - + ResourcesView.cs - + UserControl - + ScheduleView.cs - + UserControl - + ResourceView.cs - + UserControl - + SlaveView.cs - - - - {C9CF6AE8-4637-4A75-9141-042F479B5D50} - HeuristicLab.Clients.Access.Administration-3.3 - - - {FE856595-64CD-46DA-9CD2-FFF3E6B0D4F2} - HeuristicLab.Clients.Access.Views-3.3 - - - {494F87F4-0F25-4D33-A382-10CDB2174D48} - HeuristicLab.Clients.Access-3.3 - - - {730A9104-D4D1-4360-966B-E49B7571DDA3} - HeuristicLab.Clients.Common-3.3 - False - - - {E1D6C801-892A-406A-B606-F158E36DD3C3} - HeuristicLab.Clients.Hive.Views-3.3 - False - - - {B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB} - HeuristicLab.Clients.Hive-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {72104A0B-90E7-42F3-9ABE-9BBBADD4B943} - HeuristicLab.Data.Views-3.3 - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {C664305E-497C-4533-A140-967DEDB05C19} - HeuristicLab.Optimizer-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj b/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj index 081618308c..0d4b809576 100644 --- a/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj +++ b/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj @@ -1,85 +1,36 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {DBFD7205-61AF-40EF-8776-3052DEF91CF3} - Library - Properties HeuristicLab.Clients.Hive.JobManager - HeuristicLab.Clients.Hive.JobManager-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false true @@ -87,183 +38,91 @@ HeuristicLab.snk + + + - - - - - - - - - - - - - - + UserControl - + HiveJobManagerView.cs - - + UserControl - + HiveJobPermissionListView.cs - + UserControl - + HiveJobPermissionView.cs - + UserControl - + HiveResourceSelector.cs - + Form - + HiveResourceSelectorDialog.cs - + UserControl - + RefreshableHiveJobListView.cs - + UserControl - + RefreshableHiveJobView.cs - - - {494f87f4-0f25-4d33-a382-10cdb2174d48} - HeuristicLab.Clients.Access-3.3 - False - - - {730a9104-d4d1-4360-966b-e49b7571dda3} - HeuristicLab.Clients.Common-3.3 - False - - - {E1D6C801-892A-406A-B606-F158E36DD3C3} - HeuristicLab.Clients.Hive.Views-3.3 - False - - - {B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB} - HeuristicLab.Clients.Hive-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {F98A1740-9AC9-4D36-A582-6A2D0D06978D} - HeuristicLab.Hive-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {C664305E-497C-4533-A140-967DEDB05C19} - HeuristicLab.Optimizer-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj index d0f68131cf..b07e573d00 100644 --- a/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj @@ -20,6 +20,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -156,7 +159,6 @@ - --> - \ No newline at end of file + --> \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj index 544fdf7bb8..8c07fb0701 100644 --- a/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj @@ -19,6 +19,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -124,7 +127,6 @@ - --> - \ No newline at end of file + --> \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj index de36c955e2..7af9e53693 100644 --- a/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj @@ -20,6 +20,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -159,7 +162,6 @@ - --> - \ No newline at end of file + --> \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj index b6c823e458..8e2d58c7ff 100644 --- a/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj @@ -19,6 +19,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -277,7 +280,6 @@ - --> - \ No newline at end of file + --> \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj index 463b813624..ee9d1dd949 100644 --- a/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj @@ -34,6 +34,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -176,7 +179,6 @@ - --> - \ No newline at end of file + --> \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj b/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj index 6f84df278d..5607637ca8 100644 --- a/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj @@ -19,6 +19,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -187,10 +190,8 @@ - --> - - - \ No newline at end of file + + --> \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj b/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj index 3cd2a4374c..97a9fb2ae5 100644 --- a/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj @@ -1,85 +1,36 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {E1D6C801-892A-406A-B606-F158E36DD3C3} - Library - Properties HeuristicLab.Clients.Hive.Views - HeuristicLab.Clients.Hive.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false true @@ -87,202 +38,122 @@ HeuristicLab.snk + + + - - - - - - - - + Component - + Form - + HiveInformationDialog.cs - + UserControl - + OptimizerHiveTaskView.cs - + UserControl - + HiveItemView.cs - + UserControl - + HiveTaskListView.cs - + UserControl - + HiveTaskView.cs - - - + UserControl - + HiveTaskItemTreeView.cs - + UserControl - + ItemTreeView.cs - + UserControl - + StateLogGanttChartListView.cs - + UserControl - + StateLogGanttChartView.cs - + UserControl - + StateLogListView.cs - + UserControl - + StateLogView.cs - + Component - - - + HiveInformationDialog.cs - - {B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB} - HeuristicLab.Clients.Hive-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {F98A1740-9AC9-4D36-A582-6A2D0D06978D} - HeuristicLab.Hive-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {C664305E-497C-4533-A140-967DEDB05C19} - HeuristicLab.Optimizer-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {315BDA09-3F4F-49B3-9790-B37CFC1C5750} - HeuristicLab.Visualization.ChartControlsExtensions-3.3 - False - + + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj b/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj index 56b7f4edae..629abe79c5 100644 --- a/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj +++ b/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj @@ -1,37 +1,20 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {B5EF1E5A-9F3D-40B9-B4B0-30AADF2E2CEB} - Library - Properties HeuristicLab.Clients.Hive - HeuristicLab.Clients.Hive-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,146 +23,58 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\HeuristicLab.Clients.Hive-3.4.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 bin\Release\HeuristicLab.Clients.Hive-3.4.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 ..\..\bin\HeuristicLab.Clients.Hive-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 ..\..\bin\HeuristicLab.Clients.Hive-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true - false + + + - - - - - - - - - - - - - - - - + True True Settings.settings - - - - - - - Designer - - - - - - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -188,90 +83,27 @@ - - {494F87F4-0F25-4D33-A382-10CDB2174D48} - HeuristicLab.Clients.Access-3.3 - - - {730A9104-D4D1-4360-966B-E49B7571DDA3} - HeuristicLab.Clients.Common-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {F98A1740-9AC9-4D36-A582-6A2D0D06978D} - HeuristicLab.Hive-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj b/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj index ab8b699a92..73e555d2e4 100644 --- a/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj +++ b/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj @@ -1,85 +1,36 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {399EBB6E-37A1-4AE4-B8CD-0D461FF286A3} - Library - Properties HeuristicLab.Clients.OKB - HeuristicLab.Clients.OKB.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false true @@ -87,208 +38,199 @@ HeuristicLab.snk + + + - - - - - - - - - + UserControl - + AdministratorView.cs - + UserControl - + AlgorithmClassCollectionView.cs - + UserControl - + AlgorithmCollectionView.cs - + UserControl - + AlgorithmView.cs - + UserControl - + OKBItemCollectionView.cs - + UserControl - + NamedOKBItemView.cs - + UserControl - + OKBItemView.cs - + UserControl - + PlatformCollectionView.cs - + UserControl - + ProblemClassCollectionView.cs - + UserControl - + ProblemCollectionView.cs - + UserControl - + ProblemView.cs - - - + UserControl - + CombinedFilterView.cs - + UserControl - + OrdinalComparisonTimeSpanFilterView.cs - + UserControl - + OrdinalComparisonPercentFilterView.cs - + UserControl - + OrdinalComparisonDateTimeFilterView.cs - + UserControl - + OrdinalComparisonFloatFilterView.cs - + UserControl - + OrdinalComparisonIntFilterView.cs - + UserControl - + EqualityComparisonBoolFilterView.cs - + UserControl - + EqualityComparisonFilterView.cs - + UserControl - + FilterView.cs - + UserControl - + OrdinalComparisonDoubleFilterView.cs - + UserControl - + OrdinalComparisonFilterView.cs - + UserControl - + OrdinalComparisonLongFilterView.cs - + UserControl - + QueryView.cs - + UserControl - + StringComparisonAvailableValuesFilterView.cs - + UserControl - + StringComparisonFilterView.cs - - - + UserControl - + OKBAlgorithmView.cs - + UserControl - + OKBExperimentUploadView.cs - + UserControl - + OKBProblemView.cs - + UserControl - + OKBRunView.cs - + UserControl - + SingleObjectiveOKBSolutionView.cs @@ -298,103 +240,24 @@ - - {FE856595-64CD-46DA-9CD2-FFF3E6B0D4F2} - HeuristicLab.Clients.Access.Views-3.3 - False - - - {494F87F4-0F25-4D33-A382-10CDB2174D48} - HeuristicLab.Clients.Access-3.3 - False - - - {73857A9C-9706-4B72-8D9C-210B5B6A5691} - HeuristicLab.Clients.OKB-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {72104A0B-90E7-42F3-9ABE-9BBBADD4B943} - HeuristicLab.Data.Views-3.3 - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2} - HeuristicLab.Optimization.Views-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {C664305E-497C-4533-A140-967DEDB05C19} - HeuristicLab.Optimizer-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + + + + + + + + + + + + - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj b/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj index 0c3cab5e2f..34b0a0fe3c 100644 --- a/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj +++ b/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj @@ -1,85 +1,36 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {73857A9C-9706-4B72-8D9C-210B5B6A5691} - Library - Properties HeuristicLab.Clients.OKB - HeuristicLab.Clients.OKB-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false true @@ -87,97 +38,20 @@ HeuristicLab.snk + + + - - - - - - - - - - - - - - - - - - - - - + True True Settings.settings - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -192,98 +66,26 @@ - - {494F87F4-0F25-4D33-A382-10CDB2174D48} - HeuristicLab.Clients.Access-3.3 - False - False - - - {730A9104-D4D1-4360-966B-E49B7571DDA3} - HeuristicLab.Clients.Common-3.3 - False - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - False - + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj b/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj index c675ae5b7a..f439dbdef5 100644 --- a/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj +++ b/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj @@ -1,83 +1,34 @@ - - - + - Debug - AnyCPU - {C38691AE-ECB4-489A-A05D-B035554E0168} - Library - Properties HeuristicLab.CodeEditor - HeuristicLab.CodeEditor-3.4 - v4.7.2 - 512 + net472 + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - - - AllRules.ruleset - false + true @@ -87,124 +38,76 @@ - False ..\..\bin\ICSharpCode.AvalonEdit.dll False + False - False ..\..\bin\ICSharpCode.NRefactory.dll False + False - False ..\..\bin\ICSharpCode.NRefactory.Cecil.dll False + False - False ..\..\bin\ICSharpCode.NRefactory.CSharp.dll False + False - False ..\..\bin\ICSharpCode.NRefactory.Xml.dll False + False - - - - - - + Form - + CodeViewer.cs - + Form - + GoToLineDialog.cs - + UserControl - - - - - - - - - - - - - - - - - - - - - - - - - - - - + UserControl - + CodeEditor.cs - + UserControl - + SimpleCodeEditor.cs - + AvalonEditWrapper.xaml - - - - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + @@ -240,14 +143,6 @@ - - \ No newline at end of file diff --git a/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj b/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj index 2254629cee..01b6638f82 100644 --- a/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj +++ b/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - Library - Properties HeuristicLab.Collections - HeuristicLab.Collections-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,181 +22,56 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - - - - - - - - - - - - - - - - - - - Code - - - Code - - - - - - - - - - - - - - - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Common.Resources/3.3/HeuristicLab.Common.Resources-3.3.csproj b/HeuristicLab.Common.Resources/3.3/HeuristicLab.Common.Resources-3.3.csproj index 41760ce8fb..cda7e1a544 100644 --- a/HeuristicLab.Common.Resources/3.3/HeuristicLab.Common.Resources-3.3.csproj +++ b/HeuristicLab.Common.Resources/3.3/HeuristicLab.Common.Resources-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - Library - Properties HeuristicLab.Common.Resources - HeuristicLab.Common.Resources-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,93 +22,42 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - + True True HeuristicLab.resx - - - + True True VSImageLibrary.resx @@ -132,18 +68,14 @@ - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + - + PublicResXFileCodeGenerator HeuristicLab.Designer.cs - + PublicResXFileCodeGenerator VSImageLibrary.Designer.cs Designer @@ -480,31 +412,6 @@ - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - \ No newline at end of file diff --git a/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj b/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj index 5468e5ed39..3e6f673f16 100644 --- a/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj +++ b/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - Library - Properties HeuristicLab.Common - HeuristicLab.Common-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,169 +22,55 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - - - AllRules.ruleset - false + - - - 3.5 - - - - 3.5 - - - 3.5 - - - - - 3.0 - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj b/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj index 8248798f8e..6fe039be92 100644 --- a/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj +++ b/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {E226881D-315F-423D-B419-A766FE0D8685} - Library - Properties HeuristicLab.Core.Views - HeuristicLab.Core.Views-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,303 +22,248 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - - + UserControl - + BreadcrumbViewHost.cs - + UserControl - + CheckedItemCollectionView.cs - + UserControl - + Clipboard.cs - + UserControl - + CheckedItemListView.cs - + UserControl - + MovieView.cs - + UserControl - + LogView.cs - + UserControl - + NestingLevelErrorControl.cs - + UserControl - + ParameterizedItemView.cs - - + True True Settings.settings - + UserControl - + VariableValueView.cs - + Form - + TextDialog.cs - + UserControl - + OperatorTreeView.cs - + UserControl - + ParameterizedNamedItemView.cs - + UserControl - + ValueParameterCollectionView.cs - + UserControl - + ItemArrayView.cs - + Form - + CreateParameterDialog.cs - + UserControl - + EngineView.cs - + UserControl - + ItemView.cs - + UserControl - + NamedItemView.cs - + UserControl - + OperatorGraphView.cs - + UserControl - + OperatorListView.cs - + UserControl - + OperatorsSidebar.cs - + Form - + TypeSelectorDialog.cs - + UserControl - + TypeSelector.cs - + UserControl - + OperatorCollectionView.cs - + UserControl - + OperatorSetView.cs - + UserControl - + ItemSetView.cs - + UserControl - + ItemCollectionView.cs - + UserControl - + ScopeListView.cs - + UserControl - + ItemListView.cs - + UserControl - + ScopeView.cs - + UserControl - + VariableCollectionView.cs - + UserControl - + ParameterCollectionView.cs - + UserControl - + NamedItemCollectionView.cs - - + UserControl - + VariableView.cs @@ -344,79 +276,22 @@ - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj b/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj index 113241170b..da4ae06714 100644 --- a/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj +++ b/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj @@ -1,26 +1,13 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {C36BD924-A541-4A00-AFA8-41701378DDC5} - Library - Properties HeuristicLab.Core - HeuristicLab.Core-3.3 true HeuristicLab.snk - - - 3.5 - - + + true - v4.7.2 - - + net472 http://localhost/HeuristicLab.Core/ true Web @@ -35,257 +22,56 @@ 1.0.0.%2a false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - - - AllRules.ruleset - false + pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - false - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - - - 3.5 - - - - - - - - - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - - - - - - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 2.0 %28x86%29 - true - - - False - .NET Framework 3.0 %28x86%29 - false - - - False - .NET Framework 3.5 - false - - - False - .NET Framework 3.5 SP1 - false - + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj b/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj index d9e983adc9..07907c6195 100644 --- a/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj +++ b/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {72104A0B-90E7-42F3-9ABE-9BBBADD4B943} - Library - Properties HeuristicLab.Data.Views - HeuristicLab.Data.Views-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,201 +22,147 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - + UserControl - + DoubleRangeView.cs - + UserControl - + EnhancedStringConvertibleMatrixView.cs - + UserControl - + EnumValueView.cs - + UserControl - + IntRangeView.cs - + UserControl - + DirectoryValueView.cs - + UserControl - + FileValueView.cs - + UserControl - + TextFileView.cs - - + Form - + StringConvertibleMatrixColumnVisibilityDialog.cs - + Form - + StringConvertibleMatrixRowVisibilityDialog.cs - + UserControl - + StringConvertibleValueTupleView.cs - + UserControl - + BoolValueView.cs - + UserControl - + BoolMatrixView.cs - + Form - + StringConvertibleMatrixVisibilityDialog.cs - + UserControl - + ComparisonView.cs - - + UserControl - + StringConvertibleArrayView.cs - + UserControl - + StringConvertibleMatrixView.cs - + UserControl - + TextValueView.cs - + UserControl - + StringConvertibleValueView.cs @@ -238,72 +171,15 @@ - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj b/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj index 9a773115d1..42d6c1878b 100644 --- a/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj +++ b/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj @@ -1,26 +1,13 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - Library - Properties HeuristicLab.Data - HeuristicLab.Data-3.3 true HeuristicLab.snk - - - 3.5 - - + + true - v4.7.2 - - + net472 http://localhost/HeuristicLab.Data/ true Web @@ -35,204 +22,56 @@ 1.0.0.%2a false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - - - AllRules.ruleset - false + pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - false - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 2.0 %28x86%29 - true - - - False - .NET Framework 3.0 %28x86%29 - false - - - False - .NET Framework 3.5 - false - - - False - .NET Framework 3.5 SP1 - false - - - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj b/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj index 9e3b448371..57e9ba6170 100644 --- a/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj +++ b/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj @@ -1,84 +1,34 @@ - - - + - Debug - AnyCPU - {3FC7515E-D8A0-41FE-8CFA-50E3ADA61A1E} - Library - Properties HeuristicLab.DataPreprocessing.Views - HeuristicLab.DataPreprocessing.Views-3.4 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false true @@ -87,144 +37,136 @@ HeuristicLab.snk - - - - + UserControl - + PreprocessingCheckedVariablesView.cs - + UserControl - + PreprocessingFeatureCorrelationView.cs - + UserControl - + CheckedFilterCollectionView.cs - + UserControl - + CheckedTransformationListView.cs - + UserControl - + ComparisonFilterView.cs - + True True PreprocessingIcons.resx - + Form - + RenameColumnsDialog.cs - + UserControl - + ScatterPlotSingleView.cs - + UserControl - + DataCompletenessView.cs - + UserControl - + DataGridContentView.cs - + UserControl - + DataPreprocessingView.cs - - + UserControl - + FilterView.cs - + UserControl - + ScatterPlotMultiView.cs - + Form - + SearchAndReplaceDialog.cs - + UserControl - + HistogramView.cs - + UserControl - + LineChartView.cs - + UserControl - + ManipulationView.cs - - + UserControl - + PreprocessingChartView.cs - - + UserControl - + StatisticsView.cs - + UserControl - + TransformationView.cs - - - + Component - + UserControl - + ViewShortcutListView.cs @@ -234,118 +176,30 @@ - - {76945D76-CA61-4147-9DC2-0ACDCDDF87F9} - HeuristicLab.Analysis.Views-3.3 - False - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {72104a0b-90e7-42f3-9abe-9bbbadd4b943} - HeuristicLab.Data.Views-3.3 - False - - - {3B90F866-70F8-43EF-A541-51819D255B7B} - HeuristicLab.DataPreprocessing-3.4 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {ab687bbe-1bfe-476b-906d-44237135431d} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {C664305E-497C-4533-A140-967DEDB05C19} - HeuristicLab.Optimizer-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3E9E8944-44FF-40BB-A622-3A4A7DD0F198} - HeuristicLab.Problems.DataAnalysis.Views-3.4 - False - - - {DF87C13E-A889-46FF-8153-66DCAA8C5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - {72232235-B6CF-4E6C-B086-9E9E11AA0717} - HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3 - False - - - {94C7714E-29D4-4D6D-B213-2C18D627AB75} - HeuristicLab.Problems.Instances.DataAnalysis-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {315bda09-3f4f-49b3-9790-b37cfc1c5750} - HeuristicLab.Visualization.ChartControlsExtensions-3.3 - False - + + + + + + + + + + + + + + + + + + + + + - - ResXFileCodeGenerator - PreprocessingIcons.Designer.cs - - + ScatterPlotSingleView.cs @@ -354,14 +208,6 @@ - - \ No newline at end of file diff --git a/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj b/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj index 11e7147f69..66cea2ce62 100644 --- a/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj +++ b/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj @@ -1,69 +1,27 @@ - - - + - Debug - AnyCPU - {3B90F866-70F8-43EF-A541-51819D255B7B} - Library - Properties HeuristicLab.DataPreprocessing - HeuristicLab.DataPreprocessing-3.4 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 false - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false - - - x64 - $(SolutionDir)\bin\ - DEBUG;TRACE - false - - - x64 - $(SolutionDir)\bin\ - true - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt MinimumRecommendedRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - false true @@ -72,121 +30,36 @@ HeuristicLab.snk - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {DF87C13E-A889-46FF-8153-66DCAA8C5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - {315BDA09-3F4F-49B3-9790-B37CFC1C5750} - HeuristicLab.Visualization.ChartControlsExtensions-3.3 - False - + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - + + + \ No newline at end of file diff --git a/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj b/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj index 28c5db9df1..4960a77170 100644 --- a/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj +++ b/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj @@ -1,99 +1,57 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {847A8DAE-DB95-4CEE-B48B-EFEE4531D611} - Library - Properties HeuristicLab.DebugEngine.Views - HeuristicLab.DebugEngine.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\HeuristicLab.DebugEngine.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 bin\Release\HeuristicLab.DebugEngine.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true false - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 bin\Debug\HeuristicLab.DebugEngine.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 bin\Release\HeuristicLab.DebugEngine.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true - false true @@ -102,104 +60,51 @@ HeuristicLab.snk - - - - + UserControl - + DebugEngineView.cs - + UserControl - + ExecutionStackView.cs - + UserControl - + OperationContentView.cs - + UserControl - + OperatorTraceView.cs - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {49F28045-7B5F-411B-8D59-16C846FA26E0} - HeuristicLab.DebugEngine-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj b/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj index fd9852a9d7..966182fc1c 100644 --- a/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj +++ b/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj @@ -1,40 +1,21 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {49F28045-7B5F-411B-8D59-16C846FA26E0} - Library - Properties HeuristicLab.DebugEngine - HeuristicLab.DebugEngine-3.3 - v4.7.2 - - - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 false - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -43,117 +24,47 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\HeuristicLab.DebugEngine.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 $(SolutionDir)\bin\HeuristicLab.DebugEngine.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false true - false - - - x64 - $(SolutionDir)\bin\ - false - - x64 - $(SolutionDir)\bin\ - false + + - - - - - - - - - - - - - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj b/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj index 1bfbd96643..f98bf3cdae 100644 --- a/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {66D249C3-A01D-42A8-82A2-919BC8EC3D83} - Library - Properties HeuristicLab.Encodings.BinaryVectorEncoding - HeuristicLab.Encodings.BinaryVectorEncoding-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,82 +22,33 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + @@ -118,125 +56,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj b/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj index 1f5282bd0f..60c4af25e1 100644 --- a/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {DDFB14DD-2A85-493C-A52D-E69729BBAEB0} - Library - Properties HeuristicLab.Encodings.IntegerVectorEncoding - HeuristicLab.Encodings.IntegerVectorEncoding-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,220 +22,56 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - - - - 3.5 - - - - - - - - - - - Code - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj b/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj index 4d1768dbff..5e33d35e28 100644 --- a/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj +++ b/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj @@ -1,84 +1,34 @@ - - - + - Debug - AnyCPU - {BE698769-975A-429E-828C-72BB2B6182C8} - Library - Properties HeuristicLab.Encodings.LinearLinkageEncoding - HeuristicLab.Encodings.LinearLinkageEncoding-3.4 - v4.7.2 - 512 + net472 + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false true @@ -87,142 +37,34 @@ HeuristicLab.snk - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {f4539fb6-4708-40c9-be64-0a1390aea197} - HeuristicLab.Random-3.3 - False - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj b/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj index afea963393..e780eaa0fd 100644 --- a/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj +++ b/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {3EAF1454-086D-44A2-8509-B1BA24DB1865} - Library - Properties HeuristicLab.Encodings.PermutationEncoding.Views - HeuristicLab.Encodings.PermutationEncoding.Views-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,100 +22,49 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - + UserControl - + PermutationTypeView.cs - + UserControl - + PermutationView.cs - - @@ -136,102 +72,21 @@ - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {72104A0B-90E7-42F3-9ABE-9BBBADD4B943} - HeuristicLab.Data.Views-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA} - HeuristicLab.Encodings.PermutationEncoding-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2} - HeuristicLab.Optimization.Views-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {315BDA09-3F4F-49B3-9790-B37CFC1C5750} - HeuristicLab.Visualization.ChartControlsExtensions-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj b/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj index 3f7ee4bd90..4ffc920a7f 100644 --- a/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj @@ -1,25 +1,12 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA} - Library - Properties HeuristicLab.Encodings.PermutationEncoding - HeuristicLab.Encodings.PermutationEncoding-3.3 true HeuristicLab.snk - - - 3.5 - - - v4.7.2 - - + + + net472 publish\ true Disk @@ -35,269 +22,59 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj b/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj index e0fcf1dbbd..8a0853d6be 100644 --- a/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {BB6D334A-4BB6-4674-9883-31A6EBB32CAB} - Library - Properties HeuristicLab.Encodings.RealVectorEncoding - HeuristicLab.Encodings.RealVectorEncoding-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,260 +22,59 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - - - - - - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/GanttChart.cs b/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/GanttChart.cs index 0fa01ae410..7a55b1e5de 100644 --- a/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/GanttChart.cs +++ b/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/GanttChart.cs @@ -40,7 +40,7 @@ public GanttChart() { public void AddJobColor(int jobNr) { if (!jobColors.ContainsKey(jobNr)) { - Random r = new Random(jobNr + 1); + System.Random r = new System.Random(jobNr + 1); jobColors[jobNr] = Color.FromArgb(r.Next(256), r.Next(256), r.Next(256)); chart.Legends[0].CustomItems.Clear(); if (jobColors.Count > 1) { diff --git a/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj b/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj index ff8a4aaeb3..c5788c6d9f 100644 --- a/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj +++ b/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj @@ -1,37 +1,19 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {0C378762-D5DB-488A-8931-2BA42B1B7CBF} - Library - Properties HeuristicLab.Encodings.ScheduleEncoding.Views - HeuristicLab.Encodings.ScheduleEncoding.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,98 +22,68 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 bin\Debug\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - - - - + UserControl - + TaskView.cs - + UserControl - + GanttChart.cs - - + UserControl - + JobView.cs - - - + UserControl - + ScheduleView.cs @@ -141,68 +93,24 @@ - + GanttChart.cs - + ScheduleView.cs - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {17F3EF80-B2C3-4B8D-A4D5-BE9CE3BA2606} - HeuristicLab.Encodings.ScheduleEncoding-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {315BDA09-3F4F-49B3-9790-B37CFC1C5750} - HeuristicLab.Visualization.ChartControlsExtensions-3.3 - False - + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/ScheduleView.cs b/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/ScheduleView.cs index a3ef7d6ffd..22ddd1f697 100644 --- a/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/ScheduleView.cs +++ b/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/ScheduleView.cs @@ -67,7 +67,7 @@ private void ResetGanttChart() { private void RedrawGanttChart(Schedule content) { ResetGanttChart(); int resCount = 0; - Random random = new Random(1); + System.Random random = new System.Random(1); foreach (Resource r in content.Resources) { foreach (ScheduledTask t in content.Resources[resCount].Tasks) { int categoryNr = 0; diff --git a/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj b/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj index 17cec563a0..81f77c93c0 100644 --- a/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj @@ -1,37 +1,19 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {17F3EF80-B2C3-4B8D-A4D5-BE9CE3BA2606} - Library - Properties HeuristicLab.Encodings.ScheduleEncoding - HeuristicLab.Encodings.ScheduleEncoding-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,198 +22,68 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true false - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true false - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {DDFB14DD-2A85-493C-A52D-E69729BBAEB0} - HeuristicLab.Encodings.IntegerVectorEncoding-3.3 - False - - - {DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA} - HeuristicLab.Encodings.PermutationEncoding-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj b/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj index 0fcca919af..4f7db95e8c 100644 --- a/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj +++ b/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {423BD94F-963A-438E-BA45-3BB3D61CD03B} - Library - Properties HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,256 +22,109 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - - - - - - - + UserControl - + SymbolicExpressionGrammarAllowedChildSymbolsControl.cs - + UserControl - + SymbolicExpressionGrammarEditorView.cs - + UserControl - + SymbolicExpressionGrammarSampleExpressionTreeView.cs - + UserControl - + SymbolicExpressionGrammarView.cs - + UserControl - + SymbolView.cs - + UserControl - + GraphicalSymbolicExpressionTreeView.cs - - + UserControl - + SymbolicExpressionTreeChart.cs - + UserControl - + SymbolicExpressionView.cs - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {72104A0B-90E7-42F3-9ABE-9BBBADD4B943} - HeuristicLab.Data.Views-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {06D4A186-9319-48A0-BADE-A2058D462EEA} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2} - HeuristicLab.Optimization.Views-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - {315BDA09-3F4F-49B3-9790-B37CFC1C5750} - HeuristicLab.Visualization.ChartControlsExtensions-3.3 - False - + + + + + + + + + + + + + + + + - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - \ No newline at end of file diff --git a/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj b/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj index 754b2e425e..ad7c0d27d2 100644 --- a/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj +++ b/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {06D4A186-9319-48A0-BADE-A2058D462EEA} - Library - Properties HeuristicLab.Encodings.SymbolicExpressionTreeEncoding - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,174 +22,34 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 true - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - + @@ -210,104 +57,27 @@ - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj b/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj index b138dbe1ec..e11b8da55f 100644 --- a/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj +++ b/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj @@ -1,199 +1,86 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {D1D69043-17E6-4B8C-BF41-0799C7E56032} - Library - Properties HeuristicLab.ExactOptimization.Views - HeuristicLab.ExactOptimization.Views-3.3 - v4.7.2 + net472 true HeuristicLab.snk - 512 - + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false AllRules.ruleset 7.3 pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - false - - - - - - + UserControl - + FileBasedLinearProblemDefinitionView.cs - + UserControl - + LinearProgrammingAlgorithmView.cs - + UserControl - + LinearProgrammingProblemView.cs - + UserControl - + ProgrammableLinearProblemDefinitionView.cs - - - - {C38691AE-ECB4-489A-A05D-B035554E0168} - HeuristicLab.CodeEditor-3.4 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {72104A0B-90E7-42F3-9ABE-9BBBADD4B943} - HeuristicLab.Data.Views-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {fa3b9270-48b7-4c77-9fea-2a6ede82e909} - HeuristicLab.ExactOptimization-3.3 - False - - - {662b4b15-8f4d-4ae5-b3eb-d91c215f5af2} - HeuristicLab.Optimization.Views-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {6F023B90-2091-40A9-8AC0-B0338DFF8E5F} - HeuristicLab.Problems.Programmable.Views-3.3 - False - - - {EE07BFF8-B23D-41F5-8AD7-AC9598D7A2C9} - HeuristicLab.Problems.Programmable-3.3 - False - - - {0C2917C8-7AA8-4E18-800A-C4D064F992ED} - HeuristicLab.Scripting.Views-3.3 - False - - - {21977CC3-1757-4B3B-87BD-FF817AAA900F} - HeuristicLab.Scripting-3.3 - False - + + + + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj b/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj index 08d14058d9..3ec05468e0 100644 --- a/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj +++ b/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj @@ -1,119 +1,56 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {FA3B9270-48B7-4C77-9FEA-2A6EDE82E909} - Library - Properties HeuristicLab.ExactOptimization - HeuristicLab.ExactOptimization-3.3 - v4.7.2 + net472 true HeuristicLab.snk - 512 - + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false AllRules.ruleset 7.3 pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - false - False ..\..\bin\Google.OrTools.dll True + False - False ..\..\bin\HEAL.Attic.dll True + False - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + True True ScriptTemplates.resx - - + True True Settings.settings - - Designer - - PublicSettingsSingleFileGenerator @@ -124,97 +61,32 @@ - + ResXFileCodeGenerator Designer ScriptTemplates.Designer.cs - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {66D249C3-A01D-42A8-82A2-919BC8EC3D83} - HeuristicLab.Encodings.BinaryVectorEncoding-3.3 - False - - - {DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA} - HeuristicLab.Encodings.PermutationEncoding-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {E10F395F-C8A6-48AD-B470-9AA7A1F43809} - HeuristicLab.Problems.Knapsack-3.3 - False - - - {EE07BFF8-B23D-41F5-8AD7-AC9598D7A2C9} - HeuristicLab.Problems.Programmable-3.3 - False - - - {D767C38D-8014-46B0-9A32-03A3AECCE34A} - HeuristicLab.Problems.TravelingSalesman-3.3 - False - - - {21977CC3-1757-4B3B-87BD-FF817AAA900F} - HeuristicLab.Scripting-3.3 - False - + + + + + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj b/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj index 9931990a91..2c9ba1dd56 100644 --- a/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj +++ b/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj @@ -1,85 +1,36 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {F98A1740-9AC9-4D36-A582-6A2D0D06978D} - Library - Properties HeuristicLab.Hive - HeuristicLab.Hive-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false true @@ -87,61 +38,31 @@ HeuristicLab.snk + + + - - - - - - - - - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj b/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj index 8cbf7670c4..de3d929679 100644 --- a/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj +++ b/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {AB687BBE-1BFE-476B-906D-44237135431D} - Library - Properties HeuristicLab.MainForm.WindowsForms - HeuristicLab.MainForm.WindowsForms-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,203 +22,144 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - - - AllRules.ruleset - false + - - - 3.5 - - - - 3.5 - - - 3.5 - - - + ..\..\bin\WeifenLuo.WinFormsUI.Docking-2.7.0.dll False - - + Component - + DragOverTabControl.cs - + Form - + DefineArithmeticProgressionTimeDialog.cs - + Form - + DefineArithmeticProgressionDialog.cs - + Form - + InfoBox.cs - - - + UserControl - + AsynchronousContentView.cs - + UserControl - + ContentView.cs - - + Form - + DockForm.cs - + Form - + DockingMainForm.cs - + UserControl - + Sidebar.cs - + Form - + DocumentForm.cs - + Form - + MainForm.cs - - + Form - + MultipleDocumentMainForm.cs - - + Form - + SingleDocumentMainForm.cs - - + UserControl - + ProgressView.cs - + UserControl - + View.cs - + Component - + ViewContextMenuStrip.cs - + UserControl - + ViewHost.cs @@ -240,52 +168,11 @@ - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + - - \ No newline at end of file diff --git a/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj b/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj index dfdb93d1c9..72cd33fba1 100644 --- a/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj +++ b/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - Library - Properties HeuristicLab.MainForm - HeuristicLab.MainForm-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,157 +22,48 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - - - AllRules.ruleset - false + - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - \ No newline at end of file diff --git a/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj b/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj index 79ad1d0bf4..59cf253ed5 100644 --- a/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj +++ b/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj @@ -1,37 +1,19 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {8C426FA3-6614-412C-B669-BCE58DB9710E} - Library - Properties HeuristicLab.Operators.Programmable.Views - HeuristicLab.Operators.Programmable.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,78 +22,49 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\HeuristicLab.Operators.Programmable.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 bin\Release\HeuristicLab.Operators.Programmable.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 bin\Debug\HeuristicLab.Operators.Programmable.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 bin\Release\HeuristicLab.Operators.Programmable.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - - - - - + UserControl - + ProgrammableOperatorView.cs - @@ -119,70 +72,18 @@ - - {C38691AE-ECB4-489A-A05D-B035554E0168} - HeuristicLab.CodeEditor-3.4 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {6A5F8C2D-B0C3-4B36-BC20-9B1A91EE6DB6} - HeuristicLab.Operators.Programmable-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj b/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj index 7ff956b4a4..a9eb98d855 100644 --- a/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj +++ b/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj @@ -1,25 +1,12 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {6A5F8C2D-B0C3-4B36-BC20-9B1A91EE6DB6} - Library - Properties HeuristicLab.Operators.Programmable - HeuristicLab.Operators.Programmable-3.3 true HeuristicLab.snk - - - 3.5 - - - v4.7.2 - - + + + net472 publish\ true Disk @@ -35,174 +22,62 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - - - 3.5 - - - 3.5 - - + - - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj b/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj index 2be70cf698..3a4ce20478 100644 --- a/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj +++ b/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj @@ -1,37 +1,20 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {0C39A349-1979-419A-89BD-E4E2F26BD287} - Library - Properties HeuristicLab.Operators.Views.GraphVisualization.Views - HeuristicLab.Operators.Views.GraphVisualization.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,64 +23,43 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true false - false + + + @@ -108,112 +70,42 @@ ..\..\bin\Netron.Diagramming.Core-3.0.2672.12446.dll False - - - - - - - - + UserControl - + GraphVisualizationInfoView.cs - + UserControl - + OperatorGraphView.cs - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {57F38579-409D-4DD8-AB19-3F2C4A665126} - HeuristicLab.Operators.Views.GraphVisualization-3.3 - False - - - {C49CB749-8B24-4628-8003-E86475749410} - HeuristicLab.Operators.Views-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {C664305E-497C-4533-A140-967DEDB05C19} - HeuristicLab.Optimizer-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + + + + + + + - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj b/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj index 85fd4f53fd..5a789c0c01 100644 --- a/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj +++ b/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {57F38579-409D-4DD8-AB19-3F2C4A665126} - Library - Properties HeuristicLab.Operators.Views.GraphVisualization - HeuristicLab.Operators.Views.GraphVisualization-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,179 +22,58 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - - - AllRules.ruleset - false + - - - 3.5 - - - - 3.5 - - - 3.5 - - - - - - - - - + - - - - - - - Code - - - - - - Code - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj b/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj index 1b4fab7629..1b49c61e17 100644 --- a/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj +++ b/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {C49CB749-8B24-4628-8003-E86475749410} - Library - Properties HeuristicLab.Operators.Views - HeuristicLab.Operators.Views-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,228 +22,97 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - + UserControl - + AlgorithmOperatorView.cs - + UserControl - + CheckedMultiOperatorView.cs - + UserControl - + MultiOperatorView.cs - + UserControl - + OperatorView.cs - - + UserControl - + ReductionOperationView.cs - + UserControl - + ValuesCollectorView.cs - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {72104A0B-90E7-42F3-9ABE-9BBBADD4B943} - HeuristicLab.Data.Views-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2} - HeuristicLab.Optimization.Views-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj b/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj index f550057661..9bd7adddf0 100644 --- a/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj +++ b/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj @@ -1,25 +1,12 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - Library - Properties HeuristicLab.Operators - HeuristicLab.Operators-3.3 true HeuristicLab.snk - - - 3.5 - - - v4.7.2 - - + + + net472 publish\ true Disk @@ -35,204 +22,59 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - - - AllRules.ruleset - false + pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - false - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - - - - - - - - Code - - - - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + + + - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj b/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj index cab17f63a5..869cbb57fd 100644 --- a/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj +++ b/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj @@ -1,25 +1,12 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {25087811-F74C-4128-BC86-8324271DA13E} - Library - Properties HeuristicLab.Optimization.Operators - HeuristicLab.Optimization.Operators-3.3 true HeuristicLab.snk - - - 3.5 - - - v4.7.2 - - + + + net472 publish\ true Disk @@ -35,216 +22,59 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {6A5F8C2D-B0C3-4B36-BC20-9B1A91EE6DB6} - HeuristicLab.Operators.Programmable-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {2C36CD4F-E5F5-43A4-801A-201EA895FE17} - HeuristicLab.Selection-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj b/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj index 5c09d99750..df4841a70b 100644 --- a/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj +++ b/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2} - Library - Properties HeuristicLab.Optimization.Views - HeuristicLab.Optimization.Views-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,304 +22,250 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - + UserControl - + AlgorithmView.cs - + UserControl - + BasicAlgorithmView.cs - + UserControl - + BatchRunView.cs - + Form - + CreateNewSingleEncodingDialog.cs - + UserControl - + ICharacteristicCalculatorView.cs - + UserControl - + ISolutionSimilarityCalculatorView.cs - + UserControl - + ExperimentListView.cs - + UserControl - + ResultParameterView.cs - + UserControl - + MultiEncodingView.cs - - + UserControl - + ProblemView.cs - + UserControl - + RunCollectionModifierListView.cs - + UserControl - + RunCollectionContentConstraintView.cs - + UserControl - + ExperimentTreeView.cs - + UserControl - + IOptimizerView.cs - + UserControl - + ResultValueView.cs - + UserControl - + RunCollectionBoxPlotView.cs - + UserControl - + RunCollectionComparisonConstraintView.cs - + UserControl - + RunCollectionTypeCompatibilityConstraintView.cs - + UserControl - + RunCollectionConstraintCollectionView.cs - + UserControl - + RunCollectionColumnConstraintView.cs - + UserControl - + OptimizerListView.cs - + UserControl - + ExperimentView.cs - + UserControl - + RunCollectionBubbleChartView.cs - + UserControl - + RunCollectionEqualityConstraintView.cs - + UserControl - + RunCollectionRLDView.cs - + UserControl - + RunCollectionTableView.cs - + UserControl - + RunCollectionView.cs - + UserControl - + RunView.cs - + UserControl - + RunCollectionChartAggregationView.cs - + UserControl - + TimeLimitRunView.cs - + UserControl - + ThresholdTerminatorView.cs - + UserControl - + UserDefinedAlgorithmView.cs - + UserControl - + EngineAlgorithmView.cs - - + UserControl - + ResultCollectionView.cs - + UserControl - + ResultView.cs @@ -341,132 +274,37 @@ - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + + + + + + + + - - {76945D76-CA61-4147-9DC2-0ACDCDDF87F9} - HeuristicLab.Analysis.Views-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {72104A0B-90E7-42F3-9ABE-9BBBADD4B943} - HeuristicLab.Data.Views-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {23da7ff4-d5b8-41b6-aa96-f0561d24f3ee} - HeuristicLab.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {ae5b1ce5-9862-4d6f-a700-d72cd9aea295} - HeuristicLab.Parameters.Views-3.3 - False - - - {56f9106a-079f-4c61-92f6-86a84c2d84b7} - HeuristicLab.Parameters-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {B1BA398F-953F-4C3A-B07B-1E5E17A27DD9} - HeuristicLab.Problems.Instances.Views-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {315BDA09-3F4F-49B3-9790-B37CFC1C5750} - HeuristicLab.Visualization.ChartControlsExtensions-3.3 - False - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - - + CreateNewSingleEncodingDialog.cs - - + + + + + + \ No newline at end of file diff --git a/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj b/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj index 71e8d21814..bccab31fc8 100644 --- a/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj +++ b/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {14AB8D24-25BC-400C-A846-4627AA945192} - Library - Properties HeuristicLab.Optimization - HeuristicLab.Optimization-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,315 +22,62 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23da7ff4-d5b8-41b6-aa96-f0561d24f3ee} - HeuristicLab.Operators-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj b/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj index cdab92676d..adafe85a7c 100644 --- a/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj +++ b/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {C664305E-497C-4533-A140-967DEDB05C19} - Library - Properties HeuristicLab.Optimizer - HeuristicLab.Optimizer-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,93 +22,41 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - + CreateExperimentDialog.cs @@ -155,90 +90,61 @@ - + Form - + ChangeNestingLevelDialog.cs - - + Form - + OptimizerSingleDocumentMainForm.cs - + Form - + MainFormTypeSelectionDialog.cs - - - + Form - + OptimizerMultipleDocumentMainForm.cs - + Form - + CreateExperimentDialog.cs - - - - - - - - - - + True True Settings.settings - + UserControl - + StartPage.cs - - - - - - - - - - - + Form - + NewItemDialog.cs - + Form - + OptimizerDockingMainForm.cs - - - - - - Designer - @@ -248,81 +154,21 @@ - - {494F87F4-0F25-4D33-A382-10CDB2174D48} - HeuristicLab.Clients.Access-3.3 - False - - - {730A9104-D4D1-4360-966B-E49B7571DDA3} - HeuristicLab.Clients.Common-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {72104A0B-90E7-42F3-9ABE-9BBBADD4B943} - HeuristicLab.Data.Views-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - + + + + + + + + + + + + + + + @@ -341,38 +187,13 @@ - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj b/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj index dc1eb158a4..725c1e11cf 100644 --- a/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj +++ b/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj @@ -1,76 +1,34 @@ - - - + - Debug - AnyCPU - {D34A7620-3E23-40D9-8647-637BE901F271} - Library - Properties HeuristicLab.ParallelEngine.Views - HeuristicLab.ParallelEngine.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt MinimumRecommendedRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt MinimumRecommendedRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - false true @@ -79,25 +37,17 @@ HeuristicLab.snk - - - - - - - + UserControl - + ParallelEngineView.cs - - @@ -105,58 +55,16 @@ - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {e226881d-315f-423d-b419-a766fe0d8685} - HeuristicLab.Core.Views-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {ab687bbe-1bfe-476b-906d-44237135431d} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3bd61258-31da-4b09-89c0-4f71fef5f05a} - HeuristicLab.MainForm-3.3 - False - - - {00814351-4ab8-4088-9b99-f62787b89e93} - HeuristicLab.ParallelEngine-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj b/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj index eeb422da74..509662de42 100644 --- a/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj +++ b/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj @@ -1,38 +1,19 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {00814351-4AB8-4088-9B99-F62787B89E93} - Library - Properties HeuristicLab.ParallelEngine - HeuristicLab.ParallelEngine-3.3 - v4.7.2 - 512 - - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -41,78 +22,43 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 bin\Debug\HeuristicLab.ParallelEngine-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 $(SolutionDir)\bin\HeuristicLab.ParallelEngine-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\HeuristicLab.ParallelEngine-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 $(SolutionDir)\bin\HeuristicLab.ParallelEngine-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true - false - - - - - - - - - - - @@ -120,42 +66,18 @@ - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj b/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj index fdcf0587fa..da85083e7f 100644 --- a/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj +++ b/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {AE5B1CE5-9862-4D6F-A700-D72CD9AEA295} - Library - Properties HeuristicLab.Parameters.Views - HeuristicLab.Parameters.Views-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,134 +22,80 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - + UserControl - + ConstrainedValueParameterView.cs - + UserControl - + ConstrainedValueParameterConfigurationView.cs - - + UserControl - + ScopeTreeLookupParameterView.cs - + UserControl - + ValueLookupParameterView.cs - + UserControl - + LookupParameterView.cs - + UserControl - + ParameterView.cs - - + UserControl - + ValueParameterView.cs @@ -171,87 +104,18 @@ - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {72104A0B-90E7-42F3-9ABE-9BBBADD4B943} - HeuristicLab.Data.Views-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj b/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj index 48e883ef8c..306544e4f6 100644 --- a/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj +++ b/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - Library - Properties HeuristicLab.Parameters - HeuristicLab.Parameters-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,173 +22,59 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - - - - - - - - - - - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj b/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj index 06707dafc5..a58f398e2f 100644 --- a/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj +++ b/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj @@ -1,24 +1,10 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {A9E282EA-180F-4233-B809-AEDF0787545C} - Library - Properties HeuristicLab.Persistence.GUI - HeuristicLab.Persistence.GUI-3.3 - v4.7.2 - - - 512 - - - - - 3.5 + net472 + + publish\ true @@ -35,73 +21,33 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - - - AllRules.ruleset - false + true @@ -109,57 +55,26 @@ HeuristicLab.snk - - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + - - + Form - + PersistenceConfigurationForm.cs - - - - - - 3.5 - - - - - + PersistenceConfigurationForm.cs Designer @@ -167,28 +82,11 @@ - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - False ..\..\bin\HEAL.Attic.dll False + False diff --git a/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj b/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj index d45ac69219..c3c1a939bc 100644 --- a/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj +++ b/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj @@ -1,26 +1,12 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - Library - Properties HeuristicLab.Persistence - HeuristicLab.Persistence-3.3 - v4.7.2 - - - 512 - - + net472 + true HeuristicLab.snk - - - 3.5 + publish\ true @@ -37,76 +23,38 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset + - true full - false - $(SolutionDir)\bin\ - TRACE;DEBUG - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - false - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - TRACE;DEBUG full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - TRACE;DEBUG full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - - - AllRules.ruleset - false + + + + - @@ -115,139 +63,18 @@ - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + True True Settings.settings - - - - - - - @@ -256,44 +83,21 @@ - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {EE2034D9-6E27-48A1-B855-42D45F69A4FC} - HeuristicLab.Tracing-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - + + - False ..\..\bin\HEAL.Attic.dll False + False + + + + + \ No newline at end of file diff --git a/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj b/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj index 530198bf34..687fb04b27 100644 --- a/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj +++ b/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj @@ -1,27 +1,13 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {94186A6A-5176-4402-AE83-886557B53CCA} - Library - Properties HeuristicLab.PluginInfrastructure - HeuristicLab.PluginInfrastructure-3.3 - - + true HeuristicLab.snk - - - 3.5 - - - v4.7.2 - - + + + net472 publish\ true Disk @@ -37,278 +23,171 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - - - - - - - + UserControl - + AvailablePluginsView.cs - + UserControl - + BasicUpdateView.cs - + Form - + ConfirmationDialog.cs - + Form - + ConnectionSetupView.cs - + Form - + PluginUpdaterForm.cs - - - - - + UserControl - + EditProductsView.cs - + UserControl - + InstalledPluginsView.cs - + Form - + LicenseConfirmationDialog.cs - + UserControl - + UploadPluginsView.cs - - + UserControl - + InstallationManagerControl.cs - - - + Form - + InstallationManagerForm.cs - - Code - - - Code - - - + Form - + LicenseView.cs - + Component - + MultiSelectListView.cs - + Form - + PluginView.cs - - - - - - - - - - - - - - - - - - + Form - + ErrorDialog.cs - - - + Form - + FrameworkVersionErrorDialog.cs - - - - - - - - - - - - - - - - - - - - - - - - - Designer - PublicSettingsSingleFileGenerator Settings.Designer.cs - + True Settings.settings True - + True True Resources.resx - - + Form - + AboutDialog.cs - + Form - + SplashScreen.cs - + Form - + StarterForm.cs @@ -324,7 +203,7 @@ - + ResXFileCodeGenerator Resources.Designer.cs Designer @@ -341,34 +220,6 @@ - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.BinPacking.Views/3.3/HeuristicLab.Problems.BinPacking.Views-3.3.csproj b/HeuristicLab.Problems.BinPacking.Views/3.3/HeuristicLab.Problems.BinPacking.Views-3.3.csproj index dd919d891d..c807970c7c 100644 --- a/HeuristicLab.Problems.BinPacking.Views/3.3/HeuristicLab.Problems.BinPacking.Views-3.3.csproj +++ b/HeuristicLab.Problems.BinPacking.Views/3.3/HeuristicLab.Problems.BinPacking.Views-3.3.csproj @@ -1,67 +1,31 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {8CFC7A61-E214-44DC-96B3-4CEA9B8E958E} - Library - Properties HeuristicLab.Problems.BinPacking.Views - HeuristicLab.Problems.BinPacking.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt true @@ -72,47 +36,40 @@ - - - - - - + Container3DView.xaml - + Container2DView.xaml - + UserControl - + PackingPlan2DView.cs - + UserControl - + PackingPlan3DView.cs - - - + PackingPlan2DView.cs - + PackingPlan3DView.cs @@ -127,55 +84,15 @@ - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {F8A55094-3CD5-4034-B0CA-5BD7FFB016D4} - HeuristicLab.Problems.BinPacking-3.3 - False - + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj b/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj index 4b9661d4d3..1694257ff6 100644 --- a/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj +++ b/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj @@ -1,68 +1,31 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {F8A55094-3CD5-4034-B0CA-5BD7FFB016D4} - Library - Properties HeuristicLab.Problems.BinPacking - HeuristicLab.Problems.BinPacking-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt true @@ -71,84 +34,9 @@ HeuristicLab.snk - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - Code - - - Code - - - - - - - @@ -157,96 +45,28 @@ - False ..\..\bin\HEAL.Attic.dll False + False - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {ddfb14dd-2a85-493c-a52d-e69729bbaeb0} - HeuristicLab.Encodings.IntegerVectorEncoding-3.3 - False - - - {dbecb8b0-b166-4133-baf1-ed67c3fd7fca} - HeuristicLab.Encodings.PermutationEncoding-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - + + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj b/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj index 2eb24eca90..6294413696 100644 --- a/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj +++ b/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj @@ -1,33 +1,18 @@ - - - + - Debug - AnyCPU - {FC627BE5-0F93-47D8-BD2E-530EA2B8AA5F} - Library - Properties HeuristicLab.Problems.Binary - HeuristicLab.Problems.Binary-3.3 - v4.7.2 - 512 + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 true @@ -36,59 +21,24 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - - - - - - - - - - - - - - - @@ -96,82 +46,26 @@ - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {66d249c3-a01d-42a8-82a2-919bc8ec3d83} - HeuristicLab.Encodings.BinaryVectorEncoding-3.3 - False - - - {23da7ff4-d5b8-41b6-aa96-f0561d24f3ee} - HeuristicLab.Operators-3.3 - False - - - {25087811-f74c-4128-bc86-8324271da13e} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {56f9106a-079f-4c61-92f6-86a84c2d84b7} - HeuristicLab.Parameters-3.3 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj index 4051b170e1..0f1f4b9ec2 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {BF1E4DF4-A4CC-451F-9D50-303F405E265E} - Library - Properties HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views - HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,271 +22,115 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false False - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - + UserControl - + SolutionComparisonView.cs - + UserControl - + InteractiveSymbolicClassificationSolutionSimplifierView.cs - - + UserControl - + SymbolicClassificationSolutionView.cs - + UserControl - + InteractiveSymbolicClassificationSolutionSimplifierViewBase.cs - - + UserControl - + SymbolicDiscriminantFunctionClassificationSolutionView.cs - + UserControl - + SymbolicClassificationModelMathView.cs - + UserControl - + InteractiveSymbolicDiscriminantFunctionClassificationSolutionSimplifierView.cs - - - - - {2E782078-FA81-4B70-B56F-74CE38DAC6C8} - HeuristicLab.Algorithms.DataAnalysis-3.4 - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {06D4A186-9319-48A0-BADE-A2058D462EEA} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2} - HeuristicLab.Optimization.Views-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {AE5B1CE5-9862-4D6F-A700-D72CD9AEA295} - HeuristicLab.Parameters.Views-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {05BAE4E1-A9FA-4644-AA77-42558720159E} - HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4 - False - - - {7A2531CE-3F7C-4F13-BCCA-ED6DC27A7086} - HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4 - False - - - {3D28463F-EC96-4D82-AFEE-38BE91A0CA00} - HeuristicLab.Problems.DataAnalysis.Symbolic-3.4 - False - - - {3E9E8944-44FF-40BB-A622-3A4A7DD0F198} - HeuristicLab.Problems.DataAnalysis.Views-3.4 - False - - - {DF87C13E-A889-46FF-8153-66DCAA8C5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj index f5838b1e3f..3d7516f177 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {05BAE4E1-A9FA-4644-AA77-42558720159E} - Library - Properties HeuristicLab.Problems.DataAnalysis.Symbolic.Classification - HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,252 +22,69 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - False ..\..\bin\ALGLIB-3.17.0.dll False + False - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - Code - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {06D4A186-9319-48A0-BADE-A2058D462EEA} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3D28463F-EC96-4D82-AFEE-38BE91A0CA00} - HeuristicLab.Problems.DataAnalysis.Symbolic-3.4 - False - - - {DF87C13E-A889-46FF-8153-66DCAA8C5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - + + + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj index fefc94e421..87b0b41f10 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {20831A74-D18F-42D9-A667-1CE3AF53DF93} - Library - Properties HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views - HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,277 +22,109 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - + UserControl - + InteractiveSymbolicRegressionSolutionSimplifierView.cs - + UserControl - + SymbolicRegressionModelMathView.cs - - + UserControl - + SymbolicRegressionSolutionResponseFunctionView.cs - + UserControl - + SymbolicRegressionSolutionErrorCharacteristicsCurveView.cs - + UserControl - + SymbolicRegressionSolutionView.cs - + UserControl - + VariableTrackbar.cs - - - - - {2E782078-FA81-4B70-B56F-74CE38DAC6C8} - HeuristicLab.Algorithms.DataAnalysis-3.4 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {423BD94F-963A-438E-BA45-3BB3D61CD03B} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4 - False - - - {06D4A186-9319-48A0-BADE-A2058D462EEA} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2} - HeuristicLab.Optimization.Views-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {AE5B1CE5-9862-4D6F-A700-D72CD9AEA295} - HeuristicLab.Parameters.Views-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {5AC82412-911B-4FA2-A013-EDC5E3F3FCC2} - HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4 - False - - - {7A2531CE-3F7C-4F13-BCCA-ED6DC27A7086} - HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4 - False - - - {3D28463F-EC96-4D82-AFEE-38BE91A0CA00} - HeuristicLab.Problems.DataAnalysis.Symbolic-3.4 - False - - - {3E9E8944-44FF-40BB-A622-3A4A7DD0F198} - HeuristicLab.Problems.DataAnalysis.Views-3.4 - False - - - {DF87C13E-A889-46FF-8153-66DCAA8C5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - {315BDA09-3F4F-49B3-9790-B37CFC1C5750} - HeuristicLab.Visualization.ChartControlsExtensions-3.3 - False - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj index 9122d262aa..8fe06ec1e3 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {5AC82412-911B-4FA2-A013-EDC5E3F3FCC2} - Library - Properties HeuristicLab.Problems.DataAnalysis.Symbolic.Regression - HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,268 +22,72 @@ false false true + false + default + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false - default pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - default - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - default - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - default - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - default - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - default - False ..\..\bin\ALGLIB-3.17.0.dll False + False - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {BB6D334A-4BB6-4674-9883-31A6EBB32CAB} - HeuristicLab.Encodings.RealVectorEncoding-3.3 - - - {06D4A186-9319-48A0-BADE-A2058D462EEA} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3D28463F-EC96-4D82-AFEE-38BE91A0CA00} - HeuristicLab.Problems.DataAnalysis.Symbolic-3.4 - False - - - {DF87C13E-A889-46FF-8153-66DCAA8C5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - {94C7714E-29D4-4D6D-B213-2C18D627AB75} - HeuristicLab.Problems.Instances.DataAnalysis-3.3 - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {f4539fb6-4708-40c9-be64-0a1390aea197} - HeuristicLab.Random-3.3 - + + + + + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj index 9d8632d3f4..07296eb8fa 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {E6CB1FC5-78EC-4EB8-BF12-35303C36F962} - Library - Properties HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views - HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,216 +22,72 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - + UserControl - + InteractiveSymbolicTimeSeriesPrognosisSolutionSimplifierView.cs - - + UserControl - + SymbolicTimeSeriesPrognosisSolutionView.cs - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {06D4A186-9319-48A0-BADE-A2058D462EEA} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {5AC82412-911B-4FA2-A013-EDC5E3F3FCC2} - HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4 - False - - - {07486E68-1517-4B9D-A58D-A38E99AE71AB} - HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4 - False - - - {7A2531CE-3F7C-4F13-BCCA-ED6DC27A7086} - HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4 - False - - - {3D28463F-EC96-4D82-AFEE-38BE91A0CA00} - HeuristicLab.Problems.DataAnalysis.Symbolic-3.4 - False - - - {3E9E8944-44FF-40BB-A622-3A4A7DD0F198} - HeuristicLab.Problems.DataAnalysis.Views-3.4 - False - - - {DF87C13E-A889-46FF-8153-66DCAA8C5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - + + + + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj index ac9915c909..25a9243cb9 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {07486E68-1517-4B9D-A58D-A38E99AE71AB} - Library - Properties HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis - HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,220 +22,71 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - False ..\..\bin\ALGLIB-3.17.0.dll False + False ..\..\bin\HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.dll False - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - - - - - - - - - - Code - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {06D4A186-9319-48A0-BADE-A2058D462EEA} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3D28463F-EC96-4D82-AFEE-38BE91A0CA00} - HeuristicLab.Problems.DataAnalysis.Symbolic-3.4 - False - - - {DF87C13E-A889-46FF-8153-66DCAA8C5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj index 9fc73a8f12..d4c283e7c3 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {7A2531CE-3F7C-4F13-BCCA-ED6DC27A7086} - Library - Properties HeuristicLab.Problems.DataAnalysis.Symbolic.Views - HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,307 +22,173 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - False ..\..\bin\ALGLIB-3.17.0.dll False + False + ..\..\bin\EPPlus-4.0.3.dll False + False - - - 3.5 - - - - + UserControl - + InteractiveSymbolicExpressionTreeChart.cs - + True True Resources.resx - + UserControl - + StructureTemplateView.cs - + UserControl - + SymbolicDataAnalysisModelMathView.cs - - + UserControl - + ConstantView.cs - + UserControl - + NumberView.cs - + UserControl - + TextualSymbolicDataAnalysisModelView.cs - + UserControl - + InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs - + UserControl - + GraphicalSymbolicDataAnalysisModelView.cs - + UserControl - + LaggedVariableView.cs - + UserControl - + TimeLagView.cs - + UserControl - + VariableConditionView.cs - + UserControl - + VariableView.cs - + Form - + SymbolicExpressionTreeConstantNodeEditDialog.cs - + Form - + SymbolicExpressionTreeVariableNodeEditDialog.cs - + Form - + SymbolicExpressionTreeNodeInsertDialog.cs - + UserControl - + RunCollectionVariableImpactView.cs - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {72104A0B-90E7-42F3-9ABE-9BBBADD4B943} - HeuristicLab.Data.Views-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {423BD94F-963A-438E-BA45-3BB3D61CD03B} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4 - False - - - {06D4A186-9319-48A0-BADE-A2058D462EEA} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3D28463F-EC96-4D82-AFEE-38BE91A0CA00} - HeuristicLab.Problems.DataAnalysis.Symbolic-3.4 - False - - - {DF87C13E-A889-46FF-8153-66DCAA8C5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + + + + Always - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj index a4929fe456..6b4c1baaef 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {3D28463F-EC96-4D82-AFEE-38BE91A0CA00} - Library - Properties HeuristicLab.Problems.DataAnalysis.Symbolic - HeuristicLab.Problems.DataAnalysis.Symbolic-3.4 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,411 +22,77 @@ false false true + false + 7.3 + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false - 7.3 pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - 7.3 - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - 7.3 - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - 7.3 - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - 7.3 - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - 7.3 - False ..\..\bin\ALGLIB-3.17.0.dll False + False ..\..\bin\AutoDiff-1.0.dll False - False ..\..\bin\HEAL.Attic.dll + False - False ..\..\bin\HeuristicLab.Problems.DataAnalysis.Symbolic.NativeInterpreter-0.1.dll False + False - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - - - - - - - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {06D4A186-9319-48A0-BADE-A2058D462EEA} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {DF87C13E-A889-46FF-8153-66DCAA8C5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - {2C36CD4F-E5F5-43A4-801A-201EA895FE17} - HeuristicLab.Selection-3.3 - + + + + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj index d4f23e6847..799ae0b825 100644 --- a/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {CB3D0A1E-1BE8-476B-A53C-2B189E30064F} - Library - Properties HeuristicLab.Problems.DataAnalysis.Trading.Views - HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,200 +22,69 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - - + UserControl - + SolutionLineChartView.cs - + UserControl - + SolutionView.cs - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {e226881d-315f-423d-b419-a766fe0d8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {ab687bbe-1bfe-476b-906d-44237135431d} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3bd61258-31da-4b09-89c0-4f71fef5f05a} - HeuristicLab.MainForm-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3D28463F-EC96-4D82-AFEE-38BE91A0CA00} - HeuristicLab.Problems.DataAnalysis.Symbolic-3.4 - False - - - {e4ee5afb-d552-447b-8a16-6cbe7938af32} - HeuristicLab.Problems.DataAnalysis.Trading-3.4 - False - - - {3e9e8944-44ff-40bb-a622-3a4a7dd0f198} - HeuristicLab.Problems.DataAnalysis.Views-3.4 - False - - - {df87c13e-a889-46ff-8153-66dcaa8c5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - {315bda09-3f4f-49b3-9790-b37cfc1c5750} - HeuristicLab.Visualization.ChartControlsExtensions-3.3 - False - + + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj index 1a4a9025af..f270b2c85a 100644 --- a/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {E4EE5AFB-D552-447B-8A16-6CBE7938AF32} - Library - Properties HeuristicLab.Problems.DataAnalysis.Trading - HeuristicLab.Problems.DataAnalysis.Trading-3.4 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,208 +22,59 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {06d4a186-9319-48a0-bade-a2058d462eea} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - False - - - {23da7ff4-d5b8-41b6-aa96-f0561d24f3ee} - HeuristicLab.Operators-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {56f9106a-079f-4c61-92f6-86a84c2d84b7} - HeuristicLab.Parameters-3.3 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3d28463f-ec96-4d82-afee-38be91a0ca00} - HeuristicLab.Problems.DataAnalysis.Symbolic-3.4 - False - - - {df87c13e-a889-46ff-8153-66dcaa8c5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - {94C7714E-29D4-4D6D-B213-2C18D627AB75} - HeuristicLab.Problems.Instances.DataAnalysis-3.3 - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj index 9f2c0c4f04..5b415ec3a4 100644 --- a/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {3E9E8944-44FF-40BB-A622-3A4A7DD0F198} - Library - Properties HeuristicLab.Problems.DataAnalysis.Views - HeuristicLab.Problems.DataAnalysis.Views-3.4 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,610 +22,445 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - False ..\..\bin\ALGLIB-3.17.0.dll False + False - False ..\..\bin\HEAL.Attic.dll + False - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - + UserControl - + ClassificationSolutionVariableImpactsView.cs - + UserControl - + DensityChart.cs - + UserControl - + DensityTrackbar.cs - + UserControl - + FactorPartialDependencePlot.cs - + UserControl - + PartialDependencePlot.cs - + Form - + PartialDependencePlotConfigurationDialog.cs - - - + UserControl - + ClassificationEnsembleSolutionEstimatedClassValuesView.cs - + UserControl - + ClassificationEnsembleSolutionModelView.cs - + UserControl - + ClassificationFeatureCorrelationView.cs - + UserControl - + ClassificationSolutionComparisonView.cs - + UserControl - + ClassificationTimeframeFeatureCorrelationView.cs - + UserControl - + DiscriminantFunctionClassificationModelView.cs - + UserControl - + ClusteringSolutionVisualizationView.cs - + UserControl - + AbstractFeatureCorrelationView.cs - + UserControl - + DataAnalysisSolutionEvaluationView.cs - - + UserControl - + FeatureCorrelationView.cs - - - - - + UserControl - + ModifiableDatasetView.cs - - + UserControl - + ProblemDataView.cs - + True True Resources.resx - + UserControl - + ConfidenceRegressionSolutionEstimatedValuesView.cs - + UserControl - + ConfidenceRegressionSolutionLineChartView.cs - + UserControl - + IntervalCollectionView.cs - + UserControl - + RegressionEnsembleSolutionModelWeightsView.cs - + UserControl - + RegressionFeatureCorrelationView.cs - + UserControl - + RegressionSolutionLineChartViewBase.cs - + UserControl - + RegressionSolutionPartialDependencePlotView.cs - + UserControl - + RegressionSolutionResidualsLineChartView.cs - + UserControl - + RegressionSolutionResidualAnalysisView.cs - + UserControl - + RegressionSolutionVariableImpactsView.cs - + UserControl - + RegressionSolutionGradientView.cs - + UserControl - + RegressionTimeframeFeatureCorrelationView.cs - + UserControl - + RegressionEnsembleSolutionModelView.cs - + UserControl - + RegressionSolutionErrorCharacteristicsCurveView.cs - + UserControl - + RegressionSolutionEstimatedValuesView.cs - + UserControl - + RegressionSolutionLineChartView.cs - + UserControl - + RegressionSolutionResidualHistogram.cs - + UserControl - + RegressionSolutionScatterPlotView.cs - + UserControl - + RunCollectionPartialDependencePlotView.cs - + UserControl - + ShapeConstraintsView.cs - + UserControl - + ShapeConstraintView.cs - + UserControl - + ClassificationSolutionView.cs - + UserControl - + ClassificationSolutionConfusionMatrixView.cs - + UserControl - + ClassificationSolutionEstimatedClassValuesView.cs - + UserControl - + DiscriminantFunctionClassificationSolutionEstimatedClassValuesView.cs - + UserControl - + DiscriminantFunctionClassificationRocCurvesView.cs - + UserControl - + DiscriminantFunctionClassificationSolutionThresholdView.cs - + UserControl - + ClusteringSolutionEstimatedClusterView.cs - + UserControl - + ClusteringSolutionView.cs - + UserControl - + ClassificationEnsembleSolutionView.cs - + UserControl - + DiscriminantFunctionClassificationSolutionView.cs - + UserControl - + DataAnalysisSolutionView.cs - + UserControl - + DoubleLimitView.cs - - - + UserControl - + NamedDataAnalysisSolutionView.cs - + UserControl - + RegressionEnsembleSolutionView.cs - + UserControl - + RegressionSolutionView.cs - + UserControl - + TimeframeFeatureCorrelationView.cs - + UserControl - + TimeSeriesPrognosisSolutionView.cs - + UserControl - + TimeSeriesPrognosisResidualsLineChartView.cs - + UserControl - + TimeSeriesPrognosisLineChartView.cs - + UserControl - + TimeSeriesPrognosisResultsView.cs - + UserControl - + TimeSeriesPrognosisSolutionErrorCharacteristicsCurveView.cs - - - {2E782078-FA81-4B70-B56F-74CE38DAC6C8} - HeuristicLab.Algorithms.DataAnalysis-3.4 - False - - - {76945D76-CA61-4147-9DC2-0ACDCDDF87F9} - HeuristicLab.Analysis.Views-3.3 - False - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {72104A0B-90E7-42F3-9ABE-9BBBADD4B943} - HeuristicLab.Data.Views-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2} - HeuristicLab.Optimization.Views-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {C664305E-497C-4533-A140-967DEDB05C19} - HeuristicLab.Optimizer-3.3 - False - - - {AE5B1CE5-9862-4D6F-A700-D72CD9AEA295} - HeuristicLab.Parameters.Views-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {DF87C13E-A889-46FF-8153-66DCAA8C5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - {315BDA09-3F4F-49B3-9790-B37CFC1C5750} - HeuristicLab.Visualization.ChartControlsExtensions-3.3 - False - + + + + + + + + + + + + + + + + + + + - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - + AbstractFeatureCorrelationView.cs - - ResXFileCodeGenerator - Resources.Designer.cs - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj b/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj index 8604ecd625..131151fe8e 100644 --- a/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {DF87C13E-A889-46FF-8153-66DCAA8C5674} - Library - Properties HeuristicLab.Problems.DataAnalysis - HeuristicLab.Problems.DataAnalysis-3.4 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,323 +22,64 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - False ..\..\bin\ALGLIB-3.17.0.dll False + False - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - Code - - - Code - - - - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj b/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj index 13fc9521eb..2e7dc15d97 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {64CC53AC-156B-4D8A-8DB0-B68990BEA4D3} - Library - Properties HeuristicLab.Problems.ExternalEvaluation.GP - HeuristicLab.Problems.ExternalEvaluation.GP-3.5 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,176 +22,65 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - - - AllRules.ruleset - false + ..\..\bin\Google.ProtocolBuffers-2.4.1.473.dll False - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {06d4a186-9319-48a0-bade-a2058d462eea} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3d28463f-ec96-4d82-afee-38be91a0ca00} - HeuristicLab.Problems.DataAnalysis.Symbolic-3.4 - False - - - {8a0b2a2b-47a7-410d-97a0-4296293bb00d} - HeuristicLab.Problems.ExternalEvaluation-3.4 - False - + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj b/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj index 11c0b7ba0e..3c3a1fc26d 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj @@ -1,36 +1,18 @@ - - - + - Debug - AnyCPU - {362A5DC3-969D-43FB-A552-D2F52B780188} - Library - Properties HeuristicLab.Problems.ExternalEvaluation.Matlab - HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -39,65 +21,29 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt MinimumRecommendedRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt MinimumRecommendedRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - false ..\..\bin\Interop.MLApp.dll True - - - - - - - - - - - - @@ -105,77 +51,25 @@ - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {bb6d334a-4bb6-4674-9883-31a6ebb32cab} - HeuristicLab.Encodings.RealVectorEncoding-3.3 - False - - - {23da7ff4-d5b8-41b6-aa96-f0561d24f3ee} - HeuristicLab.Operators-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {56f9106a-079f-4c61-92f6-86a84c2d84b7} - HeuristicLab.Parameters-3.3 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {d2c39fba-a1d5-403a-9211-b0a299a76313} - HeuristicLab.Problems.ParameterOptimization-3.3 - False - + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj b/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj index 5d8ad671f5..3a81cdf1ad 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj @@ -1,36 +1,18 @@ - - - + - Debug - AnyCPU - {C633FB23-BAE6-448E-BF5D-E1F9A839B5ED} - Library - Properties HeuristicLab.Problems.ExternalEvaluation.Scilab - HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -39,71 +21,35 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt MinimumRecommendedRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt MinimumRecommendedRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - false - False ..\..\bin\DotNetScilab-1.0.dll False + False - False ..\..\bin\HeuristicLab.DotNetScilab-1.0.dll False + False - - - - - - - - - - - - @@ -111,77 +57,25 @@ - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {bb6d334a-4bb6-4674-9883-31a6ebb32cab} - HeuristicLab.Encodings.RealVectorEncoding-3.3 - False - - - {23da7ff4-d5b8-41b6-aa96-f0561d24f3ee} - HeuristicLab.Operators-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {56f9106a-079f-4c61-92f6-86a84c2d84b7} - HeuristicLab.Parameters-3.3 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {d2c39fba-a1d5-403a-9211-b0a299a76313} - HeuristicLab.Problems.ParameterOptimization-3.3 - False - + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj b/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj index 0286d674d5..325deebcce 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {F7E5B975-FDF2-45A4-91CB-FF6D3C33D65E} - Library - Properties HeuristicLab.Problems.ExternalEvaluation.Views - HeuristicLab.Problems.ExternalEvaluation.Views-3.4 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,212 +22,87 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - - - AllRules.ruleset - false + - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - + UserControl - + EvaluationCacheView.cs - + UserControl - + EvaluationServiceClientView.cs - + UserControl - + EvaluationProcessChannelView.cs - + UserControl - + EvaluationTCPChannelView.cs - - - + UserControl - + SolutionMessageBuilderView.cs - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {e226881d-315f-423d-b419-a766fe0d8685} - HeuristicLab.Core.Views-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {72104a0b-90e7-42f3-9abe-9bbbadd4b943} - HeuristicLab.Data.Views-3.3 - False - - - {ab687bbe-1bfe-476b-906d-44237135431d} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3bd61258-31da-4b09-89c0-4f71fef5f05a} - HeuristicLab.MainForm-3.3 - False - - - {662b4b15-8f4d-4ae5-b3eb-d91c215f5af2} - HeuristicLab.Optimization.Views-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {8a0b2a2b-47a7-410d-97a0-4296293bb00d} - HeuristicLab.Problems.ExternalEvaluation-3.4 - False - + + + + + + + + + + + + - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj b/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj index 1ec136722e..4f38b4e3fd 100644 --- a/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {8A0B2A2B-47A7-410D-97A0-4296293BB00D} - Library - Properties HeuristicLab.Problems.ExternalEvaluation - HeuristicLab.Problems.ExternalEvaluation-3.4 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,129 +22,48 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false ..\..\bin\Google.ProtocolBuffers-2.4.1.473.dll False - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + True True Templates.resx - - - @@ -166,108 +72,28 @@ - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - ResXFileCodeGenerator - Templates.Designer.cs - - - - - {887425b4-4348-49ed-a457-b7d2c26ddbf9} - HeuristicLab.Analysis-3.3 - False - - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {23da7ff4-d5b8-41b6-aa96-f0561d24f3ee} - HeuristicLab.Operators-3.3 - False - - - {25087811-f74c-4128-bc86-8324271da13e} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {56f9106a-079f-4c61-92f6-86a84c2d84b7} - HeuristicLab.Parameters-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {21977cc3-1757-4b3b-87bd-ff817aaa900f} - HeuristicLab.Scripting-3.3 - False - + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - + \ No newline at end of file diff --git a/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj b/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj index aab9ceff18..603eacbd61 100644 --- a/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj +++ b/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {26349C8D-72A1-4BAE-95A3-14E96A3B4AE8} - Library - Properties HeuristicLab.Problems.GeneticProgramming.Views - HeuristicLab.Problems.GeneticProgramming.Views-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,131 +22,87 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - + UserControl - + SolutionProgramView.cs - + UserControl - + SolutionView.cs - + UserControl - + SolutionProgramView.cs - + UserControl - + SolutionView.cs - - - + Form - + BattleRunnerDialog.cs - + UserControl - + CodeSymbolView.cs - + UserControl - + EnemyCollectionView.cs - + UserControl - + SolutionCodeView.cs - + UserControl - + SolutionProgramView.cs @@ -169,92 +112,19 @@ - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {423BD94F-963A-438E-BA45-3BB3D61CD03B} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4 - False - - - {06D4A186-9319-48A0-BADE-A2058D462EEA} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {02cddbf5-42a7-4c40-ae6c-e5d29ac9ccec} - HeuristicLab.Problems.GeneticProgramming-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj b/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj index b9fb908171..687e2ddf1d 100644 --- a/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj +++ b/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {02CDDBF5-42A7-4C40-AE6C-E5D29AC9CCEC} - Library - Properties HeuristicLab.Problems.GeneticProgramming - HeuristicLab.Problems.GeneticProgramming-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,101 +22,33 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -146,112 +65,31 @@ - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {06D4A186-9319-48A0-BADE-A2058D462EEA} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {DF87C13E-A889-46FF-8153-66DCAA8C5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {f4539fb6-4708-40c9-be64-0a1390aea197} - HeuristicLab.Random-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj b/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj index 5da1738659..d6266e7f30 100644 --- a/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj +++ b/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {9372D115-D933-40D2-BD29-A2C1EAC35874} - Library - Properties HeuristicLab.Problems.GrammaticalEvolution - HeuristicLab.Problems.GrammaticalEvolution-3.4 - v4.7.2 - - - 512 + net472 True HeuristicLab.snk - - - 3.5 + publish\ true @@ -36,235 +23,72 @@ false true False - False File OnBuildSuccess - False True - False obj\$(Configuration)\ False + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true Full - False - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - prompt - AllRules.ruleset - false - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - {887425b4-4348-49ed-a457-b7d2c26ddbf9} - HeuristicLab.Analysis-3.3 - False - - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {ddfb14dd-2a85-493c-a52d-e69729bbaeb0} - HeuristicLab.Encodings.IntegerVectorEncoding-3.3 - False - - - {06d4a186-9319-48a0-bade-a2058d462eea} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - False - - - {23da7ff4-d5b8-41b6-aa96-f0561d24f3ee} - HeuristicLab.Operators-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {56f9106a-079f-4c61-92f6-86a84c2d84b7} - HeuristicLab.Parameters-3.3 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {5ac82412-911b-4fa2-a013-edc5e3f3fcc2} - HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4 - False - - - {3d28463f-ec96-4d82-afee-38be91a0ca00} - HeuristicLab.Problems.DataAnalysis.Symbolic-3.4 - False - - - {df87c13e-a889-46ff-8153-66dcaa8c5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - {02cddbf5-42a7-4c40-ae6c-e5d29ac9ccec} - HeuristicLab.Problems.GeneticProgramming-3.3 - - - {3540e29e-4793-49e7-8ee2-fea7f61c3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {f4539fb6-4708-40c9-be64-0a1390aea197} - HeuristicLab.Random-3.3 - False - + + + + + + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj b/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj index d9f6f9b014..932c47b586 100644 --- a/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj +++ b/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj @@ -1,34 +1,18 @@ - - - + - Debug - AnyCPU - {4B76E2CB-A990-4959-B080-1D81D418D325} - Library - Properties HeuristicLab.Problems.GraphColoring - HeuristicLab.Problems.GraphColoring-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 true @@ -37,149 +21,56 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - - - - - - - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {be698769-975a-429e-828c-72bb2b6182c8} - HeuristicLab.Encodings.LinearLinkageEncoding-3.4 - False - - - {23da7ff4-d5b8-41b6-aa96-f0561d24f3ee} - HeuristicLab.Operators-3.3 - False - - - {25087811-f74c-4128-bc86-8324271da13e} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {56f9106a-079f-4c61-92f6-86a84c2d84b7} - HeuristicLab.Parameters-3.3 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540e29e-4793-49e7-8ee2-fea7f61c3994} - HeuristicLab.Problems.Instances-3.3 - False - + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj b/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj index 969b1b0476..782933fcad 100644 --- a/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj +++ b/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj @@ -1,37 +1,20 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {1F2718DA-BF13-40EE-A7FD-EEDB4912E64E} - Library - Properties HeuristicLab.Problems.Instances.CordeauGQAP - HeuristicLab.Problems.Instances.CordeauGQAP-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,113 +23,60 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 ..\..\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 ..\..\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 ..\..\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 ..\..\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true false - false + + + - - - - - - - - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - + + + - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj b/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj index c2621fdb62..c9c5e6a571 100644 --- a/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj +++ b/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj @@ -1,34 +1,18 @@ - - - + - Debug - AnyCPU - {9943FF23-8619-459C-B84A-E7FBDCBA04E6} - Library - Properties HeuristicLab.Problems.Instances.DIMACS - HeuristicLab.Problems.Instances.DIMACS-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 true @@ -37,90 +21,40 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - - - - - - - - - - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540e29e-4793-49e7-8ee2-fea7f61c3994} - HeuristicLab.Problems.Instances-3.3 - False - + + + - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj b/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj index b77c702d16..1edc567739 100644 --- a/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj +++ b/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj @@ -1,73 +1,31 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {72232235-B6CF-4E6C-B086-9E9E11AA0717} - Library - Properties HeuristicLab.Problems.Instances.DataAnalysis.Views - HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - false true @@ -80,149 +38,86 @@ - - - - - - - + Form - + ClassificationImportDialog.cs - + UserControl - + ClassificationInstanceProviderView.cs - + UserControl - + ClusteringInstanceProviderView.cs - + Form - + DataAnalysisImportDialog.cs - + Form - + RegressionImportDialog.cs - + Form - + TimeSeriesPrognosisImportDialog.cs - + UserControl - + TimeSeriesPrognosisInstanceProviderView.cs - + UserControl - + DataAnalysisInstanceProviderView.cs - - + UserControl - + RegressionInstanceProviderView.cs - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - - - {e226881d-315f-423d-b419-a766fe0d8685} - HeuristicLab.Core.Views-3.3 - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - - - {72104a0b-90e7-42f3-9abe-9bbbadd4b943} - HeuristicLab.Data.Views-3.3 - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - - - {662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2} - HeuristicLab.Optimization.Views-3.3 - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {DF87C13E-A889-46FF-8153-66DCAA8C5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - {94C7714E-29D4-4D6D-B213-2C18D627AB75} - HeuristicLab.Problems.Instances.DataAnalysis-3.3 - False - - - {B1BA398F-953F-4C3A-B07B-1E5E17A27DD9} - HeuristicLab.Problems.Instances.Views-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj b/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj index fd78ee77d5..acc254dba2 100644 --- a/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj +++ b/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj @@ -1,39 +1,20 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {94C7714E-29D4-4D6D-B213-2C18D627AB75} - Library - Properties HeuristicLab.Problems.Instances.DataAnalysis - HeuristicLab.Problems.Instances.DataAnalysis-3.3 - v4.7.2 - 512 - + net472 + false + 7.3 + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false - 7.3 pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false - 7.3 true @@ -42,337 +23,47 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 ..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset - false - 7.3 - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 ..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true false - false - 7.3 - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 ..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset - false - 7.3 - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 ..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true false - false - 7.3 - False ..\..\bin\ALGLIB-3.17.0.dll False + False - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -384,71 +75,24 @@ - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {DF87C13E-A889-46FF-8153-66DCAA8C5674} - HeuristicLab.Problems.DataAnalysis-3.4 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj b/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj index 5c18e3b570..c453f4d0ca 100644 --- a/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj +++ b/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj @@ -1,37 +1,20 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {CCF61DA0-B226-4C0F-8052-29ACC6BDE6EE} - Library - Properties HeuristicLab.Problems.Instances.ElloumiCTAP - HeuristicLab.Problems.Instances.ElloumiCTAP-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,115 +23,61 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 ..\..\bin\HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 ..\..\bin\HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 ..\..\bin\HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 ..\..\bin\HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false + + + - - - - - - - - - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - + + + - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj b/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj index a80e3217ee..13434bb53f 100644 --- a/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj @@ -1,36 +1,18 @@ - - - + - Debug - AnyCPU - {B37BF2DD-752C-456A-9DEF-FF5B41FC3C77} - Library - Properties HeuristicLab.Problems.Instances.Orienteering - HeuristicLab.Problems.Instances.Orienteering-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -39,82 +21,35 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt MinimumRecommendedRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt MinimumRecommendedRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - false - - - - - - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - + + + - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj b/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj index d18f5f7e15..350fadf34c 100644 --- a/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj +++ b/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj @@ -1,37 +1,20 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {73F29D43-5714-4069-8FAB-0D18FEB5F175} - Library - Properties HeuristicLab.Problems.Instances.QAPLIB - HeuristicLab.Problems.Instances.QAPLIB-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,79 +23,48 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 ..\..\bin\HeuristicLab.Problems.Instances.QAPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 ..\..\bin\HeuristicLab.Problems.Instances.QAPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 ..\..\bin\HeuristicLab.Problems.Instances.QAPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 ..\..\bin\HeuristicLab.Problems.Instances.QAPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false + + + - - - - - - - - - - @@ -122,42 +74,16 @@ - - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - + + + - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj b/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj index 5036c300d1..595da80b91 100644 --- a/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj @@ -1,37 +1,20 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {9D792B6D-836B-46DC-9D69-50B4B1E7B87F} - Library - Properties HeuristicLab.Problems.Instances.Scheduling - HeuristicLab.Problems.Instances.Scheduling-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,113 +23,63 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true false - false + + + ..\bin\HeuristicLab.PluginInfrastructure-3.3.dll False - - - - - - - - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - + + - - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj b/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj index 28768bb3d9..1f2da2d9ec 100644 --- a/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj +++ b/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj @@ -1,37 +1,19 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {B7FA451C-26BF-4EE5-8E0E-BECAADA5B8E9} - Library - Properties HeuristicLab.Problems.Instances.TSPLIB.Views - HeuristicLab.Problems.Instances.TSPLIB.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,89 +22,57 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 bin\Debug\HeuristicLab.Problems.Instances.TSPLIB.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 bin\Release\HeuristicLab.Problems.Instances.TSPLIB.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\HeuristicLab.Problems.Instances.TSPLIB.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 bin\Release\HeuristicLab.Problems.Instances.TSPLIB.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true - false - - - - - - - - - + Form - + TSPLIBImportDialog.cs - + UserControl - + TSPLIBTSPInstanceProviderView.cs @@ -132,60 +82,16 @@ - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {CE0F99D6-1C56-48A9-9B68-3E5B833703EF} - HeuristicLab.Problems.Instances.TSPLIB-3.3 - False - - - {B1BA398F-953F-4C3A-B07B-1E5E17A27DD9} - HeuristicLab.Problems.Instances.Views-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj b/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj index 9aa7ce8a38..9578c819a6 100644 --- a/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj +++ b/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj @@ -1,37 +1,20 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {CE0F99D6-1C56-48A9-9B68-3E5B833703EF} - Library - Properties HeuristicLab.Problems.Instances.TSPLIB - HeuristicLab.Problems.Instances.TSPLIB-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,83 +23,48 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 ..\..\bin\HeuristicLab.Problems.Instances.TSPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 ..\..\bin\HeuristicLab.Problems.Instances.TSPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 ..\..\bin\HeuristicLab.Problems.Instances.TSPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 ..\..\bin\HeuristicLab.Problems.Instances.TSPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false + + + - - - - - - - - - - - - - - @@ -124,42 +72,16 @@ - - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - + + + - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj b/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj index 0285949107..79e3abc67d 100644 --- a/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj +++ b/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj @@ -1,37 +1,19 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {E2419315-B10A-4BC1-B517-A24DCF4C59AC} - Library - Properties HeuristicLab.Problems.Instances.VehicleRouting.Views - HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,89 +22,57 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 bin\Debug\HeuristicLab.Problems.Instances.VehicleRouting.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 bin\Release\HeuristicLab.Problems.Instances.VehicleRouting.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\HeuristicLab.Problems.Instances.VehicleRouting.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 bin\Release\HeuristicLab.Problems.Instances.VehicleRouting.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true - false - - - - - - - - - + UserControl - + VRPInstanceProviderView.cs - + Form - + VRPImportDialog.cs @@ -132,60 +82,16 @@ - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {8C265E11-4F8D-4CED-9E6B-F400A0075C18} - HeuristicLab.Problems.Instances.VehicleRouting-3.4 - False - - - {B1BA398F-953F-4C3A-B07B-1E5E17A27DD9} - HeuristicLab.Problems.Instances.Views-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj b/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj index bc18631a21..32acc210b9 100644 --- a/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj +++ b/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj @@ -1,37 +1,20 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {8C265E11-4F8D-4CED-9E6B-F400A0075C18} - Library - Properties HeuristicLab.Problems.Instances.VehicleRouting - HeuristicLab.Problems.Instances.VehicleRouting-3.4 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,98 +23,48 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 ..\..\bin\HeuristicLab.Problems.Instances.VehicleRouting-3.4.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 ..\..\bin\HeuristicLab.Problems.Instances.VehicleRouting-3.4.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 ..\..\bin\HeuristicLab.Problems.Instances.VehicleRouting-3.4.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 ..\..\bin\HeuristicLab.Problems.Instances.VehicleRouting-3.4.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -151,47 +84,17 @@ - - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {CE0F99D6-1C56-48A9-9B68-3E5B833703EF} - HeuristicLab.Problems.Instances.TSPLIB-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - + + + + - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj b/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj index 082c4c1cd6..06f4651f23 100644 --- a/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj @@ -1,37 +1,19 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {B1BA398F-953F-4C3A-B07B-1E5E17A27DD9} - Library - Properties HeuristicLab.Problems.Instances.Views - HeuristicLab.Problems.Instances.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,91 +22,59 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 ..\..\bin\HeuristicLab.Problems.Instances.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 ..\..\bin\HeuristicLab.Problems.Instances.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 ..\..\bin\HeuristicLab.Problems.Instances.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 ..\..\bin\HeuristicLab.Problems.Instances.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - - - - - - - - + UserControl - + ProblemInstanceProviderView.cs - + UserControl - + ProblemInstanceProviderViewGeneric.cs - @@ -132,65 +82,17 @@ - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {72104A0B-90E7-42F3-9ABE-9BBBADD4B943} - HeuristicLab.Data.Views-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj b/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj index b343697901..8be430ccbf 100644 --- a/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj +++ b/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj @@ -1,37 +1,20 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - Library - Properties HeuristicLab.Problems.Instances - HeuristicLab.Problems.Instances-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,130 +23,61 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 ..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 ..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false false - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 ..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 ..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj b/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj index dde63a4b3f..2c0e502873 100644 --- a/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj +++ b/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {A9EE65D9-405B-4C9C-B470-FC911AAC541B} - Library - Properties HeuristicLab.Problems.Knapsack.Views - HeuristicLab.Problems.Knapsack.Views-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,93 +22,42 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - + UserControl - + KnapsackSolutionView.cs - - @@ -129,77 +65,16 @@ - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {66D249C3-A01D-42A8-82A2-919BC8EC3D83} - HeuristicLab.Encodings.BinaryVectorEncoding-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {E10F395F-C8A6-48AD-B470-9AA7A1F43809} - HeuristicLab.Problems.Knapsack-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj b/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj index ee6b489a10..184a3f9eec 100644 --- a/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj +++ b/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {E10F395F-C8A6-48AD-B470-9AA7A1F43809} - Library - Properties HeuristicLab.Problems.Knapsack - HeuristicLab.Problems.Knapsack-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,98 +22,33 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - - - - - - - - - - - - - - - - - + @@ -134,102 +56,27 @@ - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {66D249C3-A01D-42A8-82A2-919BC8EC3D83} - HeuristicLab.Encodings.BinaryVectorEncoding-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj b/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj index 830a1d4ada..5968021548 100644 --- a/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj +++ b/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj @@ -1,37 +1,20 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {8A7C524C-4B72-45FD-8274-EFB67C27C169} - Library - Properties HeuristicLab.Problems.LinearAssignment.Views - HeuristicLab.Problems.LinearAssignment.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,161 +23,74 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true false - false + + + - - - - - + UserControl - + LAPAssignmentView.cs - - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {72104A0B-90E7-42F3-9ABE-9BBBADD4B943} - HeuristicLab.Data.Views-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA} - HeuristicLab.Encodings.PermutationEncoding-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {7250653F-DE83-4069-8D34-8050E8E45EA1} - HeuristicLab.Problems.LinearAssignment-3.3 - False - + + + + + + + + + + + + - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj b/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj index 10892509ff..2a258c3211 100644 --- a/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj +++ b/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj @@ -1,37 +1,20 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {7250653F-DE83-4069-8D34-8050E8E45EA1} - Library - Properties HeuristicLab.Problems.LinearAssignment - HeuristicLab.Problems.LinearAssignment-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,172 +23,78 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true false - false + + + ..\..\bin\HeuristicLab.PluginInfrastructure-3.3.dll False - - - - - - - - - - - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA} - HeuristicLab.Encodings.PermutationEncoding-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj b/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj index 538f59a3ac..8db2a5ca93 100644 --- a/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj +++ b/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj @@ -1,37 +1,20 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {C3AD50E6-E717-490E-ABC7-32EF7FB03C97} - Library - Properties HeuristicLab.Problems.NK - HeuristicLab.Problems.NK-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,98 +23,47 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 bin\Release\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false true - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 bin\Debug\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 bin\Release\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false true - false + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -139,86 +71,26 @@ - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {66d249c3-a01d-42a8-82a2-919bc8ec3d83} - HeuristicLab.Encodings.BinaryVectorEncoding-3.3 - False - - - {23da7ff4-d5b8-41b6-aa96-f0561d24f3ee} - HeuristicLab.Operators-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {56f9106a-079f-4c61-92f6-86a84c2d84b7} - HeuristicLab.Parameters-3.3 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {fc627be5-0f93-47d8-bd2e-530ea2b8aa5f} - HeuristicLab.Problems.Binary-3.3 - False - - - {f4539fb6-4708-40c9-be64-0a1390aea197} - HeuristicLab.Random-3.3 - False - + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj b/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj index aacb2aab21..9b0a19c887 100644 --- a/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj +++ b/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj @@ -1,36 +1,18 @@ - - - + - Debug - AnyCPU - {BBF2CCC8-4D87-4297-8E18-8241FF93F966} - Library - Properties HeuristicLab.Problems.Orienteering.Views - HeuristicLab.Problems.Orienteering.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -39,80 +21,49 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt MinimumRecommendedRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt MinimumRecommendedRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - false - False ..\..\bin\HeuristicLab.Data.Views-3.3.dll + False - False ..\..\bin\HeuristicLab.Encodings.PermutationEncoding-3.3.dll + False - False ..\..\bin\HeuristicLab.Problems.LinearAssignment-3.3.dll + False - - - - - - + UserControl - + OrienteeringProblemView.cs - + UserControl - + OrienteeringSolutionView.cs - - @@ -120,71 +71,21 @@ - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - - - {DDFB14DD-2A85-493C-A52D-E69729BBAEB0} - HeuristicLab.Encodings.IntegerVectorEncoding-3.3 - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - - - {662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2} - HeuristicLab.Optimization.Views-3.3 - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - - - {8A7C524C-4B72-45FD-8274-EFB67C27C169} - HeuristicLab.Problems.LinearAssignment.Views-3.3 - - - {D1EFA4CC-909F-41D5-9C1F-C3AF1957A372} - HeuristicLab.Problems.Orienteering-3.3 - + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj b/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj index 00e15f53ef..284d03d928 100644 --- a/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj +++ b/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj @@ -1,36 +1,18 @@ - - - + - Debug - AnyCPU - {D1EFA4CC-909F-41D5-9C1F-C3AF1957A372} - Library - Properties HeuristicLab.Problems.Orienteering - HeuristicLab.Problems.Orienteering-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -42,65 +24,23 @@ - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt MinimumRecommendedRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt MinimumRecommendedRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - false - - - - - - - - - - - - - - - - - - @@ -108,102 +48,30 @@ - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {DDFB14DD-2A85-493C-A52D-E69729BBAEB0} - HeuristicLab.Encodings.IntegerVectorEncoding-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - {21977CC3-1757-4B3B-87BD-FF817AAA900F} - HeuristicLab.Scripting-3.3 - False - + + + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.PTSP.Views/3.3/HeuristicLab.Problems.PTSP.Views-3.3.csproj b/HeuristicLab.Problems.PTSP.Views/3.3/HeuristicLab.Problems.PTSP.Views-3.3.csproj index 802de88c5a..94e94429be 100644 --- a/HeuristicLab.Problems.PTSP.Views/3.3/HeuristicLab.Problems.PTSP.Views-3.3.csproj +++ b/HeuristicLab.Problems.PTSP.Views/3.3/HeuristicLab.Problems.PTSP.Views-3.3.csproj @@ -1,170 +1,66 @@ - - - + - Debug - AnyCPU - {90B6CA12-9791-4430-B2D7-CD3ED7F75E2B} - Library - Properties HeuristicLab.Problems.PTSP.Views - HeuristicLab.Problems.PTSP.Views-3.3 - v4.7.2 - 512 + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AnyCPU pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA} - HeuristicLab.Encodings.PermutationEncoding-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2} - HeuristicLab.Optimization.Views-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {97198965-afea-496b-b3b1-316905c43fd6} - HeuristicLab.Problems.PTSP-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - - + + + + + + + + + + + + + + + - - - - + UserControl - + PathPTSPTourView.cs - - - + UserControl - + ProbabilisticTravelingSalesmanProblemView.cs @@ -173,14 +69,6 @@ - - \ No newline at end of file diff --git a/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj b/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj index 61a7a19fa8..7204a6a065 100644 --- a/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj +++ b/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj @@ -1,34 +1,18 @@ - - - + - Debug - AnyCPU - {97198965-AFEA-496B-B3B1-316905C43FD6} - Library - Properties HeuristicLab.Problems.PTSP - HeuristicLab.Problems.PTSP-3.3 - v4.7.2 - 512 + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AnyCPU pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 true @@ -37,190 +21,55 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA} - HeuristicLab.Encodings.PermutationEncoding-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj b/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj index 8b9813795d..30edbea8b3 100644 --- a/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj +++ b/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj @@ -1,36 +1,18 @@ - - - + - Debug - AnyCPU - {D2C39FBA-A1D5-403A-9211-B0A299A76313} - Library - Properties HeuristicLab.Problems.ParameterOptimization - HeuristicLab.Problems.ParameterOptimization-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -39,63 +21,24 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt MinimumRecommendedRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt MinimumRecommendedRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - false - - - - - - - - - - - - - - - @@ -103,82 +46,26 @@ - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {bb6d334a-4bb6-4674-9883-31a6ebb32cab} - HeuristicLab.Encodings.RealVectorEncoding-3.3 - False - - - {23da7ff4-d5b8-41b6-aa96-f0561d24f3ee} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {56f9106a-079f-4c61-92f6-86a84c2d84b7} - HeuristicLab.Parameters-3.3 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj b/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj index e480d8128a..9d40828c29 100644 --- a/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj +++ b/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj @@ -1,36 +1,18 @@ - - - + - Debug - AnyCPU - {6F023B90-2091-40A9-8AC0-B0338DFF8E5F} - Library - Properties HeuristicLab.Problems.Programmable.Views - HeuristicLab.Problems.Programmable.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -39,73 +21,45 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - - - - - - - - + UserControl - + ProblemDefinitionScriptView.cs - + UserControl - + MultiObjectiveProgrammableProblemView.cs - + UserControl - + SingleObjectiveProgrammableProblemView.cs - @@ -113,85 +67,21 @@ - - {c38691ae-ecb4-489a-a05d-b035554e0168} - HeuristicLab.CodeEditor-3.4 - False - - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {e226881d-315f-423d-b419-a766fe0d8685} - HeuristicLab.Core.Views-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {72104a0b-90e7-42f3-9abe-9bbbadd4b943} - HeuristicLab.Data.Views-3.3 - False - - - {ab687bbe-1bfe-476b-906d-44237135431d} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3bd61258-31da-4b09-89c0-4f71fef5f05a} - HeuristicLab.MainForm-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {ee07bff8-b23d-41f5-8ad7-ac9598d7a2c9} - HeuristicLab.Problems.Programmable-3.3 - False - - - {0c2917c8-7aa8-4e18-800a-c4d064f992ed} - HeuristicLab.Scripting.Views-3.3 - False - - - {21977cc3-1757-4b3b-87bd-ff817aaa900f} - HeuristicLab.Scripting-3.3 - False - + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj b/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj index 27e47d52bc..c3193c405e 100644 --- a/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj +++ b/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj @@ -1,36 +1,18 @@ - - - + - Debug - AnyCPU - {EE07BFF8-B23D-41F5-8AD7-AC9598D7A2C9} - Library - Properties HeuristicLab.Problems.Programmable - HeuristicLab.Problems.Programmable-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -39,179 +21,62 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - - - - - - - - - - - + True True ScriptTemplates.resx - - - - - - - ResXFileCodeGenerator - ScriptTemplates.Designer.cs - - - - - {887425b4-4348-49ed-a457-b7d2c26ddbf9} - HeuristicLab.Analysis-3.3 - False - - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {66d249c3-a01d-42a8-82a2-919bc8ec3d83} - HeuristicLab.Encodings.BinaryVectorEncoding-3.3 - - - {ddfb14dd-2a85-493c-a52d-e69729bbaeb0} - HeuristicLab.Encodings.IntegerVectorEncoding-3.3 - - - {be698769-975a-429e-828c-72bb2b6182c8} - HeuristicLab.Encodings.LinearLinkageEncoding-3.4 - False - - - {dbecb8b0-b166-4133-baf1-ed67c3fd7fca} - HeuristicLab.Encodings.PermutationEncoding-3.3 - - - {bb6d334a-4bb6-4674-9883-31a6ebb32cab} - HeuristicLab.Encodings.RealVectorEncoding-3.3 - - - {06d4a186-9319-48a0-bade-a2058d462eea} - HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4 - False - - - {23da7ff4-d5b8-41b6-aa96-f0561d24f3ee} - HeuristicLab.Operators-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {56f9106a-079f-4c61-92f6-86a84c2d84b7} - HeuristicLab.Parameters-3.3 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {21977cc3-1757-4b3b-87bd-ff817aaa900f} - HeuristicLab.Scripting-3.3 - False - + + + + + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj index e110e55fff..6db4d8ec45 100644 --- a/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj @@ -1,37 +1,20 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {5B9B9E8C-2706-43C2-80B8-A08341E431F7} - Library - Properties HeuristicLab.Problems.QuadraticAssignment.Algorithms - HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,178 +23,75 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true false - false + + + - - - - - - - - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA} - HeuristicLab.Encodings.PermutationEncoding-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {79271BC8-4446-40E2-BB89-9BE4E17174FE} - HeuristicLab.Problems.QuadraticAssignment-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - False - + + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj index eba4a1f563..93319f9045 100644 --- a/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj @@ -1,37 +1,20 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {997F018D-AEA2-4F21-9301-82FAF6A5612D} - Library - Properties HeuristicLab.Problems.QuadraticAssignment.Views - HeuristicLab.Problems.QuadraticAssignment.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,186 +23,90 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true false - false + + + - - - - - - + UserControl - + QAPAssignmentView.cs - + UserControl - + QAPVisualizationControl.cs - + UserControl - + QuadraticAssignmentProblemView.cs - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA} - HeuristicLab.Encodings.PermutationEncoding-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2} - HeuristicLab.Optimization.Views-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {79271BC8-4446-40E2-BB89-9BE4E17174FE} - HeuristicLab.Problems.QuadraticAssignment-3.3 - False - + + + + + + + + + + + + + + - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj index d6ccf33ed0..b5892b4572 100644 --- a/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj @@ -1,37 +1,20 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {79271BC8-4446-40E2-BB89-9BE4E17174FE} - Library - Properties HeuristicLab.Problems.QuadraticAssignment - HeuristicLab.Problems.QuadraticAssignment-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,200 +23,78 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset true true false - false + + + - - - - - - - - - - - - - - - - - Code - - - - - - - - - - - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA} - HeuristicLab.Encodings.PermutationEncoding-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-f74c-4128-bc86-8324271da13e} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {7250653F-DE83-4069-8D34-8050E8E45EA1} - HeuristicLab.Problems.LinearAssignment-3.3 - + + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj b/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj index 8542514f74..92ad35485c 100644 --- a/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj +++ b/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj @@ -1,96 +1,54 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {78763A4E-E163-48C2-98EB-709760D06F25} - Library - Properties HeuristicLab.Problems.Scheduling.Views - HeuristicLab.Problems.Scheduling.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false true @@ -99,34 +57,27 @@ HeuristicLab.snk - - - - - - + UserControl - + JSMForcingStrategyView.cs - + UserControl - + JobShopSchedulingProblemView.cs - + UserControl - + JSMDecodingErrorPolicyView.cs - - @@ -134,83 +85,21 @@ - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - - - {0C378762-D5DB-488A-8931-2BA42B1B7CBF} - HeuristicLab.Encodings.ScheduleEncoding.Views-3.3 - False - - - {17F3EF80-B2C3-4B8D-A4D5-BE9CE3BA2606} - HeuristicLab.Encodings.ScheduleEncoding-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2} - HeuristicLab.Optimization.Views-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - - - {2BF1D639-1A74-44ED-AAAD-41ECD395AD93} - HeuristicLab.Problems.Scheduling-3.3 - False - + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj b/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj index d8434520bd..dd7f23e5fb 100644 --- a/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj +++ b/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj @@ -1,37 +1,19 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {2BF1D639-1A74-44ED-AAAD-41ECD395AD93} - Library - Properties HeuristicLab.Problems.Scheduling - HeuristicLab.Problems.Scheduling-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,184 +22,67 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset false false - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {DDFB14DD-2A85-493C-A52D-E69729BBAEB0} - HeuristicLab.Encodings.IntegerVectorEncoding-3.3 - False - - - {DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA} - HeuristicLab.Encodings.PermutationEncoding-3.3 - False - - - {17F3EF80-B2C3-4B8D-A4D5-BE9CE3BA2606} - HeuristicLab.Encodings.ScheduleEncoding-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj b/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj index 3d1c3b02c6..f22ca4a505 100644 --- a/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj +++ b/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj @@ -1,35 +1,20 @@ - - - + - Debug - AnyCPU - {D53E8E48-CFAA-4F57-AC35-63BEF4476159} - Library - Properties HeuristicLab.Problems.TestFunctions.MultiObjective - HeuristicLab.Problems.TestFunctions.MultiObjective-3.3 - v4.7.2 - 512 + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 false MinimumRecommendedRules.ruleset pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 true @@ -41,112 +26,30 @@ - true - $(SolutionDir)\bin\ CODE_ANALYSIS;DEBUG;TRACE full - x64 true - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - true - $(SolutionDir)\bin\ CODE_ANALYSIS;DEBUG;TRACE full - x86 true - prompt MinimumRecommendedRules.ruleset - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -169,82 +72,26 @@ - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {bbab9df5-5ef3-4ba8-ade9-b36e82114937} - HeuristicLab.Data-3.3 - False - - - {bb6d334a-4bb6-4674-9883-31a6ebb32cab} - HeuristicLab.Encodings.RealVectorEncoding-3.3 - False - - - {23da7ff4-d5b8-41b6-aa96-f0561d24f3ee} - HeuristicLab.Operators-3.3 - False - - - {14ab8d24-25bc-400c-a846-4627aa945192} - HeuristicLab.Optimization-3.3 - False - - - {56f9106a-079f-4c61-92f6-86a84c2d84b7} - HeuristicLab.Parameters-3.3 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540e29e-4793-49e7-8ee2-fea7f61c3994} - HeuristicLab.Problems.Instances-3.3 - False - + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj b/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj index 15fd31ce75..1023f35185 100644 --- a/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj +++ b/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {6AE0E1F5-D3FF-43A3-90E1-2435E7493FB5} - Library - Properties HeuristicLab.Problems.TestFunctions.Views - HeuristicLab.Problems.TestFunctions.Views-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,97 +22,53 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - + UserControl - + ParetoFrontScatterPlotView.cs - - - + UserControl - + SingleObjectiveTestFunctionProblemView.cs - + UserControl - + SingleObjectiveTestFunctionSolutionView.cs @@ -133,112 +76,23 @@ - - {76945d76-ca61-4147-9dc2-0acdcddf87f9} - HeuristicLab.Analysis.Views-3.3 - False - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {BB6D334A-4BB6-4674-9883-31A6EBB32CAB} - HeuristicLab.Encodings.RealVectorEncoding-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2} - HeuristicLab.Optimization.Views-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540e29e-4793-49e7-8ee2-fea7f61c3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {d53e8e48-cfaa-4f57-ac35-63bef4476159} - HeuristicLab.Problems.TestFunctions.MultiObjective-3.3 - False - - - {88B9B0E3-344E-4196-82A3-0F9732506FE8} - HeuristicLab.Problems.TestFunctions-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj b/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj index f2925cd5f6..146d8b1058 100644 --- a/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj +++ b/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {88B9B0E3-344E-4196-82A3-0F9732506FE8} - Library - Properties HeuristicLab.Problems.TestFunctions - HeuristicLab.Problems.TestFunctions-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,244 +22,62 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - - - - - - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {BB6D334A-4BB6-4674-9883-31A6EBB32CAB} - HeuristicLab.Encodings.RealVectorEncoding-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540e29e-4793-49e7-8ee2-fea7f61c3994} - HeuristicLab.Problems.Instances-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj b/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj index f675e69fc0..9e35c2113a 100644 --- a/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj +++ b/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {CDA28124-ACD0-4231-8EB0-C510B361F84E} - Library - Properties HeuristicLab.Problems.TravelingSalesman.Views - HeuristicLab.Problems.TravelingSalesman.Views-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,105 +22,51 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - + UserControl - + PathTSPTourView.cs - - + UserControl - + TravelingSalesmanProblemView.cs - @@ -141,102 +74,21 @@ - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA} - HeuristicLab.Encodings.PermutationEncoding-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2} - HeuristicLab.Optimization.Views-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {D767C38D-8014-46B0-9A32-03A3AECCE34A} - HeuristicLab.Problems.TravelingSalesman-3.3 - False - + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj b/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj index cf1be80fb1..3222c5b571 100644 --- a/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj +++ b/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj @@ -1,25 +1,12 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {D767C38D-8014-46B0-9A32-03A3AECCE34A} - Library - Properties HeuristicLab.Problems.TravelingSalesman - HeuristicLab.Problems.TravelingSalesman-3.3 true HeuristicLab.snk - - - 3.5 - - - v4.7.2 - - + + + net472 publish\ true Disk @@ -35,235 +22,66 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - - - AllRules.ruleset - false + pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - false - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA} - HeuristicLab.Encodings.PermutationEncoding-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - + + + + + + + + + + + + + + - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj b/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj index f5639f158d..a1860a5302 100644 --- a/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj +++ b/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj @@ -1,22 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {7EA0985E-A1D6-4FA7-B30A-2633FDFB01F0} - Library - Properties HeuristicLab.Problems.VehicleRouting.Views - HeuristicLab.Problems.VehicleRouting.Views-3.4 - v4.7.2 - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -33,151 +22,101 @@ false false true - + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - bin\x64\Release\HeuristicLab.Problems.VehicleRouting.Views-3.4.xml - true + bin\$(Platform)\$(Configuration)\HeuristicLab.Problems.VehicleRouting.Views-3.4.xml pdbonly - x64 - prompt - AllRules.ruleset - false + + + - - - 3.5 - - - - 3.5 - - - 3.5 - - - + - - + UserControl - + MDCVRPPDTWView.cs - + UserControl - + MDCVRPTWView.cs - + UserControl - + MultiDepotVRPView.cs - + UserControl - + CVRPPDTWView.cs - + UserControl - + CVRPTWView.cs - - + UserControl - + SingleDepotVRPView.cs - + Form - + VRPImportDialog.cs - + UserControl - + VRPProblemInstanceView.cs - + UserControl - + VehicleRoutingProblemView.cs - + UserControl - + VRPSolutionView.cs @@ -187,128 +126,31 @@ - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {E226881D-315F-423D-B419-A766FE0D8685} - HeuristicLab.Core.Views-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {72104A0B-90E7-42F3-9ABE-9BBBADD4B943} - HeuristicLab.Data.Views-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA} - HeuristicLab.Encodings.PermutationEncoding-3.3 - False - - - {AB687BBE-1BFE-476B-906D-44237135431D} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3BD61258-31DA-4B09-89C0-4F71FEF5F05A} - HeuristicLab.MainForm-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {662B4B15-8F4D-4AE5-B3EB-D91C215F5AF2} - HeuristicLab.Optimization.Views-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {B94FFB82-43D4-40AB-9980-B03470ADF221} - HeuristicLab.Problems.VehicleRouting-3.4 - False - + + + + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj b/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj index 8f508c5a85..6aa4dec45b 100644 --- a/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj +++ b/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj @@ -1,23 +1,12 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {B94FFB82-43D4-40AB-9980-B03470ADF221} - Library - Properties HeuristicLab.Problems.VehicleRouting - HeuristicLab.Problems.VehicleRouting-3.4 true HeuristicLab.snk - - - 3.5 - - - v4.7.2 + + + net472 publish\ true Disk @@ -33,467 +22,68 @@ false false true - + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset + - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - - - AllRules.ruleset - false + pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - false - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - bin\x64\Release\HeuristicLab.Routing.TSP-3.3.XML - true + bin\$(Platform)\$(Configuration)\HeuristicLab.Routing.TSP-3.3.XML pdbonly - x64 - prompt - AllRules.ruleset - false - - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - {887425B4-4348-49ED-A457-B7D2C26DDBF9} - HeuristicLab.Analysis-3.3 - False - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {0E27A536-1C4A-4624-A65E-DC4F4F23E3E1} - HeuristicLab.Common.Resources-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {DBECB8B0-B166-4133-BAF1-ED67C3FD7FCA} - HeuristicLab.Encodings.PermutationEncoding-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {25087811-F74C-4128-BC86-8324271DA13E} - HeuristicLab.Optimization.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - {3540E29E-4793-49E7-8EE2-FEA7F61C3994} - HeuristicLab.Problems.Instances-3.3 - False - - - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - HeuristicLab.Random-3.3 - + + + + + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - - - - - \ No newline at end of file diff --git a/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj b/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj index b3b54dce9d..af3ff1b5de 100644 --- a/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj +++ b/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj @@ -1,25 +1,12 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {F4539FB6-4708-40C9-BE64-0A1390AEA197} - Library - Properties HeuristicLab.Random - HeuristicLab.Random-3.3 true HeuristicLab.snk - - - 3.5 - - - v4.7.2 - - + + + net472 publish\ true Disk @@ -35,186 +22,59 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - - - AllRules.ruleset - false + pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - false - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - - - - 3.5 - - - - - - - - - - - - - - Code - - - Code - - - - - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + + + - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj b/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj index 3ea9605bda..ca9673e832 100644 --- a/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj +++ b/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj @@ -1,37 +1,19 @@ - - - + - Debug - AnyCPU - {0C2917C8-7AA8-4E18-800A-C4D064F992ED} - Library - Properties HeuristicLab.Scripting.Views - HeuristicLab.Scripting.Views-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,87 +22,55 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - false - - - - - - - + UserControl - + CSharpScriptView.cs - + Form - + CompilerErrorDialog.cs - + UserControl - + ExecutableScriptView.cs - + UserControl - + ScriptView.cs - - - + UserControl - + VariableStoreView.cs @@ -129,76 +79,25 @@ - - {c38691ae-ecb4-489a-a05d-b035554e0168} - HeuristicLab.CodeEditor-3.4 - - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {e226881d-315f-423d-b419-a766fe0d8685} - HeuristicLab.Core.Views-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {21977cc3-1757-4b3b-87bd-ff817aaa900f} - HeuristicLab.Scripting-3.3 - False - - - {ab687bbe-1bfe-476b-906d-44237135431d} - HeuristicLab.MainForm.WindowsForms-3.3 - False - - - {3bd61258-31da-4b09-89c0-4f71fef5f05a} - HeuristicLab.MainForm-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj b/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj index 5aae37d7bd..62fad71c6e 100644 --- a/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj +++ b/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj @@ -1,37 +1,19 @@ - - - + - Debug - AnyCPU - {21977CC3-1757-4B3B-87BD-FF817AAA900F} - Library - Properties HeuristicLab.Scripting - HeuristicLab.Scripting-3.3 - v4.7.2 - 512 - + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -40,111 +22,47 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt MinimumRecommendedRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt MinimumRecommendedRules.ruleset - false - - - - - - - - - - - + True True ScriptTemplates.resx - - - - - - - - {958b43bc-cc5c-4fa2-8628-2b3b01d890b6} - HeuristicLab.Collections-3.3 - False - - - {0e27a536-1c4a-4624-a65e-dc4f4f23e3e1} - HeuristicLab.Common.Resources-3.3 - False - - - {a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c} - HeuristicLab.Common-3.3 - False - - - {c36bd924-a541-4a00-afa8-41701378ddc5} - HeuristicLab.Core-3.3 - False - - - {102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b} - HeuristicLab.Persistence-3.3 - False - - - {94186a6a-5176-4402-ae83-886557b53cca} - HeuristicLab.PluginInfrastructure-3.3 - False - + + + + + + - + ResXFileCodeGenerator ScriptTemplates.Designer.cs HeuristicLab.Scripting @@ -152,19 +70,11 @@ - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj b/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj index bc6e381b5d..4c274c5181 100644 --- a/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj +++ b/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj @@ -1,25 +1,12 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {2C36CD4F-E5F5-43A4-801A-201EA895FE17} - Library - Properties HeuristicLab.Selection - HeuristicLab.Selection-3.3 true HeuristicLab.snk - - - 3.5 - - - v4.7.2 - - + + + net472 publish\ true Disk @@ -35,199 +22,59 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {958B43BC-CC5C-4FA2-8628-2B3B01D890B6} - HeuristicLab.Collections-3.3 - False - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {BBAB9DF5-5EF3-4BA8-ADE9-B36E82114937} - HeuristicLab.Data-3.3 - False - - - {23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE} - HeuristicLab.Operators-3.3 - False - - - {14AB8D24-25BC-400C-A846-4627AA945192} - HeuristicLab.Optimization-3.3 - False - - - {56F9106A-079F-4C61-92F6-86A84C2D84B7} - HeuristicLab.Parameters-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + + + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj b/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj index 62949e17e5..e0e3b97fd1 100644 --- a/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj +++ b/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj @@ -1,25 +1,12 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {DC3D7072-7999-4719-B65D-3997744D5DC1} - Library - Properties HeuristicLab.SequentialEngine - HeuristicLab.SequentialEngine-3.3 true HeuristicLab.snk - - - 3.5 - - - v4.7.2 - - + + + net472 publish\ true Disk @@ -35,147 +22,54 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x86 - prompt - AllRules.ruleset - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - - - true + pdbonly - x64 - prompt - AllRules.ruleset - false - - - - 3.5 - - - - - - - - - {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} - HeuristicLab.Common-3.3 - False - - - {C36BD924-A541-4A00-AFA8-41701378DDC5} - HeuristicLab.Core-3.3 - False - - - {102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B} - HeuristicLab.Persistence-3.3 - False - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + + + - False ..\..\bin\HEAL.Attic.dll False + False - - \ No newline at end of file diff --git a/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj b/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj index f6ffc8b63e..310ed272a6 100644 --- a/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj @@ -19,6 +19,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -159,7 +162,6 @@ - --> - \ No newline at end of file + --> \ No newline at end of file diff --git a/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj b/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj index b39086925d..5cafe027b8 100644 --- a/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj +++ b/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj @@ -21,6 +21,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -169,7 +172,6 @@ - --> - \ No newline at end of file + --> \ No newline at end of file diff --git a/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj b/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj index 3ef7f3e76d..7e54831fa0 100644 --- a/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj @@ -41,6 +41,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -180,7 +183,6 @@ - --> - \ No newline at end of file + --> \ No newline at end of file diff --git a/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj b/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj index 57d8fb3167..63f88a178c 100644 --- a/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj +++ b/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj @@ -27,6 +27,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -160,7 +163,6 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj b/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj index 5fa4e3fbf0..21e474337a 100644 --- a/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj +++ b/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj @@ -39,6 +39,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 diff --git a/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj b/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj index 631a50b48b..b1de6a0d7d 100644 --- a/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj @@ -19,6 +19,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -198,7 +201,6 @@ - --> - \ No newline at end of file + --> \ No newline at end of file diff --git a/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj b/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj index ac4bd509f9..07c1848de1 100644 --- a/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj +++ b/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj @@ -20,6 +20,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -155,7 +158,6 @@ - --> - \ No newline at end of file + --> \ No newline at end of file diff --git a/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj b/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj index a25b57bdac..1bc7658fe2 100644 --- a/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj +++ b/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj @@ -20,6 +20,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -225,7 +228,6 @@ - --> - \ No newline at end of file + --> \ No newline at end of file diff --git a/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj b/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj index c92037e78b..20b29efe5f 100644 --- a/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj @@ -38,6 +38,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -201,7 +204,6 @@ - --> - \ No newline at end of file + --> \ No newline at end of file diff --git a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj index 0640097a39..b897338ddd 100644 --- a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj +++ b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj @@ -21,6 +21,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -340,7 +343,6 @@ - --> - \ No newline at end of file + --> \ No newline at end of file diff --git a/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj b/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj index a615b272c4..53621559f1 100644 --- a/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj @@ -18,6 +18,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -194,7 +197,6 @@ - --> - \ No newline at end of file + --> \ No newline at end of file diff --git a/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj b/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj index 9a82af14e7..6ff14448f2 100644 --- a/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj @@ -19,6 +19,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -259,7 +262,6 @@ - --> - \ No newline at end of file + --> \ No newline at end of file diff --git a/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj b/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj index f2ba790ae0..9c7c7bddc5 100644 --- a/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj @@ -19,6 +19,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -157,7 +160,6 @@ - --> - \ No newline at end of file + --> \ No newline at end of file diff --git a/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj b/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj index 5ac284136a..ac6da59220 100644 --- a/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj +++ b/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj @@ -29,6 +29,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 @@ -349,7 +352,6 @@ - --> - \ No newline at end of file + --> \ No newline at end of file diff --git a/HeuristicLab.Tests/HeuristicLab.Tests.csproj b/HeuristicLab.Tests/HeuristicLab.Tests.csproj index 620d890c61..1ede54b9a1 100644 --- a/HeuristicLab.Tests/HeuristicLab.Tests.csproj +++ b/HeuristicLab.Tests/HeuristicLab.Tests.csproj @@ -21,6 +21,9 @@ full false $(SolutionDir)\bin\ + true + false + false DEBUG;TRACE prompt 4 diff --git a/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj b/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj index 89518d9524..ba14111928 100644 --- a/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj +++ b/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj @@ -1,24 +1,11 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {EE2034D9-6E27-48A1-B855-42D45F69A4FC} - Library - Properties HeuristicLab.Tracing - HeuristicLab.Tracing-3.3 - v4.7.2 - - - 512 + net472 true HeuristicLab.snk - - - 3.5 + publish\ true @@ -35,131 +22,47 @@ false false true + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - - - AllRules.ruleset - false + - - - 3.5 - - - 3.5 - - - 3.5 - - - + - - - - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - \ No newline at end of file diff --git a/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj b/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj index 2dc48a1e74..865df49dcc 100644 --- a/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj +++ b/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj @@ -1,38 +1,19 @@ - - + - Debug - AnyCPU 8.0.30703 - 2.0 - {315BDA09-3F4F-49B3-9790-B37CFC1C5750} - Library - Properties HeuristicLab.Visualization.ChartControlsExtensions - HeuristicLab.Visualization.ChartControlsExtensions-3.3 - v4.7.2 - - - 512 + net472 + false + $(SolutionDir)\bin\ + true + false + false - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - false true @@ -41,106 +22,73 @@ HeuristicLab.snk - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 bin\Debug\HeuristicLab.Visualization.ChartControlExtensions-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 $(SolutionDir)\bin\HeuristicLab.Visualization.ChartControlExtensions-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false - false - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 bin\Debug\HeuristicLab.Visualization.ChartControlExtensions-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 $(SolutionDir)\bin\HeuristicLab.Visualization.ChartControlExtensions-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - prompt MinimumRecommendedRules.ruleset ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false - false - - - - - - - - + Component - + EnhancedChart.cs - + UserControl - + GanttChart.cs - + Form - + ImageExportDialog.cs - - @@ -148,20 +96,8 @@ - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + - - \ No newline at end of file diff --git a/HeuristicLab/3.3/HeuristicLab-3.3.csproj b/HeuristicLab/3.3/HeuristicLab-3.3.csproj index 99645d78a1..ae98c5090c 100644 --- a/HeuristicLab/3.3/HeuristicLab-3.3.csproj +++ b/HeuristicLab/3.3/HeuristicLab-3.3.csproj @@ -1,26 +1,17 @@ - - + - Debug - AnyCPU 9.0.30729 - 2.0 - {B1DCDECA-B56E-41D5-9850-EF0D3A77DEAF} WinExe - Properties HeuristicLab HeuristicLab 3.3 - v4.7.2 - 512 + net472 true HeuristicLab.snk HeuristicLab.Program Always HeuristicLab.ico true - - - 3.5 + publish\ true @@ -37,112 +28,53 @@ false false true - - + false + $(SolutionDir)\bin\ + true + false + false + AllRules.ruleset - true full - false - $(SolutionDir)\bin\ - DEBUG;TRACE - prompt - 4 - AllRules.ruleset - false pdbonly - true - $(SolutionDir)\bin\ - TRACE - prompt - 4 - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x86 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x86 - prompt - - - AllRules.ruleset - false + - true - $(SolutionDir)\bin\ - DEBUG;TRACE full - x64 - prompt - AllRules.ruleset - false - $(SolutionDir)\bin\ - TRACE - true pdbonly - x64 - prompt - - - AllRules.ruleset - false + app.manifest - - - 3.5 - - - 3.5 - - - 3.5 - - + - - - - - + ResXFileCodeGenerator Resources.Designer.cs Designer - + True Resources.resx True - - Designer - Designer @@ -152,18 +84,14 @@ SettingsSingleFileGenerator Settings.Designer.cs - + True Settings.settings True - - {94186A6A-5176-4402-AE83-886557B53CCA} - HeuristicLab.PluginInfrastructure-3.3 - False - + @@ -174,34 +102,8 @@ - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - - + \ No newline at end of file From f678854dc8dc5c2aa1ef850382503188b2357c3f Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 15 Apr 2022 11:46:22 +0200 Subject: [PATCH 27/39] Fixed csproj files for Client.Hive.Slave --- .../3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj | 3 ++- .../HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj | 3 ++- .../3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj | 3 ++- .../3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj | 5 +++-- ...HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj | 3 ++- .../3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj | 3 ++- 6 files changed, 13 insertions(+), 7 deletions(-) diff --git a/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj index b07e573d00..bbc25f18ba 100644 --- a/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj @@ -159,6 +159,7 @@ + --> - --> \ No newline at end of file + \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj index 8c07fb0701..6b53ca2b0b 100644 --- a/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj @@ -127,6 +127,7 @@ + --> - --> \ No newline at end of file + \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj index 7af9e53693..2abf66fd44 100644 --- a/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj @@ -162,6 +162,7 @@ + --> - --> \ No newline at end of file + \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj index 8e2d58c7ff..6ab08aa27d 100644 --- a/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj @@ -280,6 +280,7 @@ + --> - - --> \ No newline at end of file + + \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj index ee9d1dd949..be53d5c27f 100644 --- a/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj @@ -179,6 +179,7 @@ + --> - --> \ No newline at end of file + \ No newline at end of file diff --git a/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj b/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj index 5607637ca8..7860e2a515 100644 --- a/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj @@ -190,8 +190,9 @@ + --> - --> \ No newline at end of file + \ No newline at end of file From d8c7895206621273fb7d955bcea9e7db689f10fc Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 15 Apr 2022 14:42:03 +0200 Subject: [PATCH 28/39] Removed unused Transformers --- .../3.3/HeuristicLab.Persistence-3.3.csproj | 5 -- .../3.3/Transformers/BitmapTransformer.cs | 50 ------------- .../3.3/Transformers/FontTransformer.cs | 71 ------------------- .../3.3/Transformers/KnownStorableTypesMap.cs | 49 ------------- 4 files changed, 175 deletions(-) delete mode 100644 HeuristicLab.Persistence/3.3/Transformers/BitmapTransformer.cs delete mode 100644 HeuristicLab.Persistence/3.3/Transformers/FontTransformer.cs delete mode 100644 HeuristicLab.Persistence/3.3/Transformers/KnownStorableTypesMap.cs diff --git a/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj b/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj index c3c1a939bc..997b708279 100644 --- a/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj +++ b/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj @@ -93,11 +93,6 @@ False - - - - - \ No newline at end of file diff --git a/HeuristicLab.Persistence/3.3/Transformers/BitmapTransformer.cs b/HeuristicLab.Persistence/3.3/Transformers/BitmapTransformer.cs deleted file mode 100644 index ef85be81f8..0000000000 --- a/HeuristicLab.Persistence/3.3/Transformers/BitmapTransformer.cs +++ /dev/null @@ -1,50 +0,0 @@ -#region License Information -/* HeuristicLab - * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL) - * - * This file is part of HeuristicLab. - * - * HeuristicLab is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * HeuristicLab is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HeuristicLab. If not, see . - */ -#endregion - -using System; -using System.Drawing; -using System.Drawing.Imaging; -using System.IO; -using System.Linq; -using Google.Protobuf; -using HEAL.Attic; - -namespace HeuristicLab.Persistence { - [Transformer("D0ADB806-2DFD-459D-B5DA-14B5F1152534", 404)] - [StorableType("B13D6153-E71D-4B76-9893-81D3570403E8")] - internal sealed class BitmapTransformer : BoxTransformer { - protected override void Populate(Box box, Bitmap value, Mapper mapper) { - lock (value) - using (var ms = new MemoryStream()) { - value.Save(ms, ImageFormat.Png); - box.Bytes = ByteString.CopyFrom(ms.ToArray()); - } - } - - protected override Bitmap Extract(Box box, Type type, Mapper mapper) { - using (var ms = new MemoryStream()) { - ms.Write(box.Bytes.ToArray(), 0, box.Bytes.Length); - ms.Seek(0, SeekOrigin.Begin); - return new Bitmap(ms); - } - } - } -} diff --git a/HeuristicLab.Persistence/3.3/Transformers/FontTransformer.cs b/HeuristicLab.Persistence/3.3/Transformers/FontTransformer.cs deleted file mode 100644 index 7c3a5278ac..0000000000 --- a/HeuristicLab.Persistence/3.3/Transformers/FontTransformer.cs +++ /dev/null @@ -1,71 +0,0 @@ -#region License Information -/* HeuristicLab - * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL) - * - * This file is part of HeuristicLab. - * - * HeuristicLab is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * HeuristicLab is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HeuristicLab. If not, see . - */ -#endregion - -using System; -using System.Drawing; -using HEAL.Attic; - -namespace HeuristicLab.Persistence.Transformers { - - [Transformer("AFF27987-3301-4D70-9601-EFCA31BDA0DB", 405)] - [StorableType("B9F9A371-4DCB-478B-B0D4-6F87A15C02B5")] - internal sealed class FontTransformer : BoxTransformer { - protected override void Populate(Box box, Font value, Mapper mapper) { - var uints = box.UInts; - uints.Add(mapper.GetStringId(GetFontFamilyName(value.FontFamily))); - uints.Add(mapper.GetBoxId(value.Size)); - uints.Add(mapper.GetBoxId(value.Style)); - uints.Add(mapper.GetBoxId(value.Unit)); - uints.Add(mapper.GetBoxId(value.GdiCharSet)); - uints.Add(mapper.GetBoxId(value.GdiVerticalFont)); - } - - protected override Font Extract(Box box, Type type, Mapper mapper) { - var fontData = box.UInts; - return new Font( - GetFontFamily(mapper.GetString(fontData[0])), - (float)mapper.GetObject(fontData[1]), - (FontStyle)mapper.GetObject(fontData[2]), - (GraphicsUnit)mapper.GetObject(fontData[3]), - (byte)mapper.GetObject(fontData[4]), - (bool)mapper.GetObject(fontData[5]) - ); - } - - public const string GENERIC_MONOSPACE_NAME = "_GenericMonospace"; - public const string GENERIC_SANS_SERIF_NAME = "_GenericSansSerif"; - public const string GENERIC_SERIF_NAME = "_GenericSerif"; - - public static FontFamily GetFontFamily(string name) { - if (name == GENERIC_MONOSPACE_NAME) return FontFamily.GenericMonospace; - if (name == GENERIC_SANS_SERIF_NAME) return FontFamily.GenericSansSerif; - if (name == GENERIC_SERIF_NAME) return FontFamily.GenericSerif; - return new FontFamily(name); - } - - public static string GetFontFamilyName(FontFamily ff) { - if (ff.Equals(FontFamily.GenericMonospace)) return GENERIC_MONOSPACE_NAME; - if (ff.Equals(FontFamily.GenericSansSerif)) return GENERIC_SANS_SERIF_NAME; - if (ff.Equals(FontFamily.GenericSerif)) return GENERIC_SERIF_NAME; - return ff.Name; - } - } -} diff --git a/HeuristicLab.Persistence/3.3/Transformers/KnownStorableTypesMap.cs b/HeuristicLab.Persistence/3.3/Transformers/KnownStorableTypesMap.cs deleted file mode 100644 index 48e43e8baa..0000000000 --- a/HeuristicLab.Persistence/3.3/Transformers/KnownStorableTypesMap.cs +++ /dev/null @@ -1,49 +0,0 @@ -#region License Information -/* HeuristicLab - * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL) - * - * This file is part of HeuristicLab. - * - * HeuristicLab is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * HeuristicLab is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with HeuristicLab. If not, see . - */ -#endregion - -using System; -using System.Collections.Generic; -using HEAL.Attic; - -namespace HeuristicLab.Persistence.Transformers { - public class KnownStorableTypesMap : IStorableTypeMap { - - public IEnumerable> KnownStorableTypes { - get { - return new[] { - Tuple.Create(new Guid("ECC12A57-DA8D-43D9-9EC7-FCAC878A4D69"), typeof(System.Drawing.Font)), - Tuple.Create(new Guid("494C1352-A1C3-47A3-8754-A0B19B8F1567"), typeof(System.Drawing.FontStyle)), - Tuple.Create(new Guid("41147B67-4C7A-4907-9F6C-509568395EDB"), typeof(System.Drawing.GraphicsUnit)), - Tuple.Create(new Guid("E8348C94-9817-4164-9C98-377689F83F30"), typeof(System.Drawing.Bitmap)), - // Tuple.Create(new Guid("4AF3A1F6-49CD-4172-8394-FE464889250E"), Type.GetType("System.CultureAwareRandomizedComparer")), - // Tuple.Create(new Guid("4C7F657C-B69E-4D1A-8812-3254D6219FD2"), Type.GetType("System.OrdinalRandomizedComparer")), - // Tuple.Create(new Guid("0549A3DF-1FD4-487A-B06B-8C572DFFFBEB"), Type.GetType("System.Security.PermissionTokenKeyComparer")), - // Tuple.Create(new Guid("65D2DE74-8BDF-4C74-9005-81A2C3991DC5"), Type.GetType("System.Collections.CompatibleComparer")), - Tuple.Create(new Guid("3DA30D50-2337-4487-AECD-F2DB3ECED834"), Type.GetType("System.Collections.StructuralEqualityComparer")), - // Tuple.Create(new Guid("8A19DA46-FE80-4776-9DB4-B17E6182D104"), Type.GetType("System.Collections.Generic.SByteEnumEqualityComparer`1")), - // Tuple.Create(new Guid("F6F6EFB9-B631-4ACC-9326-F492A6A63011"), Type.GetType("System.Collections.Generic.ShortEnumEqualityComparer`1")), - // Tuple.Create(new Guid("BA0AB604-C052-4E08-8F9E-A5D8098F16A6"), Type.GetType("System.Collections.Generic.RandomizedStringEqualityComparer")), - // Tuple.Create(new Guid("00C8C940-63D9-43FF-99BA-9C69301BF043"), Type.GetType("System.Collections.Generic.RandomizedObjectEqualityComparer")), - }; - } - } - } -} From 90841f27c379ebfc8b8545f424d4420e4ff7da0a Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 15 Apr 2022 14:53:28 +0200 Subject: [PATCH 29/39] Removed unused reference to Resource stub --- .../HeuristicLab.DataPreprocessing-3.4.csproj | 3 - .../3.4/Properties/Resources.Designer.cs | 63 ------------------- 2 files changed, 66 deletions(-) delete mode 100644 HeuristicLab.DataPreprocessing/3.4/Properties/Resources.Designer.cs diff --git a/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj b/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj index 66cea2ce62..b632b477b4 100644 --- a/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj +++ b/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj @@ -57,9 +57,6 @@ False - - - \ No newline at end of file diff --git a/HeuristicLab.DataPreprocessing/3.4/Properties/Resources.Designer.cs b/HeuristicLab.DataPreprocessing/3.4/Properties/Resources.Designer.cs deleted file mode 100644 index 19fcf4486e..0000000000 --- a/HeuristicLab.DataPreprocessing/3.4/Properties/Resources.Designer.cs +++ /dev/null @@ -1,63 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.18408 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace HeuristicLab.DataPreprocessing.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.DataPreprocessing.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - } -} From e2e10e18b2bcee3a3d4041562545c4255fd6a7c0 Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 15 Apr 2022 15:16:01 +0200 Subject: [PATCH 30/39] Unified to use $(SolutionDir)\bin instead of ..\..\ cascade --- .../3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj | 2 +- .../3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj | 2 +- ...isticLab.Algorithms.CMAEvolutionStrategy-3.4.csproj | 4 ++-- ...ab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj | 4 ++-- ...risticLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj | 2 +- ...uristicLab.Algorithms.DataAnalysis.Views-3.4.csproj | 2 +- .../HeuristicLab.Algorithms.DataAnalysis-3.4.csproj | 8 ++++---- ...euristicLab.Algorithms.EvolutionStrategy-3.3.csproj | 2 +- ...HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj | 2 +- .../HeuristicLab.Algorithms.GradientDescent-3.3.csproj | 4 ++-- .../3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj | 2 +- ...ticLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj | 4 ++-- .../3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj | 2 +- ...thms.OffspringSelectionEvolutionStrategy-3.3.csproj | 2 +- ...ithms.OffspringSelectionGeneticAlgorithm-3.3.csproj | 2 +- ...lgorithms.ParameterlessPopulationPyramid-3.3.csproj | 2 +- ...Lab.Algorithms.ParticleSwarmOptimization-3.3.csproj | 2 +- .../3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj | 2 +- .../HeuristicLab.Algorithms.RandomSearch-3.3.csproj | 2 +- .../HeuristicLab.Algorithms.ScatterSearch-3.3.csproj | 2 +- ...uristicLab.Algorithms.SimulatedAnnealing-3.3.csproj | 2 +- .../3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj | 2 +- ...ab.Algorithms.VariableNeighborhoodSearch-3.3.csproj | 2 +- .../HeuristicLab.Analysis.Statistics.Views-3.3.csproj | 2 +- .../3.3/HeuristicLab.Analysis.Views-3.3.csproj | 2 +- .../3.3/HeuristicLab.Analysis-3.3.csproj | 4 ++-- ...uristicLab.Clients.Access.Administration-3.3.csproj | 2 +- .../3.3/HeuristicLab.Clients.Access.Views-3.3.csproj | 2 +- .../3.3/HeuristicLab.Clients.Access-3.3.csproj | 2 +- .../HeuristicLab.Clients.Hive.Administrator-3.3.csproj | 6 +++--- .../HeuristicLab.Clients.Hive.JobManager-3.3.csproj | 2 +- .../3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj | 2 +- .../3.3/HeuristicLab.Clients.Hive-3.3.csproj | 2 +- .../3.3/HeuristicLab.Clients.OKB-3.3.csproj | 2 +- .../3.4/HeuristicLab.CodeEditor-3.4.csproj | 10 +++++----- .../3.3/HeuristicLab.Collections-3.3.csproj | 2 +- HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj | 2 +- .../3.3/HeuristicLab.Core.Views-3.3.csproj | 6 +++--- HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj | 2 +- HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj | 2 +- .../3.4/HeuristicLab.DataPreprocessing-3.4.csproj | 2 +- .../3.3/HeuristicLab.DebugEngine-3.3.csproj | 2 +- ...risticLab.Encodings.BinaryVectorEncoding-3.3.csproj | 2 +- ...isticLab.Encodings.IntegerVectorEncoding-3.3.csproj | 2 +- ...isticLab.Encodings.LinearLinkageEncoding-3.4.csproj | 2 +- ...uristicLab.Encodings.PermutationEncoding-3.3.csproj | 2 +- ...euristicLab.Encodings.RealVectorEncoding-3.3.csproj | 2 +- .../HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj | 2 +- ...Encodings.SymbolicExpressionTreeEncoding-3.4.csproj | 2 +- .../3.3/HeuristicLab.ExactOptimization-3.3.csproj | 4 ++-- HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj | 2 +- .../3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj | 2 +- .../3.3/HeuristicLab.Operators.Programmable-3.3.csproj | 2 +- ...Operators.Views.GraphVisualization.Views-3.3.csproj | 4 ++-- ...icLab.Operators.Views.GraphVisualization-3.3.csproj | 2 +- .../3.3/HeuristicLab.Operators-3.3.csproj | 2 +- .../3.3/HeuristicLab.Optimization.Operators-3.3.csproj | 2 +- .../3.3/HeuristicLab.Optimization-3.3.csproj | 2 +- .../3.3/HeuristicLab.Optimizer-3.3.csproj | 2 +- .../3.3/HeuristicLab.ParallelEngine-3.3.csproj | 2 +- .../3.3/HeuristicLab.Parameters-3.3.csproj | 2 +- .../3.3/HeuristicLab.Persistence.GUI-3.3.csproj | 2 +- .../3.3/HeuristicLab.Persistence-3.3.csproj | 2 +- .../3.3/HeuristicLab.PluginInfrastructure-3.3.csproj | 6 +++--- .../3.3/HeuristicLab.Problems.BinPacking-3.3.csproj | 2 +- .../3.3/HeuristicLab.Problems.Binary-3.3.csproj | 2 +- ...taAnalysis.Symbolic.Classification.Views-3.4.csproj | 2 +- ...ems.DataAnalysis.Symbolic.Classification-3.4.csproj | 4 ++-- ...s.DataAnalysis.Symbolic.Regression.Views-3.4.csproj | 2 +- ...roblems.DataAnalysis.Symbolic.Regression-3.4.csproj | 4 ++-- ...ataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj | 6 +++--- ...Lab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj | 4 ++-- ...risticLab.Problems.DataAnalysis.Symbolic-3.4.csproj | 8 ++++---- ...uristicLab.Problems.DataAnalysis.Trading-3.4.csproj | 2 +- ...HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj | 4 ++-- .../3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj | 4 ++-- ...risticLab.Problems.ExternalEvaluation.GP-3.5.csproj | 4 ++-- ...icLab.Problems.ExternalEvaluation.Matlab-3.3.csproj | 4 ++-- ...icLab.Problems.ExternalEvaluation.Scilab-3.3.csproj | 6 +++--- ...HeuristicLab.Problems.ExternalEvaluation-3.4.csproj | 4 ++-- ...HeuristicLab.Problems.GeneticProgramming-3.3.csproj | 2 +- ...uristicLab.Problems.GrammaticalEvolution-3.4.csproj | 2 +- .../3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj | 2 +- ...isticLab.Problems.Instances.DataAnalysis-3.3.csproj | 4 ++-- ...uristicLab.Problems.Instances.Scheduling-3.3.csproj | 2 +- .../3.3/HeuristicLab.Problems.Knapsack-3.3.csproj | 2 +- .../HeuristicLab.Problems.LinearAssignment-3.3.csproj | 4 ++-- .../3.3/HeuristicLab.Problems.NK-3.3.csproj | 2 +- ...HeuristicLab.Problems.Orienteering.Views-3.3.csproj | 6 +++--- .../3.3/HeuristicLab.Problems.Orienteering-3.3.csproj | 2 +- .../3.3/HeuristicLab.Problems.PTSP-3.3.csproj | 2 +- ...risticLab.Problems.ParameterOptimization-3.3.csproj | 2 +- .../3.3/HeuristicLab.Problems.Programmable-3.3.csproj | 2 +- ....Problems.QuadraticAssignment.Algorithms-3.3.csproj | 2 +- ...euristicLab.Problems.QuadraticAssignment-3.3.csproj | 2 +- .../3.3/HeuristicLab.Problems.Scheduling-3.3.csproj | 2 +- ...ab.Problems.TestFunctions.MultiObjective-3.3.csproj | 2 +- .../3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj | 2 +- .../HeuristicLab.Problems.TravelingSalesman-3.3.csproj | 2 +- ...uristicLab.Problems.VehicleRouting.Views-3.4.csproj | 2 +- .../HeuristicLab.Problems.VehicleRouting-3.4.csproj | 2 +- HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj | 2 +- .../3.3/HeuristicLab.Scripting.Views-3.3.csproj | 2 +- .../3.3/HeuristicLab.Scripting-3.3.csproj | 2 +- .../3.3/HeuristicLab.Selection-3.3.csproj | 2 +- .../3.3/HeuristicLab.SequentialEngine-3.3.csproj | 2 +- 106 files changed, 145 insertions(+), 145 deletions(-) diff --git a/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj b/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj index a7be06ce4f..df1039c00c 100644 --- a/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj +++ b/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj @@ -58,7 +58,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj b/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj index c71d1cedbc..98a22fc829 100644 --- a/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj +++ b/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj @@ -55,7 +55,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj b/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj index 3ce60a65a2..be788f963d 100644 --- a/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj +++ b/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj @@ -49,7 +49,7 @@ - ..\..\bin\ALGLIB-3.17.0.dll + $(SolutionDir)\bin\ALGLIB-3.17.0.dll False False @@ -78,7 +78,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj index 1add6453f0..510c2c8ead 100644 --- a/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj @@ -27,7 +27,7 @@ - ..\..\bin\ALGLIB-3.17.0.dll + $(SolutionDir)\bin\ALGLIB-3.17.0.dll False False @@ -60,7 +60,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj index 18d5cd6495..d74d9083fa 100644 --- a/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj @@ -80,7 +80,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj index fdccc26ced..45e6aebded 100644 --- a/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj @@ -67,7 +67,7 @@ - ..\..\bin\LibSVM-3.12.dll + $(SolutionDir)\bin\LibSVM-3.12.dll False diff --git a/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj index 7de430c9f0..f41497b62b 100644 --- a/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj @@ -53,18 +53,18 @@ - ..\..\bin\ALGLIB-3.17.0.dll + $(SolutionDir)\bin\ALGLIB-3.17.0.dll False False - ..\..\bin\ALGLIB-3.7.0.dll + $(SolutionDir)\bin\ALGLIB-3.7.0.dll False False alglib_3_7 - ..\..\bin\LibSVM-3.12.dll + $(SolutionDir)\bin\LibSVM-3.12.dll False @@ -100,7 +100,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj b/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj index f9b3e57984..da3dc63884 100644 --- a/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj +++ b/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj @@ -72,7 +72,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj b/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj index d6298e3fe4..157041e930 100644 --- a/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj +++ b/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj @@ -73,7 +73,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj b/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj index a14b6b0041..b8e8fbfdeb 100644 --- a/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj +++ b/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj @@ -63,7 +63,7 @@ - ..\..\bin\ALGLIB-3.17.0.dll + $(SolutionDir)\bin\ALGLIB-3.17.0.dll False False @@ -91,7 +91,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj b/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj index 2cc5bbf60c..570bbd284e 100644 --- a/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj @@ -72,7 +72,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj b/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj index 2d15c2e86f..88d8fe238c 100644 --- a/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj +++ b/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj @@ -33,7 +33,7 @@ - ..\..\bin\ALGLIB-3.17.0.dll + $(SolutionDir)\bin\ALGLIB-3.17.0.dll False False @@ -60,7 +60,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj b/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj index 5b5ba08b0d..2c76dba141 100644 --- a/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj +++ b/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj @@ -73,7 +73,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj b/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj index 2aaf05132c..7c211c67fe 100644 --- a/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj +++ b/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj @@ -72,7 +72,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj b/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj index 481052d9e0..ac04363fc1 100644 --- a/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj +++ b/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj @@ -72,7 +72,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj b/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj index 351f1461f7..9b01de68ba 100644 --- a/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj +++ b/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj @@ -61,7 +61,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj b/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj index 1710e856ac..b999b35aa4 100644 --- a/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj +++ b/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj @@ -75,7 +75,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj b/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj index 7ea6f8322d..cfd9b04e51 100644 --- a/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj +++ b/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj @@ -55,7 +55,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj b/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj index 48c646b9ad..2295e95c14 100644 --- a/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj @@ -57,7 +57,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj b/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj index 465f40737c..75c6c9bd62 100644 --- a/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj @@ -60,7 +60,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj b/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj index cfba8926b4..671ad95879 100644 --- a/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj +++ b/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj @@ -71,7 +71,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj b/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj index 5de6052389..1af8dfdaeb 100644 --- a/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj @@ -74,7 +74,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj b/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj index 47f9bccc8b..2d392fdb68 100644 --- a/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj @@ -72,7 +72,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj b/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj index 3dd11a80ca..01b6c254ac 100644 --- a/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj +++ b/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj @@ -52,7 +52,7 @@ - ..\..\bin\ALGLIB-3.17.0.dll + $(SolutionDir)\bin\ALGLIB-3.17.0.dll False False diff --git a/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj b/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj index 1d8eaaca98..b8b4b4af51 100644 --- a/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj +++ b/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj @@ -52,7 +52,7 @@ - ..\..\bin\ALGLIB-3.17.0.dll + $(SolutionDir)\bin\ALGLIB-3.17.0.dll False False diff --git a/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj b/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj index 3922581ab0..2c8b308ec9 100644 --- a/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj +++ b/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj @@ -52,7 +52,7 @@ - ..\..\bin\ALGLIB-3.17.0.dll + $(SolutionDir)\bin\ALGLIB-3.17.0.dll False False @@ -80,7 +80,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj b/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj index 4473b85be2..74a9e1d88c 100644 --- a/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj +++ b/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj @@ -170,7 +170,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj b/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj index e163687f48..0aa3b060ec 100644 --- a/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj +++ b/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj @@ -148,7 +148,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj b/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj index c94a4a605b..77df3a145e 100644 --- a/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj +++ b/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj @@ -79,7 +79,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj b/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj index 217b28cf9c..066b2819fb 100644 --- a/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj @@ -43,11 +43,11 @@ - ..\..\bin\Calendar.DayView.dll + $(SolutionDir)\bin\Calendar.DayView.dll False - ..\..\bin\HeuristicLab.DayView-1.0.dll + $(SolutionDir)\bin\HeuristicLab.DayView-1.0.dll False @@ -163,7 +163,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj b/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj index 0d4b809576..824e620d11 100644 --- a/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj +++ b/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj @@ -118,7 +118,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj b/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj index 97a9fb2ae5..5614356bed 100644 --- a/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj @@ -149,7 +149,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj b/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj index 629abe79c5..1b66820c5e 100644 --- a/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj +++ b/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj @@ -99,7 +99,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj b/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj index 34b0a0fe3c..9791e4d5fc 100644 --- a/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj +++ b/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj @@ -81,7 +81,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj b/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj index f439dbdef5..2eadedb67a 100644 --- a/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj +++ b/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj @@ -38,27 +38,27 @@ - ..\..\bin\ICSharpCode.AvalonEdit.dll + $(SolutionDir)\bin\ICSharpCode.AvalonEdit.dll False False - ..\..\bin\ICSharpCode.NRefactory.dll + $(SolutionDir)\bin\ICSharpCode.NRefactory.dll False False - ..\..\bin\ICSharpCode.NRefactory.Cecil.dll + $(SolutionDir)\bin\ICSharpCode.NRefactory.Cecil.dll False False - ..\..\bin\ICSharpCode.NRefactory.CSharp.dll + $(SolutionDir)\bin\ICSharpCode.NRefactory.CSharp.dll False False - ..\..\bin\ICSharpCode.NRefactory.Xml.dll + $(SolutionDir)\bin\ICSharpCode.NRefactory.Xml.dll False False diff --git a/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj b/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj index 01b6638f82..a77cd647cd 100644 --- a/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj +++ b/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj @@ -67,7 +67,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj b/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj index 3e6f673f16..d8e82993bb 100644 --- a/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj +++ b/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj @@ -66,7 +66,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj b/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj index 6fe039be92..f9bd30a385 100644 --- a/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj +++ b/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj @@ -287,11 +287,11 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False - - + + \ No newline at end of file diff --git a/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj b/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj index da4ae06714..a1ac8b2bb9 100644 --- a/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj +++ b/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj @@ -67,7 +67,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj b/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj index 42d6c1878b..5c437bed1d 100644 --- a/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj +++ b/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj @@ -67,7 +67,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj b/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj index b632b477b4..5245ccb6c3 100644 --- a/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj +++ b/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj @@ -52,7 +52,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj b/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj index 966182fc1c..552aa95824 100644 --- a/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj +++ b/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj @@ -60,7 +60,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj b/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj index f98bf3cdae..0205e313f4 100644 --- a/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj @@ -69,7 +69,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj b/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj index 60c4af25e1..0896b4b42f 100644 --- a/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj @@ -67,7 +67,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj b/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj index 5e33d35e28..962d1a131a 100644 --- a/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj +++ b/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj @@ -60,7 +60,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj b/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj index 4ffc920a7f..7e66c5d843 100644 --- a/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj @@ -70,7 +70,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj b/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj index 8a0853d6be..cf8bdb9175 100644 --- a/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj @@ -70,7 +70,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj b/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj index 81f77c93c0..cf11c968f0 100644 --- a/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj @@ -79,7 +79,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj b/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj index ad7c0d27d2..7f6f7e0462 100644 --- a/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj +++ b/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj @@ -73,7 +73,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj b/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj index 3ec05468e0..840690d469 100644 --- a/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj +++ b/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj @@ -27,12 +27,12 @@ - ..\..\bin\Google.OrTools.dll + $(SolutionDir)\bin\Google.OrTools.dll True False - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll True False diff --git a/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj b/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj index 2c9ba1dd56..1aba8382c9 100644 --- a/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj +++ b/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj @@ -58,7 +58,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj b/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj index de3d929679..e427aae5c7 100644 --- a/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj +++ b/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj @@ -54,7 +54,7 @@ - ..\..\bin\WeifenLuo.WinFormsUI.Docking-2.7.0.dll + $(SolutionDir)\bin\WeifenLuo.WinFormsUI.Docking-2.7.0.dll False diff --git a/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj b/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj index a9eb98d855..94be668de9 100644 --- a/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj +++ b/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj @@ -73,7 +73,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj b/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj index 3a4ce20478..6685186b2d 100644 --- a/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj +++ b/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj @@ -63,11 +63,11 @@ - ..\..\bin\HeuristicLab.Netron-3.0.2672.12446.dll + $(SolutionDir)\bin\HeuristicLab.Netron-3.0.2672.12446.dll False - ..\..\bin\Netron.Diagramming.Core-3.0.2672.12446.dll + $(SolutionDir)\bin\Netron.Diagramming.Core-3.0.2672.12446.dll False diff --git a/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj b/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj index 5a789c0c01..c156aa4042 100644 --- a/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj +++ b/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj @@ -69,7 +69,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj b/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj index 9bd7adddf0..76bbe6b86d 100644 --- a/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj +++ b/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj @@ -70,7 +70,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj b/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj index 869cbb57fd..8625f42ade 100644 --- a/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj +++ b/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj @@ -70,7 +70,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj b/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj index bccab31fc8..4f0046d134 100644 --- a/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj +++ b/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj @@ -73,7 +73,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj b/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj index adafe85a7c..347b5abbb2 100644 --- a/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj +++ b/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj @@ -189,7 +189,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj b/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj index 509662de42..e6736ed414 100644 --- a/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj +++ b/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj @@ -73,7 +73,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj b/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj index 306544e4f6..386ff2df60 100644 --- a/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj +++ b/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj @@ -70,7 +70,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj b/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj index a58f398e2f..34475b9a79 100644 --- a/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj +++ b/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj @@ -84,7 +84,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj b/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj index 997b708279..71b4362f9d 100644 --- a/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj +++ b/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj @@ -88,7 +88,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj b/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj index 687fb04b27..b5fd401d54 100644 --- a/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj +++ b/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj @@ -159,7 +159,7 @@ - PublicSettingsSingleFileGenerator + SettingsSingleFileGenerator Settings.Designer.cs @@ -220,6 +220,6 @@ - - + + \ No newline at end of file diff --git a/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj b/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj index 1694257ff6..6a36909ea1 100644 --- a/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj +++ b/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj @@ -45,7 +45,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj b/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj index 6294413696..b560a3c7a6 100644 --- a/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj +++ b/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj @@ -61,7 +61,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj index 0f1f4b9ec2..28579da293 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj @@ -126,7 +126,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj index 3d7516f177..8563631990 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj @@ -49,7 +49,7 @@ - ..\..\bin\ALGLIB-3.17.0.dll + $(SolutionDir)\bin\ALGLIB-3.17.0.dll False False @@ -80,7 +80,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj index 87b0b41f10..248a4ea3b7 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj @@ -120,7 +120,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj index 8fe06ec1e3..5dd3de3381 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj @@ -50,7 +50,7 @@ - ..\..\bin\ALGLIB-3.17.0.dll + $(SolutionDir)\bin\ALGLIB-3.17.0.dll False False @@ -83,7 +83,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj index 25a9243cb9..badfecd97b 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj @@ -49,12 +49,12 @@ - ..\..\bin\ALGLIB-3.17.0.dll + $(SolutionDir)\bin\ALGLIB-3.17.0.dll False False - ..\..\bin\HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.dll + $(SolutionDir)\bin\HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.dll False @@ -82,7 +82,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj index d4c283e7c3..0642fc5dda 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj @@ -49,12 +49,12 @@ - ..\..\bin\ALGLIB-3.17.0.dll + $(SolutionDir)\bin\ALGLIB-3.17.0.dll False False - ..\..\bin\EPPlus-4.0.3.dll + $(SolutionDir)\bin\EPPlus-4.0.3.dll False False diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj index 6b4c1baaef..c33c3e7df7 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj @@ -50,20 +50,20 @@ - ..\..\bin\ALGLIB-3.17.0.dll + $(SolutionDir)\bin\ALGLIB-3.17.0.dll False False - ..\..\bin\AutoDiff-1.0.dll + $(SolutionDir)\bin\AutoDiff-1.0.dll False - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False - ..\..\bin\HeuristicLab.Problems.DataAnalysis.Symbolic.NativeInterpreter-0.1.dll + $(SolutionDir)\bin\HeuristicLab.Problems.DataAnalysis.Symbolic.NativeInterpreter-0.1.dll False False diff --git a/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj index f270b2c85a..f410013f88 100644 --- a/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj @@ -70,7 +70,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj index 5b415ec3a4..3badf76046 100644 --- a/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj @@ -49,12 +49,12 @@ - ..\..\bin\ALGLIB-3.17.0.dll + $(SolutionDir)\bin\ALGLIB-3.17.0.dll False False - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False diff --git a/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj b/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj index 131151fe8e..b66f6820b2 100644 --- a/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj @@ -49,7 +49,7 @@ - ..\..\bin\ALGLIB-3.17.0.dll + $(SolutionDir)\bin\ALGLIB-3.17.0.dll False False @@ -75,7 +75,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj b/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj index 2e7dc15d97..b8cb88b506 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj @@ -50,7 +50,7 @@ - ..\..\bin\Google.ProtocolBuffers-2.4.1.473.dll + $(SolutionDir)\bin\Google.ProtocolBuffers-2.4.1.473.dll False @@ -76,7 +76,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj b/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj index 3c3a1fc26d..3f3f0873f6 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj @@ -38,7 +38,7 @@ - ..\..\bin\Interop.MLApp.dll + $(SolutionDir)\bin\Interop.MLApp.dll True @@ -65,7 +65,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj b/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj index 3a81cdf1ad..0461c20734 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj @@ -38,12 +38,12 @@ - ..\..\bin\DotNetScilab-1.0.dll + $(SolutionDir)\bin\DotNetScilab-1.0.dll False False - ..\..\bin\HeuristicLab.DotNetScilab-1.0.dll + $(SolutionDir)\bin\HeuristicLab.DotNetScilab-1.0.dll False False @@ -71,7 +71,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj b/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj index 4f38b4e3fd..546503aaa6 100644 --- a/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj @@ -50,7 +50,7 @@ - ..\..\bin\Google.ProtocolBuffers-2.4.1.473.dll + $(SolutionDir)\bin\Google.ProtocolBuffers-2.4.1.473.dll False @@ -87,7 +87,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj b/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj index 687e2ddf1d..9faf1f6c1a 100644 --- a/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj +++ b/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj @@ -85,7 +85,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj b/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj index d6266e7f30..b3880234f3 100644 --- a/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj +++ b/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj @@ -84,7 +84,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj b/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj index 932c47b586..148d7e8e34 100644 --- a/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj +++ b/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj @@ -66,7 +66,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj b/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj index acc254dba2..a06c88ad5f 100644 --- a/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj +++ b/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj @@ -56,7 +56,7 @@ - ..\..\bin\ALGLIB-3.17.0.dll + $(SolutionDir)\bin\ALGLIB-3.17.0.dll False False @@ -88,7 +88,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj b/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj index 595da80b91..fe0af8ce31 100644 --- a/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj @@ -63,7 +63,7 @@ - ..\bin\HeuristicLab.PluginInfrastructure-3.3.dll + $(SolutionDir)\bin\HeuristicLab.PluginInfrastructure-3.3.dll False diff --git a/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj b/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj index 184a3f9eec..ff2018e47e 100644 --- a/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj +++ b/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj @@ -72,7 +72,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj b/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj index 2a258c3211..8a02bc2cc8 100644 --- a/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj +++ b/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj @@ -63,7 +63,7 @@ - ..\..\bin\HeuristicLab.PluginInfrastructure-3.3.dll + $(SolutionDir)\bin\HeuristicLab.PluginInfrastructure-3.3.dll False @@ -90,7 +90,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj b/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj index 8db2a5ca93..7bea3b7f11 100644 --- a/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj +++ b/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj @@ -86,7 +86,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj b/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj index 9b0a19c887..2ad9d10160 100644 --- a/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj +++ b/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj @@ -38,15 +38,15 @@ - ..\..\bin\HeuristicLab.Data.Views-3.3.dll + $(SolutionDir)\bin\HeuristicLab.Data.Views-3.3.dll False - ..\..\bin\HeuristicLab.Encodings.PermutationEncoding-3.3.dll + $(SolutionDir)\bin\HeuristicLab.Encodings.PermutationEncoding-3.3.dll False - ..\..\bin\HeuristicLab.Problems.LinearAssignment-3.3.dll + $(SolutionDir)\bin\HeuristicLab.Problems.LinearAssignment-3.3.dll False diff --git a/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj b/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj index 284d03d928..6674b099b7 100644 --- a/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj +++ b/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj @@ -67,7 +67,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj b/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj index 7204a6a065..e1fc30ed0d 100644 --- a/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj +++ b/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj @@ -65,7 +65,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj b/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj index 30edbea8b3..b4a76d2440 100644 --- a/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj +++ b/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj @@ -61,7 +61,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj b/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj index c3193c405e..40d3f90377 100644 --- a/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj +++ b/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj @@ -72,7 +72,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj index 6db4d8ec45..f48de1a368 100644 --- a/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj @@ -87,7 +87,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj index b5892b4572..9c198b691a 100644 --- a/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj @@ -90,7 +90,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj b/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj index dd7f23e5fb..c8565adc0d 100644 --- a/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj +++ b/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj @@ -78,7 +78,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj b/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj index f22ca4a505..53736d86e9 100644 --- a/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj +++ b/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj @@ -87,7 +87,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj b/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj index 146d8b1058..654abdb983 100644 --- a/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj +++ b/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj @@ -73,7 +73,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj b/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj index 3222c5b571..49e4d5904d 100644 --- a/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj +++ b/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj @@ -77,7 +77,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj b/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj index a1860a5302..bc268a7612 100644 --- a/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj +++ b/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj @@ -146,7 +146,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj b/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj index 6aa4dec45b..76ccbc6252 100644 --- a/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj +++ b/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj @@ -79,7 +79,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj b/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj index af3ff1b5de..5e24706c30 100644 --- a/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj +++ b/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj @@ -70,7 +70,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj b/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj index ca9673e832..67b0d983b0 100644 --- a/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj +++ b/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj @@ -93,7 +93,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj b/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj index 62fad71c6e..66dfbdb473 100644 --- a/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj +++ b/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj @@ -70,7 +70,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj b/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj index 4c274c5181..c03d8c6814 100644 --- a/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj +++ b/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj @@ -70,7 +70,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False diff --git a/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj b/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj index e0e3b97fd1..81aa439491 100644 --- a/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj +++ b/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj @@ -65,7 +65,7 @@ - ..\..\bin\HEAL.Attic.dll + $(SolutionDir)\bin\HEAL.Attic.dll False False From 2e72caec7f710bd51b0efd1a42b61b9e51f7422a Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Wed, 20 Apr 2022 10:40:42 +0200 Subject: [PATCH 31/39] Fixed csproj files for HeuristicLab.Services.* --- .../3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj | 3 ++- .../3.3/HeuristicLab.Services.Access-3.3.csproj | 3 ++- .../HeuristicLab.Services.Deployment.DataAccess-3.3.csproj | 3 ++- .../3.3/HeuristicLab.Services.Deployment-3.3.csproj | 3 ++- .../3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj | 3 ++- .../3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj | 3 ++- .../3.3/HeuristicLab.Services.Hive-3.3.csproj | 3 ++- .../3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj | 3 ++- .../3.3/HeuristicLab.Services.OKB-3.3.csproj | 3 ++- .../3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj | 3 ++- .../3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj | 3 ++- .../3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj | 3 ++- .../3.3/HeuristicLab.Services.WebApp-3.3.csproj | 4 +++- 13 files changed, 27 insertions(+), 13 deletions(-) diff --git a/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj b/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj index 310ed272a6..0cfe1d1087 100644 --- a/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj @@ -162,6 +162,7 @@ + --> - --> \ No newline at end of file + \ No newline at end of file diff --git a/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj b/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj index 5cafe027b8..66feaf291c 100644 --- a/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj +++ b/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj @@ -172,6 +172,7 @@ + --> - --> \ No newline at end of file + \ No newline at end of file diff --git a/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj b/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj index 7e54831fa0..6e7e09e7ba 100644 --- a/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj @@ -183,6 +183,7 @@ + --> - --> \ No newline at end of file + \ No newline at end of file diff --git a/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj b/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj index 63f88a178c..10551d4815 100644 --- a/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj +++ b/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj @@ -165,4 +165,5 @@ - \ No newline at end of file + + \ No newline at end of file diff --git a/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj b/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj index b1de6a0d7d..00eaf6de72 100644 --- a/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj @@ -201,6 +201,7 @@ + --> - --> \ No newline at end of file + \ No newline at end of file diff --git a/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj b/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj index 07c1848de1..a15be8794c 100644 --- a/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj +++ b/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj @@ -158,6 +158,7 @@ + --> - --> \ No newline at end of file + \ No newline at end of file diff --git a/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj b/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj index 1bc7658fe2..5d2dcddc0d 100644 --- a/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj +++ b/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj @@ -228,6 +228,7 @@ + --> - --> \ No newline at end of file + \ No newline at end of file diff --git a/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj b/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj index 20b29efe5f..1e1dc1d4cc 100644 --- a/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj @@ -204,6 +204,7 @@ + --> - --> \ No newline at end of file + \ No newline at end of file diff --git a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj index b897338ddd..71fc4e6c8e 100644 --- a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj +++ b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj @@ -343,6 +343,7 @@ + --> - --> \ No newline at end of file + \ No newline at end of file diff --git a/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj b/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj index 53621559f1..4777f0fc88 100644 --- a/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj @@ -197,6 +197,7 @@ + --> - --> \ No newline at end of file + \ No newline at end of file diff --git a/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj b/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj index 6ff14448f2..c1f0890138 100644 --- a/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj @@ -262,6 +262,7 @@ + --> - --> \ No newline at end of file + \ No newline at end of file diff --git a/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj b/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj index 9c7c7bddc5..e1fc731611 100644 --- a/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj @@ -160,6 +160,7 @@ + --> - --> \ No newline at end of file + \ No newline at end of file diff --git a/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj b/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj index ac6da59220..996ab6ec20 100644 --- a/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj +++ b/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj @@ -352,6 +352,8 @@ + + --> - --> \ No newline at end of file + \ No newline at end of file From 742c2e11491f32c8527df34d9c291c67e116ca20 Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Thu, 21 Apr 2022 11:35:48 +0200 Subject: [PATCH 32/39] Removed references to local file system (CodeAnalysis) --- .../HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj | 8 -------- ...icLab.Visualization.ChartControlsExtensions-3.3.csproj | 8 -------- 2 files changed, 16 deletions(-) diff --git a/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj index 45e6aebded..8a6a8b550a 100644 --- a/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj @@ -27,9 +27,7 @@ true GlobalSuppressions.cs MinimumRecommendedRules.ruleset - ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true @@ -38,9 +36,7 @@ true GlobalSuppressions.cs MinimumRecommendedRules.ruleset - ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true @@ -49,9 +45,7 @@ true GlobalSuppressions.cs MinimumRecommendedRules.ruleset - ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true @@ -60,9 +54,7 @@ true GlobalSuppressions.cs MinimumRecommendedRules.ruleset - ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true diff --git a/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj b/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj index 865df49dcc..cc8602d81e 100644 --- a/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj +++ b/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj @@ -27,9 +27,7 @@ true GlobalSuppressions.cs MinimumRecommendedRules.ruleset - ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true @@ -38,9 +36,7 @@ true GlobalSuppressions.cs MinimumRecommendedRules.ruleset - ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false @@ -49,9 +45,7 @@ true GlobalSuppressions.cs MinimumRecommendedRules.ruleset - ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets true - ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules true @@ -60,9 +54,7 @@ true GlobalSuppressions.cs MinimumRecommendedRules.ruleset - ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets false - ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules false From 4b2b0b10b62242350238153dd606962f622bc7ee Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 22 Apr 2022 13:50:10 +0200 Subject: [PATCH 33/39] Changed DebugType to embedded --- .../HeuristicLab.Algorithms.ALPS-3.3.csproj | 12 +++++------ ...Lab.Algorithms.Benchmarks.Views-3.3.csproj | 12 +++++------ ...risticLab.Algorithms.Benchmarks-3.3.csproj | 12 +++++------ ...Algorithms.CMAEvolutionStrategy-3.4.csproj | 12 +++++------ ...thms.DataAnalysis.DecisionTrees-3.4.csproj | 4 ++-- ....Algorithms.DataAnalysis.Glmnet-3.4.csproj | 12 +++++------ ...b.Algorithms.DataAnalysis.Views-3.4.csproj | 12 +++++------ ...sticLab.Algorithms.DataAnalysis-3.4.csproj | 12 +++++------ ...ab.Algorithms.EvolutionStrategy-3.3.csproj | 12 +++++------ ...Lab.Algorithms.GeneticAlgorithm-3.3.csproj | 12 +++++------ ...cLab.Algorithms.GradientDescent-3.3.csproj | 12 +++++------ ...isticLab.Algorithms.LocalSearch-3.3.csproj | 12 +++++------ ...gorithms.MOCMAEvolutionStrategy-3.3.csproj | 12 +++++------ ...lgorithms.MultiObjectiveLocalSearch.csproj | 12 +++++------ .../HeuristicLab.Algorithms.NSGA2-3.3.csproj | 12 +++++------ ...pringSelectionEvolutionStrategy-3.3.csproj | 12 +++++------ ...springSelectionGeneticAlgorithm-3.3.csproj | 12 +++++------ ....ParameterlessPopulationPyramid-3.3.csproj | 12 +++++------ ...ithms.ParticleSwarmOptimization-3.3.csproj | 12 +++++------ .../HeuristicLab.Algorithms.RAPGA-3.3.csproj | 12 +++++------ ...sticLab.Algorithms.RandomSearch-3.3.csproj | 12 +++++------ ...ticLab.Algorithms.ScatterSearch-3.3.csproj | 12 +++++------ ...b.Algorithms.SimulatedAnnealing-3.3.csproj | 12 +++++------ ...risticLab.Algorithms.TabuSearch-3.3.csproj | 12 +++++------ ...thms.VariableNeighborhoodSearch-3.3.csproj | 12 +++++------ ...icLab.Analysis.Statistics.Views-3.3.csproj | 12 +++++------ .../HeuristicLab.Analysis.Views-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Analysis-3.3.csproj | 12 +++++------ ...b.Clients.Access.Administration-3.3.csproj | 12 +++++------ ...uristicLab.Clients.Access.Views-3.3.csproj | 12 +++++------ .../HeuristicLab.Clients.Access-3.3.csproj | 12 +++++------ .../HeuristicLab.Clients.Common-3.3.csproj | 12 +++++------ ...cLab.Clients.Hive.Administrator-3.3.csproj | 12 +++++------ ...sticLab.Clients.Hive.JobManager-3.3.csproj | 12 +++++------ ...isticLab.Clients.Hive.Slave.App-3.3.csproj | 12 +++++------ ...lients.Hive.Slave.ConsoleClient-3.3.csproj | 12 +++++------ ...Lab.Clients.Hive.Slave.TrayIcon-3.3.csproj | 12 +++++------ ...ticLab.Clients.Hive.Slave.Views-3.3.csproj | 12 +++++------ ...ients.Hive.Slave.WindowsService-3.3.csproj | 12 +++++------ ...HeuristicLab.Clients.Hive.Slave-3.3.csproj | 12 +++++------ ...HeuristicLab.Clients.Hive.Views-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Clients.Hive-3.3.csproj | 12 +++++------ .../HeuristicLab.Clients.OKB.Views-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Clients.OKB-3.3.csproj | 12 +++++------ .../3.4/HeuristicLab.CodeEditor-3.4.csproj | 12 +++++------ .../3.3/HeuristicLab.Collections-3.3.csproj | 12 +++++------ .../HeuristicLab.Common.Resources-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Common-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Core.Views-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Core-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Data.Views-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Data-3.3.csproj | 12 +++++------ ...sticLab.DataPreprocessing.Views-3.4.csproj | 12 +++++------ .../HeuristicLab.DataPreprocessing-3.4.csproj | 8 ++++---- .../HeuristicLab.DebugEngine.Views-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.DebugEngine-3.3.csproj | 8 ++++---- ....Encodings.BinaryVectorEncoding-3.3.csproj | 12 +++++------ ...Encodings.IntegerVectorEncoding-3.3.csproj | 12 +++++------ ...Encodings.LinearLinkageEncoding-3.4.csproj | 12 +++++------ ...dings.PermutationEncoding.Views-3.3.csproj | 12 +++++------ ...b.Encodings.PermutationEncoding-3.3.csproj | 12 +++++------ ...ab.Encodings.RealVectorEncoding-3.3.csproj | 12 +++++------ ...ncodings.ScheduleEncoding.Views-3.3.csproj | 12 +++++------ ...cLab.Encodings.ScheduleEncoding-3.3.csproj | 12 +++++------ ...licExpressionTreeEncoding.Views-3.4.csproj | 12 +++++------ ....SymbolicExpressionTreeEncoding-3.4.csproj | 12 +++++------ ...sticLab.ExactOptimization.Views-3.3.csproj | 8 ++++---- .../HeuristicLab.ExactOptimization-3.3.csproj | 8 ++++---- .../3.3/HeuristicLab.Hive-3.3.csproj | 12 +++++------ ...risticLab.MainForm.WindowsForms-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.MainForm-3.3.csproj | 12 +++++------ ...ab.Operators.Programmable.Views-3.3.csproj | 12 +++++------ ...isticLab.Operators.Programmable-3.3.csproj | 12 +++++------ ....Views.GraphVisualization.Views-3.3.csproj | 12 +++++------ ...rators.Views.GraphVisualization-3.3.csproj | 12 +++++------ .../HeuristicLab.Operators.Views-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Operators-3.3.csproj | 12 +++++------ ...isticLab.Optimization.Operators-3.3.csproj | 12 +++++------ ...HeuristicLab.Optimization.Views-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Optimization-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Optimizer-3.3.csproj | 12 +++++------ ...uristicLab.ParallelEngine.Views-3.3.csproj | 12 +++++------ .../HeuristicLab.ParallelEngine-3.3.csproj | 12 +++++------ .../HeuristicLab.Parameters.Views-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Parameters-3.3.csproj | 12 +++++------ .../HeuristicLab.Persistence.GUI-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Persistence-3.3.csproj | 12 +++++------ ...uristicLab.PluginInfrastructure-3.3.csproj | 12 +++++------ ...icLab.Problems.BinPacking.Views-3.3.csproj | 12 +++++------ ...euristicLab.Problems.BinPacking-3.3.csproj | 12 +++++------ .../HeuristicLab.Problems.Binary-3.3.csproj | 12 +++++------ ...s.Symbolic.Classification.Views-3.4.csproj | 12 +++++------ ...nalysis.Symbolic.Classification-3.4.csproj | 12 +++++------ ...lysis.Symbolic.Regression.Views-3.4.csproj | 12 +++++------ ...ataAnalysis.Symbolic.Regression-3.4.csproj | 12 +++++------ ...bolic.TimeSeriesPrognosis.Views-3.4.csproj | 12 +++++------ ...is.Symbolic.TimeSeriesPrognosis-3.4.csproj | 12 +++++------ ...ems.DataAnalysis.Symbolic.Views-3.4.csproj | 12 +++++------ ....Problems.DataAnalysis.Symbolic-3.4.csproj | 12 +++++------ ...lems.DataAnalysis.Trading.Views-3.4.csproj | 12 +++++------ ...b.Problems.DataAnalysis.Trading-3.4.csproj | 12 +++++------ ...Lab.Problems.DataAnalysis.Views-3.4.csproj | 12 +++++------ ...risticLab.Problems.DataAnalysis-3.4.csproj | 12 +++++------ ....Problems.ExternalEvaluation.GP-3.5.csproj | 12 +++++------ ...blems.ExternalEvaluation.Matlab-3.3.csproj | 12 +++++------ ...blems.ExternalEvaluation.Scilab-3.3.csproj | 12 +++++------ ...oblems.ExternalEvaluation.Views-3.4.csproj | 12 +++++------ ...Lab.Problems.ExternalEvaluation-3.4.csproj | 12 +++++------ ...oblems.GeneticProgramming.Views-3.3.csproj | 12 +++++------ ...Lab.Problems.GeneticProgramming-3.3.csproj | 12 +++++------ ...b.Problems.GrammaticalEvolution-3.4.csproj | 10 +++++----- ...isticLab.Problems.GraphColoring-3.3.csproj | 12 +++++------ ....Problems.Instances.CordeauGQAP-3.3.csproj | 12 +++++------ ...icLab.Problems.Instances.DIMACS-3.3.csproj | 12 +++++------ ...ms.Instances.DataAnalysis.Views-3.3.csproj | 12 +++++------ ...Problems.Instances.DataAnalysis-3.3.csproj | 12 +++++------ ....Problems.Instances.ElloumiCTAP-3.3.csproj | 12 +++++------ ...Problems.Instances.Orienteering-3.3.csproj | 12 +++++------ ...icLab.Problems.Instances.QAPLIB-3.3.csproj | 12 +++++------ ...b.Problems.Instances.Scheduling-3.3.csproj | 12 +++++------ ...Problems.Instances.TSPLIB.Views-3.3.csproj | 12 +++++------ ...icLab.Problems.Instances.TSPLIB-3.3.csproj | 12 +++++------ ....Instances.VehicleRouting.Views-3.4.csproj | 12 +++++------ ...oblems.Instances.VehicleRouting-3.4.csproj | 12 +++++------ ...ticLab.Problems.Instances.Views-3.3.csproj | 12 +++++------ ...HeuristicLab.Problems.Instances-3.3.csproj | 12 +++++------ ...sticLab.Problems.Knapsack.Views-3.3.csproj | 12 +++++------ .../HeuristicLab.Problems.Knapsack-3.3.csproj | 12 +++++------ ...Problems.LinearAssignment.Views-3.3.csproj | 12 +++++------ ...icLab.Problems.LinearAssignment-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Problems.NK-3.3.csproj | 12 +++++------ ...Lab.Problems.Orienteering.Views-3.3.csproj | 12 +++++------ ...risticLab.Problems.Orienteering-3.3.csproj | 12 +++++------ ...euristicLab.Problems.PTSP.Views-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Problems.PTSP-3.3.csproj | 12 +++++------ ....Problems.ParameterOptimization-3.3.csproj | 12 +++++------ ...Lab.Problems.Programmable.Views-3.3.csproj | 12 +++++------ ...risticLab.Problems.Programmable-3.3.csproj | 12 +++++------ ....QuadraticAssignment.Algorithms-3.3.csproj | 12 +++++------ ...blems.QuadraticAssignment.Views-3.3.csproj | 12 +++++------ ...ab.Problems.QuadraticAssignment-3.3.csproj | 12 +++++------ ...icLab.Problems.Scheduling.Views-3.3.csproj | 12 +++++------ ...euristicLab.Problems.Scheduling-3.3.csproj | 12 +++++------ ...ms.TestFunctions.MultiObjective-3.3.csproj | 12 +++++------ ...ab.Problems.TestFunctions.Views-3.3.csproj | 12 +++++------ ...isticLab.Problems.TestFunctions-3.3.csproj | 12 +++++------ ...roblems.TravelingSalesman.Views-3.3.csproj | 12 +++++------ ...cLab.Problems.TravelingSalesman-3.3.csproj | 12 +++++------ ...b.Problems.VehicleRouting.Views-3.4.csproj | 12 +++++------ ...sticLab.Problems.VehicleRouting-3.4.csproj | 12 +++++------ .../3.3/HeuristicLab.Random-3.3.csproj | 12 +++++------ .../HeuristicLab.Scripting.Views-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Scripting-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Selection-3.3.csproj | 12 +++++------ .../HeuristicLab.SequentialEngine-3.3.csproj | 12 +++++------ ...cLab.Services.Access.DataAccess-3.3.csproj | 12 +++++------ .../HeuristicLab.Services.Access-3.3.csproj | 12 +++++------ ....Services.Deployment.DataAccess-3.3.csproj | 12 +++++------ ...euristicLab.Services.Deployment-3.3.csproj | 12 +++++------ ...icLab.Services.Deployment-3.3.Tests.csproj | 12 +++++------ ...ticLab.Services.Hive.DataAccess-3.3.csproj | 12 +++++------ ...ab.Services.Hive.JanitorService-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Services.Hive-3.3.csproj | 12 +++++------ ...sticLab.Services.OKB.DataAccess-3.3.csproj | 12 +++++------ .../3.3/HeuristicLab.Services.OKB-3.3.csproj | 20 +++++++++---------- ...Lab.Services.WebApp.Maintenance-3.3.csproj | 12 +++++------ ...cLab.Services.WebApp.Statistics-3.3.csproj | 12 +++++------ ...isticLab.Services.WebApp.Status-3.3.csproj | 6 +++--- .../HeuristicLab.Services.WebApp-3.3.csproj | 12 +++++------ HeuristicLab.Tests/HeuristicLab.Tests.csproj | 12 +++++------ .../3.3/HeuristicLab.Tracing-3.3.csproj | 12 +++++------ ...ization.ChartControlsExtensions-3.3.csproj | 12 +++++------ HeuristicLab/3.3/HeuristicLab-3.3.csproj | 12 +++++------ 173 files changed, 1026 insertions(+), 1026 deletions(-) diff --git a/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj b/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj index df1039c00c..6e506bec02 100644 --- a/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj +++ b/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj @@ -9,25 +9,25 @@ false - full + embedded - pdbonly + embedded - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj b/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj index cc0c414ffb..b390fa1e81 100644 --- a/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj +++ b/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj @@ -11,25 +11,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded true diff --git a/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj b/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj index 98a22fc829..5c8b8077cd 100644 --- a/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj +++ b/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj @@ -11,25 +11,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded true diff --git a/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj b/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj index be788f963d..6d42c652d5 100644 --- a/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj +++ b/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj index 510c2c8ead..b6759836df 100644 --- a/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees/3.4/HeuristicLab.Algorithms.DataAnalysis.DecisionTrees-3.4.csproj @@ -10,11 +10,11 @@ false - full + embedded true - pdbonly + embedded true diff --git a/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj index d74d9083fa..168888b44d 100644 --- a/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis.Glmnet/3.4/HeuristicLab.Algorithms.DataAnalysis.Glmnet-3.4.csproj @@ -10,11 +10,11 @@ false - full + embedded true - pdbonly + embedded true @@ -27,17 +27,17 @@ true - full + embedded - pdbonly + embedded true - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj index 8a6a8b550a..b4f4d07cae 100644 --- a/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj @@ -10,10 +10,10 @@ false - full + embedded - pdbonly + embedded true @@ -22,7 +22,7 @@ HeuristicLab.snk - full + embedded bin\Debug\HeuristicLab.Algorithms.DataAnalysis.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -31,7 +31,7 @@ true - pdbonly + embedded $(SolutionDir)\bin\HeuristicLab.Algorithms.DataAnalysis.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -40,7 +40,7 @@ true - full + embedded bin\Debug\HeuristicLab.Algorithms.DataAnalysis.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ true - pdbonly + embedded $(SolutionDir)\bin\HeuristicLab.Algorithms.DataAnalysis.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj index f41497b62b..ed660e4bea 100644 --- a/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj @@ -31,25 +31,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj b/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj index da3dc63884..5760d1d51e 100644 --- a/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj +++ b/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj b/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj index 157041e930..8281f449b5 100644 --- a/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj +++ b/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj @@ -31,25 +31,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj b/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj index b8e8fbfdeb..4919653f17 100644 --- a/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj +++ b/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj @@ -11,10 +11,10 @@ - full + embedded - pdbonly + embedded true @@ -23,7 +23,7 @@ HeuristicLab.snk - full + embedded bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -32,7 +32,7 @@ false - pdbonly + embedded bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -40,7 +40,7 @@ true - full + embedded bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ false - pdbonly + embedded bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj b/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj index 570bbd284e..41d79c350d 100644 --- a/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj b/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj index 88d8fe238c..98529251aa 100644 --- a/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj +++ b/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj @@ -10,25 +10,25 @@ false - full + embedded - pdbonly + embedded - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Algorithms.MultiObjectiveLocalSearch/3.3/HeuristicLab.Algorithms.MultiObjectiveLocalSearch.csproj b/HeuristicLab.Algorithms.MultiObjectiveLocalSearch/3.3/HeuristicLab.Algorithms.MultiObjectiveLocalSearch.csproj index 0131377e32..70773187dd 100644 --- a/HeuristicLab.Algorithms.MultiObjectiveLocalSearch/3.3/HeuristicLab.Algorithms.MultiObjectiveLocalSearch.csproj +++ b/HeuristicLab.Algorithms.MultiObjectiveLocalSearch/3.3/HeuristicLab.Algorithms.MultiObjectiveLocalSearch.csproj @@ -9,10 +9,10 @@ false - full + embedded - pdbonly + embedded true @@ -21,19 +21,19 @@ HeuristicLab.snk - full + embedded 7.3 - pdbonly + embedded 7.3 - full + embedded 7.3 - pdbonly + embedded 7.3 diff --git a/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj b/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj index 2c76dba141..caee8ef994 100644 --- a/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj +++ b/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj @@ -31,22 +31,22 @@ - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj b/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj index 7c211c67fe..2f62755274 100644 --- a/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj +++ b/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj b/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj index ac04363fc1..7f329e806d 100644 --- a/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj +++ b/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj b/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj index 9b01de68ba..b55add8ba4 100644 --- a/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj +++ b/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj @@ -9,10 +9,10 @@ false - full + embedded - pdbonly + embedded true @@ -21,19 +21,19 @@ HeuristicLab.snk - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj b/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj index b999b35aa4..df8caab526 100644 --- a/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj +++ b/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj @@ -31,22 +31,22 @@ - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj b/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj index cfd9b04e51..029c719be7 100644 --- a/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj +++ b/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj @@ -13,25 +13,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj b/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj index 2295e95c14..44edb989f4 100644 --- a/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj @@ -9,25 +9,25 @@ false - full + embedded - pdbonly + embedded - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj b/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj index 75c6c9bd62..d0385cc9d9 100644 --- a/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj @@ -11,22 +11,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded true diff --git a/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj b/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj index 671ad95879..38cf11df88 100644 --- a/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj +++ b/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj b/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj index 1af8dfdaeb..c59cfbfc44 100644 --- a/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj b/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj index 2d392fdb68..2d117affaf 100644 --- a/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj b/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj index 01b6c254ac..8d40582014 100644 --- a/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj +++ b/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj b/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj index b8b4b4af51..f940593a36 100644 --- a/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj +++ b/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj b/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj index 2c8b308ec9..cd0c52bf92 100644 --- a/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj +++ b/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj b/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj index 74a9e1d88c..896560bcb5 100644 --- a/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj +++ b/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj @@ -28,25 +28,25 @@ - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded true diff --git a/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj b/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj index 0aa3b060ec..2b0a11be56 100644 --- a/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj +++ b/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj @@ -12,25 +12,25 @@ - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded HeuristicLab.snk diff --git a/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj b/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj index 77df3a145e..c11e25f8a2 100644 --- a/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj +++ b/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj @@ -12,25 +12,25 @@ - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded true diff --git a/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj b/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj index ace33cc995..61014739aa 100644 --- a/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj +++ b/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj @@ -10,10 +10,10 @@ false - full + embedded - pdbonly + embedded true @@ -22,7 +22,7 @@ HeuristicLab.snk - full + embedded bin\Debug\HeuristicLab.Clients.Common-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -32,7 +32,7 @@ false - pdbonly + embedded $(SolutionDir)\bin\HeuristicLab.Clients.Common-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -41,7 +41,7 @@ true - full + embedded bin\Debug\HeuristicLab.Clients.Common-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ true - pdbonly + embedded $(SolutionDir)\bin\HeuristicLab.Clients.Common-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj b/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj index 066b2819fb..f0eb26b6bb 100644 --- a/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj @@ -12,25 +12,25 @@ - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded true diff --git a/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj b/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj index 824e620d11..55cb738358 100644 --- a/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj +++ b/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj @@ -12,25 +12,25 @@ - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded true diff --git a/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj index bbc25f18ba..828a25a4e8 100644 --- a/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj @@ -17,7 +17,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -30,7 +30,7 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -45,7 +45,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt AllRules.ruleset @@ -57,7 +57,7 @@ true - pdbonly + embedded x86 prompt AllRules.ruleset @@ -67,7 +67,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt AllRules.ruleset @@ -79,7 +79,7 @@ true - pdbonly + embedded x64 prompt AllRules.ruleset diff --git a/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj index 6b53ca2b0b..e5da6f581a 100644 --- a/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj @@ -16,7 +16,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -29,7 +29,7 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -44,7 +44,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt AllRules.ruleset @@ -56,7 +56,7 @@ true - pdbonly + embedded x86 prompt AllRules.ruleset @@ -66,7 +66,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt AllRules.ruleset @@ -78,7 +78,7 @@ true - pdbonly + embedded x64 prompt AllRules.ruleset diff --git a/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj index 2abf66fd44..2d178b2412 100644 --- a/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj @@ -17,7 +17,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -30,7 +30,7 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -45,7 +45,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt AllRules.ruleset @@ -57,7 +57,7 @@ true - pdbonly + embedded x86 prompt AllRules.ruleset @@ -67,7 +67,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt AllRules.ruleset @@ -79,7 +79,7 @@ true - pdbonly + embedded x64 prompt AllRules.ruleset diff --git a/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj index 6ab08aa27d..e23af01fd2 100644 --- a/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj @@ -16,7 +16,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -29,7 +29,7 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -44,7 +44,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt AllRules.ruleset @@ -56,7 +56,7 @@ true - pdbonly + embedded x86 prompt AllRules.ruleset @@ -66,7 +66,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt AllRules.ruleset @@ -78,7 +78,7 @@ true - pdbonly + embedded x64 prompt AllRules.ruleset diff --git a/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj index be53d5c27f..1447d335b0 100644 --- a/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj @@ -31,7 +31,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -44,7 +44,7 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -59,7 +59,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt AllRules.ruleset @@ -71,7 +71,7 @@ true - pdbonly + embedded x86 prompt AllRules.ruleset @@ -81,7 +81,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt AllRules.ruleset @@ -93,7 +93,7 @@ true - pdbonly + embedded x64 prompt AllRules.ruleset diff --git a/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj b/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj index 7860e2a515..4298bd60aa 100644 --- a/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj @@ -16,7 +16,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -29,7 +29,7 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -44,7 +44,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt AllRules.ruleset @@ -56,7 +56,7 @@ true - pdbonly + embedded x86 prompt AllRules.ruleset @@ -66,7 +66,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt AllRules.ruleset @@ -78,7 +78,7 @@ true - pdbonly + embedded x64 prompt AllRules.ruleset diff --git a/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj b/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj index 5614356bed..6d00055a1e 100644 --- a/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj @@ -12,25 +12,25 @@ - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded true diff --git a/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj b/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj index 1b66820c5e..97791c8166 100644 --- a/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj +++ b/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj @@ -11,10 +11,10 @@ - full + embedded - pdbonly + embedded true @@ -23,7 +23,7 @@ HeuristicLab.snk - full + embedded bin\Debug\HeuristicLab.Clients.Hive-3.4.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -32,7 +32,7 @@ false - pdbonly + embedded bin\Release\HeuristicLab.Clients.Hive-3.4.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -41,7 +41,7 @@ false - full + embedded ..\..\bin\HeuristicLab.Clients.Hive-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ false - pdbonly + embedded ..\..\bin\HeuristicLab.Clients.Hive-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj b/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj index 73e555d2e4..ab25ff7c4f 100644 --- a/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj +++ b/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj @@ -12,25 +12,25 @@ - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded true diff --git a/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj b/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj index 9791e4d5fc..67ae52817e 100644 --- a/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj +++ b/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj @@ -12,25 +12,25 @@ - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded true diff --git a/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj b/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj index 2eadedb67a..fc170b1702 100644 --- a/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj +++ b/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj @@ -10,24 +10,24 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj b/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj index a77cd647cd..cd551e5e5f 100644 --- a/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj +++ b/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Common.Resources/3.3/HeuristicLab.Common.Resources-3.3.csproj b/HeuristicLab.Common.Resources/3.3/HeuristicLab.Common.Resources-3.3.csproj index cda7e1a544..9fdbd65be3 100644 --- a/HeuristicLab.Common.Resources/3.3/HeuristicLab.Common.Resources-3.3.csproj +++ b/HeuristicLab.Common.Resources/3.3/HeuristicLab.Common.Resources-3.3.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj b/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj index d8e82993bb..7e2984bd6e 100644 --- a/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj +++ b/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj @@ -30,24 +30,24 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj b/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj index f9bd30a385..9f1d7f24fa 100644 --- a/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj +++ b/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj b/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj index a1ac8b2bb9..5635e05b62 100644 --- a/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj +++ b/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj @@ -30,26 +30,26 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj b/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj index 07907c6195..11eb378af2 100644 --- a/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj +++ b/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj b/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj index 5c437bed1d..406ec254f2 100644 --- a/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj +++ b/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj @@ -30,26 +30,26 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj b/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj index 57e9ba6170..4974c749cc 100644 --- a/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj +++ b/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj @@ -10,25 +10,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded true diff --git a/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj b/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj index 5245ccb6c3..80aeeba4c9 100644 --- a/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj +++ b/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj @@ -9,18 +9,18 @@ false - full + embedded false - pdbonly + embedded - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj b/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj index 4960a77170..3e8df5e7f1 100644 --- a/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj +++ b/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj @@ -10,13 +10,13 @@ false - full + embedded - pdbonly + embedded - full + embedded bin\Debug\HeuristicLab.DebugEngine.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -25,7 +25,7 @@ false - pdbonly + embedded bin\Release\HeuristicLab.DebugEngine.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -35,7 +35,7 @@ false - full + embedded bin\Debug\HeuristicLab.DebugEngine.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -45,7 +45,7 @@ false - pdbonly + embedded bin\Release\HeuristicLab.DebugEngine.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj b/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj index 552aa95824..118eab3316 100644 --- a/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj +++ b/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj @@ -11,11 +11,11 @@ - full + embedded false - pdbonly + embedded true @@ -24,7 +24,7 @@ HeuristicLab.snk - full + embedded bin\Debug\HeuristicLab.DebugEngine.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -34,7 +34,7 @@ false - pdbonly + embedded $(SolutionDir)\bin\HeuristicLab.DebugEngine.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj b/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj index 0205e313f4..0b1968d32f 100644 --- a/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj b/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj index 0896b4b42f..de52df2eee 100644 --- a/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj b/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj index 962d1a131a..6b09b96307 100644 --- a/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj +++ b/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj @@ -10,25 +10,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded true diff --git a/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj b/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj index e780eaa0fd..f258c61cb8 100644 --- a/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj +++ b/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj b/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj index 7e66c5d843..8a5655c1d6 100644 --- a/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj b/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj index cf8bdb9175..57919d8ee0 100644 --- a/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj b/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj index c5788c6d9f..afe24f44b9 100644 --- a/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj +++ b/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj @@ -10,10 +10,10 @@ false - full + embedded - pdbonly + embedded true @@ -22,7 +22,7 @@ HeuristicLab.snk - full + embedded bin\Debug\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -31,7 +31,7 @@ false - pdbonly + embedded ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -40,7 +40,7 @@ false - full + embedded bin\Debug\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ false - pdbonly + embedded ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj b/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj index cf11c968f0..d40c5db982 100644 --- a/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj @@ -10,10 +10,10 @@ false - full + embedded - pdbonly + embedded true @@ -22,7 +22,7 @@ HeuristicLab.snk - full + embedded ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -31,7 +31,7 @@ false - pdbonly + embedded ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -41,7 +41,7 @@ false - full + embedded ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -50,7 +50,7 @@ false - pdbonly + embedded ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj b/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj index 4f7db95e8c..11bb7b98f7 100644 --- a/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj +++ b/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj b/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj index 7f6f7e0462..4dfa9785f9 100644 --- a/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj +++ b/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj @@ -30,23 +30,23 @@ AllRules.ruleset - full + embedded true - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj b/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj index e11b8da55f..8a51eface7 100644 --- a/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj +++ b/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj @@ -12,18 +12,18 @@ false - full + embedded AllRules.ruleset 7.3 - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj b/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj index 840690d469..d561cf12d7 100644 --- a/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj +++ b/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj @@ -12,18 +12,18 @@ false - full + embedded AllRules.ruleset 7.3 - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj b/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj index 1aba8382c9..0ea23504ae 100644 --- a/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj +++ b/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj @@ -12,25 +12,25 @@ - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded true diff --git a/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj b/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj index e427aae5c7..233ba4a416 100644 --- a/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj +++ b/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj @@ -30,24 +30,24 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj b/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj index 72cd33fba1..f07d407d80 100644 --- a/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj +++ b/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj @@ -30,24 +30,24 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj b/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj index 59cf253ed5..4bfbfc349f 100644 --- a/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj +++ b/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj @@ -10,10 +10,10 @@ false - full + embedded - pdbonly + embedded true @@ -22,14 +22,14 @@ HeuristicLab.snk - full + embedded bin\Debug\HeuristicLab.Operators.Programmable.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs MinimumRecommendedRules.ruleset - pdbonly + embedded bin\Release\HeuristicLab.Operators.Programmable.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -38,7 +38,7 @@ false - full + embedded bin\Debug\HeuristicLab.Operators.Programmable.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -47,7 +47,7 @@ false - pdbonly + embedded bin\Release\HeuristicLab.Operators.Programmable.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj b/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj index 94be668de9..202db9ae8e 100644 --- a/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj +++ b/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj b/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj index 6685186b2d..5a661a74d0 100644 --- a/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj +++ b/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj @@ -11,10 +11,10 @@ - full + embedded - pdbonly + embedded true @@ -23,7 +23,7 @@ HeuristicLab.snk - full + embedded bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -32,7 +32,7 @@ false - pdbonly + embedded $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -40,7 +40,7 @@ true - full + embedded bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ false - pdbonly + embedded $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj b/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj index c156aa4042..2dae2ba93d 100644 --- a/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj +++ b/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj @@ -30,24 +30,24 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj b/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj index 1b49c61e17..9d45876126 100644 --- a/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj +++ b/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj b/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj index 76bbe6b86d..f6c5884f81 100644 --- a/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj +++ b/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj @@ -30,26 +30,26 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj b/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj index 8625f42ade..c5707610c2 100644 --- a/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj +++ b/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj b/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj index df4841a70b..6481bc7701 100644 --- a/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj +++ b/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj b/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj index 4f0046d134..b2fc760f32 100644 --- a/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj +++ b/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj b/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj index 347b5abbb2..820ca69858 100644 --- a/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj +++ b/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj b/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj index 725c1e11cf..150f10cc9a 100644 --- a/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj +++ b/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj @@ -9,25 +9,25 @@ false - full + embedded - pdbonly + embedded - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj b/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj index e6736ed414..0f1143978b 100644 --- a/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj +++ b/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj @@ -10,10 +10,10 @@ false - full + embedded - pdbonly + embedded true @@ -22,7 +22,7 @@ HeuristicLab.snk - full + embedded bin\Debug\HeuristicLab.ParallelEngine-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -31,7 +31,7 @@ true - pdbonly + embedded $(SolutionDir)\bin\HeuristicLab.ParallelEngine-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -40,7 +40,7 @@ true - full + embedded bin\Debug\HeuristicLab.ParallelEngine-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ true - pdbonly + embedded $(SolutionDir)\bin\HeuristicLab.ParallelEngine-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj b/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj index da85083e7f..176d33c31b 100644 --- a/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj +++ b/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj b/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj index 386ff2df60..0a895334d6 100644 --- a/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj +++ b/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj b/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj index 34475b9a79..bf9dfbe228 100644 --- a/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj +++ b/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj @@ -29,24 +29,24 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj b/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj index 71b4362f9d..1d99272b28 100644 --- a/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj +++ b/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj @@ -32,24 +32,24 @@ - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj b/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj index b5fd401d54..b7f39896e5 100644 --- a/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj +++ b/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj @@ -31,25 +31,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.BinPacking.Views/3.3/HeuristicLab.Problems.BinPacking.Views-3.3.csproj b/HeuristicLab.Problems.BinPacking.Views/3.3/HeuristicLab.Problems.BinPacking.Views-3.3.csproj index c807970c7c..9f156d5b4d 100644 --- a/HeuristicLab.Problems.BinPacking.Views/3.3/HeuristicLab.Problems.BinPacking.Views-3.3.csproj +++ b/HeuristicLab.Problems.BinPacking.Views/3.3/HeuristicLab.Problems.BinPacking.Views-3.3.csproj @@ -10,22 +10,22 @@ false - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded true diff --git a/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj b/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj index 6a36909ea1..4443628975 100644 --- a/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj +++ b/HeuristicLab.Problems.BinPacking/3.3/HeuristicLab.Problems.BinPacking-3.3.csproj @@ -10,22 +10,22 @@ false - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded true diff --git a/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj b/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj index b560a3c7a6..70a5fe725a 100644 --- a/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj +++ b/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj @@ -9,10 +9,10 @@ false - full + embedded - pdbonly + embedded true @@ -21,19 +21,19 @@ HeuristicLab.snk - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj index 28579da293..2fa05d5395 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj index 8563631990..ee3488ee5e 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj index 248a4ea3b7..9cfba63c6e 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj index 5dd3de3381..1831f33fbd 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj @@ -31,22 +31,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj index 07296eb8fa..ac80a74143 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj index badfecd97b..f45221b09e 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj index 0642fc5dda..33649015cc 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj index c33c3e7df7..017f0e94b8 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj @@ -31,22 +31,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj index 799ae0b825..14e725e429 100644 --- a/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj index f410013f88..d72413ea7c 100644 --- a/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj index 3badf76046..a737b625d4 100644 --- a/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj b/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj index b66f6820b2..7b99a9e8a8 100644 --- a/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj b/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj index b8cb88b506..5968b89f54 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj b/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj index 3f3f0873f6..f3bdde4689 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj @@ -9,10 +9,10 @@ false - full + embedded - pdbonly + embedded true @@ -21,19 +21,19 @@ HeuristicLab.snk - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj b/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj index 0461c20734..44eea99c5e 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj @@ -9,10 +9,10 @@ false - full + embedded - pdbonly + embedded true @@ -21,19 +21,19 @@ HeuristicLab.snk - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj b/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj index 325deebcce..edd9089291 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj b/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj index 546503aaa6..1f9efd0386 100644 --- a/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj @@ -30,23 +30,23 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj b/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj index 603eacbd61..71782c72bd 100644 --- a/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj +++ b/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj b/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj index 9faf1f6c1a..7ebf5c999b 100644 --- a/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj +++ b/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj b/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj index b3880234f3..1995b0f582 100644 --- a/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj +++ b/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj @@ -39,19 +39,19 @@ Full - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj b/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj index 148d7e8e34..8bc02d5509 100644 --- a/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj +++ b/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj @@ -9,10 +9,10 @@ false - full + embedded - pdbonly + embedded true @@ -21,19 +21,19 @@ HeuristicLab.snk - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj b/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj index 782933fcad..eb88999c95 100644 --- a/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj +++ b/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj @@ -11,10 +11,10 @@ - full + embedded - pdbonly + embedded true @@ -23,7 +23,7 @@ HeuristicLab.snk - full + embedded ..\..\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -32,7 +32,7 @@ false - pdbonly + embedded ..\..\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -40,7 +40,7 @@ true - full + embedded ..\..\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ false - pdbonly + embedded ..\..\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj b/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj index c9c5e6a571..5298aa4276 100644 --- a/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj +++ b/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj @@ -9,10 +9,10 @@ false - full + embedded - pdbonly + embedded true @@ -21,19 +21,19 @@ HeuristicLab.snk - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj b/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj index 1edc567739..b880529067 100644 --- a/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj +++ b/HeuristicLab.Problems.Instances.DataAnalysis.Views/3.3/HeuristicLab.Problems.Instances.DataAnalysis.Views-3.3.csproj @@ -10,22 +10,22 @@ false - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded true diff --git a/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj b/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj index a06c88ad5f..b0675e67bd 100644 --- a/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj +++ b/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj @@ -11,10 +11,10 @@ false - full + embedded - pdbonly + embedded true @@ -23,14 +23,14 @@ HeuristicLab.snk - full + embedded ..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs MinimumRecommendedRules.ruleset - pdbonly + embedded ..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -39,14 +39,14 @@ false - full + embedded ..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs MinimumRecommendedRules.ruleset - pdbonly + embedded ..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj b/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj index c453f4d0ca..eaebdbbe08 100644 --- a/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj +++ b/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj @@ -11,10 +11,10 @@ - full + embedded - pdbonly + embedded true @@ -23,7 +23,7 @@ HeuristicLab.snk - full + embedded ..\..\bin\HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -32,7 +32,7 @@ false - pdbonly + embedded ..\..\bin\HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -41,7 +41,7 @@ false - full + embedded ..\..\bin\HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -50,7 +50,7 @@ false - pdbonly + embedded ..\..\bin\HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj b/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj index 13434bb53f..c3fe3e0662 100644 --- a/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj @@ -9,10 +9,10 @@ false - full + embedded - pdbonly + embedded true @@ -21,19 +21,19 @@ HeuristicLab.snk - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj b/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj index 350fadf34c..29c34bd63f 100644 --- a/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj +++ b/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj @@ -11,10 +11,10 @@ - full + embedded - pdbonly + embedded true @@ -23,7 +23,7 @@ HeuristicLab.snk - full + embedded ..\..\bin\HeuristicLab.Problems.Instances.QAPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -32,7 +32,7 @@ false - pdbonly + embedded ..\..\bin\HeuristicLab.Problems.Instances.QAPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -41,7 +41,7 @@ false - full + embedded ..\..\bin\HeuristicLab.Problems.Instances.QAPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -50,7 +50,7 @@ false - pdbonly + embedded ..\..\bin\HeuristicLab.Problems.Instances.QAPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj b/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj index fe0af8ce31..6a484591e7 100644 --- a/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj @@ -11,10 +11,10 @@ - full + embedded - pdbonly + embedded true @@ -23,7 +23,7 @@ HeuristicLab.snk - full + embedded bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -32,7 +32,7 @@ false - pdbonly + embedded bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -40,7 +40,7 @@ true - full + embedded bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ false - pdbonly + embedded bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj b/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj index 1f2da2d9ec..bcf726c478 100644 --- a/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj +++ b/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj @@ -10,10 +10,10 @@ false - full + embedded - pdbonly + embedded true @@ -22,7 +22,7 @@ HeuristicLab.snk - full + embedded bin\Debug\HeuristicLab.Problems.Instances.TSPLIB.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -31,7 +31,7 @@ true - pdbonly + embedded bin\Release\HeuristicLab.Problems.Instances.TSPLIB.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -40,7 +40,7 @@ true - full + embedded bin\Debug\HeuristicLab.Problems.Instances.TSPLIB.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ true - pdbonly + embedded bin\Release\HeuristicLab.Problems.Instances.TSPLIB.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj b/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj index 9578c819a6..464e20168f 100644 --- a/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj +++ b/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj @@ -11,10 +11,10 @@ - full + embedded - pdbonly + embedded true @@ -23,7 +23,7 @@ HeuristicLab.snk - full + embedded ..\..\bin\HeuristicLab.Problems.Instances.TSPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -32,7 +32,7 @@ false - pdbonly + embedded ..\..\bin\HeuristicLab.Problems.Instances.TSPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -41,7 +41,7 @@ false - full + embedded ..\..\bin\HeuristicLab.Problems.Instances.TSPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -50,7 +50,7 @@ false - pdbonly + embedded ..\..\bin\HeuristicLab.Problems.Instances.TSPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj b/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj index 79e3abc67d..a39fa6f4ba 100644 --- a/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj +++ b/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj @@ -10,10 +10,10 @@ false - full + embedded - pdbonly + embedded true @@ -22,7 +22,7 @@ HeuristicLab.snk - full + embedded bin\Debug\HeuristicLab.Problems.Instances.VehicleRouting.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -31,7 +31,7 @@ true - pdbonly + embedded bin\Release\HeuristicLab.Problems.Instances.VehicleRouting.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -40,7 +40,7 @@ true - full + embedded bin\Debug\HeuristicLab.Problems.Instances.VehicleRouting.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ true - pdbonly + embedded bin\Release\HeuristicLab.Problems.Instances.VehicleRouting.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj b/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj index 32acc210b9..24109bb78d 100644 --- a/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj +++ b/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj @@ -11,10 +11,10 @@ - full + embedded - pdbonly + embedded true @@ -23,7 +23,7 @@ HeuristicLab.snk - full + embedded ..\..\bin\HeuristicLab.Problems.Instances.VehicleRouting-3.4.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -32,7 +32,7 @@ false - pdbonly + embedded ..\..\bin\HeuristicLab.Problems.Instances.VehicleRouting-3.4.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -41,7 +41,7 @@ false - full + embedded ..\..\bin\HeuristicLab.Problems.Instances.VehicleRouting-3.4.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -50,7 +50,7 @@ false - pdbonly + embedded ..\..\bin\HeuristicLab.Problems.Instances.VehicleRouting-3.4.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj b/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj index 06f4651f23..d7450b19a1 100644 --- a/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj @@ -10,10 +10,10 @@ false - full + embedded - pdbonly + embedded true @@ -22,7 +22,7 @@ HeuristicLab.snk - full + embedded ..\..\bin\HeuristicLab.Problems.Instances.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -31,7 +31,7 @@ true - pdbonly + embedded ..\..\bin\HeuristicLab.Problems.Instances.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -40,7 +40,7 @@ false - full + embedded ..\..\bin\HeuristicLab.Problems.Instances.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ true - pdbonly + embedded ..\..\bin\HeuristicLab.Problems.Instances.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj b/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj index 8be430ccbf..8f0d26aea1 100644 --- a/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj +++ b/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj @@ -11,10 +11,10 @@ - full + embedded - pdbonly + embedded true @@ -23,7 +23,7 @@ HeuristicLab.snk - full + embedded ..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -33,7 +33,7 @@ false - pdbonly + embedded ..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -43,7 +43,7 @@ false - full + embedded ..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -53,7 +53,7 @@ false - pdbonly + embedded ..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj b/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj index 2c0e502873..9319f05f18 100644 --- a/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj +++ b/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj b/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj index ff2018e47e..e839e693f6 100644 --- a/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj +++ b/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj b/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj index 5968021548..42661f429a 100644 --- a/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj +++ b/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj @@ -11,10 +11,10 @@ - full + embedded - pdbonly + embedded true @@ -23,7 +23,7 @@ HeuristicLab.snk - full + embedded bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -32,7 +32,7 @@ false - pdbonly + embedded bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -40,7 +40,7 @@ true - full + embedded bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ false - pdbonly + embedded bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj b/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj index 8a02bc2cc8..2d898eeacb 100644 --- a/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj +++ b/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj @@ -11,10 +11,10 @@ - full + embedded - pdbonly + embedded true @@ -23,7 +23,7 @@ HeuristicLab.snk - full + embedded bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -32,7 +32,7 @@ false - pdbonly + embedded bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -40,7 +40,7 @@ true - full + embedded bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ false - pdbonly + embedded bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj b/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj index 7bea3b7f11..cded900c28 100644 --- a/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj +++ b/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj @@ -11,10 +11,10 @@ - full + embedded - pdbonly + embedded true @@ -23,7 +23,7 @@ HeuristicLab.snk - full + embedded bin\Debug\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -32,7 +32,7 @@ false - pdbonly + embedded bin\Release\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -41,7 +41,7 @@ true - full + embedded bin\Debug\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -50,7 +50,7 @@ false - pdbonly + embedded bin\Release\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj b/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj index 2ad9d10160..aa8c81b2a1 100644 --- a/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj +++ b/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj @@ -9,10 +9,10 @@ false - full + embedded - pdbonly + embedded true @@ -21,19 +21,19 @@ HeuristicLab.snk - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj b/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj index 6674b099b7..1f90e88cab 100644 --- a/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj +++ b/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj @@ -9,10 +9,10 @@ false - full + embedded - pdbonly + embedded true @@ -24,19 +24,19 @@ - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.PTSP.Views/3.3/HeuristicLab.Problems.PTSP.Views-3.3.csproj b/HeuristicLab.Problems.PTSP.Views/3.3/HeuristicLab.Problems.PTSP.Views-3.3.csproj index 94e94429be..f46246f9c8 100644 --- a/HeuristicLab.Problems.PTSP.Views/3.3/HeuristicLab.Problems.PTSP.Views-3.3.csproj +++ b/HeuristicLab.Problems.PTSP.Views/3.3/HeuristicLab.Problems.PTSP.Views-3.3.csproj @@ -9,25 +9,25 @@ false - full + embedded - pdbonly + embedded - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj b/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj index e1fc30ed0d..0a675cd61a 100644 --- a/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj +++ b/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj @@ -9,10 +9,10 @@ false - full + embedded - pdbonly + embedded true @@ -21,19 +21,19 @@ HeuristicLab.snk - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj b/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj index b4a76d2440..3d76ea5dc4 100644 --- a/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj +++ b/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj @@ -9,10 +9,10 @@ false - full + embedded - pdbonly + embedded true @@ -21,19 +21,19 @@ HeuristicLab.snk - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj b/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj index 9d40828c29..cd83ddc90f 100644 --- a/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj +++ b/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj @@ -9,10 +9,10 @@ false - full + embedded - pdbonly + embedded true @@ -21,19 +21,19 @@ HeuristicLab.snk - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj b/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj index 40d3f90377..d1958d83fe 100644 --- a/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj +++ b/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj @@ -9,10 +9,10 @@ false - full + embedded - pdbonly + embedded true @@ -21,19 +21,19 @@ HeuristicLab.snk - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj index f48de1a368..a2e72ebd43 100644 --- a/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj @@ -11,10 +11,10 @@ - full + embedded - pdbonly + embedded true @@ -23,7 +23,7 @@ HeuristicLab.snk - full + embedded bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -32,7 +32,7 @@ false - pdbonly + embedded $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -40,7 +40,7 @@ true - full + embedded bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ false - pdbonly + embedded $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj index 93319f9045..a4fe05e03d 100644 --- a/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj @@ -11,10 +11,10 @@ - full + embedded - pdbonly + embedded true @@ -23,7 +23,7 @@ HeuristicLab.snk - full + embedded bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -32,7 +32,7 @@ false - pdbonly + embedded $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -40,7 +40,7 @@ true - full + embedded bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ false - pdbonly + embedded $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj index 9c198b691a..0876910952 100644 --- a/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj @@ -11,10 +11,10 @@ - full + embedded - pdbonly + embedded true @@ -23,7 +23,7 @@ HeuristicLab.snk - full + embedded bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -32,7 +32,7 @@ false - pdbonly + embedded $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -40,7 +40,7 @@ true - full + embedded bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ false - pdbonly + embedded $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj b/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj index 92ad35485c..ac20dd4137 100644 --- a/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj +++ b/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj @@ -10,13 +10,13 @@ false - full + embedded - pdbonly + embedded - full + embedded ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -24,7 +24,7 @@ false - pdbonly + embedded ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -33,7 +33,7 @@ false - full + embedded ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -42,7 +42,7 @@ false - pdbonly + embedded ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj b/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj index c8565adc0d..fa9501a116 100644 --- a/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj +++ b/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj @@ -10,10 +10,10 @@ false - full + embedded - pdbonly + embedded true @@ -22,7 +22,7 @@ HeuristicLab.snk - full + embedded ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -31,7 +31,7 @@ false - pdbonly + embedded ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -40,7 +40,7 @@ false - full + embedded ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ false - pdbonly + embedded ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj b/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj index 53736d86e9..31491c86f8 100644 --- a/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj +++ b/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj @@ -9,12 +9,12 @@ false - full + embedded false MinimumRecommendedRules.ruleset - pdbonly + embedded true @@ -27,22 +27,22 @@ CODE_ANALYSIS;DEBUG;TRACE - full + embedded true MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset CODE_ANALYSIS;DEBUG;TRACE - full + embedded true MinimumRecommendedRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj b/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj index 1023f35185..3bba5b2b36 100644 --- a/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj +++ b/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj b/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj index 654abdb983..0bf6b8b3ea 100644 --- a/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj +++ b/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj @@ -30,22 +30,22 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj b/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj index 9e35c2113a..0bd021ff01 100644 --- a/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj +++ b/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj b/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj index 49e4d5904d..2b3c2b7c50 100644 --- a/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj +++ b/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj @@ -30,26 +30,26 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj b/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj index bc268a7612..46cb9c8df2 100644 --- a/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj +++ b/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj @@ -31,25 +31,25 @@ - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded bin\$(Platform)\$(Configuration)\HeuristicLab.Problems.VehicleRouting.Views-3.4.xml - pdbonly + embedded diff --git a/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj b/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj index 76ccbc6252..7cf24a86e1 100644 --- a/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj +++ b/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj @@ -31,26 +31,26 @@ - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded bin\$(Platform)\$(Configuration)\HeuristicLab.Routing.TSP-3.3.XML - pdbonly + embedded diff --git a/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj b/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj index 5e24706c30..619f3e2ad6 100644 --- a/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj +++ b/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj @@ -30,26 +30,26 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj b/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj index 67b0d983b0..b1190b9aa9 100644 --- a/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj +++ b/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj @@ -9,11 +9,11 @@ false - full + embedded AllRules.ruleset - pdbonly + embedded true @@ -22,19 +22,19 @@ HeuristicLab.snk - full + embedded AllRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded AllRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj b/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj index 66dfbdb473..0bb5ff8311 100644 --- a/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj +++ b/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj @@ -9,11 +9,11 @@ false - full + embedded AllRules.ruleset - pdbonly + embedded true @@ -22,19 +22,19 @@ HeuristicLab.snk - full + embedded AllRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset - full + embedded AllRules.ruleset - pdbonly + embedded MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj b/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj index c03d8c6814..fff034f13b 100644 --- a/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj +++ b/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj b/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj index 81aa439491..42ed6d7eca 100644 --- a/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj +++ b/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj @@ -30,25 +30,25 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj b/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj index 0cfe1d1087..3d135a50b7 100644 --- a/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj @@ -16,7 +16,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -29,7 +29,7 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -44,7 +44,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt AllRules.ruleset @@ -56,7 +56,7 @@ true - pdbonly + embedded x86 prompt AllRules.ruleset @@ -66,7 +66,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt AllRules.ruleset @@ -78,7 +78,7 @@ true - pdbonly + embedded x64 prompt AllRules.ruleset diff --git a/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj b/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj index 66feaf291c..72f08c7215 100644 --- a/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj +++ b/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj @@ -18,7 +18,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -31,7 +31,7 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -46,7 +46,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt AllRules.ruleset @@ -58,7 +58,7 @@ true - pdbonly + embedded x86 prompt AllRules.ruleset @@ -68,7 +68,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt AllRules.ruleset @@ -80,7 +80,7 @@ true - pdbonly + embedded x64 prompt AllRules.ruleset diff --git a/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj b/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj index 6e7e09e7ba..240162ce77 100644 --- a/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj @@ -38,7 +38,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -51,7 +51,7 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -64,7 +64,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt AllRules.ruleset @@ -74,7 +74,7 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt AllRules.ruleset @@ -84,7 +84,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt AllRules.ruleset @@ -94,7 +94,7 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt AllRules.ruleset diff --git a/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj b/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj index 10551d4815..ae12cb8886 100644 --- a/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj +++ b/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj @@ -24,7 +24,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -37,7 +37,7 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -50,7 +50,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt AllRules.ruleset @@ -60,7 +60,7 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt AllRules.ruleset @@ -70,7 +70,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt AllRules.ruleset @@ -80,7 +80,7 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt AllRules.ruleset diff --git a/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj b/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj index 21e474337a..77dd0a0941 100644 --- a/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj +++ b/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj @@ -36,7 +36,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -49,7 +49,7 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -62,7 +62,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt AllRules.ruleset @@ -72,7 +72,7 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt AllRules.ruleset @@ -82,7 +82,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt AllRules.ruleset @@ -92,7 +92,7 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt AllRules.ruleset diff --git a/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj b/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj index 00eaf6de72..3ec2bed78c 100644 --- a/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj @@ -16,7 +16,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -29,7 +29,7 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -44,7 +44,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt AllRules.ruleset @@ -56,7 +56,7 @@ true - pdbonly + embedded x86 prompt AllRules.ruleset @@ -66,7 +66,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt AllRules.ruleset @@ -78,7 +78,7 @@ true - pdbonly + embedded x64 prompt AllRules.ruleset diff --git a/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj b/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj index a15be8794c..96588073d8 100644 --- a/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj +++ b/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj @@ -17,7 +17,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -30,7 +30,7 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -45,7 +45,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt AllRules.ruleset @@ -57,7 +57,7 @@ true - pdbonly + embedded x86 prompt AllRules.ruleset @@ -67,7 +67,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt AllRules.ruleset @@ -79,7 +79,7 @@ true - pdbonly + embedded x64 prompt AllRules.ruleset diff --git a/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj b/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj index 5d2dcddc0d..8b6eed3d5a 100644 --- a/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj +++ b/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj @@ -17,7 +17,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -30,7 +30,7 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -45,7 +45,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt AllRules.ruleset @@ -57,7 +57,7 @@ true - pdbonly + embedded x86 prompt AllRules.ruleset @@ -67,7 +67,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt AllRules.ruleset @@ -79,7 +79,7 @@ true - pdbonly + embedded x64 prompt AllRules.ruleset diff --git a/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj b/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj index 1e1dc1d4cc..de27b956fc 100644 --- a/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj @@ -35,7 +35,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -48,7 +48,7 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -63,7 +63,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt AllRules.ruleset @@ -75,7 +75,7 @@ true - pdbonly + embedded x86 prompt AllRules.ruleset @@ -85,7 +85,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt AllRules.ruleset @@ -97,7 +97,7 @@ true - pdbonly + embedded x64 prompt AllRules.ruleset diff --git a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj index 71fc4e6c8e..eb25a899f4 100644 --- a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj +++ b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj @@ -18,7 +18,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -31,7 +31,7 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -46,7 +46,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt AllRules.ruleset @@ -57,7 +57,7 @@ true - pdbonly + embedded x86 prompt AllRules.ruleset @@ -66,7 +66,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt AllRules.ruleset @@ -77,7 +77,7 @@ true - pdbonly + embedded x64 prompt AllRules.ruleset @@ -92,7 +92,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 bin\Debug\HeuristicLab.Services.OKB-3.3.dll.CodeAnalysisLog.xml true @@ -107,7 +107,7 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 bin\Release\HeuristicLab.Services.OKB-3.3.dll.CodeAnalysisLog.xml true @@ -123,7 +123,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 bin\Debug\HeuristicLab.Services.OKB-3.3.dll.CodeAnalysisLog.xml true @@ -138,7 +138,7 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 bin\Release\HeuristicLab.Services.OKB-3.3.dll.CodeAnalysisLog.xml true diff --git a/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj b/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj index 4777f0fc88..7eef7471c4 100644 --- a/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj @@ -15,7 +15,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -26,7 +26,7 @@ 4 - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -43,7 +43,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt MinimumRecommendedRules.ruleset @@ -52,7 +52,7 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt MinimumRecommendedRules.ruleset @@ -61,7 +61,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt MinimumRecommendedRules.ruleset @@ -70,7 +70,7 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj b/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj index c1f0890138..035f06233a 100644 --- a/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj @@ -16,7 +16,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -27,7 +27,7 @@ 4 - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -44,7 +44,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt MinimumRecommendedRules.ruleset @@ -53,7 +53,7 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt MinimumRecommendedRules.ruleset @@ -62,7 +62,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt MinimumRecommendedRules.ruleset @@ -71,7 +71,7 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj b/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj index e1fc731611..67852d380d 100644 --- a/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj @@ -16,7 +16,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -44,7 +44,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt MinimumRecommendedRules.ruleset @@ -61,7 +61,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj b/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj index 996ab6ec20..d30b3e9b36 100644 --- a/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj +++ b/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj @@ -26,7 +26,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -38,7 +38,7 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -284,7 +284,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt MinimumRecommendedRules.ruleset @@ -293,7 +293,7 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt MinimumRecommendedRules.ruleset @@ -302,7 +302,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt MinimumRecommendedRules.ruleset @@ -311,7 +311,7 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Tests/HeuristicLab.Tests.csproj b/HeuristicLab.Tests/HeuristicLab.Tests.csproj index 1ede54b9a1..a1ae9d0cae 100644 --- a/HeuristicLab.Tests/HeuristicLab.Tests.csproj +++ b/HeuristicLab.Tests/HeuristicLab.Tests.csproj @@ -18,7 +18,7 @@ true - full + embedded false $(SolutionDir)\bin\ true @@ -30,7 +30,7 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE @@ -48,7 +48,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 bin\Debug\HeuristicLab.Tests.dll.CodeAnalysisLog.xml true @@ -63,7 +63,7 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 bin\Release\HeuristicLab.Tests.dll.CodeAnalysisLog.xml true @@ -78,7 +78,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 bin\Debug\HeuristicLab.Tests.dll.CodeAnalysisLog.xml true @@ -93,7 +93,7 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 bin\Release\HeuristicLab.Tests.dll.CodeAnalysisLog.xml true diff --git a/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj b/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj index ba14111928..2842e03118 100644 --- a/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj +++ b/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj @@ -30,24 +30,24 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded diff --git a/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj b/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj index cc8602d81e..f6ea1b0a2f 100644 --- a/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj +++ b/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj @@ -10,10 +10,10 @@ false - full + embedded - pdbonly + embedded true @@ -22,7 +22,7 @@ HeuristicLab.snk - full + embedded bin\Debug\HeuristicLab.Visualization.ChartControlExtensions-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -31,7 +31,7 @@ true - pdbonly + embedded $(SolutionDir)\bin\HeuristicLab.Visualization.ChartControlExtensions-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -40,7 +40,7 @@ false - full + embedded bin\Debug\HeuristicLab.Visualization.ChartControlExtensions-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs @@ -49,7 +49,7 @@ true - pdbonly + embedded $(SolutionDir)\bin\HeuristicLab.Visualization.ChartControlExtensions-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs diff --git a/HeuristicLab/3.3/HeuristicLab-3.3.csproj b/HeuristicLab/3.3/HeuristicLab-3.3.csproj index ae98c5090c..66a24b998c 100644 --- a/HeuristicLab/3.3/HeuristicLab-3.3.csproj +++ b/HeuristicLab/3.3/HeuristicLab-3.3.csproj @@ -36,24 +36,24 @@ AllRules.ruleset - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded - full + embedded - pdbonly + embedded From 36b0bc3007b5d399ac801567d7c73e64b6a1fcd9 Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 22 Apr 2022 13:50:53 +0200 Subject: [PATCH 34/39] Removed WarningLevel (as 4 is default) --- .../3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj | 2 -- .../HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj | 2 -- .../3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj | 2 -- .../3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj | 2 -- .../HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj | 2 -- .../3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj | 2 -- .../3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj | 2 -- .../3.3/HeuristicLab.Services.Access-3.3.csproj | 2 -- .../3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj | 2 -- .../3.3/HeuristicLab.Services.Deployment-3.3.csproj | 2 -- .../3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj | 2 -- .../3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj | 2 -- .../3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj | 2 -- .../3.3/HeuristicLab.Services.Hive-3.3.csproj | 2 -- .../3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj | 2 -- .../3.3/HeuristicLab.Services.OKB-3.3.csproj | 2 -- .../3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj | 2 -- .../3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj | 2 -- .../3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj | 2 -- .../3.3/HeuristicLab.Services.WebApp-3.3.csproj | 2 -- HeuristicLab.Tests/HeuristicLab.Tests.csproj | 2 -- 21 files changed, 42 deletions(-) diff --git a/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj index 828a25a4e8..dd343e8c34 100644 --- a/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj @@ -25,7 +25,6 @@ false DEBUG;TRACE prompt - 4 AllRules.ruleset false @@ -35,7 +34,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 AllRules.ruleset diff --git a/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj index e5da6f581a..922537eec3 100644 --- a/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj @@ -24,7 +24,6 @@ false DEBUG;TRACE prompt - 4 AllRules.ruleset false @@ -34,7 +33,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 AllRules.ruleset diff --git a/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj index 2d178b2412..55d1064bfb 100644 --- a/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj @@ -25,7 +25,6 @@ false DEBUG;TRACE prompt - 4 AllRules.ruleset false @@ -35,7 +34,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 AllRules.ruleset diff --git a/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj index e23af01fd2..c0b5037f16 100644 --- a/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj @@ -24,7 +24,6 @@ false DEBUG;TRACE prompt - 4 AllRules.ruleset false @@ -34,7 +33,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 AllRules.ruleset diff --git a/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj index 1447d335b0..a4bfe5db82 100644 --- a/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj @@ -39,7 +39,6 @@ false DEBUG;TRACE prompt - 4 AllRules.ruleset false @@ -49,7 +48,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 AllRules.ruleset diff --git a/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj b/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj index 4298bd60aa..b78f72f90a 100644 --- a/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj @@ -24,7 +24,6 @@ false DEBUG;TRACE prompt - 4 AllRules.ruleset false @@ -34,7 +33,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 AllRules.ruleset diff --git a/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj b/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj index 3d135a50b7..720921d6f0 100644 --- a/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj @@ -24,7 +24,6 @@ false DEBUG;TRACE prompt - 4 AllRules.ruleset false @@ -34,7 +33,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 AllRules.ruleset diff --git a/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj b/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj index 72f08c7215..c13ce53f76 100644 --- a/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj +++ b/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj @@ -26,7 +26,6 @@ false DEBUG;TRACE prompt - 4 AllRules.ruleset false @@ -36,7 +35,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 AllRules.ruleset diff --git a/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj b/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj index 240162ce77..93bf4d6025 100644 --- a/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj @@ -46,7 +46,6 @@ false DEBUG;TRACE prompt - 4 AllRules.ruleset false @@ -56,7 +55,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 AllRules.ruleset false diff --git a/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj b/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj index ae12cb8886..28e5e2cfd2 100644 --- a/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj +++ b/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj @@ -32,7 +32,6 @@ false DEBUG;TRACE prompt - 4 AllRules.ruleset false @@ -42,7 +41,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 AllRules.ruleset false diff --git a/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj b/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj index 77dd0a0941..39034833d4 100644 --- a/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj +++ b/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj @@ -44,7 +44,6 @@ false DEBUG;TRACE prompt - 4 AllRules.ruleset false @@ -54,7 +53,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 AllRules.ruleset false diff --git a/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj b/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj index 3ec2bed78c..04a0483f8b 100644 --- a/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj @@ -24,7 +24,6 @@ false DEBUG;TRACE prompt - 4 AllRules.ruleset false @@ -34,7 +33,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 AllRules.ruleset diff --git a/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj b/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj index 96588073d8..34541d3dde 100644 --- a/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj +++ b/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj @@ -25,7 +25,6 @@ false DEBUG;TRACE prompt - 4 AllRules.ruleset false @@ -35,7 +34,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 AllRules.ruleset diff --git a/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj b/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj index 8b6eed3d5a..142baf6ff4 100644 --- a/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj +++ b/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj @@ -25,7 +25,6 @@ false DEBUG;TRACE prompt - 4 AllRules.ruleset false @@ -35,7 +34,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 AllRules.ruleset diff --git a/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj b/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj index de27b956fc..7b599e1ca3 100644 --- a/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj @@ -43,7 +43,6 @@ false DEBUG;TRACE prompt - 4 AllRules.ruleset false @@ -53,7 +52,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 AllRules.ruleset diff --git a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj index eb25a899f4..49e277c198 100644 --- a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj +++ b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj @@ -26,7 +26,6 @@ false DEBUG;TRACE prompt - 4 AllRules.ruleset false @@ -36,7 +35,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 AllRules.ruleset diff --git a/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj b/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj index 7eef7471c4..973ee973af 100644 --- a/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj @@ -23,7 +23,6 @@ false DEBUG;TRACE prompt - 4 embedded @@ -31,7 +30,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 true diff --git a/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj b/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj index 035f06233a..d9ccbb998b 100644 --- a/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj @@ -24,7 +24,6 @@ false DEBUG;TRACE prompt - 4 embedded @@ -32,7 +31,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 true diff --git a/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj b/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj index 67852d380d..928d508796 100644 --- a/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj @@ -24,7 +24,6 @@ false DEBUG;TRACE prompt - 4 none @@ -32,7 +31,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 true diff --git a/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj b/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj index d30b3e9b36..2cfcb44cc7 100644 --- a/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj +++ b/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj @@ -34,7 +34,6 @@ false DEBUG;TRACE prompt - 4 false @@ -43,7 +42,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 diff --git a/HeuristicLab.Tests/HeuristicLab.Tests.csproj b/HeuristicLab.Tests/HeuristicLab.Tests.csproj index a1ae9d0cae..0ca1124fb7 100644 --- a/HeuristicLab.Tests/HeuristicLab.Tests.csproj +++ b/HeuristicLab.Tests/HeuristicLab.Tests.csproj @@ -26,7 +26,6 @@ false DEBUG;TRACE prompt - 4 false @@ -35,7 +34,6 @@ $(SolutionDir)\bin\ TRACE prompt - 4 false From 78df181294293b1be3c905bc3c05be5e775e0bae Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 22 Apr 2022 13:53:55 +0200 Subject: [PATCH 35/39] Removed CodeAnalysisRuleSet --- .../3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj | 4 ---- ...HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj | 1 - .../3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj | 1 - ...isticLab.Algorithms.CMAEvolutionStrategy-3.4.csproj | 1 - ...uristicLab.Algorithms.DataAnalysis.Views-3.4.csproj | 4 ---- .../HeuristicLab.Algorithms.DataAnalysis-3.4.csproj | 1 - ...euristicLab.Algorithms.EvolutionStrategy-3.3.csproj | 1 - ...HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj | 1 - .../HeuristicLab.Algorithms.GradientDescent-3.3.csproj | 4 ---- .../3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj | 1 - ...ticLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj | 4 ---- .../3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj | 1 - ...thms.OffspringSelectionEvolutionStrategy-3.3.csproj | 1 - ...ithms.OffspringSelectionGeneticAlgorithm-3.3.csproj | 1 - ...lgorithms.ParameterlessPopulationPyramid-3.3.csproj | 4 ---- ...Lab.Algorithms.ParticleSwarmOptimization-3.3.csproj | 1 - .../3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj | 1 - .../HeuristicLab.Algorithms.RandomSearch-3.3.csproj | 4 ---- .../HeuristicLab.Algorithms.ScatterSearch-3.3.csproj | 1 - ...uristicLab.Algorithms.SimulatedAnnealing-3.3.csproj | 1 - .../3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj | 1 - ...ab.Algorithms.VariableNeighborhoodSearch-3.3.csproj | 1 - .../HeuristicLab.Analysis.Statistics.Views-3.3.csproj | 1 - .../3.3/HeuristicLab.Analysis.Views-3.3.csproj | 1 - .../3.3/HeuristicLab.Analysis-3.3.csproj | 1 - ...uristicLab.Clients.Access.Administration-3.3.csproj | 1 - .../3.3/HeuristicLab.Clients.Access.Views-3.3.csproj | 1 - .../3.3/HeuristicLab.Clients.Access-3.3.csproj | 1 - .../3.3/HeuristicLab.Clients.Common-3.3.csproj | 4 ---- .../HeuristicLab.Clients.Hive.Administrator-3.3.csproj | 1 - .../HeuristicLab.Clients.Hive.JobManager-3.3.csproj | 1 - .../3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj | 6 ------ ...sticLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj | 6 ------ ...HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj | 6 ------ .../HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj | 6 ------ ...ticLab.Clients.Hive.Slave.WindowsService-3.3.csproj | 6 ------ .../3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj | 6 ------ .../3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj | 1 - .../3.3/HeuristicLab.Clients.Hive-3.3.csproj | 4 ---- .../3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj | 1 - .../3.3/HeuristicLab.Clients.OKB-3.3.csproj | 1 - .../3.4/HeuristicLab.CodeEditor-3.4.csproj | 1 - .../3.3/HeuristicLab.Collections-3.3.csproj | 1 - .../3.3/HeuristicLab.Common.Resources-3.3.csproj | 1 - HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj | 1 - .../3.3/HeuristicLab.Core.Views-3.3.csproj | 1 - HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj | 1 - .../3.3/HeuristicLab.Data.Views-3.3.csproj | 1 - HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj | 1 - .../HeuristicLab.DataPreprocessing.Views-3.4.csproj | 1 - .../3.4/HeuristicLab.DataPreprocessing-3.4.csproj | 2 -- .../3.3/HeuristicLab.DebugEngine.Views-3.3.csproj | 4 ---- .../3.3/HeuristicLab.DebugEngine-3.3.csproj | 2 -- ...risticLab.Encodings.BinaryVectorEncoding-3.3.csproj | 1 - ...isticLab.Encodings.IntegerVectorEncoding-3.3.csproj | 1 - ...isticLab.Encodings.LinearLinkageEncoding-3.4.csproj | 1 - ...cLab.Encodings.PermutationEncoding.Views-3.3.csproj | 1 - ...uristicLab.Encodings.PermutationEncoding-3.3.csproj | 1 - ...euristicLab.Encodings.RealVectorEncoding-3.3.csproj | 1 - ...sticLab.Encodings.ScheduleEncoding.Views-3.3.csproj | 4 ---- .../HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj | 4 ---- ...ngs.SymbolicExpressionTreeEncoding.Views-3.4.csproj | 1 - ...Encodings.SymbolicExpressionTreeEncoding-3.4.csproj | 1 - .../HeuristicLab.ExactOptimization.Views-3.3.csproj | 1 - .../3.3/HeuristicLab.ExactOptimization-3.3.csproj | 1 - HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj | 1 - .../3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj | 1 - .../3.3/HeuristicLab.MainForm-3.3.csproj | 1 - ...euristicLab.Operators.Programmable.Views-3.3.csproj | 4 ---- .../3.3/HeuristicLab.Operators.Programmable-3.3.csproj | 1 - ...Operators.Views.GraphVisualization.Views-3.3.csproj | 4 ---- ...icLab.Operators.Views.GraphVisualization-3.3.csproj | 1 - .../3.3/HeuristicLab.Operators.Views-3.3.csproj | 1 - .../3.3/HeuristicLab.Operators-3.3.csproj | 1 - .../3.3/HeuristicLab.Optimization.Operators-3.3.csproj | 1 - .../3.3/HeuristicLab.Optimization.Views-3.3.csproj | 1 - .../3.3/HeuristicLab.Optimization-3.3.csproj | 1 - .../3.3/HeuristicLab.Optimizer-3.3.csproj | 1 - .../3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj | 4 ---- .../3.3/HeuristicLab.ParallelEngine-3.3.csproj | 4 ---- .../3.3/HeuristicLab.Parameters.Views-3.3.csproj | 1 - .../3.3/HeuristicLab.Parameters-3.3.csproj | 1 - .../3.3/HeuristicLab.Persistence.GUI-3.3.csproj | 1 - .../3.3/HeuristicLab.Persistence-3.3.csproj | 1 - .../3.3/HeuristicLab.PluginInfrastructure-3.3.csproj | 1 - .../3.3/HeuristicLab.Problems.Binary-3.3.csproj | 4 ---- ...taAnalysis.Symbolic.Classification.Views-3.4.csproj | 1 - ...ems.DataAnalysis.Symbolic.Classification-3.4.csproj | 1 - ...s.DataAnalysis.Symbolic.Regression.Views-3.4.csproj | 1 - ...roblems.DataAnalysis.Symbolic.Regression-3.4.csproj | 1 - ...lysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj | 1 - ...ataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj | 1 - ...Lab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj | 1 - ...risticLab.Problems.DataAnalysis.Symbolic-3.4.csproj | 1 - ...cLab.Problems.DataAnalysis.Trading.Views-3.4.csproj | 1 - ...uristicLab.Problems.DataAnalysis.Trading-3.4.csproj | 1 - ...HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj | 1 - .../3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj | 1 - ...risticLab.Problems.ExternalEvaluation.GP-3.5.csproj | 1 - ...icLab.Problems.ExternalEvaluation.Matlab-3.3.csproj | 4 ---- ...icLab.Problems.ExternalEvaluation.Scilab-3.3.csproj | 4 ---- ...ticLab.Problems.ExternalEvaluation.Views-3.4.csproj | 1 - ...HeuristicLab.Problems.ExternalEvaluation-3.4.csproj | 1 - ...ticLab.Problems.GeneticProgramming.Views-3.3.csproj | 1 - ...HeuristicLab.Problems.GeneticProgramming-3.3.csproj | 1 - ...uristicLab.Problems.GrammaticalEvolution-3.4.csproj | 1 - .../3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj | 4 ---- ...risticLab.Problems.Instances.CordeauGQAP-3.3.csproj | 4 ---- .../HeuristicLab.Problems.Instances.DIMACS-3.3.csproj | 4 ---- ...isticLab.Problems.Instances.DataAnalysis-3.3.csproj | 4 ---- ...risticLab.Problems.Instances.ElloumiCTAP-3.3.csproj | 4 ---- ...isticLab.Problems.Instances.Orienteering-3.3.csproj | 4 ---- .../HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj | 4 ---- ...uristicLab.Problems.Instances.Scheduling-3.3.csproj | 4 ---- ...isticLab.Problems.Instances.TSPLIB.Views-3.3.csproj | 4 ---- .../HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj | 4 ---- ....Problems.Instances.VehicleRouting.Views-3.4.csproj | 4 ---- ...ticLab.Problems.Instances.VehicleRouting-3.4.csproj | 4 ---- .../HeuristicLab.Problems.Instances.Views-3.3.csproj | 4 ---- .../3.3/HeuristicLab.Problems.Instances-3.3.csproj | 4 ---- .../HeuristicLab.Problems.Knapsack.Views-3.3.csproj | 1 - .../3.3/HeuristicLab.Problems.Knapsack-3.3.csproj | 1 - ...isticLab.Problems.LinearAssignment.Views-3.3.csproj | 4 ---- .../HeuristicLab.Problems.LinearAssignment-3.3.csproj | 4 ---- .../3.3/HeuristicLab.Problems.NK-3.3.csproj | 4 ---- ...HeuristicLab.Problems.Orienteering.Views-3.3.csproj | 4 ---- .../3.3/HeuristicLab.Problems.Orienteering-3.3.csproj | 4 ---- .../3.3/HeuristicLab.Problems.PTSP.Views-3.3.csproj | 4 ---- .../3.3/HeuristicLab.Problems.PTSP-3.3.csproj | 4 ---- ...risticLab.Problems.ParameterOptimization-3.3.csproj | 4 ---- ...HeuristicLab.Problems.Programmable.Views-3.3.csproj | 4 ---- .../3.3/HeuristicLab.Problems.Programmable-3.3.csproj | 4 ---- ....Problems.QuadraticAssignment.Algorithms-3.3.csproj | 4 ---- ...icLab.Problems.QuadraticAssignment.Views-3.3.csproj | 4 ---- ...euristicLab.Problems.QuadraticAssignment-3.3.csproj | 4 ---- .../HeuristicLab.Problems.Scheduling.Views-3.3.csproj | 4 ---- .../3.3/HeuristicLab.Problems.Scheduling-3.3.csproj | 4 ---- ...ab.Problems.TestFunctions.MultiObjective-3.3.csproj | 5 ----- ...euristicLab.Problems.TestFunctions.Views-3.3.csproj | 1 - .../3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj | 1 - ...sticLab.Problems.TravelingSalesman.Views-3.3.csproj | 1 - .../HeuristicLab.Problems.TravelingSalesman-3.3.csproj | 1 - ...uristicLab.Problems.VehicleRouting.Views-3.4.csproj | 1 - .../HeuristicLab.Problems.VehicleRouting-3.4.csproj | 1 - HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj | 1 - .../3.3/HeuristicLab.Scripting.Views-3.3.csproj | 5 ----- .../3.3/HeuristicLab.Scripting-3.3.csproj | 5 ----- .../3.3/HeuristicLab.Selection-3.3.csproj | 1 - .../3.3/HeuristicLab.SequentialEngine-3.3.csproj | 1 - .../HeuristicLab.Services.Access.DataAccess-3.3.csproj | 6 ------ .../3.3/HeuristicLab.Services.Access-3.3.csproj | 6 ------ ...risticLab.Services.Deployment.DataAccess-3.3.csproj | 6 ------ .../3.3/HeuristicLab.Services.Deployment-3.3.csproj | 6 ------ .../HeuristicLab.Services.Deployment-3.3.Tests.csproj | 6 ------ .../HeuristicLab.Services.Hive.DataAccess-3.3.csproj | 6 ------ ...euristicLab.Services.Hive.JanitorService-3.3.csproj | 6 ------ .../3.3/HeuristicLab.Services.Hive-3.3.csproj | 6 ------ .../HeuristicLab.Services.OKB.DataAccess-3.3.csproj | 6 ------ .../3.3/HeuristicLab.Services.OKB-3.3.csproj | 10 ---------- ...HeuristicLab.Services.WebApp.Maintenance-3.3.csproj | 4 ---- .../HeuristicLab.Services.WebApp.Statistics-3.3.csproj | 4 ---- .../3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj | 4 ---- .../3.3/HeuristicLab.Services.WebApp-3.3.csproj | 4 ---- HeuristicLab.Tests/HeuristicLab.Tests.csproj | 4 ---- .../3.3/HeuristicLab.Tracing-3.3.csproj | 1 - ...ab.Visualization.ChartControlsExtensions-3.3.csproj | 4 ---- HeuristicLab/3.3/HeuristicLab-3.3.csproj | 1 - 167 files changed, 424 deletions(-) diff --git a/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj b/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj index 6e506bec02..e4e29a0365 100644 --- a/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj +++ b/HeuristicLab.Algorithms.ALPS/3.3/HeuristicLab.Algorithms.ALPS-3.3.csproj @@ -16,19 +16,15 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset true diff --git a/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj b/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj index b390fa1e81..9032074f0d 100644 --- a/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj +++ b/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj @@ -8,7 +8,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj b/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj index 5c8b8077cd..95028cfff3 100644 --- a/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj +++ b/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj @@ -8,7 +8,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj b/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj index 6d42c652d5..2d444a0ad2 100644 --- a/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj +++ b/HeuristicLab.Algorithms.CMAEvolutionStrategy/3.4/HeuristicLab.Algorithms.CMAEvolutionStrategy-3.4.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj index b4f4d07cae..4a8b70c628 100644 --- a/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj @@ -26,7 +26,6 @@ bin\Debug\HeuristicLab.Algorithms.DataAnalysis.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true @@ -35,7 +34,6 @@ $(SolutionDir)\bin\HeuristicLab.Algorithms.DataAnalysis.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true @@ -44,7 +42,6 @@ bin\Debug\HeuristicLab.Algorithms.DataAnalysis.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true @@ -53,7 +50,6 @@ $(SolutionDir)\bin\HeuristicLab.Algorithms.DataAnalysis.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true diff --git a/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj index ed660e4bea..7700e36348 100644 --- a/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj @@ -28,7 +28,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj b/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj index 5760d1d51e..e33c727bce 100644 --- a/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj +++ b/HeuristicLab.Algorithms.EvolutionStrategy/3.3/HeuristicLab.Algorithms.EvolutionStrategy-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj b/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj index 8281f449b5..c53035417a 100644 --- a/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj +++ b/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj @@ -28,7 +28,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj b/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj index 4919653f17..60111626b3 100644 --- a/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj +++ b/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj @@ -27,7 +27,6 @@ bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -36,7 +35,6 @@ bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true @@ -44,7 +42,6 @@ bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -53,7 +50,6 @@ bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true false diff --git a/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj b/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj index 41d79c350d..1541d19d41 100644 --- a/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.LocalSearch/3.3/HeuristicLab.Algorithms.LocalSearch-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj b/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj index 98529251aa..8e44041d30 100644 --- a/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj +++ b/HeuristicLab.Algorithms.MOCMAEvolutionStrategy/3.3/HeuristicLab.Algorithms.MOCMAEvolutionStrategy-3.3.csproj @@ -17,19 +17,15 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj b/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj index caee8ef994..48ca5fa05a 100644 --- a/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj +++ b/HeuristicLab.Algorithms.NSGA2/3.3/HeuristicLab.Algorithms.NSGA2-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset diff --git a/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj b/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj index 2f62755274..1c1048b525 100644 --- a/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj +++ b/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy/3.3/HeuristicLab.Algorithms.OffspringSelectionEvolutionStrategy-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj b/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj index 7f329e806d..05b2290c45 100644 --- a/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj +++ b/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm/3.3/HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj b/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj index b55add8ba4..45fad5b324 100644 --- a/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj +++ b/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HeuristicLab.Algorithms.ParameterlessPopulationPyramid-3.3.csproj @@ -22,19 +22,15 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj b/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj index df8caab526..aefe938954 100644 --- a/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj +++ b/HeuristicLab.Algorithms.ParticleSwarmOptimization/3.3/HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset diff --git a/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj b/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj index 029c719be7..ad37a0993d 100644 --- a/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj +++ b/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj @@ -10,7 +10,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj b/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj index 44edb989f4..d57d0438e3 100644 --- a/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.RandomSearch/3.3/HeuristicLab.Algorithms.RandomSearch-3.3.csproj @@ -16,19 +16,15 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset true diff --git a/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj b/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj index d0385cc9d9..cb8ad235f7 100644 --- a/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.ScatterSearch/3.3/HeuristicLab.Algorithms.ScatterSearch-3.3.csproj @@ -8,7 +8,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj b/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj index 38cf11df88..44c2179655 100644 --- a/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj +++ b/HeuristicLab.Algorithms.SimulatedAnnealing/3.3/HeuristicLab.Algorithms.SimulatedAnnealing-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj b/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj index c59cfbfc44..cbf5f1306f 100644 --- a/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.TabuSearch/3.3/HeuristicLab.Algorithms.TabuSearch-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj b/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj index 2d117affaf..a304273691 100644 --- a/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj +++ b/HeuristicLab.Algorithms.VariableNeighborhoodSearch/3.3/HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj b/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj index 8d40582014..1dd8629131 100644 --- a/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj +++ b/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj b/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj index f940593a36..64ac3b4b60 100644 --- a/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj +++ b/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj b/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj index cd0c52bf92..2b9aa61047 100644 --- a/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj +++ b/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj b/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj index 896560bcb5..de14e863f8 100644 --- a/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj +++ b/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj @@ -24,7 +24,6 @@ true false false - AllRules.ruleset diff --git a/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj b/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj index 2b0a11be56..3fc872dbbc 100644 --- a/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj +++ b/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj @@ -8,7 +8,6 @@ true false false - AllRules.ruleset diff --git a/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj b/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj index c11e25f8a2..87162c3249 100644 --- a/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj +++ b/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj @@ -8,7 +8,6 @@ true false false - AllRules.ruleset diff --git a/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj b/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj index 61014739aa..cb6738e595 100644 --- a/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj +++ b/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj @@ -26,7 +26,6 @@ bin\Debug\HeuristicLab.Clients.Common-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false true false @@ -36,7 +35,6 @@ $(SolutionDir)\bin\HeuristicLab.Clients.Common-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true @@ -45,7 +43,6 @@ bin\Debug\HeuristicLab.Clients.Common-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true @@ -53,7 +50,6 @@ $(SolutionDir)\bin\HeuristicLab.Clients.Common-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true diff --git a/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj b/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj index f0eb26b6bb..e8caa6fc90 100644 --- a/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj @@ -8,7 +8,6 @@ true false false - AllRules.ruleset diff --git a/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj b/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj index 55cb738358..ef23dd42fc 100644 --- a/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj +++ b/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj @@ -8,7 +8,6 @@ true false false - AllRules.ruleset diff --git a/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj index dd343e8c34..6d75f7f5b2 100644 --- a/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj @@ -25,7 +25,6 @@ false DEBUG;TRACE prompt - AllRules.ruleset false @@ -36,7 +35,6 @@ prompt - AllRules.ruleset false @@ -46,7 +44,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -58,7 +55,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -68,7 +64,6 @@ embedded x64 prompt - AllRules.ruleset false @@ -80,7 +75,6 @@ embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj index 922537eec3..e7a22a9a8b 100644 --- a/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj @@ -24,7 +24,6 @@ false DEBUG;TRACE prompt - AllRules.ruleset false @@ -35,7 +34,6 @@ prompt - AllRules.ruleset false @@ -45,7 +43,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -57,7 +54,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -67,7 +63,6 @@ embedded x64 prompt - AllRules.ruleset false @@ -79,7 +74,6 @@ embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj index 55d1064bfb..ea4adc01ab 100644 --- a/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj @@ -25,7 +25,6 @@ false DEBUG;TRACE prompt - AllRules.ruleset false @@ -36,7 +35,6 @@ prompt - AllRules.ruleset false @@ -46,7 +44,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -58,7 +55,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -68,7 +64,6 @@ embedded x64 prompt - AllRules.ruleset false @@ -80,7 +75,6 @@ embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj index c0b5037f16..62735bd7fc 100644 --- a/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj @@ -24,7 +24,6 @@ false DEBUG;TRACE prompt - AllRules.ruleset false @@ -35,7 +34,6 @@ prompt - AllRules.ruleset false @@ -45,7 +43,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -57,7 +54,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -67,7 +63,6 @@ embedded x64 prompt - AllRules.ruleset false @@ -79,7 +74,6 @@ embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj index a4bfe5db82..a811447a9d 100644 --- a/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj @@ -39,7 +39,6 @@ false DEBUG;TRACE prompt - AllRules.ruleset false @@ -50,7 +49,6 @@ prompt - AllRules.ruleset false @@ -60,7 +58,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -72,7 +69,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -82,7 +78,6 @@ embedded x64 prompt - AllRules.ruleset false @@ -94,7 +89,6 @@ embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj b/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj index b78f72f90a..392e6628d2 100644 --- a/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj @@ -24,7 +24,6 @@ false DEBUG;TRACE prompt - AllRules.ruleset false @@ -35,7 +34,6 @@ prompt - AllRules.ruleset false @@ -45,7 +43,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -57,7 +54,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -67,7 +63,6 @@ embedded x64 prompt - AllRules.ruleset false @@ -79,7 +74,6 @@ embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj b/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj index 6d00055a1e..878085fd04 100644 --- a/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj @@ -8,7 +8,6 @@ true false false - AllRules.ruleset diff --git a/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj b/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj index 97791c8166..f4bbff3288 100644 --- a/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj +++ b/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj @@ -27,7 +27,6 @@ bin\Debug\HeuristicLab.Clients.Hive-3.4.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -36,7 +35,6 @@ bin\Release\HeuristicLab.Clients.Hive-3.4.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -45,7 +43,6 @@ ..\..\bin\HeuristicLab.Clients.Hive-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false @@ -53,7 +50,6 @@ ..\..\bin\HeuristicLab.Clients.Hive-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true diff --git a/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj b/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj index ab25ff7c4f..1be8df9f6e 100644 --- a/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj +++ b/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj @@ -8,7 +8,6 @@ true false false - AllRules.ruleset diff --git a/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj b/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj index 67ae52817e..b589e333ae 100644 --- a/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj +++ b/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj @@ -8,7 +8,6 @@ true false false - AllRules.ruleset diff --git a/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj b/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj index fc170b1702..b5552dee3b 100644 --- a/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj +++ b/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj @@ -7,7 +7,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj b/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj index cd551e5e5f..15aaf84c21 100644 --- a/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj +++ b/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Common.Resources/3.3/HeuristicLab.Common.Resources-3.3.csproj b/HeuristicLab.Common.Resources/3.3/HeuristicLab.Common.Resources-3.3.csproj index 9fdbd65be3..061b69e981 100644 --- a/HeuristicLab.Common.Resources/3.3/HeuristicLab.Common.Resources-3.3.csproj +++ b/HeuristicLab.Common.Resources/3.3/HeuristicLab.Common.Resources-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj b/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj index 7e2984bd6e..d9a62dd2ce 100644 --- a/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj +++ b/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj b/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj index 9f1d7f24fa..14e93aa3fc 100644 --- a/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj +++ b/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj b/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj index 5635e05b62..bc8361bbfe 100644 --- a/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj +++ b/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj b/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj index 11eb378af2..5ae441b0cf 100644 --- a/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj +++ b/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj b/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj index 406ec254f2..2807ee49c0 100644 --- a/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj +++ b/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj b/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj index 4974c749cc..f03ee41edc 100644 --- a/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj +++ b/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj @@ -7,7 +7,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj b/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj index 80aeeba4c9..5dd9ed7ec7 100644 --- a/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj +++ b/HeuristicLab.DataPreprocessing/3.4/HeuristicLab.DataPreprocessing-3.4.csproj @@ -17,11 +17,9 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset true diff --git a/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj b/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj index 3e8df5e7f1..5ad3e964c7 100644 --- a/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj +++ b/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj @@ -20,7 +20,6 @@ bin\Debug\HeuristicLab.DebugEngine.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -29,7 +28,6 @@ bin\Release\HeuristicLab.DebugEngine.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true false @@ -39,7 +37,6 @@ bin\Debug\HeuristicLab.DebugEngine.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false false @@ -49,7 +46,6 @@ bin\Release\HeuristicLab.DebugEngine.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true diff --git a/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj b/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj index 118eab3316..42306d35ae 100644 --- a/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj +++ b/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj @@ -28,7 +28,6 @@ bin\Debug\HeuristicLab.DebugEngine.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true false @@ -38,7 +37,6 @@ $(SolutionDir)\bin\HeuristicLab.DebugEngine.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false true diff --git a/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj b/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj index 0b1968d32f..5c10df428d 100644 --- a/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj b/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj index de52df2eee..37c1b77dcc 100644 --- a/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/HeuristicLab.Encodings.IntegerVectorEncoding-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj b/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj index 6b09b96307..ead6f478aa 100644 --- a/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj +++ b/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj @@ -7,7 +7,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj b/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj index f258c61cb8..2022733fc5 100644 --- a/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj +++ b/HeuristicLab.Encodings.PermutationEncoding.Views/3.3/HeuristicLab.Encodings.PermutationEncoding.Views-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj b/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj index 8a5655c1d6..8bb944d7c3 100644 --- a/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj b/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj index 57919d8ee0..0337d15c20 100644 --- a/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj b/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj index afe24f44b9..d4423a3980 100644 --- a/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj +++ b/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj @@ -26,7 +26,6 @@ bin\Debug\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -35,7 +34,6 @@ ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -44,7 +42,6 @@ bin\Debug\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -53,7 +50,6 @@ ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false diff --git a/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj b/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj index d40c5db982..03fff96d4e 100644 --- a/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj @@ -26,7 +26,6 @@ ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -35,7 +34,6 @@ ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true false @@ -45,7 +43,6 @@ ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -54,7 +51,6 @@ ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true false diff --git a/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj b/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj index 11bb7b98f7..1a370fe4a8 100644 --- a/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj +++ b/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj b/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj index 4dfa9785f9..bf7ccf3e62 100644 --- a/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj +++ b/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj b/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj index 8a51eface7..77c7c935c0 100644 --- a/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj +++ b/HeuristicLab.ExactOptimization.Views/3.3/HeuristicLab.ExactOptimization.Views-3.3.csproj @@ -13,7 +13,6 @@ embedded - AllRules.ruleset 7.3 diff --git a/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj b/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj index d561cf12d7..b4f3b8001a 100644 --- a/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj +++ b/HeuristicLab.ExactOptimization/3.3/HeuristicLab.ExactOptimization-3.3.csproj @@ -13,7 +13,6 @@ embedded - AllRules.ruleset 7.3 diff --git a/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj b/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj index 0ea23504ae..ba2d13983d 100644 --- a/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj +++ b/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj @@ -8,7 +8,6 @@ true false false - AllRules.ruleset diff --git a/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj b/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj index 233ba4a416..e4557c187b 100644 --- a/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj +++ b/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj b/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj index f07d407d80..88497c1555 100644 --- a/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj +++ b/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj b/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj index 4bfbfc349f..2b4bcf8c91 100644 --- a/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj +++ b/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj @@ -26,14 +26,12 @@ bin\Debug\HeuristicLab.Operators.Programmable.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset embedded bin\Release\HeuristicLab.Operators.Programmable.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -42,7 +40,6 @@ bin\Debug\HeuristicLab.Operators.Programmable.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -51,7 +48,6 @@ bin\Release\HeuristicLab.Operators.Programmable.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false diff --git a/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj b/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj index 202db9ae8e..2da6e180bd 100644 --- a/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj +++ b/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj b/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj index 5a661a74d0..14304a9d3b 100644 --- a/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj +++ b/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj @@ -27,7 +27,6 @@ bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -36,7 +35,6 @@ $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true @@ -44,7 +42,6 @@ bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -53,7 +50,6 @@ $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true false diff --git a/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj b/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj index 2dae2ba93d..67c6498b21 100644 --- a/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj +++ b/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj b/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj index 9d45876126..7a76865bf0 100644 --- a/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj +++ b/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj b/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj index f6c5884f81..a063ec76c1 100644 --- a/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj +++ b/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj b/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj index c5707610c2..8c9bf22e68 100644 --- a/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj +++ b/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj b/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj index 6481bc7701..2175a23623 100644 --- a/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj +++ b/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj b/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj index b2fc760f32..0d0a188b1f 100644 --- a/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj +++ b/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj b/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj index 820ca69858..55d640d5f2 100644 --- a/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj +++ b/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj b/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj index 150f10cc9a..64cb73cc8d 100644 --- a/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj +++ b/HeuristicLab.ParallelEngine.Views/3.3/HeuristicLab.ParallelEngine.Views-3.3.csproj @@ -16,19 +16,15 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset true diff --git a/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj b/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj index 0f1143978b..ca1df879b0 100644 --- a/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj +++ b/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj @@ -26,7 +26,6 @@ bin\Debug\HeuristicLab.ParallelEngine-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true @@ -35,7 +34,6 @@ $(SolutionDir)\bin\HeuristicLab.ParallelEngine-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true @@ -44,7 +42,6 @@ bin\Debug\HeuristicLab.ParallelEngine-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true @@ -53,7 +50,6 @@ $(SolutionDir)\bin\HeuristicLab.ParallelEngine-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true diff --git a/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj b/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj index 176d33c31b..a4a2d5ae8a 100644 --- a/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj +++ b/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj b/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj index 0a895334d6..7c4086f797 100644 --- a/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj +++ b/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj b/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj index bf9dfbe228..f5bd1c27f9 100644 --- a/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj +++ b/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj @@ -26,7 +26,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj b/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj index 1d99272b28..dc4b4ad81c 100644 --- a/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj +++ b/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj @@ -28,7 +28,6 @@ true false false - AllRules.ruleset diff --git a/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj b/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj index b7f39896e5..3361f2a396 100644 --- a/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj +++ b/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj @@ -28,7 +28,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj b/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj index 70a5fe725a..2f6f32422f 100644 --- a/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj +++ b/HeuristicLab.Problems.Binary/3.3/HeuristicLab.Problems.Binary-3.3.csproj @@ -22,19 +22,15 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj index 2fa05d5395..162a2eb654 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj index ee3488ee5e..c62350d6f3 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj index 9cfba63c6e..60d7e62ac6 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj index 1831f33fbd..bfcc3b091e 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj @@ -28,7 +28,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj index ac80a74143..00eec04798 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj index f45221b09e..16330311b7 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj index 33649015cc..6ca3cdc5e8 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj index 017f0e94b8..80e533ad18 100644 --- a/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj @@ -28,7 +28,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj index 14e725e429..475e54e871 100644 --- a/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj index d72413ea7c..e8ed4f42cc 100644 --- a/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj b/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj index a737b625d4..ca75286ed8 100644 --- a/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj b/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj index 7b99a9e8a8..a4ffb52e9c 100644 --- a/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj +++ b/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj b/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj index 5968b89f54..625e1dc64f 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj b/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj index f3bdde4689..2ea38cc7a5 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.Matlab/3.3/HeuristicLab.Problems.ExternalEvaluation.Matlab-3.3.csproj @@ -22,19 +22,15 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj b/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj index 44eea99c5e..6611b4f06b 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj @@ -22,19 +22,15 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj b/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj index edd9089291..816857472a 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj b/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj index 1f9efd0386..b4c626eaf7 100644 --- a/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj b/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj index 71782c72bd..98f36ce7e6 100644 --- a/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj +++ b/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj b/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj index 7ebf5c999b..0bb2f11663 100644 --- a/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj +++ b/HeuristicLab.Problems.GeneticProgramming/3.3/HeuristicLab.Problems.GeneticProgramming-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj b/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj index 1995b0f582..6e39d21593 100644 --- a/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj +++ b/HeuristicLab.Problems.GrammaticalEvolution/3.4/HeuristicLab.Problems.GrammaticalEvolution-3.4.csproj @@ -33,7 +33,6 @@ true false false - AllRules.ruleset Full diff --git a/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj b/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj index 8bc02d5509..17a675c4db 100644 --- a/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj +++ b/HeuristicLab.Problems.GraphColoring/3.3/HeuristicLab.Problems.GraphColoring-3.3.csproj @@ -22,19 +22,15 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj b/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj index eb88999c95..e8a7993d95 100644 --- a/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj +++ b/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj @@ -27,7 +27,6 @@ ..\..\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -36,7 +35,6 @@ ..\..\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true @@ -44,7 +42,6 @@ ..\..\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -53,7 +50,6 @@ ..\..\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true false diff --git a/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj b/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj index 5298aa4276..a098de0c64 100644 --- a/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj +++ b/HeuristicLab.Problems.Instances.DIMACS/3.3/HeuristicLab.Problems.Instances.DIMACS-3.3.csproj @@ -22,19 +22,15 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj b/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj index b0675e67bd..a830dd15af 100644 --- a/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj +++ b/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj @@ -27,14 +27,12 @@ ..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset embedded ..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true false @@ -43,14 +41,12 @@ ..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset embedded ..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true false diff --git a/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj b/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj index eaebdbbe08..36a38d8a55 100644 --- a/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj +++ b/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj @@ -27,7 +27,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -36,7 +35,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -45,7 +43,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -54,7 +51,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false diff --git a/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj b/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj index c3fe3e0662..43f203bb87 100644 --- a/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Orienteering/3.3/HeuristicLab.Problems.Instances.Orienteering-3.3.csproj @@ -22,19 +22,15 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj b/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj index 29c34bd63f..b77c02fc30 100644 --- a/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj +++ b/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj @@ -27,7 +27,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.QAPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -36,7 +35,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.QAPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -45,7 +43,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.QAPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -54,7 +51,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.QAPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false diff --git a/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj b/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj index 6a484591e7..b1f9de52af 100644 --- a/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj @@ -27,7 +27,6 @@ bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -36,7 +35,6 @@ bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true @@ -44,7 +42,6 @@ bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -53,7 +50,6 @@ bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true false diff --git a/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj b/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj index bcf726c478..c0dd84c0fc 100644 --- a/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj +++ b/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj @@ -26,7 +26,6 @@ bin\Debug\HeuristicLab.Problems.Instances.TSPLIB.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true @@ -35,7 +34,6 @@ bin\Release\HeuristicLab.Problems.Instances.TSPLIB.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true @@ -44,7 +42,6 @@ bin\Debug\HeuristicLab.Problems.Instances.TSPLIB.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true @@ -53,7 +50,6 @@ bin\Release\HeuristicLab.Problems.Instances.TSPLIB.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true diff --git a/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj b/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj index 464e20168f..8ab5c431ae 100644 --- a/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj +++ b/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj @@ -27,7 +27,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.TSPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -36,7 +35,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.TSPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -45,7 +43,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.TSPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -54,7 +51,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.TSPLIB-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false diff --git a/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj b/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj index a39fa6f4ba..cabd44b594 100644 --- a/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj +++ b/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj @@ -26,7 +26,6 @@ bin\Debug\HeuristicLab.Problems.Instances.VehicleRouting.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true @@ -35,7 +34,6 @@ bin\Release\HeuristicLab.Problems.Instances.VehicleRouting.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true @@ -44,7 +42,6 @@ bin\Debug\HeuristicLab.Problems.Instances.VehicleRouting.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true @@ -53,7 +50,6 @@ bin\Release\HeuristicLab.Problems.Instances.VehicleRouting.Views.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true diff --git a/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj b/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj index 24109bb78d..e62450106b 100644 --- a/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj +++ b/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj @@ -27,7 +27,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.VehicleRouting-3.4.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -36,7 +35,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.VehicleRouting-3.4.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -45,7 +43,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.VehicleRouting-3.4.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -54,7 +51,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.VehicleRouting-3.4.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false diff --git a/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj b/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj index d7450b19a1..f6980828a0 100644 --- a/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj @@ -26,7 +26,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true @@ -35,7 +34,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -44,7 +42,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true @@ -53,7 +50,6 @@ ..\..\bin\HeuristicLab.Problems.Instances.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false diff --git a/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj b/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj index 8f0d26aea1..270a220fa1 100644 --- a/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj +++ b/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj @@ -27,7 +27,6 @@ ..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true false @@ -37,7 +36,6 @@ ..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false false @@ -47,7 +45,6 @@ ..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true false @@ -57,7 +54,6 @@ ..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false diff --git a/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj b/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj index 9319f05f18..89091156fc 100644 --- a/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj +++ b/HeuristicLab.Problems.Knapsack.Views/3.3/HeuristicLab.Problems.Knapsack.Views-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj b/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj index e839e693f6..87b812242f 100644 --- a/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj +++ b/HeuristicLab.Problems.Knapsack/3.3/HeuristicLab.Problems.Knapsack-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj b/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj index 42661f429a..142b90e6cc 100644 --- a/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj +++ b/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj @@ -27,7 +27,6 @@ bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -36,7 +35,6 @@ bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true @@ -44,7 +42,6 @@ bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -53,7 +50,6 @@ bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true false diff --git a/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj b/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj index 2d898eeacb..71f184df55 100644 --- a/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj +++ b/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj @@ -27,7 +27,6 @@ bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -36,7 +35,6 @@ bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true @@ -44,7 +42,6 @@ bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -53,7 +50,6 @@ bin\Release\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true false diff --git a/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj b/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj index cded900c28..9663e70a39 100644 --- a/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj +++ b/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj @@ -27,7 +27,6 @@ bin\Debug\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -36,7 +35,6 @@ bin\Release\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false true @@ -45,7 +43,6 @@ bin\Debug\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -54,7 +51,6 @@ bin\Release\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false true diff --git a/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj b/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj index aa8c81b2a1..681b22981a 100644 --- a/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj +++ b/HeuristicLab.Problems.Orienteering.Views/3.3/HeuristicLab.Problems.Orienteering.Views-3.3.csproj @@ -22,19 +22,15 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj b/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj index 1f90e88cab..65e0188d55 100644 --- a/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj +++ b/HeuristicLab.Problems.Orienteering/3.3/HeuristicLab.Problems.Orienteering-3.3.csproj @@ -25,19 +25,15 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.PTSP.Views/3.3/HeuristicLab.Problems.PTSP.Views-3.3.csproj b/HeuristicLab.Problems.PTSP.Views/3.3/HeuristicLab.Problems.PTSP.Views-3.3.csproj index f46246f9c8..13fa5a7fa5 100644 --- a/HeuristicLab.Problems.PTSP.Views/3.3/HeuristicLab.Problems.PTSP.Views-3.3.csproj +++ b/HeuristicLab.Problems.PTSP.Views/3.3/HeuristicLab.Problems.PTSP.Views-3.3.csproj @@ -16,19 +16,15 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj b/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj index 0a675cd61a..3cefdb2f66 100644 --- a/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj +++ b/HeuristicLab.Problems.PTSP/3.3/HeuristicLab.Problems.PTSP-3.3.csproj @@ -22,19 +22,15 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj b/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj index 3d76ea5dc4..f6861738f1 100644 --- a/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj +++ b/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj @@ -22,19 +22,15 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj b/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj index cd83ddc90f..ac14666ef7 100644 --- a/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj +++ b/HeuristicLab.Problems.Programmable.Views/3.3/HeuristicLab.Problems.Programmable.Views-3.3.csproj @@ -22,19 +22,15 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj b/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj index d1958d83fe..d068f375f0 100644 --- a/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj +++ b/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj @@ -22,19 +22,15 @@ embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj index a2e72ebd43..1a373b4083 100644 --- a/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj @@ -27,7 +27,6 @@ bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -36,7 +35,6 @@ $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true @@ -44,7 +42,6 @@ bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -53,7 +50,6 @@ $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true false diff --git a/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj index a4fe05e03d..92cf647224 100644 --- a/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj @@ -27,7 +27,6 @@ bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -36,7 +35,6 @@ $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true @@ -44,7 +42,6 @@ bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -53,7 +50,6 @@ $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true false diff --git a/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj index 0876910952..bdea0d1daf 100644 --- a/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj @@ -27,7 +27,6 @@ bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -36,7 +35,6 @@ $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true @@ -44,7 +42,6 @@ bin\Debug\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -53,7 +50,6 @@ $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true false diff --git a/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj b/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj index ac20dd4137..d2f580f813 100644 --- a/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj +++ b/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj @@ -20,7 +20,6 @@ ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false @@ -28,7 +27,6 @@ ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -37,7 +35,6 @@ ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -46,7 +43,6 @@ ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling.Views-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false diff --git a/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj b/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj index fa9501a116..7afc440fb1 100644 --- a/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj +++ b/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj @@ -26,7 +26,6 @@ ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -35,7 +34,6 @@ ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -44,7 +42,6 @@ ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -53,7 +50,6 @@ ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj b/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj index 31491c86f8..772abde8d8 100644 --- a/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj +++ b/HeuristicLab.Problems.TestFunctions.MultiObjective/3.3/HeuristicLab.Problems.TestFunctions.MultiObjective-3.3.csproj @@ -11,7 +11,6 @@ embedded false - MinimumRecommendedRules.ruleset embedded @@ -29,21 +28,17 @@ CODE_ANALYSIS;DEBUG;TRACE embedded true - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset CODE_ANALYSIS;DEBUG;TRACE embedded true - MinimumRecommendedRules.ruleset embedded - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj b/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj index 3bba5b2b36..0ca225b323 100644 --- a/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj +++ b/HeuristicLab.Problems.TestFunctions.Views/3.3/HeuristicLab.Problems.TestFunctions.Views-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj b/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj index 0bf6b8b3ea..e79f978577 100644 --- a/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj +++ b/HeuristicLab.Problems.TestFunctions/3.3/HeuristicLab.Problems.TestFunctions-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj b/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj index 0bd021ff01..1be0843089 100644 --- a/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj +++ b/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj b/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj index 2b3c2b7c50..f34464b8c5 100644 --- a/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj +++ b/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj b/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj index 46cb9c8df2..9f81eb889f 100644 --- a/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj +++ b/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset diff --git a/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj b/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj index 7cf24a86e1..9a2fcf707f 100644 --- a/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj +++ b/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset diff --git a/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj b/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj index 619f3e2ad6..3714474ce1 100644 --- a/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj +++ b/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj b/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj index b1190b9aa9..bfb3bc58d6 100644 --- a/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj +++ b/HeuristicLab.Scripting.Views/3.3/HeuristicLab.Scripting.Views-3.3.csproj @@ -10,7 +10,6 @@ embedded - AllRules.ruleset embedded @@ -23,19 +22,15 @@ embedded - AllRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - AllRules.ruleset embedded - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj b/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj index 0bb5ff8311..c5c27a68af 100644 --- a/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj +++ b/HeuristicLab.Scripting/3.3/HeuristicLab.Scripting-3.3.csproj @@ -10,7 +10,6 @@ embedded - AllRules.ruleset embedded @@ -23,19 +22,15 @@ embedded - AllRules.ruleset embedded - MinimumRecommendedRules.ruleset embedded - AllRules.ruleset embedded - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj b/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj index fff034f13b..322e42a81c 100644 --- a/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj +++ b/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj b/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj index 42ed6d7eca..bb93cb4617 100644 --- a/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj +++ b/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj b/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj index 720921d6f0..1ad4b7eadf 100644 --- a/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj @@ -24,7 +24,6 @@ false DEBUG;TRACE prompt - AllRules.ruleset false @@ -35,7 +34,6 @@ prompt - AllRules.ruleset false @@ -45,7 +43,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -57,7 +54,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -67,7 +63,6 @@ embedded x64 prompt - AllRules.ruleset false @@ -79,7 +74,6 @@ embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj b/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj index c13ce53f76..8938cc5f23 100644 --- a/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj +++ b/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj @@ -26,7 +26,6 @@ false DEBUG;TRACE prompt - AllRules.ruleset false @@ -37,7 +36,6 @@ prompt - AllRules.ruleset false @@ -47,7 +45,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -59,7 +56,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -69,7 +65,6 @@ embedded x64 prompt - AllRules.ruleset false @@ -81,7 +76,6 @@ embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj b/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj index 93bf4d6025..241d72753b 100644 --- a/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj @@ -46,7 +46,6 @@ false DEBUG;TRACE prompt - AllRules.ruleset false @@ -55,7 +54,6 @@ $(SolutionDir)\bin\ TRACE prompt - AllRules.ruleset false @@ -65,7 +63,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -75,7 +72,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -85,7 +81,6 @@ embedded x64 prompt - AllRules.ruleset false @@ -95,7 +90,6 @@ embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj b/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj index 28e5e2cfd2..40adf8b899 100644 --- a/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj +++ b/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj @@ -32,7 +32,6 @@ false DEBUG;TRACE prompt - AllRules.ruleset false @@ -41,7 +40,6 @@ $(SolutionDir)\bin\ TRACE prompt - AllRules.ruleset false @@ -51,7 +49,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -61,7 +58,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -71,7 +67,6 @@ embedded x64 prompt - AllRules.ruleset false @@ -81,7 +76,6 @@ embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj b/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj index 39034833d4..8b601c586a 100644 --- a/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj +++ b/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj @@ -44,7 +44,6 @@ false DEBUG;TRACE prompt - AllRules.ruleset false @@ -53,7 +52,6 @@ $(SolutionDir)\bin\ TRACE prompt - AllRules.ruleset false @@ -63,7 +61,6 @@ embedded x64 prompt - AllRules.ruleset false @@ -73,7 +70,6 @@ embedded x64 prompt - AllRules.ruleset false @@ -83,7 +79,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -93,7 +88,6 @@ embedded x86 prompt - AllRules.ruleset false diff --git a/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj b/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj index 04a0483f8b..60a1152c50 100644 --- a/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj @@ -24,7 +24,6 @@ false DEBUG;TRACE prompt - AllRules.ruleset false @@ -35,7 +34,6 @@ prompt - AllRules.ruleset false @@ -45,7 +43,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -57,7 +54,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -67,7 +63,6 @@ embedded x64 prompt - AllRules.ruleset false @@ -79,7 +74,6 @@ embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj b/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj index 34541d3dde..1e1349099e 100644 --- a/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj +++ b/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj @@ -25,7 +25,6 @@ false DEBUG;TRACE prompt - AllRules.ruleset false @@ -36,7 +35,6 @@ prompt - AllRules.ruleset false @@ -46,7 +44,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -58,7 +55,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -68,7 +64,6 @@ embedded x64 prompt - AllRules.ruleset false @@ -80,7 +75,6 @@ embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj b/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj index 142baf6ff4..d03b5db912 100644 --- a/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj +++ b/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj @@ -25,7 +25,6 @@ false DEBUG;TRACE prompt - AllRules.ruleset false @@ -36,7 +35,6 @@ prompt - AllRules.ruleset false @@ -46,7 +44,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -58,7 +55,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -68,7 +64,6 @@ embedded x64 prompt - AllRules.ruleset false @@ -80,7 +75,6 @@ embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj b/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj index 7b599e1ca3..1493bdde4c 100644 --- a/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj @@ -43,7 +43,6 @@ false DEBUG;TRACE prompt - AllRules.ruleset false @@ -54,7 +53,6 @@ prompt - AllRules.ruleset false @@ -64,7 +62,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -76,7 +73,6 @@ embedded x86 prompt - AllRules.ruleset false @@ -86,7 +82,6 @@ embedded x64 prompt - AllRules.ruleset false @@ -98,7 +93,6 @@ embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj index 49e277c198..d6569f41e1 100644 --- a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj +++ b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj @@ -26,7 +26,6 @@ false DEBUG;TRACE prompt - AllRules.ruleset false @@ -37,7 +36,6 @@ prompt - AllRules.ruleset false @@ -47,7 +45,6 @@ embedded x86 prompt - AllRules.ruleset $(SolutionDir)\bin\ @@ -58,7 +55,6 @@ embedded x86 prompt - AllRules.ruleset true @@ -67,7 +63,6 @@ embedded x64 prompt - AllRules.ruleset $(SolutionDir)\bin\ @@ -78,7 +73,6 @@ embedded x64 prompt - AllRules.ruleset true @@ -96,7 +90,6 @@ true GlobalSuppressions.cs prompt - MinimumRecommendedRules.ruleset false false false @@ -111,7 +104,6 @@ true GlobalSuppressions.cs prompt - MinimumRecommendedRules.ruleset false false false @@ -127,7 +119,6 @@ true GlobalSuppressions.cs prompt - MinimumRecommendedRules.ruleset false false false @@ -142,7 +133,6 @@ true GlobalSuppressions.cs prompt - MinimumRecommendedRules.ruleset false false false diff --git a/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj b/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj index 973ee973af..eb582ad14c 100644 --- a/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj @@ -44,7 +44,6 @@ embedded x64 prompt - MinimumRecommendedRules.ruleset $(SolutionDir)\bin\ @@ -53,7 +52,6 @@ embedded x64 prompt - MinimumRecommendedRules.ruleset true @@ -62,7 +60,6 @@ embedded x86 prompt - MinimumRecommendedRules.ruleset $(SolutionDir)\bin\ @@ -71,7 +68,6 @@ embedded x86 prompt - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj b/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj index d9ccbb998b..7ff5a55c02 100644 --- a/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj @@ -45,7 +45,6 @@ embedded x64 prompt - MinimumRecommendedRules.ruleset $(SolutionDir)\bin\ @@ -54,7 +53,6 @@ embedded x64 prompt - MinimumRecommendedRules.ruleset true @@ -63,7 +61,6 @@ embedded x86 prompt - MinimumRecommendedRules.ruleset $(SolutionDir)\bin\ @@ -72,7 +69,6 @@ embedded x86 prompt - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj b/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj index 928d508796..5d7a85d453 100644 --- a/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj @@ -45,7 +45,6 @@ embedded x64 prompt - MinimumRecommendedRules.ruleset $(SolutionDir)\bin\ @@ -53,7 +52,6 @@ true x64 prompt - MinimumRecommendedRules.ruleset true @@ -62,7 +60,6 @@ embedded x86 prompt - MinimumRecommendedRules.ruleset $(SolutionDir)\bin\ @@ -70,7 +67,6 @@ true x86 prompt - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj b/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj index 2cfcb44cc7..509e3eb87a 100644 --- a/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj +++ b/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj @@ -285,7 +285,6 @@ embedded x86 prompt - MinimumRecommendedRules.ruleset $(SolutionDir)\bin\ @@ -294,7 +293,6 @@ embedded x86 prompt - MinimumRecommendedRules.ruleset true @@ -303,7 +301,6 @@ embedded x64 prompt - MinimumRecommendedRules.ruleset $(SolutionDir)\bin\ @@ -312,7 +309,6 @@ embedded x64 prompt - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.Tests/HeuristicLab.Tests.csproj b/HeuristicLab.Tests/HeuristicLab.Tests.csproj index 0ca1124fb7..98885278e7 100644 --- a/HeuristicLab.Tests/HeuristicLab.Tests.csproj +++ b/HeuristicLab.Tests/HeuristicLab.Tests.csproj @@ -52,7 +52,6 @@ true GlobalSuppressions.cs prompt - MinimumRecommendedRules.ruleset false false false @@ -67,7 +66,6 @@ true GlobalSuppressions.cs prompt - MinimumRecommendedRules.ruleset false false false @@ -82,7 +80,6 @@ true GlobalSuppressions.cs prompt - MinimumRecommendedRules.ruleset false false false @@ -97,7 +94,6 @@ true GlobalSuppressions.cs prompt - MinimumRecommendedRules.ruleset false diff --git a/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj b/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj index 2842e03118..1acf5e6da5 100644 --- a/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj +++ b/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj @@ -27,7 +27,6 @@ true false false - AllRules.ruleset embedded diff --git a/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj b/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj index f6ea1b0a2f..35e95f73c2 100644 --- a/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj +++ b/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj @@ -26,7 +26,6 @@ bin\Debug\HeuristicLab.Visualization.ChartControlExtensions-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true @@ -35,7 +34,6 @@ $(SolutionDir)\bin\HeuristicLab.Visualization.ChartControlExtensions-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false @@ -44,7 +42,6 @@ bin\Debug\HeuristicLab.Visualization.ChartControlExtensions-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset true true @@ -53,7 +50,6 @@ $(SolutionDir)\bin\HeuristicLab.Visualization.ChartControlExtensions-3.3.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs - MinimumRecommendedRules.ruleset false false diff --git a/HeuristicLab/3.3/HeuristicLab-3.3.csproj b/HeuristicLab/3.3/HeuristicLab-3.3.csproj index 66a24b998c..01acffb514 100644 --- a/HeuristicLab/3.3/HeuristicLab-3.3.csproj +++ b/HeuristicLab/3.3/HeuristicLab-3.3.csproj @@ -33,7 +33,6 @@ true false false - AllRules.ruleset embedded From 34502f35d898cc5661ec7c1ac7e05ab25a5ce373 Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 22 Apr 2022 13:59:42 +0200 Subject: [PATCH 36/39] Removed DocumentationFile --- .../3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj | 3 --- .../3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj | 3 --- .../3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj | 3 --- .../3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj | 3 --- .../3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj | 3 --- .../3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj | 3 --- .../3.3/HeuristicLab.Analysis.Views-3.3.csproj | 3 --- HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj | 3 --- .../HeuristicLab.Clients.Access.Administration-3.3.csproj | 3 --- .../3.3/HeuristicLab.Clients.Access.Views-3.3.csproj | 3 --- .../3.3/HeuristicLab.Clients.Access-3.3.csproj | 3 --- .../3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj | 3 --- .../3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj | 3 --- .../3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj | 6 ------ ...HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj | 6 ------ .../3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj | 6 ------ .../3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj | 6 ------ ...euristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj | 6 ------ .../3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj | 6 ------ .../3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj | 3 --- .../3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj | 3 --- .../3.3/HeuristicLab.Clients.OKB-3.3.csproj | 3 --- .../3.4/HeuristicLab.CodeEditor-3.4.csproj | 3 --- .../3.3/HeuristicLab.Collections-3.3.csproj | 3 --- HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj | 3 --- .../3.3/HeuristicLab.Core.Views-3.3.csproj | 3 --- HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj | 4 ---- .../3.3/HeuristicLab.Data.Views-3.3.csproj | 3 --- HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj | 4 ---- .../3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj | 3 --- .../HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj | 3 --- .../HeuristicLab.Encodings.PermutationEncoding-3.3.csproj | 3 --- .../HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj | 3 --- HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj | 3 --- .../3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj | 3 --- HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj | 3 --- .../3.3/HeuristicLab.Operators.Programmable-3.3.csproj | 3 --- ...uristicLab.Operators.Views.GraphVisualization-3.3.csproj | 3 --- .../3.3/HeuristicLab.Operators.Views-3.3.csproj | 3 --- .../3.3/HeuristicLab.Operators-3.3.csproj | 4 ---- .../3.3/HeuristicLab.Optimization.Operators-3.3.csproj | 3 --- .../3.3/HeuristicLab.Optimization.Views-3.3.csproj | 3 --- .../3.3/HeuristicLab.Optimization-3.3.csproj | 3 --- .../3.3/HeuristicLab.Optimizer-3.3.csproj | 3 --- .../3.3/HeuristicLab.Parameters.Views-3.3.csproj | 3 --- .../3.3/HeuristicLab.Parameters-3.3.csproj | 3 --- .../3.3/HeuristicLab.Persistence.GUI-3.3.csproj | 3 --- .../3.3/HeuristicLab.Persistence-3.3.csproj | 3 --- .../3.3/HeuristicLab.PluginInfrastructure-3.3.csproj | 3 --- .../HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj | 1 - ...euristicLab.Problems.ExternalEvaluation.Views-3.4.csproj | 1 - .../3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj | 1 - ...HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj | 3 --- .../3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj | 4 ---- .../HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj | 3 --- .../3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj | 4 ---- HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj | 4 ---- .../3.3/HeuristicLab.Selection-3.3.csproj | 3 --- .../3.3/HeuristicLab.SequentialEngine-3.3.csproj | 3 --- .../3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj | 6 ------ .../3.3/HeuristicLab.Services.Access-3.3.csproj | 6 ------ .../3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj | 6 ------ .../HeuristicLab.Services.Hive.JanitorService-3.3.csproj | 6 ------ .../3.3/HeuristicLab.Services.Hive-3.3.csproj | 6 ------ .../3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj | 6 ------ .../3.3/HeuristicLab.Services.OKB-3.3.csproj | 6 ------ HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj | 3 --- HeuristicLab/3.3/HeuristicLab-3.3.csproj | 3 --- 68 files changed, 243 deletions(-) diff --git a/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj b/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj index 9032074f0d..220263acba 100644 --- a/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj +++ b/HeuristicLab.Algorithms.Benchmarks.Views/3.3/HeuristicLab.Algorithms.Benchmarks.Views-3.3.csproj @@ -14,20 +14,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj b/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj index 95028cfff3..62a5b5c24b 100644 --- a/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj +++ b/HeuristicLab.Algorithms.Benchmarks/3.3/HeuristicLab.Algorithms.Benchmarks-3.3.csproj @@ -14,20 +14,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj index 7700e36348..01c5833873 100644 --- a/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj @@ -34,20 +34,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj b/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj index c53035417a..d40409781e 100644 --- a/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj +++ b/HeuristicLab.Algorithms.GeneticAlgorithm/3.3/HeuristicLab.Algorithms.GeneticAlgorithm-3.3.csproj @@ -34,20 +34,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj b/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj index ad37a0993d..ad33c97d58 100644 --- a/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj +++ b/HeuristicLab.Algorithms.RAPGA/3.3/HeuristicLab.Algorithms.RAPGA-3.3.csproj @@ -16,20 +16,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj b/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj index 1dd8629131..f784fb2737 100644 --- a/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj +++ b/HeuristicLab.Analysis.Statistics.Views/3.3/HeuristicLab.Analysis.Statistics.Views-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj b/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj index 64ac3b4b60..ab306c2b73 100644 --- a/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj +++ b/HeuristicLab.Analysis.Views/3.3/HeuristicLab.Analysis.Views-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj b/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj index 2b9aa61047..31c818f147 100644 --- a/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj +++ b/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj b/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj index de14e863f8..c804451f5f 100644 --- a/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj +++ b/HeuristicLab.Clients.Access.Administration/3.3/HeuristicLab.Clients.Access.Administration-3.3.csproj @@ -31,20 +31,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj b/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj index 3fc872dbbc..ddb8013631 100644 --- a/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj +++ b/HeuristicLab.Clients.Access.Views/3.3/HeuristicLab.Clients.Access.Views-3.3.csproj @@ -15,20 +15,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj b/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj index 87162c3249..00e6ed6b96 100644 --- a/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj +++ b/HeuristicLab.Clients.Access/3.3/HeuristicLab.Clients.Access-3.3.csproj @@ -15,20 +15,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj b/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj index e8caa6fc90..fcc5c99f25 100644 --- a/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Administrator/3.3/HeuristicLab.Clients.Hive.Administrator-3.3.csproj @@ -15,20 +15,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj b/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj index ef23dd42fc..55560554f7 100644 --- a/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj +++ b/HeuristicLab.Clients.Hive.JobManager/3.3/HeuristicLab.Clients.Hive.JobManager-3.3.csproj @@ -15,20 +15,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj index 6d75f7f5b2..1b511d13c0 100644 --- a/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj @@ -33,8 +33,6 @@ $(SolutionDir)\bin\ TRACE prompt - - false @@ -49,8 +47,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x86 @@ -69,8 +65,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x64 diff --git a/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj index e7a22a9a8b..4541df4a2d 100644 --- a/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj @@ -32,8 +32,6 @@ $(SolutionDir)\bin\ TRACE prompt - - false @@ -48,8 +46,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x86 @@ -68,8 +64,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x64 diff --git a/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj index ea4adc01ab..ae8230e056 100644 --- a/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj @@ -33,8 +33,6 @@ $(SolutionDir)\bin\ TRACE prompt - - false @@ -49,8 +47,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x86 @@ -69,8 +65,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x64 diff --git a/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj index 62735bd7fc..0ee70e7fbd 100644 --- a/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj @@ -32,8 +32,6 @@ $(SolutionDir)\bin\ TRACE prompt - - false @@ -48,8 +46,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x86 @@ -68,8 +64,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x64 diff --git a/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj index a811447a9d..ad4d61c6d5 100644 --- a/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj @@ -47,8 +47,6 @@ $(SolutionDir)\bin\ TRACE prompt - - false @@ -63,8 +61,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x86 @@ -83,8 +79,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x64 diff --git a/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj b/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj index 392e6628d2..ffba1aff95 100644 --- a/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj @@ -32,8 +32,6 @@ $(SolutionDir)\bin\ TRACE prompt - - false @@ -48,8 +46,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x86 @@ -68,8 +64,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x64 diff --git a/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj b/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj index 878085fd04..beefe129f8 100644 --- a/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Views/3.3/HeuristicLab.Clients.Hive.Views-3.3.csproj @@ -15,20 +15,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj b/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj index 1be8df9f6e..6dbb737e12 100644 --- a/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj +++ b/HeuristicLab.Clients.OKB.Views/3.3/HeuristicLab.Clients.OKB.Views-3.3.csproj @@ -15,20 +15,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj b/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj index b589e333ae..baf206093c 100644 --- a/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj +++ b/HeuristicLab.Clients.OKB/3.3/HeuristicLab.Clients.OKB-3.3.csproj @@ -15,20 +15,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj b/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj index b5552dee3b..6547bd64ba 100644 --- a/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj +++ b/HeuristicLab.CodeEditor/3.4/HeuristicLab.CodeEditor-3.4.csproj @@ -13,21 +13,18 @@ embedded - embedded embedded - embedded embedded - true diff --git a/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj b/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj index 15aaf84c21..bc77aa8957 100644 --- a/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj +++ b/HeuristicLab.Collections/3.3/HeuristicLab.Collections-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj b/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj index d9a62dd2ce..f1225abb38 100644 --- a/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj +++ b/HeuristicLab.Common/3.3/HeuristicLab.Common-3.3.csproj @@ -33,21 +33,18 @@ embedded - embedded embedded - embedded embedded - diff --git a/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj b/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj index 14e93aa3fc..53d6394799 100644 --- a/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj +++ b/HeuristicLab.Core.Views/3.3/HeuristicLab.Core.Views-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj b/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj index bc8361bbfe..d4058081a2 100644 --- a/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj +++ b/HeuristicLab.Core/3.3/HeuristicLab.Core-3.3.csproj @@ -30,24 +30,20 @@ embedded - embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj b/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj index 5ae441b0cf..cd12f59300 100644 --- a/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj +++ b/HeuristicLab.Data.Views/3.3/HeuristicLab.Data.Views-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj b/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj index 2807ee49c0..92af66a5ed 100644 --- a/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj +++ b/HeuristicLab.Data/3.3/HeuristicLab.Data-3.3.csproj @@ -30,24 +30,20 @@ embedded - embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj b/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj index f03ee41edc..ab921c1fd1 100644 --- a/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj +++ b/HeuristicLab.DataPreprocessing.Views/3.4/HeuristicLab.DataPreprocessing.Views-3.4.csproj @@ -13,20 +13,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj b/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj index ead6f478aa..012c6b1e08 100644 --- a/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj +++ b/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/HeuristicLab.Encodings.LinearLinkageEncoding-3.4.csproj @@ -13,20 +13,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj b/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj index 8bb944d7c3..926a14e2bb 100644 --- a/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.PermutationEncoding/3.3/HeuristicLab.Encodings.PermutationEncoding-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj b/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj index 0337d15c20..0443154eee 100644 --- a/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj b/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj index ba2d13983d..0c2ae4660a 100644 --- a/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj +++ b/HeuristicLab.Hive/3.3/HeuristicLab.Hive-3.3.csproj @@ -15,20 +15,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj b/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj index e4557c187b..2cb5b3ef39 100644 --- a/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj +++ b/HeuristicLab.MainForm.WindowsForms/3.3/HeuristicLab.MainForm.WindowsForms-3.3.csproj @@ -33,21 +33,18 @@ embedded - embedded embedded - embedded embedded - diff --git a/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj b/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj index 88497c1555..2138d83832 100644 --- a/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj +++ b/HeuristicLab.MainForm/3.3/HeuristicLab.MainForm-3.3.csproj @@ -33,21 +33,18 @@ embedded - embedded embedded - embedded embedded - diff --git a/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj b/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj index 2da6e180bd..afb66031fc 100644 --- a/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj +++ b/HeuristicLab.Operators.Programmable/3.3/HeuristicLab.Operators.Programmable-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj b/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj index 67c6498b21..3fe0bf0920 100644 --- a/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj +++ b/HeuristicLab.Operators.Views.GraphVisualization/3.3/HeuristicLab.Operators.Views.GraphVisualization-3.3.csproj @@ -33,21 +33,18 @@ embedded - embedded embedded - embedded embedded - diff --git a/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj b/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj index 7a76865bf0..6cdf1331d1 100644 --- a/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj +++ b/HeuristicLab.Operators.Views/3.3/HeuristicLab.Operators.Views-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj b/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj index a063ec76c1..518674c3ff 100644 --- a/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj +++ b/HeuristicLab.Operators/3.3/HeuristicLab.Operators-3.3.csproj @@ -30,24 +30,20 @@ embedded - embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj b/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj index 8c9bf22e68..0de32b5c72 100644 --- a/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj +++ b/HeuristicLab.Optimization.Operators/3.3/HeuristicLab.Optimization.Operators-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj b/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj index 2175a23623..18a3c581fd 100644 --- a/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj +++ b/HeuristicLab.Optimization.Views/3.3/HeuristicLab.Optimization.Views-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj b/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj index 0d0a188b1f..4f5aab9456 100644 --- a/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj +++ b/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj b/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj index 55d640d5f2..e24c599b8d 100644 --- a/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj +++ b/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj b/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj index a4a2d5ae8a..64e9d73cf4 100644 --- a/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj +++ b/HeuristicLab.Parameters.Views/3.3/HeuristicLab.Parameters.Views-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj b/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj index 7c4086f797..f30e76a58c 100644 --- a/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj +++ b/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj b/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj index f5bd1c27f9..1a85121d8b 100644 --- a/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj +++ b/HeuristicLab.Persistence.GUI/3.3/HeuristicLab.Persistence.GUI-3.3.csproj @@ -32,21 +32,18 @@ embedded - embedded embedded - embedded embedded - true diff --git a/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj b/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj index dc4b4ad81c..ac9ba87c19 100644 --- a/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj +++ b/HeuristicLab.Persistence/3.3/HeuristicLab.Persistence-3.3.csproj @@ -35,21 +35,18 @@ embedded - embedded embedded - embedded embedded - diff --git a/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj b/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj index 3361f2a396..7763b38d67 100644 --- a/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj +++ b/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj @@ -34,20 +34,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj b/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj index 625e1dc64f..5b0b85d826 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj @@ -45,7 +45,6 @@ embedded - diff --git a/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj b/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj index 816857472a..2bd11184bd 100644 --- a/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation.Views/3.4/HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj @@ -45,7 +45,6 @@ embedded - diff --git a/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj b/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj index b4c626eaf7..2376c3b117 100644 --- a/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj +++ b/HeuristicLab.Problems.ExternalEvaluation/3.4/HeuristicLab.Problems.ExternalEvaluation-3.4.csproj @@ -39,7 +39,6 @@ embedded - embedded diff --git a/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj b/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj index 1be0843089..d9b0e8ac93 100644 --- a/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj +++ b/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj b/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj index f34464b8c5..3ff8a2b3dd 100644 --- a/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj +++ b/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj @@ -30,24 +30,20 @@ embedded - embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj b/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj index 9f81eb889f..411e20e726 100644 --- a/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj +++ b/HeuristicLab.Problems.VehicleRouting.Views/3.4/HeuristicLab.Problems.VehicleRouting.Views-3.4.csproj @@ -34,20 +34,17 @@ embedded - embedded - embedded embedded - bin\$(Platform)\$(Configuration)\HeuristicLab.Problems.VehicleRouting.Views-3.4.xml embedded diff --git a/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj b/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj index 9a2fcf707f..807ffbc667 100644 --- a/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj +++ b/HeuristicLab.Problems.VehicleRouting/3.4/HeuristicLab.Problems.VehicleRouting-3.4.csproj @@ -31,24 +31,20 @@ embedded - embedded - embedded - embedded embedded - bin\$(Platform)\$(Configuration)\HeuristicLab.Routing.TSP-3.3.XML embedded diff --git a/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj b/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj index 3714474ce1..67b282beee 100644 --- a/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj +++ b/HeuristicLab.Random/3.3/HeuristicLab.Random-3.3.csproj @@ -30,24 +30,20 @@ embedded - embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj b/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj index 322e42a81c..6a72fae817 100644 --- a/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj +++ b/HeuristicLab.Selection/3.3/HeuristicLab.Selection-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj b/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj index bb93cb4617..5a960d4724 100644 --- a/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj +++ b/HeuristicLab.SequentialEngine/3.3/HeuristicLab.SequentialEngine-3.3.csproj @@ -33,20 +33,17 @@ embedded - embedded - embedded embedded - embedded diff --git a/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj b/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj index 1ad4b7eadf..8e9f52115d 100644 --- a/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj @@ -32,8 +32,6 @@ $(SolutionDir)\bin\ TRACE prompt - - false @@ -48,8 +46,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x86 @@ -68,8 +64,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x64 diff --git a/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj b/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj index 8938cc5f23..ce5ea7ce6f 100644 --- a/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj +++ b/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj @@ -34,8 +34,6 @@ $(SolutionDir)\bin\ TRACE prompt - - false @@ -50,8 +48,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x86 @@ -70,8 +66,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x64 diff --git a/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj b/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj index 60a1152c50..d0483214e2 100644 --- a/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj @@ -32,8 +32,6 @@ $(SolutionDir)\bin\ TRACE prompt - - false @@ -48,8 +46,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x86 @@ -68,8 +64,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x64 diff --git a/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj b/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj index 1e1349099e..1ed759cd23 100644 --- a/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj +++ b/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj @@ -33,8 +33,6 @@ $(SolutionDir)\bin\ TRACE prompt - - false @@ -49,8 +47,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x86 @@ -69,8 +65,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x64 diff --git a/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj b/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj index d03b5db912..18ec12ab64 100644 --- a/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj +++ b/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj @@ -33,8 +33,6 @@ $(SolutionDir)\bin\ TRACE prompt - - false @@ -49,8 +47,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x86 @@ -69,8 +65,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x64 diff --git a/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj b/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj index 1493bdde4c..f85bd64360 100644 --- a/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj @@ -51,8 +51,6 @@ $(SolutionDir)\bin\ TRACE prompt - - false @@ -67,8 +65,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x86 @@ -87,8 +83,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x64 diff --git a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj index d6569f41e1..c77e742d68 100644 --- a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj +++ b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj @@ -34,8 +34,6 @@ $(SolutionDir)\bin\ TRACE prompt - - false @@ -49,8 +47,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x86 @@ -67,8 +63,6 @@ $(SolutionDir)\bin\ TRACE - - true embedded x64 diff --git a/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj b/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj index 1acf5e6da5..9d847b6c50 100644 --- a/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj +++ b/HeuristicLab.Tracing/3.3/HeuristicLab.Tracing-3.3.csproj @@ -33,21 +33,18 @@ embedded - embedded embedded - embedded embedded - diff --git a/HeuristicLab/3.3/HeuristicLab-3.3.csproj b/HeuristicLab/3.3/HeuristicLab-3.3.csproj index 01acffb514..4cf9cd4a82 100644 --- a/HeuristicLab/3.3/HeuristicLab-3.3.csproj +++ b/HeuristicLab/3.3/HeuristicLab-3.3.csproj @@ -39,21 +39,18 @@ embedded - embedded embedded - embedded embedded - app.manifest From b881651387e157752fc8bfc6c2e2d861b6e7e0a1 Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 22 Apr 2022 14:04:07 +0200 Subject: [PATCH 37/39] Also applied csproj changes to ExtLibs (embedded, WarningLevel, CodeAnalysisRuleSet, DocumentationFile) --- .../3.15.0/ALGLIB-3.15.0/ALGLIB-3.15.0.csproj | 8 ++---- .../HeuristicLab.ALGLIB-3.15.0.csproj | 8 ++---- .../3.17.0/ALGLIB-3.17.0/ALGLIB-3.17.0.csproj | 8 ++---- .../HeuristicLab.ALGLIB-3.17.0.csproj | 8 ++---- .../3.7.0/ALGLIB-3.7.0/ALGLIB-3.7.0.csproj | 20 +++++--------- .../HeuristicLab.ALGLIB-3.7.0.csproj | 20 +++++--------- .../1.0.0/HeuristicLab.Attic.csproj | 8 ++---- .../1.0/AutoDiff-1.0/AutoDiff-1.0.csproj | 20 +++++--------- .../HeuristicLab.AutoDiff-1.0.csproj | 20 +++++--------- .../ICSharpCode.AvalonEdit-5.0.1.csproj | 20 +++++--------- .../HeuristicLab.AvalonEdit-5.0.1.csproj | 20 +++++--------- .../HeuristicLab.Cecil-0.9.5.csproj | 20 +++++--------- .../Mono.Cecil-0.9.5/Mono.Cecil-0.9.5.csproj | 20 +++++--------- .../1.0/HeuristicLab.DayView-1.0.csproj | 20 +++++--------- .../DotNetScilab-1.0/DotNetScilab-1.0.csproj | 14 +++++----- .../DotNetScilab-1.0Example/cs_example.csproj | 14 +++++----- .../HeuristicLab.DotNetScilab-1.0.csproj | 18 +++++-------- .../4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj | 24 +++++------------ .../HeuristicLab.EPPlus-4.0.3.csproj | 18 +++++-------- .../1.12/HeuristicLab.GeoIP.csproj | 26 +++++-------------- .../HeuristicLab.IGraph-0.8.0-pre.csproj | 6 ++--- .../HeuristicLab.LibSVM-3.12.csproj | 26 +++++-------------- .../3.12/LibSVM-3.12/LibSVM-3.12.csproj | 22 +++++----------- .../HeuristicLab.MathJax-2.7.5.csproj | 26 +++++-------------- .../HeuristicLab.MatlabConnector-1.0.csproj | 18 +++++-------- .../HeuristicLab.NRefactory-5.5.0.csproj | 20 +++++--------- .../ICSharpCode.NRefactory-5.5.0.csproj | 20 +++++--------- ...ICSharpCode.NRefactory.CSharp-5.5.0.csproj | 20 +++++--------- .../ICSharpCode.NRefactory.Cecil-5.5.0.csproj | 20 +++++--------- .../ICSharpCode.NRefactory.Xml-5.5.0.csproj | 20 +++++--------- .../HeuristicLab.NativeInterpreter-0.1.csproj | 6 ++--- .../HeuristicLab.Netron-3.0.2672.12446.csproj | 20 +++++--------- ...ron.Diagramming.Core-3.0.2672.12446.csproj | 20 +++----------- .../HeuristicLab.OrTools-7.0.0.csproj | 19 +++++--------- .../3.6.1/HeuristicLab.Protobuf.csproj | 8 ++---- .../HeuristicLab.ProtobufCS-2.4.1.473.csproj | 20 +++++--------- .../ProtocolBuffers-2.4.1.473.csproj | 22 +++++----------- .../ProtocolBuffersLite.csproj | 8 ++---- .../HeuristicLab.SimSharp-3.3.2.csproj | 14 +++++----- .../SimSharp-3.3.2/SimSharp-3.3.2.csproj | 1 - .../HeuristicLab.WinFormsUI-2.7.0.csproj | 20 +++++--------- .../WinFormsUI-2.7.0/WinFormsUI-2.7.0.csproj | 20 +++++--------- 42 files changed, 207 insertions(+), 503 deletions(-) diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/ALGLIB-3.15.0/ALGLIB-3.15.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/ALGLIB-3.15.0/ALGLIB-3.15.0.csproj index 726294a4be..1369beda8b 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/ALGLIB-3.15.0/ALGLIB-3.15.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/ALGLIB-3.15.0/ALGLIB-3.15.0.csproj @@ -38,23 +38,19 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/HeuristicLab.ALGLIB-3.15.0/HeuristicLab.ALGLIB-3.15.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/HeuristicLab.ALGLIB-3.15.0/HeuristicLab.ALGLIB-3.15.0.csproj index 2bc429326b..fe407a3b70 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/HeuristicLab.ALGLIB-3.15.0/HeuristicLab.ALGLIB-3.15.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/HeuristicLab.ALGLIB-3.15.0/HeuristicLab.ALGLIB-3.15.0.csproj @@ -38,23 +38,19 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/ALGLIB-3.17.0/ALGLIB-3.17.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/ALGLIB-3.17.0/ALGLIB-3.17.0.csproj index 272606d416..254d0af9ba 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/ALGLIB-3.17.0/ALGLIB-3.17.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/ALGLIB-3.17.0/ALGLIB-3.17.0.csproj @@ -38,23 +38,19 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/HeuristicLab.ALGLIB-3.17.0/HeuristicLab.ALGLIB-3.17.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/HeuristicLab.ALGLIB-3.17.0/HeuristicLab.ALGLIB-3.17.0.csproj index 98007b9d57..2e38456f69 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/HeuristicLab.ALGLIB-3.17.0/HeuristicLab.ALGLIB-3.17.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/HeuristicLab.ALGLIB-3.17.0/HeuristicLab.ALGLIB-3.17.0.csproj @@ -38,23 +38,19 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/ALGLIB-3.7.0/ALGLIB-3.7.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/ALGLIB-3.7.0/ALGLIB-3.7.0.csproj index c0ae7eab50..24972c976f 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/ALGLIB-3.7.0/ALGLIB-3.7.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/ALGLIB-3.7.0/ALGLIB-3.7.0.csproj @@ -38,63 +38,55 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/HeuristicLab.ALGLIB-3.7.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/HeuristicLab.ALGLIB-3.7.0.csproj index bd94098954..580f8069d7 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/HeuristicLab.ALGLIB-3.7.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/HeuristicLab.ALGLIB-3.7.0.csproj @@ -38,63 +38,55 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.Attic/1.0.0/HeuristicLab.Attic.csproj b/HeuristicLab.ExtLibs/HeuristicLab.Attic/1.0.0/HeuristicLab.Attic.csproj index 57c05079a9..4dc4c3726f 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.Attic/1.0.0/HeuristicLab.Attic.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.Attic/1.0.0/HeuristicLab.Attic.csproj @@ -15,23 +15,19 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/AutoDiff-1.0/AutoDiff-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/AutoDiff-1.0/AutoDiff-1.0.csproj index 65fdc33788..0a4756778e 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/AutoDiff-1.0/AutoDiff-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/AutoDiff-1.0/AutoDiff-1.0.csproj @@ -25,12 +25,11 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 True False False @@ -56,14 +55,11 @@ false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - - False False True @@ -98,13 +94,12 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 bin\Debug\AutoDiff.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs prompt - MinimumRecommendedRules.ruleset true true false @@ -114,13 +109,12 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 bin\Release\AutoDiff.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs prompt - MinimumRecommendedRules.ruleset false false false @@ -129,26 +123,24 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 bin\Debug\AutoDiff.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs prompt - MinimumRecommendedRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 bin\Release\AutoDiff.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs prompt - MinimumRecommendedRules.ruleset false false false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/HeuristicLab.AutoDiff-1.0/HeuristicLab.AutoDiff-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/HeuristicLab.AutoDiff-1.0/HeuristicLab.AutoDiff-1.0.csproj index e0d8a580a8..72372c7247 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/HeuristicLab.AutoDiff-1.0/HeuristicLab.AutoDiff-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/HeuristicLab.AutoDiff-1.0/HeuristicLab.AutoDiff-1.0.csproj @@ -38,63 +38,55 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/AvalonEdit-5.0.1/ICSharpCode.AvalonEdit-5.0.1.csproj b/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/AvalonEdit-5.0.1/ICSharpCode.AvalonEdit-5.0.1.csproj index c5458669a2..df2c71648d 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/AvalonEdit-5.0.1/ICSharpCode.AvalonEdit-5.0.1.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/AvalonEdit-5.0.1/ICSharpCode.AvalonEdit-5.0.1.csproj @@ -3,63 +3,55 @@ true - full + embedded false $(SolutionDir)\bin\ TRACE;DEBUG;DOTNET4;NREFACTORY prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE;DOTNET4;NREFACTORY prompt - 4 - AllRules.ruleset false true $(SolutionDir)\bin\ TRACE;DEBUG;DOTNET4;NREFACTORY - full + embedded x86 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE;DOTNET4;NREFACTORY true - pdbonly + embedded x86 prompt - AllRules.ruleset false true $(SolutionDir)\bin\ TRACE;DEBUG;DOTNET4;NREFACTORY - full + embedded x64 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE;DOTNET4;NREFACTORY true - pdbonly + embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/HeuristicLab.AvalonEdit-5.0.1/HeuristicLab.AvalonEdit-5.0.1.csproj b/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/HeuristicLab.AvalonEdit-5.0.1/HeuristicLab.AvalonEdit-5.0.1.csproj index fbe3c9c537..4c41833946 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/HeuristicLab.AvalonEdit-5.0.1/HeuristicLab.AvalonEdit-5.0.1.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/HeuristicLab.AvalonEdit-5.0.1/HeuristicLab.AvalonEdit-5.0.1.csproj @@ -14,63 +14,55 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/HeuristicLab.Cecil-0.9.5/HeuristicLab.Cecil-0.9.5.csproj b/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/HeuristicLab.Cecil-0.9.5/HeuristicLab.Cecil-0.9.5.csproj index 4f3447ec97..2e2814fba3 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/HeuristicLab.Cecil-0.9.5/HeuristicLab.Cecil-0.9.5.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/HeuristicLab.Cecil-0.9.5/HeuristicLab.Cecil-0.9.5.csproj @@ -14,63 +14,55 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/Mono.Cecil-0.9.5/Mono.Cecil-0.9.5.csproj b/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/Mono.Cecil-0.9.5/Mono.Cecil-0.9.5.csproj index e47eb3e85b..3bdb9571a4 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/Mono.Cecil-0.9.5/Mono.Cecil-0.9.5.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/Mono.Cecil-0.9.5/Mono.Cecil-0.9.5.csproj @@ -14,24 +14,20 @@ true - full + embedded false $(SolutionDir)\bin\ TRACE;DEBUG;NET_4_0;CECIL prompt - 4 - AllRules.ruleset false 0649 - pdbonly + embedded true $(SolutionDir)\bin\ TRACE;NET_4_0;CECIL prompt - 4 - AllRules.ruleset false 0649 @@ -39,10 +35,9 @@ true $(SolutionDir)\bin\ TRACE;DEBUG;NET_4_0;CECIL - full + embedded x86 prompt - AllRules.ruleset false 0649 @@ -50,10 +45,9 @@ $(SolutionDir)\bin\ TRACE;NET_4_0;CECIL true - pdbonly + embedded x86 prompt - AllRules.ruleset false 0649 @@ -61,10 +55,9 @@ true $(SolutionDir)\bin\ TRACE;DEBUG;NET_4_0;CECIL - full + embedded x64 prompt - AllRules.ruleset false 0649 @@ -72,10 +65,9 @@ $(SolutionDir)\bin\ TRACE;NET_4_0;CECIL true - pdbonly + embedded x64 prompt - AllRules.ruleset false 0649 diff --git a/HeuristicLab.ExtLibs/HeuristicLab.DayView/1.0/HeuristicLab.DayView-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.DayView/1.0/HeuristicLab.DayView-1.0.csproj index d56610cd0e..417c1b082c 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.DayView/1.0/HeuristicLab.DayView-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.DayView/1.0/HeuristicLab.DayView-1.0.csproj @@ -38,63 +38,55 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0/DotNetScilab-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0/DotNetScilab-1.0.csproj index 59ced7961e..4b03e40297 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0/DotNetScilab-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0/DotNetScilab-1.0.csproj @@ -21,23 +21,21 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 true false false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 true false false @@ -48,7 +46,7 @@ DEBUG;TRACE true false - full + embedded x64 prompt false @@ -59,7 +57,7 @@ true true false - pdbonly + embedded x64 prompt false @@ -70,7 +68,7 @@ DEBUG;TRACE true false - full + embedded x86 prompt false @@ -81,7 +79,7 @@ true true false - pdbonly + embedded x86 prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0Example/cs_example.csproj b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0Example/cs_example.csproj index 4d2523b8c4..997f4b79e0 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0Example/cs_example.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0Example/cs_example.csproj @@ -21,21 +21,19 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 true - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 true @@ -43,7 +41,7 @@ $(SolutionDir)\bin\ DEBUG;TRACE true - full + embedded x64 prompt @@ -52,7 +50,7 @@ TRACE true true - pdbonly + embedded x64 prompt @@ -61,7 +59,7 @@ $(SolutionDir)\bin\ DEBUG;TRACE true - full + embedded x86 prompt @@ -70,7 +68,7 @@ TRACE true true - pdbonly + embedded x86 prompt diff --git a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj index af34fbd234..05c5002b67 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj @@ -15,21 +15,19 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 false @@ -42,40 +40,36 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - MinimumRecommendedRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - MinimumRecommendedRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - MinimumRecommendedRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - MinimumRecommendedRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj b/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj index 21fe460401..ed711476af 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj @@ -46,30 +46,22 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - - - AllRules.ruleset AnyCPU false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - - - AllRules.ruleset AnyCPU false @@ -77,37 +69,33 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - AllRules.ruleset $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - AllRules.ruleset true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - AllRules.ruleset $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - AllRules.ruleset diff --git a/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/HeuristicLab.EPPlus-4.0.3.csproj b/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/HeuristicLab.EPPlus-4.0.3.csproj index b9fec930b6..90c137c247 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/HeuristicLab.EPPlus-4.0.3.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/HeuristicLab.EPPlus-4.0.3.csproj @@ -15,21 +15,19 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 false @@ -42,40 +40,36 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - MinimumRecommendedRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - MinimumRecommendedRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - MinimumRecommendedRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - MinimumRecommendedRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/HeuristicLab.GeoIP.csproj b/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/HeuristicLab.GeoIP.csproj index 7adcb66b70..e9e7ab704e 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/HeuristicLab.GeoIP.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/HeuristicLab.GeoIP.csproj @@ -16,69 +16,55 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - - - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE - - true - pdbonly + embedded x86 prompt - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE - - true - pdbonly + embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/HeuristicLab.IGraph-0.8.0-pre.csproj b/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/HeuristicLab.IGraph-0.8.0-pre.csproj index 0cc6e9ee22..149745fd9c 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/HeuristicLab.IGraph-0.8.0-pre.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/HeuristicLab.IGraph-0.8.0-pre.csproj @@ -14,21 +14,19 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 true - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 true diff --git a/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/HeuristicLab.LibSVM-3.12/HeuristicLab.LibSVM-3.12.csproj b/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/HeuristicLab.LibSVM-3.12/HeuristicLab.LibSVM-3.12.csproj index 44ef9b7a1b..719143ba70 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/HeuristicLab.LibSVM-3.12/HeuristicLab.LibSVM-3.12.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/HeuristicLab.LibSVM-3.12/HeuristicLab.LibSVM-3.12.csproj @@ -38,69 +38,55 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - - - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE - - true - pdbonly + embedded x64 prompt - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE - - true - pdbonly + embedded x86 prompt - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/LibSVM-3.12/LibSVM-3.12.csproj b/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/LibSVM-3.12/LibSVM-3.12.csproj index 6e777ce23c..41b921b011 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/LibSVM-3.12/LibSVM-3.12.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/LibSVM-3.12/LibSVM-3.12.csproj @@ -38,65 +38,55 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - - - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.7.5/HeuristicLab.MathJax-2.7.5/HeuristicLab.MathJax-2.7.5.csproj b/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.7.5/HeuristicLab.MathJax-2.7.5/HeuristicLab.MathJax-2.7.5.csproj index b9a9665244..10edbd81f2 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.7.5/HeuristicLab.MathJax-2.7.5/HeuristicLab.MathJax-2.7.5.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.7.5/HeuristicLab.MathJax-2.7.5/HeuristicLab.MathJax-2.7.5.csproj @@ -38,69 +38,55 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - - - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE - - true - pdbonly + embedded x64 prompt - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE - - true - pdbonly + embedded x86 prompt - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj index a2d07319f3..40b2784d8c 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj @@ -15,21 +15,19 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 false @@ -42,40 +40,36 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - MinimumRecommendedRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - MinimumRecommendedRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - MinimumRecommendedRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - MinimumRecommendedRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/HeuristicLab.NRefactory-5.5.0/HeuristicLab.NRefactory-5.5.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/HeuristicLab.NRefactory-5.5.0/HeuristicLab.NRefactory-5.5.0.csproj index 602f62ed58..2915c09e5e 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/HeuristicLab.NRefactory-5.5.0/HeuristicLab.NRefactory-5.5.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/HeuristicLab.NRefactory-5.5.0/HeuristicLab.NRefactory-5.5.0.csproj @@ -14,63 +14,55 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory-5.5.0/ICSharpCode.NRefactory-5.5.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory-5.5.0/ICSharpCode.NRefactory-5.5.0.csproj index 5baef4c3b0..2d0ff45981 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory-5.5.0/ICSharpCode.NRefactory-5.5.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory-5.5.0/ICSharpCode.NRefactory-5.5.0.csproj @@ -3,63 +3,55 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.CSharp-5.5.0/ICSharpCode.NRefactory.CSharp-5.5.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.CSharp-5.5.0/ICSharpCode.NRefactory.CSharp-5.5.0.csproj index c84e6243e0..7a6191c5bc 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.CSharp-5.5.0/ICSharpCode.NRefactory.CSharp-5.5.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.CSharp-5.5.0/ICSharpCode.NRefactory.CSharp-5.5.0.csproj @@ -14,24 +14,20 @@ true - full + embedded false $(SolutionDir)\bin\ TRACE;DEBUG;FULL_AST prompt - 4 - AllRules.ruleset false true - pdbonly + embedded true $(SolutionDir)\bin\ TRACE;FULL_AST prompt - 4 - AllRules.ruleset false true @@ -39,10 +35,9 @@ true $(SolutionDir)\bin\ TRACE;DEBUG;FULL_AST - full + embedded x86 prompt - AllRules.ruleset false true @@ -50,10 +45,9 @@ $(SolutionDir)\bin\ TRACE;FULL_AST true - pdbonly + embedded x86 prompt - AllRules.ruleset false true @@ -61,10 +55,9 @@ true $(SolutionDir)\bin\ TRACE;DEBUG;FULL_AST - full + embedded x64 prompt - AllRules.ruleset false true @@ -72,10 +65,9 @@ $(SolutionDir)\bin\ TRACE;FULL_AST true - pdbonly + embedded x64 prompt - AllRules.ruleset false true diff --git a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.Cecil-5.5.0/ICSharpCode.NRefactory.Cecil-5.5.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.Cecil-5.5.0/ICSharpCode.NRefactory.Cecil-5.5.0.csproj index e0a7f96bf6..259d071c87 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.Cecil-5.5.0/ICSharpCode.NRefactory.Cecil-5.5.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.Cecil-5.5.0/ICSharpCode.NRefactory.Cecil-5.5.0.csproj @@ -14,63 +14,55 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.Xml-5.5.0/ICSharpCode.NRefactory.Xml-5.5.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.Xml-5.5.0/ICSharpCode.NRefactory.Xml-5.5.0.csproj index be466ed5ea..989ef36954 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.Xml-5.5.0/ICSharpCode.NRefactory.Xml-5.5.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.Xml-5.5.0/ICSharpCode.NRefactory.Xml-5.5.0.csproj @@ -14,24 +14,20 @@ true - full + embedded false $(SolutionDir)\bin\ TRACE;DEBUG prompt - 4 - AllRules.ruleset false true - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false true @@ -39,10 +35,9 @@ true $(SolutionDir)\bin\ TRACE;DEBUG - full + embedded x86 prompt - AllRules.ruleset false true @@ -50,10 +45,9 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - AllRules.ruleset false true @@ -61,10 +55,9 @@ true $(SolutionDir)\bin\ TRACE;DEBUG - full + embedded x64 prompt - AllRules.ruleset false true @@ -72,10 +65,9 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - AllRules.ruleset false true diff --git a/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/HeuristicLab.NativeInterpreter-0.1/HeuristicLab.NativeInterpreter-0.1.csproj b/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/HeuristicLab.NativeInterpreter-0.1/HeuristicLab.NativeInterpreter-0.1.csproj index 88d37bbc54..8c112742ba 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/HeuristicLab.NativeInterpreter-0.1/HeuristicLab.NativeInterpreter-0.1.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/HeuristicLab.NativeInterpreter-0.1/HeuristicLab.NativeInterpreter-0.1.csproj @@ -16,20 +16,18 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 true diff --git a/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446.csproj b/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446.csproj index e278483273..a45696b26d 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446.csproj @@ -38,63 +38,55 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446.csproj b/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446.csproj index 0cd7f384f5..fa1a39055a 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446.csproj @@ -54,8 +54,6 @@ DEBUG;TRACE - - true 4096 false @@ -65,14 +63,12 @@ false false false - 4 - full + embedded prompt Auto false - Migrated rules for Netron.Diagramming.Core-3.0.2672.12446.ruleset false @@ -83,8 +79,6 @@ TRACE - - false 4096 false @@ -94,12 +88,10 @@ false false false - 4 none prompt - Migrated rules for Netron.Diagramming.Core-3.0.2672.12446 (2).ruleset false @@ -108,16 +100,13 @@ DEBUG;TRACE 285212672 true - - 4096 - full + embedded x86 Auto prompt - AllRules.ruleset false @@ -130,7 +119,6 @@ prompt - Migrated rules for Netron.Diagramming.Core-3.0.2672.12446 (2).ruleset false @@ -140,13 +128,12 @@ 285212672 true 4096 - full + embedded x64 Auto prompt - Migrated rules for Netron.Diagramming.Core-3.0.2672.12446.ruleset false @@ -159,7 +146,6 @@ prompt - Migrated rules for Netron.Diagramming.Core-3.0.2672.12446 (2).ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.OrTools/7.0.0/HeuristicLab.OrTools-7.0.0/HeuristicLab.OrTools-7.0.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.OrTools/7.0.0/HeuristicLab.OrTools-7.0.0/HeuristicLab.OrTools-7.0.0.csproj index 61bade2b91..30912128b1 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.OrTools/7.0.0/HeuristicLab.OrTools-7.0.0/HeuristicLab.OrTools-7.0.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.OrTools/7.0.0/HeuristicLab.OrTools-7.0.0/HeuristicLab.OrTools-7.0.0.csproj @@ -16,22 +16,19 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 true - AllRules.ruleset - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 true @@ -45,40 +42,36 @@ $(SolutionDir)\bin\ DEBUG;TRACE true - full + embedded x64 prompt - MinimumRecommendedRules.ruleset $(SolutionDir)\bin\ TRACE true true - pdbonly + embedded x64 prompt - MinimumRecommendedRules.ruleset true $(SolutionDir)\bin\ DEBUG;TRACE true - full + embedded x86 prompt - MinimumRecommendedRules.ruleset $(SolutionDir)\bin\ TRACE true true - pdbonly + embedded x86 prompt - MinimumRecommendedRules.ruleset diff --git a/HeuristicLab.ExtLibs/HeuristicLab.Protobuf/3.6.1/HeuristicLab.Protobuf.csproj b/HeuristicLab.ExtLibs/HeuristicLab.Protobuf/3.6.1/HeuristicLab.Protobuf.csproj index 4c166c78d8..7787a238c4 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.Protobuf/3.6.1/HeuristicLab.Protobuf.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.Protobuf/3.6.1/HeuristicLab.Protobuf.csproj @@ -15,23 +15,19 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/HeuristicLab.ProtobufCS/HeuristicLab.ProtobufCS-2.4.1.473.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/HeuristicLab.ProtobufCS/HeuristicLab.ProtobufCS-2.4.1.473.csproj index e9c04901b1..1f25290fac 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/HeuristicLab.ProtobufCS/HeuristicLab.ProtobufCS-2.4.1.473.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/HeuristicLab.ProtobufCS/HeuristicLab.ProtobufCS-2.4.1.473.csproj @@ -38,63 +38,55 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj index b0cd8a8de1..4583933627 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj @@ -19,28 +19,22 @@ true - full + embedded false $(SolutionDir)\bin\ - - 1591, 1570, 1571, 1572, 1573, 1574 DEBUG;TRACE prompt - 4 true false - pdbonly + embedded true $(SolutionDir)\bin\ - - 1591, 1570, 1571, 1572, 1573, 1574 TRACE prompt - 4 true false @@ -50,13 +44,12 @@ DEBUG;TRACE 1591, 1570, 1571, 1572, 1573, 1574 true - full + embedded x64 bin\Debug\Google.ProtocolBuffers.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs prompt - MinimumRecommendedRules.ruleset true true false @@ -67,13 +60,12 @@ true 1591, 1570, 1571, 1572, 1573, 1574 true - pdbonly + embedded x64 bin\Release\Google.ProtocolBuffers-2.4.1.473.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs prompt - MinimumRecommendedRules.ruleset true true false @@ -84,13 +76,12 @@ DEBUG;TRACE 1591, 1570, 1571, 1572, 1573, 1574 true - full + embedded x86 bin\Debug\Google.ProtocolBuffers.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs prompt - MinimumRecommendedRules.ruleset true true false @@ -101,13 +92,12 @@ true 1591, 1570, 1571, 1572, 1573, 1574 true - pdbonly + embedded x86 bin\Release\Google.ProtocolBuffers-2.4.1.473.dll.CodeAnalysisLog.xml true GlobalSuppressions.cs prompt - MinimumRecommendedRules.ruleset true true false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffersLite.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffersLite.csproj index 5b691c61e8..06487f3c9d 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffersLite.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffersLite.csproj @@ -18,25 +18,21 @@ true - full + embedded false $(SolutionDir)\bin\ - $(OutputPath)\$(AssemblyName).xml 1591, 1570, 1571, 1572, 1573, 1574 DEBUG;TRACE;LITE prompt - 4 true - pdbonly + embedded true $(SolutionDir)\bin\ - $(OutputPath)\$(AssemblyName).xml 1591, 1570, 1571, 1572, 1573, 1574 TRACE;LITE prompt - 4 true diff --git a/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.3.2/HeuristicLab.SimSharp-3.3.2/HeuristicLab.SimSharp-3.3.2.csproj b/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.3.2/HeuristicLab.SimSharp-3.3.2/HeuristicLab.SimSharp-3.3.2.csproj index 81467bfe25..9fb84d2891 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.3.2/HeuristicLab.SimSharp-3.3.2/HeuristicLab.SimSharp-3.3.2.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.3.2/HeuristicLab.SimSharp-3.3.2/HeuristicLab.SimSharp-3.3.2.csproj @@ -15,26 +15,24 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 7.3 prompt @@ -43,7 +41,7 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 7.3 prompt @@ -52,7 +50,7 @@ true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 7.3 prompt @@ -61,7 +59,7 @@ $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 7.3 prompt diff --git a/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.3.2/SimSharp-3.3.2/SimSharp-3.3.2.csproj b/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.3.2/SimSharp-3.3.2/SimSharp-3.3.2.csproj index a0d5e6f8d8..11c33fe070 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.3.2/SimSharp-3.3.2/SimSharp-3.3.2.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.3.2/SimSharp-3.3.2/SimSharp-3.3.2.csproj @@ -44,7 +44,6 @@ Sim# allows modeling processes easily and with little boiler plate code. A proce - bin\$(Configuration)\$(TargetFramework)\SimSharp.xml https://github.com/abeham/SimSharp.git git discrete-event simulation diff --git a/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/HeuristicLab.WinFormsUI-2.7.0/HeuristicLab.WinFormsUI-2.7.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/HeuristicLab.WinFormsUI-2.7.0/HeuristicLab.WinFormsUI-2.7.0.csproj index 240544e430..ea42d17796 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/HeuristicLab.WinFormsUI-2.7.0/HeuristicLab.WinFormsUI-2.7.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/HeuristicLab.WinFormsUI-2.7.0/HeuristicLab.WinFormsUI-2.7.0.csproj @@ -38,63 +38,55 @@ true - full + embedded false $(SolutionDir)\bin\ DEBUG;TRACE prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x64 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - AllRules.ruleset false true $(SolutionDir)\bin\ DEBUG;TRACE - full + embedded x86 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - AllRules.ruleset false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/WinFormsUI-2.7.0/WinFormsUI-2.7.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/WinFormsUI-2.7.0/WinFormsUI-2.7.0.csproj index 44843beb49..727298ef37 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/WinFormsUI-2.7.0/WinFormsUI-2.7.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/WinFormsUI-2.7.0/WinFormsUI-2.7.0.csproj @@ -38,63 +38,55 @@ true - full + embedded false $(SolutionDir)\bin\ TRACE;DEBUG prompt - 4 - AllRules.ruleset false - pdbonly + embedded true $(SolutionDir)\bin\ TRACE prompt - 4 - AllRules.ruleset false true $(SolutionDir)\bin\ TRACE;DEBUG - full + embedded x86 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x86 prompt - AllRules.ruleset false true $(SolutionDir)\bin\ TRACE;DEBUG - full + embedded x64 prompt - AllRules.ruleset false $(SolutionDir)\bin\ TRACE true - pdbonly + embedded x64 prompt - AllRules.ruleset false From 2fe265a8e1c239785330ea6468b645a9684be08e Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 22 Apr 2022 14:16:23 +0200 Subject: [PATCH 38/39] Removed CodeAnalysis and ErrorReport --- ...b.Algorithms.DataAnalysis.Views-3.4.csproj | 20 ------------ ...cLab.Algorithms.GradientDescent-3.3.csproj | 20 ------------ .../HeuristicLab.Clients.Common-3.3.csproj | 20 ------------ ...isticLab.Clients.Hive.Slave.App-3.3.csproj | 6 ---- ...lients.Hive.Slave.ConsoleClient-3.3.csproj | 6 ---- ...Lab.Clients.Hive.Slave.TrayIcon-3.3.csproj | 6 ---- ...ticLab.Clients.Hive.Slave.Views-3.3.csproj | 6 ---- ...ients.Hive.Slave.WindowsService-3.3.csproj | 6 ---- ...HeuristicLab.Clients.Hive.Slave-3.3.csproj | 6 ---- .../3.3/HeuristicLab.Clients.Hive-3.3.csproj | 18 ----------- .../HeuristicLab.DebugEngine.Views-3.3.csproj | 22 ------------- .../3.3/HeuristicLab.DebugEngine-3.3.csproj | 11 ------- ...ncodings.ScheduleEncoding.Views-3.3.csproj | 20 ------------ ...cLab.Encodings.ScheduleEncoding-3.3.csproj | 22 ------------- .../3.15.0/ALGLIB-3.15.0/ALGLIB-3.15.0.csproj | 2 -- .../HeuristicLab.ALGLIB-3.15.0.csproj | 2 -- .../3.17.0/ALGLIB-3.17.0/ALGLIB-3.17.0.csproj | 2 -- .../HeuristicLab.ALGLIB-3.17.0.csproj | 2 -- .../3.7.0/ALGLIB-3.7.0/ALGLIB-3.7.0.csproj | 6 ---- .../HeuristicLab.ALGLIB-3.7.0.csproj | 6 ---- .../1.0.0/HeuristicLab.Attic.csproj | 2 -- .../1.0/AutoDiff-1.0/AutoDiff-1.0.csproj | 25 --------------- .../HeuristicLab.AutoDiff-1.0.csproj | 6 ---- .../ICSharpCode.AvalonEdit-5.0.1.csproj | 6 ---- .../HeuristicLab.AvalonEdit-5.0.1.csproj | 6 ---- .../HeuristicLab.Cecil-0.9.5.csproj | 6 ---- .../Mono.Cecil-0.9.5/Mono.Cecil-0.9.5.csproj | 6 ---- .../1.0/HeuristicLab.DayView-1.0.csproj | 6 ---- .../DotNetScilab-1.0/DotNetScilab-1.0.csproj | 6 ---- .../DotNetScilab-1.0Example/cs_example.csproj | 6 ---- .../HeuristicLab.DotNetScilab-1.0.csproj | 6 ---- .../4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj | 6 ---- .../HeuristicLab.EPPlus-4.0.3.csproj | 6 ---- .../1.12/HeuristicLab.GeoIP.csproj | 6 ---- .../HeuristicLab.IGraph-0.8.0-pre.csproj | 2 -- .../HeuristicLab.LibSVM-3.12.csproj | 6 ---- .../3.12/LibSVM-3.12/LibSVM-3.12.csproj | 6 ---- .../HeuristicLab.MathJax-2.7.5.csproj | 6 ---- .../HeuristicLab.MatlabConnector-1.0.csproj | 6 ---- .../HeuristicLab.NRefactory-5.5.0.csproj | 6 ---- .../ICSharpCode.NRefactory-5.5.0.csproj | 6 ---- ...ICSharpCode.NRefactory.CSharp-5.5.0.csproj | 6 ---- .../ICSharpCode.NRefactory.Cecil-5.5.0.csproj | 6 ---- .../ICSharpCode.NRefactory.Xml-5.5.0.csproj | 6 ---- .../HeuristicLab.NativeInterpreter-0.1.csproj | 2 -- .../HeuristicLab.Netron-3.0.2672.12446.csproj | 6 ---- ...ron.Diagramming.Core-3.0.2672.12446.csproj | 12 ------- .../HeuristicLab.OrTools-7.0.0.csproj | 6 ---- .../3.6.1/HeuristicLab.Protobuf.csproj | 2 -- .../HeuristicLab.ProtobufCS-2.4.1.473.csproj | 6 ---- .../ProtocolBuffers-2.4.1.473.csproj | 26 ---------------- .../ProtocolBuffersLite.csproj | 2 -- .../HeuristicLab.SimSharp-3.3.2.csproj | 6 ---- .../HeuristicLab.WinFormsUI-2.7.0.csproj | 6 ---- .../WinFormsUI-2.7.0/WinFormsUI-2.7.0.csproj | 6 ---- ...ab.Operators.Programmable.Views-3.3.csproj | 18 ----------- ....Views.GraphVisualization.Views-3.3.csproj | 20 ------------ .../HeuristicLab.ParallelEngine-3.3.csproj | 20 ------------ ....Problems.Instances.CordeauGQAP-3.3.csproj | 20 ------------ ...Problems.Instances.DataAnalysis-3.3.csproj | 16 ---------- ....Problems.Instances.ElloumiCTAP-3.3.csproj | 20 ------------ ...icLab.Problems.Instances.QAPLIB-3.3.csproj | 20 ------------ ...b.Problems.Instances.Scheduling-3.3.csproj | 20 ------------ ...Problems.Instances.TSPLIB.Views-3.3.csproj | 20 ------------ ...icLab.Problems.Instances.TSPLIB-3.3.csproj | 20 ------------ ....Instances.VehicleRouting.Views-3.4.csproj | 20 ------------ ...oblems.Instances.VehicleRouting-3.4.csproj | 20 ------------ ...ticLab.Problems.Instances.Views-3.3.csproj | 20 ------------ ...HeuristicLab.Problems.Instances-3.3.csproj | 23 -------------- ...Problems.LinearAssignment.Views-3.3.csproj | 20 ------------ ...icLab.Problems.LinearAssignment-3.3.csproj | 20 ------------ .../3.3/HeuristicLab.Problems.NK-3.3.csproj | 20 ------------ ....QuadraticAssignment.Algorithms-3.3.csproj | 20 ------------ ...blems.QuadraticAssignment.Views-3.3.csproj | 20 ------------ ...ab.Problems.QuadraticAssignment-3.3.csproj | 20 ------------ ...icLab.Problems.Scheduling.Views-3.3.csproj | 19 ------------ ...euristicLab.Problems.Scheduling-3.3.csproj | 18 ----------- ...cLab.Services.Access.DataAccess-3.3.csproj | 6 ---- .../HeuristicLab.Services.Access-3.3.csproj | 6 ---- ....Services.Deployment.DataAccess-3.3.csproj | 6 ---- ...euristicLab.Services.Deployment-3.3.csproj | 6 ---- ...icLab.Services.Deployment-3.3.Tests.csproj | 6 ---- ...ticLab.Services.Hive.DataAccess-3.3.csproj | 6 ---- ...ab.Services.Hive.JanitorService-3.3.csproj | 6 ---- .../3.3/HeuristicLab.Services.Hive-3.3.csproj | 6 ---- ...sticLab.Services.OKB.DataAccess-3.3.csproj | 6 ---- .../3.3/HeuristicLab.Services.OKB-3.3.csproj | 31 ------------------- ...Lab.Services.WebApp.Maintenance-3.3.csproj | 6 ---- ...cLab.Services.WebApp.Statistics-3.3.csproj | 6 ---- ...isticLab.Services.WebApp.Status-3.3.csproj | 6 ---- .../HeuristicLab.Services.WebApp-3.3.csproj | 6 ---- HeuristicLab.Tests/HeuristicLab.Tests.csproj | 25 --------------- ...ization.ChartControlsExtensions-3.3.csproj | 20 ------------ 93 files changed, 1032 deletions(-) diff --git a/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj b/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj index 4a8b70c628..e6e83d5c80 100644 --- a/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj +++ b/HeuristicLab.Algorithms.DataAnalysis.Views/3.4/HeuristicLab.Algorithms.DataAnalysis.Views-3.4.csproj @@ -23,35 +23,15 @@ embedded - bin\Debug\HeuristicLab.Algorithms.DataAnalysis.Views.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true embedded - $(SolutionDir)\bin\HeuristicLab.Algorithms.DataAnalysis.Views.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true embedded - bin\Debug\HeuristicLab.Algorithms.DataAnalysis.Views.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true embedded - $(SolutionDir)\bin\HeuristicLab.Algorithms.DataAnalysis.Views.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true diff --git a/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj b/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj index 60111626b3..9c20ab3188 100644 --- a/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj +++ b/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent-3.3.csproj @@ -24,35 +24,15 @@ embedded - bin\Debug\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - bin\Release\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true embedded - bin\Debug\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - bin\Release\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true - false diff --git a/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj b/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj index cb6738e595..22cc30f34b 100644 --- a/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj +++ b/HeuristicLab.Clients.Common/3.3/HeuristicLab.Clients.Common-3.3.csproj @@ -23,35 +23,15 @@ embedded - bin\Debug\HeuristicLab.Clients.Common-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - true - false embedded - $(SolutionDir)\bin\HeuristicLab.Clients.Common-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true embedded - bin\Debug\HeuristicLab.Clients.Common-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true embedded - $(SolutionDir)\bin\HeuristicLab.Clients.Common-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true diff --git a/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj index 1b511d13c0..c7ea97933a 100644 --- a/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.App/3.3/HeuristicLab.Clients.Hive.Slave.App-3.3.csproj @@ -24,7 +24,6 @@ false false DEBUG;TRACE - prompt false @@ -32,7 +31,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -41,7 +39,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -50,7 +47,6 @@ true embedded x86 - prompt false @@ -59,7 +55,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -68,7 +63,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj index 4541df4a2d..cd687c0a9d 100644 --- a/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.ConsoleClient/3.3/HeuristicLab.Clients.Hive.Slave.ConsoleClient-3.3.csproj @@ -23,7 +23,6 @@ false false DEBUG;TRACE - prompt false @@ -31,7 +30,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -40,7 +38,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -49,7 +46,6 @@ true embedded x86 - prompt false @@ -58,7 +54,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -67,7 +62,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj index ae8230e056..a65b66ffa8 100644 --- a/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.TrayIcon/3.3/HeuristicLab.Clients.Hive.Slave.TrayIcon-3.3.csproj @@ -24,7 +24,6 @@ false false DEBUG;TRACE - prompt false @@ -32,7 +31,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -41,7 +39,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -50,7 +47,6 @@ true embedded x86 - prompt false @@ -59,7 +55,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -68,7 +63,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj index 0ee70e7fbd..cfd078b152 100644 --- a/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.Views/3.3/HeuristicLab.Clients.Hive.Slave.Views-3.3.csproj @@ -23,7 +23,6 @@ false false DEBUG;TRACE - prompt false @@ -31,7 +30,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -40,7 +38,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -49,7 +46,6 @@ true embedded x86 - prompt false @@ -58,7 +54,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -67,7 +62,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj b/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj index ad4d61c6d5..d9aa80bbea 100644 --- a/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave.WindowsService/3.3/HeuristicLab.Clients.Hive.Slave.WindowsService-3.3.csproj @@ -38,7 +38,6 @@ false false DEBUG;TRACE - prompt false @@ -46,7 +45,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -55,7 +53,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -64,7 +61,6 @@ true embedded x86 - prompt false @@ -73,7 +69,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -82,7 +77,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj b/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj index ffba1aff95..5fba7e9d7b 100644 --- a/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj +++ b/HeuristicLab.Clients.Hive.Slave/3.3/HeuristicLab.Clients.Hive.Slave-3.3.csproj @@ -23,7 +23,6 @@ false false DEBUG;TRACE - prompt false @@ -31,7 +30,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -40,7 +38,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -49,7 +46,6 @@ true embedded x86 - prompt false @@ -58,7 +54,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -67,7 +62,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj b/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj index f4bbff3288..6fcc1b13ca 100644 --- a/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj +++ b/HeuristicLab.Clients.Hive/3.3/HeuristicLab.Clients.Hive-3.3.csproj @@ -24,33 +24,15 @@ embedded - bin\Debug\HeuristicLab.Clients.Hive-3.4.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - bin\Release\HeuristicLab.Clients.Hive-3.4.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\bin\HeuristicLab.Clients.Hive-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false embedded - ..\..\bin\HeuristicLab.Clients.Hive-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true diff --git a/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj b/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj index 5ad3e964c7..23c6ef6589 100644 --- a/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj +++ b/HeuristicLab.DebugEngine.Views/3.3/HeuristicLab.DebugEngine.Views-3.3.csproj @@ -17,37 +17,15 @@ embedded - bin\Debug\HeuristicLab.DebugEngine.Views.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - bin\Release\HeuristicLab.DebugEngine.Views-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true - false embedded - bin\Debug\HeuristicLab.DebugEngine.Views.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false - false embedded - bin\Release\HeuristicLab.DebugEngine.Views-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true true diff --git a/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj b/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj index 42306d35ae..91655a404e 100644 --- a/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj +++ b/HeuristicLab.DebugEngine/3.3/HeuristicLab.DebugEngine-3.3.csproj @@ -25,20 +25,9 @@ embedded - bin\Debug\HeuristicLab.DebugEngine.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true - false embedded - $(SolutionDir)\bin\HeuristicLab.DebugEngine.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - true diff --git a/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj b/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj index d4423a3980..faf612c4ea 100644 --- a/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj +++ b/HeuristicLab.Encodings.ScheduleEncoding.Views/3.3/HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.csproj @@ -23,35 +23,15 @@ embedded - bin\Debug\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - bin\Debug\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding.Views-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false diff --git a/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj b/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj index 03fff96d4e..2805f8ac20 100644 --- a/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj +++ b/HeuristicLab.Encodings.ScheduleEncoding/3.3/HeuristicLab.Encodings.ScheduleEncoding-3.3.csproj @@ -23,37 +23,15 @@ embedded - ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true - false embedded - ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\..\..\trunk\sources\bin\HeuristicLab.Encodings.ScheduleEncoding-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true - false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/ALGLIB-3.15.0/ALGLIB-3.15.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/ALGLIB-3.15.0/ALGLIB-3.15.0.csproj index 1369beda8b..4351d5a68e 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/ALGLIB-3.15.0/ALGLIB-3.15.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/ALGLIB-3.15.0/ALGLIB-3.15.0.csproj @@ -42,7 +42,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -50,7 +49,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/HeuristicLab.ALGLIB-3.15.0/HeuristicLab.ALGLIB-3.15.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/HeuristicLab.ALGLIB-3.15.0/HeuristicLab.ALGLIB-3.15.0.csproj index fe407a3b70..5cf9df722b 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/HeuristicLab.ALGLIB-3.15.0/HeuristicLab.ALGLIB-3.15.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.15.0/HeuristicLab.ALGLIB-3.15.0/HeuristicLab.ALGLIB-3.15.0.csproj @@ -42,7 +42,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -50,7 +49,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/ALGLIB-3.17.0/ALGLIB-3.17.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/ALGLIB-3.17.0/ALGLIB-3.17.0.csproj index 254d0af9ba..aa11fb85e2 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/ALGLIB-3.17.0/ALGLIB-3.17.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/ALGLIB-3.17.0/ALGLIB-3.17.0.csproj @@ -42,7 +42,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -50,7 +49,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/HeuristicLab.ALGLIB-3.17.0/HeuristicLab.ALGLIB-3.17.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/HeuristicLab.ALGLIB-3.17.0/HeuristicLab.ALGLIB-3.17.0.csproj index 2e38456f69..1d571fc102 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/HeuristicLab.ALGLIB-3.17.0/HeuristicLab.ALGLIB-3.17.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.17.0/HeuristicLab.ALGLIB-3.17.0/HeuristicLab.ALGLIB-3.17.0.csproj @@ -42,7 +42,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -50,7 +49,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/ALGLIB-3.7.0/ALGLIB-3.7.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/ALGLIB-3.7.0/ALGLIB-3.7.0.csproj index 24972c976f..98c4d877df 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/ALGLIB-3.7.0/ALGLIB-3.7.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/ALGLIB-3.7.0/ALGLIB-3.7.0.csproj @@ -42,7 +42,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -50,7 +49,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -59,7 +57,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -68,7 +65,6 @@ true embedded x86 - prompt false @@ -77,7 +73,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -86,7 +81,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/HeuristicLab.ALGLIB-3.7.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/HeuristicLab.ALGLIB-3.7.0.csproj index 580f8069d7..3907a705a2 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/HeuristicLab.ALGLIB-3.7.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ALGLIB/3.7.0/HeuristicLab.ALGLIB-3.7.0/HeuristicLab.ALGLIB-3.7.0.csproj @@ -42,7 +42,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -50,7 +49,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -59,7 +57,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -68,7 +65,6 @@ true embedded x86 - prompt false @@ -77,7 +73,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -86,7 +81,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.Attic/1.0.0/HeuristicLab.Attic.csproj b/HeuristicLab.ExtLibs/HeuristicLab.Attic/1.0.0/HeuristicLab.Attic.csproj index 4dc4c3726f..a42a7595b4 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.Attic/1.0.0/HeuristicLab.Attic.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.Attic/1.0.0/HeuristicLab.Attic.csproj @@ -19,7 +19,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -27,7 +26,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/AutoDiff-1.0/AutoDiff-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/AutoDiff-1.0/AutoDiff-1.0.csproj index 0a4756778e..01c8bf9ca8 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/AutoDiff-1.0/AutoDiff-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/AutoDiff-1.0/AutoDiff-1.0.csproj @@ -29,7 +29,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt True False False @@ -59,7 +58,6 @@ true $(SolutionDir)\bin\ TRACE - prompt False False True @@ -96,13 +94,6 @@ DEBUG;TRACE embedded x64 - bin\Debug\AutoDiff.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - true - true - false false @@ -111,12 +102,6 @@ true embedded x64 - bin\Release\AutoDiff.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - false - false false @@ -125,10 +110,6 @@ DEBUG;TRACE embedded x86 - bin\Debug\AutoDiff.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt false @@ -137,12 +118,6 @@ true embedded x86 - bin\Release\AutoDiff.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - false - false false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/HeuristicLab.AutoDiff-1.0/HeuristicLab.AutoDiff-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/HeuristicLab.AutoDiff-1.0/HeuristicLab.AutoDiff-1.0.csproj index 72372c7247..161af189db 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/HeuristicLab.AutoDiff-1.0/HeuristicLab.AutoDiff-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.AutoDiff/1.0/HeuristicLab.AutoDiff-1.0/HeuristicLab.AutoDiff-1.0.csproj @@ -42,7 +42,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -50,7 +49,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -59,7 +57,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -68,7 +65,6 @@ true embedded x86 - prompt false @@ -77,7 +73,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -86,7 +81,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/AvalonEdit-5.0.1/ICSharpCode.AvalonEdit-5.0.1.csproj b/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/AvalonEdit-5.0.1/ICSharpCode.AvalonEdit-5.0.1.csproj index df2c71648d..bf8e102bc6 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/AvalonEdit-5.0.1/ICSharpCode.AvalonEdit-5.0.1.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/AvalonEdit-5.0.1/ICSharpCode.AvalonEdit-5.0.1.csproj @@ -7,7 +7,6 @@ false $(SolutionDir)\bin\ TRACE;DEBUG;DOTNET4;NREFACTORY - prompt false @@ -15,7 +14,6 @@ true $(SolutionDir)\bin\ TRACE;DOTNET4;NREFACTORY - prompt false @@ -24,7 +22,6 @@ TRACE;DEBUG;DOTNET4;NREFACTORY embedded x86 - prompt false @@ -33,7 +30,6 @@ true embedded x86 - prompt false @@ -42,7 +38,6 @@ TRACE;DEBUG;DOTNET4;NREFACTORY embedded x64 - prompt false @@ -51,7 +46,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/HeuristicLab.AvalonEdit-5.0.1/HeuristicLab.AvalonEdit-5.0.1.csproj b/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/HeuristicLab.AvalonEdit-5.0.1/HeuristicLab.AvalonEdit-5.0.1.csproj index 4c41833946..fbdc6cb79c 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/HeuristicLab.AvalonEdit-5.0.1/HeuristicLab.AvalonEdit-5.0.1.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.AvalonEdit/5.0.1/HeuristicLab.AvalonEdit-5.0.1/HeuristicLab.AvalonEdit-5.0.1.csproj @@ -18,7 +18,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -26,7 +25,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -35,7 +33,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -44,7 +41,6 @@ true embedded x86 - prompt false @@ -53,7 +49,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -62,7 +57,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/HeuristicLab.Cecil-0.9.5/HeuristicLab.Cecil-0.9.5.csproj b/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/HeuristicLab.Cecil-0.9.5/HeuristicLab.Cecil-0.9.5.csproj index 2e2814fba3..9f180bcc69 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/HeuristicLab.Cecil-0.9.5/HeuristicLab.Cecil-0.9.5.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/HeuristicLab.Cecil-0.9.5/HeuristicLab.Cecil-0.9.5.csproj @@ -18,7 +18,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -26,7 +25,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -35,7 +33,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -44,7 +41,6 @@ true embedded x86 - prompt false @@ -53,7 +49,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -62,7 +57,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/Mono.Cecil-0.9.5/Mono.Cecil-0.9.5.csproj b/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/Mono.Cecil-0.9.5/Mono.Cecil-0.9.5.csproj index 3bdb9571a4..2423931684 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/Mono.Cecil-0.9.5/Mono.Cecil-0.9.5.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.Cecil/0.9.5/Mono.Cecil-0.9.5/Mono.Cecil-0.9.5.csproj @@ -18,7 +18,6 @@ false $(SolutionDir)\bin\ TRACE;DEBUG;NET_4_0;CECIL - prompt false 0649 @@ -27,7 +26,6 @@ true $(SolutionDir)\bin\ TRACE;NET_4_0;CECIL - prompt false 0649 @@ -37,7 +35,6 @@ TRACE;DEBUG;NET_4_0;CECIL embedded x86 - prompt false 0649 @@ -47,7 +44,6 @@ true embedded x86 - prompt false 0649 @@ -57,7 +53,6 @@ TRACE;DEBUG;NET_4_0;CECIL embedded x64 - prompt false 0649 @@ -67,7 +62,6 @@ true embedded x64 - prompt false 0649 diff --git a/HeuristicLab.ExtLibs/HeuristicLab.DayView/1.0/HeuristicLab.DayView-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.DayView/1.0/HeuristicLab.DayView-1.0.csproj index 417c1b082c..ec3346a03f 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.DayView/1.0/HeuristicLab.DayView-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.DayView/1.0/HeuristicLab.DayView-1.0.csproj @@ -42,7 +42,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -50,7 +49,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -59,7 +57,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -68,7 +65,6 @@ true embedded x64 - prompt false @@ -77,7 +73,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -86,7 +81,6 @@ true embedded x86 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0/DotNetScilab-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0/DotNetScilab-1.0.csproj index 4b03e40297..f3bdba62ea 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0/DotNetScilab-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0/DotNetScilab-1.0.csproj @@ -25,7 +25,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt true false false @@ -35,7 +34,6 @@ true $(SolutionDir)\bin\ TRACE - prompt true false false @@ -48,7 +46,6 @@ false embedded x64 - prompt false @@ -59,7 +56,6 @@ false embedded x64 - prompt false @@ -70,7 +66,6 @@ false embedded x86 - prompt false @@ -81,7 +76,6 @@ false embedded x86 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0Example/cs_example.csproj b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0Example/cs_example.csproj index 997f4b79e0..c96ce1abca 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0Example/cs_example.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/DotNetScilab-1.0Example/cs_example.csproj @@ -25,7 +25,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt true @@ -33,7 +32,6 @@ true $(SolutionDir)\bin\ TRACE - prompt true @@ -43,7 +41,6 @@ true embedded x64 - prompt $(SolutionDir)\bin\ @@ -52,7 +49,6 @@ true embedded x64 - prompt true @@ -61,7 +57,6 @@ true embedded x86 - prompt $(SolutionDir)\bin\ @@ -70,7 +65,6 @@ true embedded x86 - prompt diff --git a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj index 05c5002b67..496839ab6e 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.DotNetScilab/1.0/HeuristicLab.DotNetScilab-1.0/HeuristicLab.DotNetScilab-1.0.csproj @@ -19,7 +19,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -27,7 +26,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -42,7 +40,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -51,7 +48,6 @@ true embedded x64 - prompt false @@ -60,7 +56,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -69,7 +64,6 @@ true embedded x86 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj b/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj index ed711476af..9952c7f79b 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/EPPlus-4.0.3.csproj @@ -50,7 +50,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt AnyCPU @@ -61,7 +60,6 @@ true $(SolutionDir)\bin\ TRACE - prompt AnyCPU false @@ -71,7 +69,6 @@ DEBUG;TRACE embedded x86 - prompt $(SolutionDir)\bin\ @@ -79,7 +76,6 @@ true embedded x86 - prompt true @@ -87,7 +83,6 @@ DEBUG;TRACE embedded x64 - prompt $(SolutionDir)\bin\ @@ -95,7 +90,6 @@ true embedded x64 - prompt diff --git a/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/HeuristicLab.EPPlus-4.0.3.csproj b/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/HeuristicLab.EPPlus-4.0.3.csproj index 90c137c247..069eaf4fc5 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/HeuristicLab.EPPlus-4.0.3.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/HeuristicLab.EPPlus-4.0.3/HeuristicLab.EPPlus-4.0.3.csproj @@ -19,7 +19,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -27,7 +26,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -42,7 +40,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -51,7 +48,6 @@ true embedded x64 - prompt false @@ -60,7 +56,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -69,7 +64,6 @@ true embedded x86 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/HeuristicLab.GeoIP.csproj b/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/HeuristicLab.GeoIP.csproj index e9e7ab704e..3915397911 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/HeuristicLab.GeoIP.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.GeoIP/1.12/HeuristicLab.GeoIP.csproj @@ -20,7 +20,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -28,7 +27,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -37,7 +35,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -46,7 +43,6 @@ true embedded x86 - prompt false @@ -55,7 +51,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -64,7 +59,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/HeuristicLab.IGraph-0.8.0-pre.csproj b/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/HeuristicLab.IGraph-0.8.0-pre.csproj index 149745fd9c..2c17a1dcdb 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/HeuristicLab.IGraph-0.8.0-pre.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/HeuristicLab.IGraph-0.8.0-pre.csproj @@ -18,7 +18,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt true @@ -26,7 +25,6 @@ true $(SolutionDir)\bin\ TRACE - prompt true diff --git a/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/HeuristicLab.LibSVM-3.12/HeuristicLab.LibSVM-3.12.csproj b/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/HeuristicLab.LibSVM-3.12/HeuristicLab.LibSVM-3.12.csproj index 719143ba70..732b0966d2 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/HeuristicLab.LibSVM-3.12/HeuristicLab.LibSVM-3.12.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/HeuristicLab.LibSVM-3.12/HeuristicLab.LibSVM-3.12.csproj @@ -42,7 +42,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -50,7 +49,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -59,7 +57,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -68,7 +65,6 @@ true embedded x64 - prompt false @@ -77,7 +73,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -86,7 +81,6 @@ true embedded x86 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/LibSVM-3.12/LibSVM-3.12.csproj b/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/LibSVM-3.12/LibSVM-3.12.csproj index 41b921b011..579229802b 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/LibSVM-3.12/LibSVM-3.12.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.LibSVM/3.12/LibSVM-3.12/LibSVM-3.12.csproj @@ -42,7 +42,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -50,7 +49,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -59,7 +57,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -68,7 +65,6 @@ true embedded x64 - prompt false @@ -77,7 +73,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -86,7 +81,6 @@ true embedded x86 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.7.5/HeuristicLab.MathJax-2.7.5/HeuristicLab.MathJax-2.7.5.csproj b/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.7.5/HeuristicLab.MathJax-2.7.5/HeuristicLab.MathJax-2.7.5.csproj index 10edbd81f2..114237c483 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.7.5/HeuristicLab.MathJax-2.7.5/HeuristicLab.MathJax-2.7.5.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.MathJax/2.7.5/HeuristicLab.MathJax-2.7.5/HeuristicLab.MathJax-2.7.5.csproj @@ -42,7 +42,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -50,7 +49,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -59,7 +57,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -68,7 +65,6 @@ true embedded x64 - prompt false @@ -77,7 +73,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -86,7 +81,6 @@ true embedded x86 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj index 40b2784d8c..732a6f679f 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.MatlabConnector/1.0/HeuristicLab.MatlabConnector-1.0/HeuristicLab.MatlabConnector-1.0.csproj @@ -19,7 +19,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -27,7 +26,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -42,7 +40,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -51,7 +48,6 @@ true embedded x64 - prompt false @@ -60,7 +56,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -69,7 +64,6 @@ true embedded x86 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/HeuristicLab.NRefactory-5.5.0/HeuristicLab.NRefactory-5.5.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/HeuristicLab.NRefactory-5.5.0/HeuristicLab.NRefactory-5.5.0.csproj index 2915c09e5e..fe32306dc9 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/HeuristicLab.NRefactory-5.5.0/HeuristicLab.NRefactory-5.5.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/HeuristicLab.NRefactory-5.5.0/HeuristicLab.NRefactory-5.5.0.csproj @@ -18,7 +18,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -26,7 +25,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -35,7 +33,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -44,7 +41,6 @@ true embedded x86 - prompt false @@ -53,7 +49,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -62,7 +57,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory-5.5.0/ICSharpCode.NRefactory-5.5.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory-5.5.0/ICSharpCode.NRefactory-5.5.0.csproj index 2d0ff45981..cfb235e799 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory-5.5.0/ICSharpCode.NRefactory-5.5.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory-5.5.0/ICSharpCode.NRefactory-5.5.0.csproj @@ -7,7 +7,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -15,7 +14,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -24,7 +22,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -33,7 +30,6 @@ true embedded x86 - prompt false @@ -42,7 +38,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -51,7 +46,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.CSharp-5.5.0/ICSharpCode.NRefactory.CSharp-5.5.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.CSharp-5.5.0/ICSharpCode.NRefactory.CSharp-5.5.0.csproj index 7a6191c5bc..739bd1c46f 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.CSharp-5.5.0/ICSharpCode.NRefactory.CSharp-5.5.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.CSharp-5.5.0/ICSharpCode.NRefactory.CSharp-5.5.0.csproj @@ -18,7 +18,6 @@ false $(SolutionDir)\bin\ TRACE;DEBUG;FULL_AST - prompt false true @@ -27,7 +26,6 @@ true $(SolutionDir)\bin\ TRACE;FULL_AST - prompt false true @@ -37,7 +35,6 @@ TRACE;DEBUG;FULL_AST embedded x86 - prompt false true @@ -47,7 +44,6 @@ true embedded x86 - prompt false true @@ -57,7 +53,6 @@ TRACE;DEBUG;FULL_AST embedded x64 - prompt false true @@ -67,7 +62,6 @@ true embedded x64 - prompt false true diff --git a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.Cecil-5.5.0/ICSharpCode.NRefactory.Cecil-5.5.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.Cecil-5.5.0/ICSharpCode.NRefactory.Cecil-5.5.0.csproj index 259d071c87..343c6504e1 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.Cecil-5.5.0/ICSharpCode.NRefactory.Cecil-5.5.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.Cecil-5.5.0/ICSharpCode.NRefactory.Cecil-5.5.0.csproj @@ -18,7 +18,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -26,7 +25,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -35,7 +33,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -44,7 +41,6 @@ true embedded x86 - prompt false @@ -53,7 +49,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -62,7 +57,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.Xml-5.5.0/ICSharpCode.NRefactory.Xml-5.5.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.Xml-5.5.0/ICSharpCode.NRefactory.Xml-5.5.0.csproj index 989ef36954..f77d96b597 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.Xml-5.5.0/ICSharpCode.NRefactory.Xml-5.5.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.NRefactory/5.5.0/NRefactory.Xml-5.5.0/ICSharpCode.NRefactory.Xml-5.5.0.csproj @@ -18,7 +18,6 @@ false $(SolutionDir)\bin\ TRACE;DEBUG - prompt false true @@ -27,7 +26,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false true @@ -37,7 +35,6 @@ TRACE;DEBUG embedded x86 - prompt false true @@ -47,7 +44,6 @@ true embedded x86 - prompt false true @@ -57,7 +53,6 @@ TRACE;DEBUG embedded x64 - prompt false true @@ -67,7 +62,6 @@ true embedded x64 - prompt false true diff --git a/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/HeuristicLab.NativeInterpreter-0.1/HeuristicLab.NativeInterpreter-0.1.csproj b/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/HeuristicLab.NativeInterpreter-0.1/HeuristicLab.NativeInterpreter-0.1.csproj index 8c112742ba..1b722820ff 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/HeuristicLab.NativeInterpreter-0.1/HeuristicLab.NativeInterpreter-0.1.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.NativeInterpreter/0.1/HeuristicLab.NativeInterpreter-0.1/HeuristicLab.NativeInterpreter-0.1.csproj @@ -20,14 +20,12 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt embedded true $(SolutionDir)\bin\ TRACE - prompt true diff --git a/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446.csproj b/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446.csproj index a45696b26d..7f4d405211 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446/HeuristicLab.Netron-3.0.2672.12446.csproj @@ -42,7 +42,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -50,7 +49,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -59,7 +57,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -68,7 +65,6 @@ true embedded x86 - prompt false @@ -77,7 +73,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -86,7 +81,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446.csproj b/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446.csproj index fa1a39055a..284c831bcd 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.Netron/3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446/Netron.Diagramming.Core-3.0.2672.12446.csproj @@ -64,10 +64,8 @@ false false embedded - prompt Auto false - false @@ -89,8 +87,6 @@ false false none - prompt - false @@ -103,10 +99,8 @@ 4096 embedded x86 - Auto - prompt false @@ -116,9 +110,7 @@ true 4096 x86 - - prompt false @@ -130,10 +122,8 @@ 4096 embedded x64 - Auto - prompt false @@ -143,9 +133,7 @@ true 4096 x64 - - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.OrTools/7.0.0/HeuristicLab.OrTools-7.0.0/HeuristicLab.OrTools-7.0.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.OrTools/7.0.0/HeuristicLab.OrTools-7.0.0/HeuristicLab.OrTools-7.0.0.csproj index 30912128b1..83ac6d4440 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.OrTools/7.0.0/HeuristicLab.OrTools-7.0.0/HeuristicLab.OrTools-7.0.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.OrTools/7.0.0/HeuristicLab.OrTools-7.0.0/HeuristicLab.OrTools-7.0.0.csproj @@ -20,7 +20,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt true @@ -28,7 +27,6 @@ true $(SolutionDir)\bin\ TRACE - prompt true @@ -44,7 +42,6 @@ true embedded x64 - prompt $(SolutionDir)\bin\ @@ -53,7 +50,6 @@ true embedded x64 - prompt true @@ -62,7 +58,6 @@ true embedded x86 - prompt $(SolutionDir)\bin\ @@ -71,7 +66,6 @@ true embedded x86 - prompt diff --git a/HeuristicLab.ExtLibs/HeuristicLab.Protobuf/3.6.1/HeuristicLab.Protobuf.csproj b/HeuristicLab.ExtLibs/HeuristicLab.Protobuf/3.6.1/HeuristicLab.Protobuf.csproj index 7787a238c4..7edd9bcaef 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.Protobuf/3.6.1/HeuristicLab.Protobuf.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.Protobuf/3.6.1/HeuristicLab.Protobuf.csproj @@ -19,7 +19,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -27,7 +26,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/HeuristicLab.ProtobufCS/HeuristicLab.ProtobufCS-2.4.1.473.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/HeuristicLab.ProtobufCS/HeuristicLab.ProtobufCS-2.4.1.473.csproj index 1f25290fac..1bc3463403 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/HeuristicLab.ProtobufCS/HeuristicLab.ProtobufCS-2.4.1.473.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/HeuristicLab.ProtobufCS/HeuristicLab.ProtobufCS-2.4.1.473.csproj @@ -42,7 +42,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -50,7 +49,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -59,7 +57,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -68,7 +65,6 @@ true embedded x86 - prompt false @@ -77,7 +73,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -86,7 +81,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj index 4583933627..6d5cc28f2e 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffers-2.4.1.473.csproj @@ -24,7 +24,6 @@ $(SolutionDir)\bin\ 1591, 1570, 1571, 1572, 1573, 1574 DEBUG;TRACE - prompt true false @@ -34,7 +33,6 @@ $(SolutionDir)\bin\ 1591, 1570, 1571, 1572, 1573, 1574 TRACE - prompt true false @@ -46,12 +44,6 @@ true embedded x64 - bin\Debug\Google.ProtocolBuffers.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - true - true false @@ -62,12 +54,6 @@ true embedded x64 - bin\Release\Google.ProtocolBuffers-2.4.1.473.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - true - true false @@ -78,12 +64,6 @@ true embedded x86 - bin\Debug\Google.ProtocolBuffers.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - true - true false @@ -94,12 +74,6 @@ true embedded x86 - bin\Release\Google.ProtocolBuffers-2.4.1.473.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - true - true false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffersLite.csproj b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffersLite.csproj index 06487f3c9d..78199621e7 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffersLite.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.ProtobufCS/2.4.1/ProtobufCS/src/ProtocolBuffers/ProtocolBuffersLite.csproj @@ -23,7 +23,6 @@ $(SolutionDir)\bin\ 1591, 1570, 1571, 1572, 1573, 1574 DEBUG;TRACE;LITE - prompt true @@ -32,7 +31,6 @@ $(SolutionDir)\bin\ 1591, 1570, 1571, 1572, 1573, 1574 TRACE;LITE - prompt true diff --git a/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.3.2/HeuristicLab.SimSharp-3.3.2/HeuristicLab.SimSharp-3.3.2.csproj b/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.3.2/HeuristicLab.SimSharp-3.3.2/HeuristicLab.SimSharp-3.3.2.csproj index 9fb84d2891..5c39bab12c 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.3.2/HeuristicLab.SimSharp-3.3.2/HeuristicLab.SimSharp-3.3.2.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.SimSharp/3.3.2/HeuristicLab.SimSharp-3.3.2/HeuristicLab.SimSharp-3.3.2.csproj @@ -19,14 +19,12 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt embedded true $(SolutionDir)\bin\ TRACE - prompt true @@ -35,7 +33,6 @@ embedded x64 7.3 - prompt $(SolutionDir)\bin\ @@ -44,7 +41,6 @@ embedded x64 7.3 - prompt true @@ -53,7 +49,6 @@ embedded x86 7.3 - prompt $(SolutionDir)\bin\ @@ -62,7 +57,6 @@ embedded x86 7.3 - prompt true diff --git a/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/HeuristicLab.WinFormsUI-2.7.0/HeuristicLab.WinFormsUI-2.7.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/HeuristicLab.WinFormsUI-2.7.0/HeuristicLab.WinFormsUI-2.7.0.csproj index ea42d17796..78e1252de1 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/HeuristicLab.WinFormsUI-2.7.0/HeuristicLab.WinFormsUI-2.7.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/HeuristicLab.WinFormsUI-2.7.0/HeuristicLab.WinFormsUI-2.7.0.csproj @@ -42,7 +42,6 @@ false $(SolutionDir)\bin\ DEBUG;TRACE - prompt false @@ -50,7 +49,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -59,7 +57,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -68,7 +65,6 @@ true embedded x64 - prompt false @@ -77,7 +73,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -86,7 +81,6 @@ true embedded x86 - prompt false diff --git a/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/WinFormsUI-2.7.0/WinFormsUI-2.7.0.csproj b/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/WinFormsUI-2.7.0/WinFormsUI-2.7.0.csproj index 727298ef37..f4595410bd 100644 --- a/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/WinFormsUI-2.7.0/WinFormsUI-2.7.0.csproj +++ b/HeuristicLab.ExtLibs/HeuristicLab.WinFormsUI/2.7.0/WinFormsUI-2.7.0/WinFormsUI-2.7.0.csproj @@ -42,7 +42,6 @@ false $(SolutionDir)\bin\ TRACE;DEBUG - prompt false @@ -50,7 +49,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -59,7 +57,6 @@ TRACE;DEBUG embedded x86 - prompt false @@ -68,7 +65,6 @@ true embedded x86 - prompt false @@ -77,7 +73,6 @@ TRACE;DEBUG embedded x64 - prompt false @@ -86,7 +81,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj b/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj index 2b4bcf8c91..0f772d0208 100644 --- a/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj +++ b/HeuristicLab.Operators.Programmable.Views/3.3/HeuristicLab.Operators.Programmable.Views-3.3.csproj @@ -23,33 +23,15 @@ embedded - bin\Debug\HeuristicLab.Operators.Programmable.Views.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs embedded - bin\Release\HeuristicLab.Operators.Programmable.Views.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - bin\Debug\HeuristicLab.Operators.Programmable.Views.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - bin\Release\HeuristicLab.Operators.Programmable.Views.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false diff --git a/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj b/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj index 14304a9d3b..397b061050 100644 --- a/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj +++ b/HeuristicLab.Operators.Views.GraphVisualization.Views/3.3/HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.csproj @@ -24,35 +24,15 @@ embedded - bin\Debug\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true embedded - bin\Debug\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true - false diff --git a/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj b/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj index ca1df879b0..e669ac776a 100644 --- a/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj +++ b/HeuristicLab.ParallelEngine/3.3/HeuristicLab.ParallelEngine-3.3.csproj @@ -23,35 +23,15 @@ embedded - bin\Debug\HeuristicLab.ParallelEngine-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true embedded - $(SolutionDir)\bin\HeuristicLab.ParallelEngine-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true embedded - bin\Debug\HeuristicLab.ParallelEngine-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true embedded - $(SolutionDir)\bin\HeuristicLab.ParallelEngine-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true diff --git a/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj b/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj index e8a7993d95..9ed9805ef5 100644 --- a/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj +++ b/HeuristicLab.Problems.Instances.CordeauGQAP/3.3/HeuristicLab.Problems.Instances.CordeauGQAP-3.3.csproj @@ -24,35 +24,15 @@ embedded - ..\..\bin\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\bin\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true embedded - ..\..\bin\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\bin\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true - false diff --git a/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj b/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj index a830dd15af..60465d477c 100644 --- a/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj +++ b/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj @@ -24,31 +24,15 @@ embedded - ..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs embedded - ..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - false embedded - ..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs embedded - ..\..\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - false diff --git a/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj b/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj index 36a38d8a55..d71787a5c1 100644 --- a/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj +++ b/HeuristicLab.Problems.Instances.ElloumiCTAP/3.3/HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.csproj @@ -24,35 +24,15 @@ embedded - ..\..\bin\HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\bin\HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\bin\HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\bin\HeuristicLab.Problems.Instances.ElloumiCTAP-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false diff --git a/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj b/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj index b77c02fc30..b98deb7709 100644 --- a/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj +++ b/HeuristicLab.Problems.Instances.QAPLIB/3.3/HeuristicLab.Problems.Instances.QAPLIB-3.3.csproj @@ -24,35 +24,15 @@ embedded - ..\..\bin\HeuristicLab.Problems.Instances.QAPLIB-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\bin\HeuristicLab.Problems.Instances.QAPLIB-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\bin\HeuristicLab.Problems.Instances.QAPLIB-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\bin\HeuristicLab.Problems.Instances.QAPLIB-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false diff --git a/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj b/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj index b1f9de52af..00064894e3 100644 --- a/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Scheduling/3.3/HeuristicLab.Problems.Instances.Scheduling-3.3.csproj @@ -24,35 +24,15 @@ embedded - bin\Debug\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - bin\Release\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true embedded - bin\Debug\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - bin\Release\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true - false diff --git a/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj b/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj index c0dd84c0fc..72bd10c522 100644 --- a/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj +++ b/HeuristicLab.Problems.Instances.TSPLIB.Views/3.3/HeuristicLab.Problems.Instances.TSPLIB.Views-3.3.csproj @@ -23,35 +23,15 @@ embedded - bin\Debug\HeuristicLab.Problems.Instances.TSPLIB.Views.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true embedded - bin\Release\HeuristicLab.Problems.Instances.TSPLIB.Views.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true embedded - bin\Debug\HeuristicLab.Problems.Instances.TSPLIB.Views.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true embedded - bin\Release\HeuristicLab.Problems.Instances.TSPLIB.Views.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true diff --git a/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj b/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj index 8ab5c431ae..d32f04c20e 100644 --- a/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj +++ b/HeuristicLab.Problems.Instances.TSPLIB/3.3/HeuristicLab.Problems.Instances.TSPLIB-3.3.csproj @@ -24,35 +24,15 @@ embedded - ..\..\bin\HeuristicLab.Problems.Instances.TSPLIB-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\bin\HeuristicLab.Problems.Instances.TSPLIB-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\bin\HeuristicLab.Problems.Instances.TSPLIB-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\bin\HeuristicLab.Problems.Instances.TSPLIB-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false diff --git a/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj b/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj index cabd44b594..626c4edd54 100644 --- a/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj +++ b/HeuristicLab.Problems.Instances.VehicleRouting.Views/3.4/HeuristicLab.Problems.Instances.VehicleRouting.Views-3.4.csproj @@ -23,35 +23,15 @@ embedded - bin\Debug\HeuristicLab.Problems.Instances.VehicleRouting.Views.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true embedded - bin\Release\HeuristicLab.Problems.Instances.VehicleRouting.Views.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true embedded - bin\Debug\HeuristicLab.Problems.Instances.VehicleRouting.Views.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true embedded - bin\Release\HeuristicLab.Problems.Instances.VehicleRouting.Views.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true diff --git a/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj b/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj index e62450106b..b620438a63 100644 --- a/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj +++ b/HeuristicLab.Problems.Instances.VehicleRouting/3.4/HeuristicLab.Problems.Instances.VehicleRouting-3.4.csproj @@ -24,35 +24,15 @@ embedded - ..\..\bin\HeuristicLab.Problems.Instances.VehicleRouting-3.4.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\bin\HeuristicLab.Problems.Instances.VehicleRouting-3.4.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\bin\HeuristicLab.Problems.Instances.VehicleRouting-3.4.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\bin\HeuristicLab.Problems.Instances.VehicleRouting-3.4.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false diff --git a/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj b/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj index f6980828a0..a9078081e2 100644 --- a/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj +++ b/HeuristicLab.Problems.Instances.Views/3.3/HeuristicLab.Problems.Instances.Views-3.3.csproj @@ -23,35 +23,15 @@ embedded - ..\..\bin\HeuristicLab.Problems.Instances.Views-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true embedded - ..\..\bin\HeuristicLab.Problems.Instances.Views-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\bin\HeuristicLab.Problems.Instances.Views-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true embedded - ..\..\bin\HeuristicLab.Problems.Instances.Views-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false diff --git a/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj b/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj index 270a220fa1..91b5e3b84c 100644 --- a/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj +++ b/HeuristicLab.Problems.Instances/3.3/HeuristicLab.Problems.Instances-3.3.csproj @@ -24,38 +24,15 @@ embedded - ..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true - false embedded - ..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false - false embedded - ..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true - false embedded - ..\..\bin\HeuristicLab.Problems.Instances-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false diff --git a/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj b/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj index 142b90e6cc..d3ff5604d5 100644 --- a/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj +++ b/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj @@ -24,35 +24,15 @@ embedded - bin\Debug\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - bin\Release\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true embedded - bin\Debug\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - bin\Release\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true - false diff --git a/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj b/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj index 71f184df55..9bcfd3a711 100644 --- a/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj +++ b/HeuristicLab.Problems.LinearAssignment/3.3/HeuristicLab.Problems.LinearAssignment-3.3.csproj @@ -24,35 +24,15 @@ embedded - bin\Debug\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - bin\Release\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true embedded - bin\Debug\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - bin\Release\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true - false diff --git a/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj b/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj index 9663e70a39..3323030de8 100644 --- a/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj +++ b/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK-3.3.csproj @@ -24,35 +24,15 @@ embedded - bin\Debug\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - bin\Release\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - true embedded - bin\Debug\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - bin\Release\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - true diff --git a/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj index 1a373b4083..9535debc3a 100644 --- a/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.csproj @@ -24,35 +24,15 @@ embedded - bin\Debug\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true embedded - bin\Debug\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true - false diff --git a/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj index 92cf647224..7e9ca44c54 100644 --- a/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment.Views/3.3/HeuristicLab.Problems.QuadraticAssignment.Views-3.3.csproj @@ -24,35 +24,15 @@ embedded - bin\Debug\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true embedded - bin\Debug\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true - false diff --git a/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj b/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj index bdea0d1daf..573f8dc95e 100644 --- a/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj +++ b/HeuristicLab.Problems.QuadraticAssignment/3.3/HeuristicLab.Problems.QuadraticAssignment-3.3.csproj @@ -24,35 +24,15 @@ embedded - bin\Debug\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true embedded - bin\Debug\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - $(SolutionDir)\bin\Plugin.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true - false diff --git a/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj b/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj index d2f580f813..e2307d7fae 100644 --- a/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj +++ b/HeuristicLab.Problems.Scheduling.Views/3.3/HeuristicLab.Problems.Scheduling.Views-3.3.csproj @@ -17,34 +17,15 @@ embedded - ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling.Views-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false embedded - ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling.Views-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling.Views-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling.Views-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false true diff --git a/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj b/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj index 7afc440fb1..b6bce89563 100644 --- a/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj +++ b/HeuristicLab.Problems.Scheduling/3.3/HeuristicLab.Problems.Scheduling-3.3.csproj @@ -23,33 +23,15 @@ embedded - ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - ..\..\..\..\trunk\sources\bin\HeuristicLab.Problems.Scheduling-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs diff --git a/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj b/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj index 8e9f52115d..56729ad8d0 100644 --- a/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Access.DataAccess/3.3/HeuristicLab.Services.Access.DataAccess-3.3.csproj @@ -23,7 +23,6 @@ false false DEBUG;TRACE - prompt false @@ -31,7 +30,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -40,7 +38,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -49,7 +46,6 @@ true embedded x86 - prompt false @@ -58,7 +54,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -67,7 +62,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj b/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj index ce5ea7ce6f..f6c0ae7fc4 100644 --- a/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj +++ b/HeuristicLab.Services.Access/3.3/HeuristicLab.Services.Access-3.3.csproj @@ -25,7 +25,6 @@ false false DEBUG;TRACE - prompt false @@ -33,7 +32,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -42,7 +40,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -51,7 +48,6 @@ true embedded x86 - prompt false @@ -60,7 +56,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -69,7 +64,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj b/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj index 241d72753b..1e1edee843 100644 --- a/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Deployment.DataAccess/3.3/HeuristicLab.Services.Deployment.DataAccess-3.3.csproj @@ -45,7 +45,6 @@ false false DEBUG;TRACE - prompt false @@ -53,7 +52,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -62,7 +60,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -71,7 +68,6 @@ true embedded x86 - prompt false @@ -80,7 +76,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -89,7 +84,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj b/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj index 40adf8b899..c51f6a2c5b 100644 --- a/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj +++ b/HeuristicLab.Services.Deployment/3.3/HeuristicLab.Services.Deployment-3.3.csproj @@ -31,7 +31,6 @@ false false DEBUG;TRACE - prompt false @@ -39,7 +38,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -48,7 +46,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -57,7 +54,6 @@ true embedded x86 - prompt false @@ -66,7 +62,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -75,7 +70,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj b/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj index 8b601c586a..f92227252c 100644 --- a/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj +++ b/HeuristicLab.Services.Deployment/3.3/Tests/HeuristicLab.Services.Deployment-3.3.Tests.csproj @@ -43,7 +43,6 @@ false false DEBUG;TRACE - prompt false @@ -51,7 +50,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -60,7 +58,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -69,7 +66,6 @@ true embedded x64 - prompt false @@ -78,7 +74,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -87,7 +82,6 @@ true embedded x86 - prompt false diff --git a/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj b/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj index d0483214e2..5a95541ad2 100644 --- a/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj @@ -23,7 +23,6 @@ false false DEBUG;TRACE - prompt false @@ -31,7 +30,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -40,7 +38,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -49,7 +46,6 @@ true embedded x86 - prompt false @@ -58,7 +54,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -67,7 +62,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj b/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj index 1ed759cd23..77db72540f 100644 --- a/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj +++ b/HeuristicLab.Services.Hive.JanitorService/3.3/HeuristicLab.Services.Hive.JanitorService-3.3.csproj @@ -24,7 +24,6 @@ false false DEBUG;TRACE - prompt false @@ -32,7 +31,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -41,7 +39,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -50,7 +47,6 @@ true embedded x86 - prompt false @@ -59,7 +55,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -68,7 +63,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj b/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj index 18ec12ab64..6501ea6e20 100644 --- a/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj +++ b/HeuristicLab.Services.Hive/3.3/HeuristicLab.Services.Hive-3.3.csproj @@ -24,7 +24,6 @@ false false DEBUG;TRACE - prompt false @@ -32,7 +31,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -41,7 +39,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -50,7 +47,6 @@ true embedded x86 - prompt false @@ -59,7 +55,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -68,7 +63,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj b/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj index f85bd64360..cdd0ed9b6e 100644 --- a/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj +++ b/HeuristicLab.Services.OKB.DataAccess/3.3/HeuristicLab.Services.OKB.DataAccess-3.3.csproj @@ -42,7 +42,6 @@ false false DEBUG;TRACE - prompt false @@ -50,7 +49,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -59,7 +57,6 @@ DEBUG;TRACE embedded x86 - prompt false @@ -68,7 +65,6 @@ true embedded x86 - prompt false @@ -77,7 +73,6 @@ DEBUG;TRACE embedded x64 - prompt false @@ -86,7 +81,6 @@ true embedded x64 - prompt false diff --git a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj index c77e742d68..1308d039f2 100644 --- a/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj +++ b/HeuristicLab.Services.OKB/3.3/HeuristicLab.Services.OKB-3.3.csproj @@ -25,7 +25,6 @@ false false DEBUG;TRACE - prompt false @@ -33,7 +32,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -42,7 +40,6 @@ DEBUG;TRACE embedded x86 - prompt $(SolutionDir)\bin\ @@ -50,7 +47,6 @@ true embedded x86 - prompt true @@ -58,7 +54,6 @@ DEBUG;TRACE embedded x64 - prompt $(SolutionDir)\bin\ @@ -66,7 +61,6 @@ true embedded x64 - prompt true @@ -80,12 +74,6 @@ DEBUG;TRACE embedded x64 - bin\Debug\HeuristicLab.Services.OKB-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - false - false false @@ -94,13 +82,6 @@ true embedded x64 - bin\Release\HeuristicLab.Services.OKB-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - false - false - false false @@ -109,12 +90,6 @@ DEBUG;TRACE embedded x86 - bin\Debug\HeuristicLab.Services.OKB-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - false - false false @@ -123,12 +98,6 @@ true embedded x86 - bin\Release\HeuristicLab.Services.OKB-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - false - false false diff --git a/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj b/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj index eb582ad14c..ac65eb9e5a 100644 --- a/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Maintenance/3.3/HeuristicLab.Services.WebApp.Maintenance-3.3.csproj @@ -22,14 +22,12 @@ false false DEBUG;TRACE - prompt embedded true $(SolutionDir)\bin\ TRACE - prompt true @@ -43,7 +41,6 @@ DEBUG;TRACE embedded x64 - prompt $(SolutionDir)\bin\ @@ -51,7 +48,6 @@ true embedded x64 - prompt true @@ -59,7 +55,6 @@ DEBUG;TRACE embedded x86 - prompt $(SolutionDir)\bin\ @@ -67,7 +62,6 @@ true embedded x86 - prompt diff --git a/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj b/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj index 7ff5a55c02..74b8085bea 100644 --- a/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Statistics/3.3/HeuristicLab.Services.WebApp.Statistics-3.3.csproj @@ -23,14 +23,12 @@ false false DEBUG;TRACE - prompt embedded true $(SolutionDir)\bin\ TRACE - prompt true @@ -44,7 +42,6 @@ DEBUG;TRACE embedded x64 - prompt $(SolutionDir)\bin\ @@ -52,7 +49,6 @@ true embedded x64 - prompt true @@ -60,7 +56,6 @@ DEBUG;TRACE embedded x86 - prompt $(SolutionDir)\bin\ @@ -68,7 +63,6 @@ true embedded x86 - prompt diff --git a/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj b/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj index 5d7a85d453..5a97113720 100644 --- a/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj +++ b/HeuristicLab.Services.WebApp.Status/3.3/HeuristicLab.Services.WebApp.Status-3.3.csproj @@ -23,14 +23,12 @@ false false DEBUG;TRACE - prompt none true $(SolutionDir)\bin\ TRACE - prompt true @@ -44,14 +42,12 @@ DEBUG;TRACE embedded x64 - prompt $(SolutionDir)\bin\ TRACE true x64 - prompt true @@ -59,14 +55,12 @@ DEBUG;TRACE embedded x86 - prompt $(SolutionDir)\bin\ TRACE true x86 - prompt diff --git a/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj b/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj index 509e3eb87a..c0c21ac9eb 100644 --- a/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj +++ b/HeuristicLab.Services.WebApp/3.3/HeuristicLab.Services.WebApp-3.3.csproj @@ -33,7 +33,6 @@ false false DEBUG;TRACE - prompt false @@ -41,7 +40,6 @@ true $(SolutionDir)\bin\ TRACE - prompt @@ -284,7 +282,6 @@ DEBUG;TRACE embedded x86 - prompt $(SolutionDir)\bin\ @@ -292,7 +289,6 @@ true embedded x86 - prompt true @@ -300,7 +296,6 @@ DEBUG;TRACE embedded x64 - prompt $(SolutionDir)\bin\ @@ -308,7 +303,6 @@ true embedded x64 - prompt diff --git a/HeuristicLab.Tests/HeuristicLab.Tests.csproj b/HeuristicLab.Tests/HeuristicLab.Tests.csproj index 98885278e7..231d1812f0 100644 --- a/HeuristicLab.Tests/HeuristicLab.Tests.csproj +++ b/HeuristicLab.Tests/HeuristicLab.Tests.csproj @@ -25,7 +25,6 @@ false false DEBUG;TRACE - prompt false @@ -33,7 +32,6 @@ true $(SolutionDir)\bin\ TRACE - prompt false @@ -48,12 +46,6 @@ DEBUG;TRACE embedded x64 - bin\Debug\HeuristicLab.Tests.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - false - false false @@ -62,12 +54,6 @@ true embedded x64 - bin\Release\HeuristicLab.Tests.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - false - false false @@ -76,12 +62,6 @@ DEBUG;TRACE embedded x86 - bin\Debug\HeuristicLab.Tests.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt - false - false false @@ -90,10 +70,6 @@ true embedded x86 - bin\Release\HeuristicLab.Tests.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - prompt false @@ -436,7 +412,6 @@ - False diff --git a/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj b/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj index 35e95f73c2..757262255d 100644 --- a/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj +++ b/HeuristicLab.Visualization.ChartControlsExtensions/3.3/HeuristicLab.Visualization.ChartControlsExtensions-3.3.csproj @@ -23,35 +23,15 @@ embedded - bin\Debug\HeuristicLab.Visualization.ChartControlExtensions-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true embedded - $(SolutionDir)\bin\HeuristicLab.Visualization.ChartControlExtensions-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false embedded - bin\Debug\HeuristicLab.Visualization.ChartControlExtensions-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - true - true embedded - $(SolutionDir)\bin\HeuristicLab.Visualization.ChartControlExtensions-3.3.dll.CodeAnalysisLog.xml - true - GlobalSuppressions.cs - false - false From b37e98cfe89350ed40cf112dd5b8d3dde9471f51 Mon Sep 17 00:00:00 2001 From: "P41847 (Holzinger Florian)" Date: Fri, 22 Apr 2022 14:21:50 +0200 Subject: [PATCH 39/39] Removed embedded Auto false - false @@ -87,7 +86,6 @@ false false none - false @@ -99,7 +97,6 @@ 4096 embedded x86 - Auto false @@ -110,7 +107,6 @@ true 4096 x86 - false @@ -122,7 +118,6 @@ 4096 embedded x64 - Auto false @@ -133,7 +128,6 @@ true 4096 x64 - false

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%0D>!uJTi6-WfV$_SgAsnf3#IbLRZ0d_BKG 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 literal 0 HcmV?d00001 diff --git a/build/bin/protoc.exe b/build/bin/protoc.exe new file mode 100644 index 0000000000000000000000000000000000000000..2d8d4a5d75d8526003bdc5188887d4462462517e GIT binary patch literal 1766414 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 n!T?v$YP-%*+``=5`O@iV9@1g*FI zvVt$wV2_WtwyZ}Y&XVmmz~ou}L|W3g3a+ejDFY&Va-qOh>I}h>{lLne%^B7f7Cb9d zrDm992tE!FWknR8a582V+GnPLd+K<5lEnkS5z4be_`(2i#_<^Pt4jUKZyQ&h1L4Vh z<(B1`pH?5MLwmA2Vwc|ojZZcJwjg>3B!u{{0x6HpLEb%xk{Be;pqYlAvs)jf^L|}> zO^vIL7kH}vNUCw9;cw4F)vpOcJ9AaZ5RhU`>_xD~ZQFY4RcveX^ltA}N8gslI-=r4 z;-s+!%8;7R{fTpXv=4gbLwga?eyq`YPY_W`vNG3-VFiN3g+$u|FkRYvg6PNnEWJ*b zK8&TS0rOS3qy!cE^^REtI`XRb{Mci}t8RazjP%bAz2IKeGWUckVoP*KysAgGuu`1> z1H-nS3%r-r9wM&+Z#1hmd?M@nK%@5dWtYs*ExIozQEvuJ^`+ki-Iv~IXY}dXxX*L- zr-d4qDw)c*MzmzyageH}NW%cD)1erJj_L&+xal{Q22%N+b*C8eQ zFueRrc@J*I2k9aq#y3fCu79F5?OgwX{KG_sWd8T~h8q|k!-|KPiglkw^vL0KZWCs@K z#&LjPJM`p&AWi8@d}XYXNv6A{jgLii^yGs0N<|*INZMbv_r{bLBRR)=tS;0o{hDS}9mvam5QKs}L z*9OGMFB$NM$}e&vT?8F9o)h0^ASm^H2H;nPXFSI>0e|j?1pM;keF#k!y}U2^HB0eJ z@;=-Sh~gJ(rt+Y)GIo9EXvHt)eQ>11BSc{IAWvRVW`MPDo<7d6t({0mkJj)H z`L5i}uPZSRu{fs`f&uE79l2y{2agVFwC*pb>mowxJ)w8EpYoyid7CA7egIS)~2 z)yeRS;?r6Dv74$Pa&=06xF|J8l@4Je9%GBJ`(V1SWSIkSg~+e+udo*#h%MCnm{;an zLz&A-i4a-T2AyT(l`id-x#mh~odzLN%+hbv7DcjNNFW(>C(w}$yx9jv2wo*nq66KC z_g27+MbRTcOP?ID`*~n;QapIA;MWKy$L6{7OkiS~S6I|}SE3Ko3=gJskKkM((uyNE zzd=l;fJFz_#&aw2#Pb+jeGSTXL@}~WG>}UG0ozor*7NWK=_-UfXYd75tZI7q@U&r) zj3LK%dOF*XPZ)Co<{FwemfBhl|TlvFFph4j{{7X z_A)5_x{UC_1!ojT2FBbM9uny*bCWO|h2_oHz_XEJd{LgBWdfy~qa+vQm zc)uo?9O-%Y>A>_fVDbLAgUwhVue*w6d z&cUsD{W;E@#V0ztcJY^prZ)yvJXhH^bjXscom{5Nu>dAnB8C{@)+nzGmP%Q5nJty< zxs(R2!89=GoK^Y9APh_rZ%Hs5&#cojWLRDCm$E1SRrX7rr_6N#n%`&>W@kL7Tl`yx z>{(1y>O7Zev8l9TmNWEAnS4}LE-NOJSslcR8OCc%>EXp^0bN`KRWW_GE%W8Gwa}vl z(VGrumwEG_KC0OuM~;}Tk==y2xCz_4Nk*o!l-zM4EhX}jJHE1%w8Tqm?qGZo=ZT0o ziY*i&9t&$j zZ}}b~9quL^^OZS;h`Y!+lAOUXT_Sc;WNdCe3)Vuw#%3)sbuXg>9IVsX5!L(;ucCBN zft^^%D!&E7HzClJd)vef+{e2}<3ls>UCJDO7Zw7<<%<*g0fVwWrZU=pD&$aBvX_PJ z7{DtP0Z9@qSBe~&IfueXt4cZl?I-~vMbTpU%laandPT$^}7^ zEjSv%XR=0c!k`VD;V!XX`9ma6Mh*OBadtgVQ4V+XCS+F{LFcX z9}azOA-{0THM}GL2EV2&e$7_=nm~R%0AHzPALxg506e)7kh=I4doa$gLN|FcMfhbz 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%0D0-}DuHtO9s05y&GzA85Yt~I4k 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⁡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

e9F+>*SzBRJw2s}73_s053z``zm_P#a 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