From b9d83bf04489cc469537b3c34fe9267526f414df Mon Sep 17 00:00:00 2001 From: Simon Stewart Date: Tue, 3 Oct 2023 10:51:48 +0100 Subject: [PATCH] [bazel] Update `rules_dotnet` to the latest version (#12784) [bazel + .net] Rework Bazel builds of .Net code on top of latest `rules_dotnet` Co-authored-by: Jim Evans --- .bazelignore | 22 +- .github/workflows/ci-rbe.yml | 1 + .gitignore | 2 + .skipped-tests | 10 + WORKSPACE | 38 ++- dotnet/.config/dotnet-tools.json | 18 ++ dotnet/0001-Include-more-of-the-SDK.patch | 18 ++ ...ormation-about-location-of-the-nupkg.patch | 135 +++++++++++ ...ary-compatible-with-net-standard-2-0.patch | 185 +++++++++++++++ ...ure-data-runfiles-are-added-to-tests.patch | 28 +++ ...sure-csharp_library-files-are-unique.patch | 44 ++++ dotnet/BUILD.bazel | 22 +- dotnet/defs.bzl | 21 +- dotnet/paket.bzl | 51 ++++ dotnet/paket.dependencies | 26 +++ dotnet/paket.lock | 97 ++++++++ dotnet/private/dotnet_nunit_test_suite.bzl | 171 ++++++++++++++ dotnet/private/dotnet_utils.bzl | 31 +++ dotnet/private/framework.bzl | 2 + dotnet/private/framework_transition.bzl | 40 ++++ dotnet/private/generate_devtools.bzl | 1 - ...y_info.bzl => generated_assembly_info.bzl} | 0 dotnet/private/nuget_pack.bzl | 220 ++++++++++++++++++ dotnet/private/nunit_test.bzl | 104 +-------- dotnet/private/providers.bzl | 7 + dotnet/src/support/BUILD.bazel | 94 ++++---- .../WebDriver.Support.StrongNamed.nuspec | 5 +- dotnet/src/support/WebDriver.Support.csproj | 17 +- dotnet/src/support/WebDriver.Support.nuspec | 5 +- dotnet/src/tools/BUILD.bazel | 12 + dotnet/src/tools/Reflector.cs | 11 + dotnet/src/webdriver/BUILD.bazel | 187 +++++++-------- dotnet/src/webdriver/Firefox/FirefoxDriver.cs | 3 +- .../webdriver/Internal/Base64UrlEncoder.cs | 4 +- .../src/webdriver/Internal/PortUtilities.cs | 2 +- .../webdriver/Internal/ResourceUtilities.cs | 10 +- .../src/webdriver/Properties/AssemblyInfo.cs | 3 - .../webdriver/WebDriver.StrongNamed.nuspec | 5 +- dotnet/src/webdriver/WebDriver.csproj | 6 +- dotnet/src/webdriver/WebDriver.nuspec | 8 +- dotnet/src/webdriver/build/BUILD.bazel | 3 + dotnet/src/webdriver/cdp/BUILD.bazel | 41 ++-- dotnet/test/common/BUILD.bazel | 149 ++++++------ .../test/common/Environment/DriverFactory.cs | 40 +++- .../common/Environment/EnvironmentManager.cs | 46 ++-- .../common/Environment/TestEnvironment.cs | 3 + .../test/common/Environment/TestWebServer.cs | 82 +++---- .../common/Environment/TestWebServerConfig.cs | 2 + dotnet/test/common/PageLoadingTest.cs | 1 + dotnet/test/common/TakesScreenshotTest.cs | 14 +- .../test/common/WebDriver.Common.Tests.csproj | 2 +- dotnet/test/common/appconfig.json | 1 + dotnet/test/support/BUILD.bazel | 41 ---- dotnet/test/support/Events/BUILD.bazel | 52 +++++ dotnet/test/support/Extensions/BUILD.bazel | 18 ++ dotnet/test/support/UI/BUILD.bazel | 57 +++++ dotnet/update-deps.sh | 9 + .../environment/webserver/NettyAppServer.java | 7 +- scripts/github-actions/ci-build.sh | 6 +- scripts/ij.bazelproject | 1 - .../dotnet/devtools/src/generator/BUILD.bazel | 57 ++--- 61 files changed, 1742 insertions(+), 556 deletions(-) create mode 100644 dotnet/.config/dotnet-tools.json create mode 100644 dotnet/0001-Include-more-of-the-SDK.patch create mode 100644 dotnet/0002-Pass-through-information-about-location-of-the-nupkg.patch create mode 100644 dotnet/0003-Make-Runfiles-library-compatible-with-net-standard-2-0.patch create mode 100644 dotnet/0004-Ensure-data-runfiles-are-added-to-tests.patch create mode 100644 dotnet/0005-Ensure-csharp_library-files-are-unique.patch create mode 100644 dotnet/paket.bzl create mode 100644 dotnet/paket.dependencies create mode 100644 dotnet/paket.lock create mode 100644 dotnet/private/dotnet_nunit_test_suite.bzl create mode 100644 dotnet/private/dotnet_utils.bzl create mode 100644 dotnet/private/framework.bzl create mode 100644 dotnet/private/framework_transition.bzl rename dotnet/private/{assembly_info.bzl => generated_assembly_info.bzl} (100%) create mode 100644 dotnet/private/nuget_pack.bzl create mode 100644 dotnet/private/providers.bzl create mode 100644 dotnet/src/tools/BUILD.bazel create mode 100644 dotnet/src/tools/Reflector.cs delete mode 100644 dotnet/src/webdriver/Properties/AssemblyInfo.cs create mode 100644 dotnet/src/webdriver/build/BUILD.bazel delete mode 100644 dotnet/test/support/BUILD.bazel create mode 100644 dotnet/test/support/Events/BUILD.bazel create mode 100644 dotnet/test/support/Extensions/BUILD.bazel create mode 100644 dotnet/test/support/UI/BUILD.bazel create mode 100755 dotnet/update-deps.sh diff --git a/.bazelignore b/.bazelignore index 7dbb22ecb417b..e920cea308429 100644 --- a/.bazelignore +++ b/.bazelignore @@ -1,5 +1,25 @@ buck-out +dotnet/test/firefox/bin +dotnet/test/firefox/obj +dotnet/test/edge/bin +dotnet/test/edge/obj +dotnet/test/common/bin +dotnet/test/common/obj +dotnet/test/support/bin +dotnet/test/support/obj +dotnet/test/safari/bin +dotnet/test/safari/obj +dotnet/test/chrome/bin +dotnet/test/chrome/obj +dotnet/test/ie/bin +dotnet/test/ie/obj +dotnet/test/remote/bin +dotnet/test/remote/obj +dotnet/src/support/bin +dotnet/src/support/obj +dotnet/src/webdriver/bin +dotnet/src/webdriver/obj +java/build/production java/client/build java/server/build node_modules -java/build/production diff --git a/.github/workflows/ci-rbe.yml b/.github/workflows/ci-rbe.yml index 881f67492d254..3b4c36d9212f2 100644 --- a/.github/workflows/ci-rbe.yml +++ b/.github/workflows/ci-rbe.yml @@ -20,6 +20,7 @@ jobs: name: Test uses: ./.github/workflows/bazel.yml with: + # TODO: experiment with turning off caches name: All RBE tests cache-key: rbe ruby-version: jruby-9.4.2.0 diff --git a/.gitignore b/.gitignore index 63e5176c32523..2e1040729da15 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,8 @@ test-output/ common/build /build/ cpp/iedriver/IEReturnTypes.h +dotnet/.idea/ +dotnet/packages/ java/client/src/org/openqa/selenium/ie/IeReturnTypes.java java/server/test/org/openqa/selenium/example javascript/deps.js diff --git a/.skipped-tests b/.skipped-tests index 6009b57437413..3d5a74fb9ce91 100644 --- a/.skipped-tests +++ b/.skipped-tests @@ -1,3 +1,13 @@ +-//dotnet/test/common:DevTools/DevToolsNetworkTest-chrome +-//dotnet/test/common:Interactions/BasicMouseInterfaceTest-chrome +-//dotnet/test/common:Interactions/BasicMouseInterfaceTest-firefox +-//dotnet/test/common:JavascriptEnabledBrowserTest-chrome +-//dotnet/test/common:NetworkInterceptionTests-chrome +-//dotnet/test/common:TakesScreenshotTest-chrome +-//dotnet/test/common:TakesScreenshotTest-firefox +-//dotnet/test/common:VirtualAuthn/VirtualAuthenticatorTest-chrome +-//dotnet/test/support/UI:SelectBrowserTests-firefox +-//dotnet/test/support/UI:SmallTests -//java/test/org/openqa/selenium:FormHandlingTest-chrome -//java/test/org/openqa/selenium/bidi:BiDiSessionTest-remote -//java/test/org/openqa/selenium/bidi:BiDiTest-remote diff --git a/WORKSPACE b/WORKSPACE index a9f1d9b7516cb..f665d2110d568 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -166,17 +166,41 @@ load("@maven//:defs.bzl", "pinned_maven_install") pinned_maven_install() http_archive( - name = "d2l_rules_csharp", - sha256 = "c0152befb1fd0e08527b38e41ef00b6627f9f0c2be6f2d23a4950f41701fa48a", - strip_prefix = "rules_csharp-50e2f6c79e7a53e50b4518239b5ebcc61279759e", - urls = [ - "https://github.com/Brightspace/rules_csharp/archive/50e2f6c79e7a53e50b4518239b5ebcc61279759e.tar.gz", + name = "rules_dotnet", + patch_args = ["-p1"], + patches = [ + "//dotnet:0001-Include-more-of-the-SDK.patch", + "//dotnet:0002-Pass-through-information-about-location-of-the-nupkg.patch", + "//dotnet:0003-Make-Runfiles-library-compatible-with-net-standard-2-0.patch", + "//dotnet:0004-Ensure-data-runfiles-are-added-to-tests.patch", + "//dotnet:0005-Ensure-csharp_library-files-are-unique.patch", ], + sha256 = "f445400dac566eed9d7895aa0fb168a5453a07e5128dc1c4852cd9c537e0ca60", + strip_prefix = "rules_dotnet-0.10.7", + url = "https://github.com/bazelbuild/rules_dotnet/releases/download/v0.10.7/rules_dotnet-v0.10.7.tar.gz", +) + +load( + "@rules_dotnet//dotnet:repositories.bzl", + "dotnet_register_toolchains", + "rules_dotnet_dependencies", ) -load("//dotnet:workspace.bzl", "selenium_register_dotnet") +rules_dotnet_dependencies() + +dotnet_register_toolchains("dotnet", "7.0.400") + +load("@rules_dotnet//dotnet:rules_dotnet_nuget_packages.bzl", "rules_dotnet_nuget_packages") + +rules_dotnet_nuget_packages() + +load("@rules_dotnet//dotnet:paket2bazel_dependencies.bzl", "paket2bazel_dependencies") + +paket2bazel_dependencies() + +load("//dotnet:paket.bzl", "paket") -selenium_register_dotnet() +paket() http_archive( name = "rules_rust", diff --git a/dotnet/.config/dotnet-tools.json b/dotnet/.config/dotnet-tools.json new file mode 100644 index 0000000000000..e5d58358c4aae --- /dev/null +++ b/dotnet/.config/dotnet-tools.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "paket": { + "version": "7.2.1", + "commands": [ + "paket" + ] + }, + "aver": { + "version": "1.0.2", + "commands": [ + "aver" + ] + } + } +} \ No newline at end of file diff --git a/dotnet/0001-Include-more-of-the-SDK.patch b/dotnet/0001-Include-more-of-the-SDK.patch new file mode 100644 index 0000000000000..c89f9364d6c29 --- /dev/null +++ b/dotnet/0001-Include-more-of-the-SDK.patch @@ -0,0 +1,18 @@ + dotnet/repositories.bzl | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/dotnet/repositories.bzl b/dotnet/repositories.bzl +index 988559e..cf8fd6d 100644 +--- a/dotnet/repositories.bzl ++++ b/dotnet/repositories.bzl +@@ -83,9 +83,7 @@ filegroup( + }}), + data = glob([ + "host/**/*", +- "sdk/**/*.dll", +- "sdk/**/dotnet.runtimeconfig.json", +- "sdk/**/dotnet.deps.json", ++ "sdk/**/*", + "shared/Microsoft.NETCore.App/**/*", + ]), + visibility = ["//visibility:public"], diff --git a/dotnet/0002-Pass-through-information-about-location-of-the-nupkg.patch b/dotnet/0002-Pass-through-information-about-location-of-the-nupkg.patch new file mode 100644 index 0000000000000..f8d7d49fdec5e --- /dev/null +++ b/dotnet/0002-Pass-through-information-about-location-of-the-nupkg.patch @@ -0,0 +1,135 @@ +diff --git a/dotnet/private/providers.bzl b/dotnet/private/providers.bzl +index df00a25..0b06638 100644 +--- a/dotnet/private/providers.bzl ++++ b/dotnet/private/providers.bzl +@@ -44,6 +44,7 @@ NuGetInfo = provider( + fields = { + "targeting_pack_overrides": "map[string, string]: Targeting packs like e.g. Microsoft.NETCore.App.Ref have a PackageOverride.txt that includes a list of NuGet packages that should be omitted in a compiliation because they are included in the targeting pack", + "sha512": "string: the SHA512 SRI string for the package", ++ "nupkg": "File: the underlying `.nupkg` file which provides this package", + }, + ) + +diff --git a/dotnet/private/rules/nuget/imports.bzl b/dotnet/private/rules/nuget/imports.bzl +index a41bc70..79ebc94 100644 +--- a/dotnet/private/rules/nuget/imports.bzl ++++ b/dotnet/private/rules/nuget/imports.bzl +@@ -59,6 +59,7 @@ def _import_library(ctx): + ), NuGetInfo( + targeting_pack_overrides = ctx.attr.targeting_pack_overrides, + sha512 = ctx.attr.sha512, ++ nupkg = ctx.file.nupkg, + )] + + import_library = rule( +@@ -107,6 +108,10 @@ import_library = rule( + "sha512": attr.string( + doc = "The SHA512 sum of the NuGet package", + ), ++ "nupkg": attr.label( ++ doc = "The `.nupkg` file providing this import", ++ allow_single_file = True, ++ ), + }, + toolchains = [ + "@rules_dotnet//dotnet:toolchain_type", +diff --git a/dotnet/private/rules/nuget/nuget_archive.bzl b/dotnet/private/rules/nuget/nuget_archive.bzl +index 38a9473..683abdd 100644 +--- a/dotnet/private/rules/nuget/nuget_archive.bzl ++++ b/dotnet/private/rules/nuget/nuget_archive.bzl +@@ -19,6 +19,8 @@ load( + "RUNTIME_GRAPH", + ) + ++GLOBAL_NUGET_PREFIX = "nuget" ++ + def _is_windows(repository_ctx): + """Returns true if the host operating system is windows.""" + os_name = repository_ctx.os.name.lower() +@@ -321,7 +323,17 @@ def _nuget_archive_impl(ctx): + + # Then get the auth dict for the package base urls + auth = _get_auth_dict(ctx, ctx.attr.netrc, urls) +- ctx.download_and_extract(urls, type = "zip", integrity = ctx.attr.sha512, auth = auth) ++ file_name = "%s.zip" % ctx.name ++ nupkg_name = "%s.%s.nupkg" % (ctx.attr.id, ctx.attr.version) ++ names = [nupkg_name] ++ if nupkg_name.startswith(GLOBAL_NUGET_PREFIX): ++ nupkg_name = nupkg_name[len(GLOBAL_NUGET_PREFIX) + 1:] ++ names.append(nupkg_name) ++ ++ ctx.download(urls, output = file_name, integrity = ctx.attr.sha512, auth = auth) ++ ctx.extract(archive = file_name) ++ for name in names: ++ ctx.symlink(file_name, name) + + files = _read_dir(ctx, ".").replace(str(ctx.path(".")) + "/", "").splitlines() + +@@ -447,6 +459,7 @@ load("@rules_dotnet//dotnet/private/rules/nuget:nuget_archive.bzl", "tfm_filegro + "filegroup(name = \"data\", srcs = [])", + _create_rid_native_select("native", native) or "filegroup(name = \"native\", srcs = [])", + "filegroup(name = \"content_files\", srcs = [%s])" % ",".join(["\n \"%s\"" % a for a in groups.get("contentFiles")["any"]]), ++ "exports_files([\"%s\"])" % nupkg_name, + ])) + + nuget_archive = repository_rule( +diff --git a/dotnet/private/rules/nuget/nuget_repo.bzl b/dotnet/private/rules/nuget/nuget_repo.bzl +index 77c2a67..c5cc56d 100644 +--- a/dotnet/private/rules/nuget/nuget_repo.bzl ++++ b/dotnet/private/rules/nuget/nuget_repo.bzl +@@ -1,9 +1,7 @@ + "NuGet Repo" + + load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") +-load("@rules_dotnet//dotnet/private/rules/nuget:nuget_archive.bzl", "nuget_archive") +- +-_GLOBAL_NUGET_PREFIX = "nuget" ++load("@rules_dotnet//dotnet/private/rules/nuget:nuget_archive.bzl", "GLOBAL_NUGET_PREFIX", "nuget_archive") + + def _nuget_repo_impl(ctx): + for package in ctx.attr.packages: +@@ -22,8 +20,15 @@ def _nuget_repo_impl(ctx): + targeting_pack_overrides = ctx.attr.targeting_pack_overrides[name.lower()] + template = Label("@rules_dotnet//dotnet/private/rules/nuget:template.BUILD") + ++ nupkg_path = "@{PREFIX}.{NAME_LOWER}.v{VERSION}//:{NAME_LOWER}.{VERSION}.nupkg".format( ++ PREFIX = GLOBAL_NUGET_PREFIX, ++ NAME = name, ++ NAME_LOWER = name.lower(), ++ VERSION = version, ++ ) ++ + ctx.template("{}/{}/BUILD.bazel".format(name.lower(), version), template, { +- "{PREFIX}": _GLOBAL_NUGET_PREFIX, ++ "{PREFIX}": GLOBAL_NUGET_PREFIX, + "{NAME}": name, + "{NAME_LOWER}": name.lower(), + "{VERSION}": version, +@@ -36,7 +41,7 @@ def _nuget_repo_impl(ctx): + ctx.file("{}/BUILD.bazel".format(name.lower()), r"""package(default_visibility = ["//visibility:public"]) + alias(name = "{name}", actual = "//{name}/{version}") + alias(name = "content_files", actual = "@{prefix}.{name}.v{version}//:content_files") +-""".format(prefix = _GLOBAL_NUGET_PREFIX, name = name.lower(), version = version)) ++""".format(prefix = GLOBAL_NUGET_PREFIX, name = name.lower(), version = version)) + + _nuget_repo = repository_rule( + _nuget_repo_impl, +@@ -63,7 +68,7 @@ def nuget_repo(name, packages): + # maybe another nuget_repo has the same nuget package dependency + maybe( + nuget_archive, +- name = "{}.{}.v{}".format(_GLOBAL_NUGET_PREFIX, package_name, version), ++ name = "{}.{}.v{}".format(GLOBAL_NUGET_PREFIX, package_name, version), + sources = package["sources"], + netrc = package.get("netrc", None), + id = package_name, +diff --git a/dotnet/private/rules/nuget/template.BUILD b/dotnet/private/rules/nuget/template.BUILD +index 783f025..b62bce2 100644 +--- a/dotnet/private/rules/nuget/template.BUILD ++++ b/dotnet/private/rules/nuget/template.BUILD +@@ -16,4 +16,5 @@ import_library( + deps = select({ + {DEPS}, + }), ++ nupkg = "@{PREFIX}.{NAME_LOWER}.v{VERSION}//:{NAME_LOWER}.{VERSION}.nupkg" + ) diff --git a/dotnet/0003-Make-Runfiles-library-compatible-with-net-standard-2-0.patch b/dotnet/0003-Make-Runfiles-library-compatible-with-net-standard-2-0.patch new file mode 100644 index 0000000000000..6f9987e00d250 --- /dev/null +++ b/dotnet/0003-Make-Runfiles-library-compatible-with-net-standard-2-0.patch @@ -0,0 +1,185 @@ +diff --git a/tools/runfiles/BUILD.bazel b/tools/runfiles/BUILD.bazel +index a715e113..14929c3c 100644 +--- a/tools/runfiles/BUILD.bazel ++++ b/tools/runfiles/BUILD.bazel +@@ -7,9 +7,9 @@ csharp_library( + name = "runfiles", + srcs = ["Runfiles.cs"], + private_deps = [ +- "@rules_dotnet_nuget_packages//netstandard.library.ref", ++ "@rules_dotnet_nuget_packages//netstandard.library", + ], +- target_frameworks = ["netstandard2.1"], ++ target_frameworks = ["netstandard2.0"], + visibility = ["//visibility:public"], + deps = [ + ], +diff --git a/tools/runfiles/Runfiles.cs b/tools/runfiles/Runfiles.cs +index 0190e3a6..a9bc716e 100644 +--- a/tools/runfiles/Runfiles.cs ++++ b/tools/runfiles/Runfiles.cs +@@ -15,7 +15,7 @@ namespace Bazel + /// USAGE: + /// + /// 1. Depend on this runfiles library from your build rule: +- /// ++ /// + /// + /// csharp_binary( + /// name = "my_binary", +@@ -23,7 +23,7 @@ namespace Bazel + /// deps = ["@bazel_tools//tools/java/runfiles"], + /// ) + /// +- /// ++ /// + /// 2. Import the runfiles library. + /// + /// +@@ -47,7 +47,7 @@ namespace Bazel + /// var path = runfiles.Rlocation("path/to/binary"); + /// var process = new System.Diagnostics.Process(); + /// process.StartInfo.FileName = path; +- /// process.StartInfo.Environment = Runfiles.GetEnvVars(); ++ /// process.StartInfo.Environment = Runfiles.GetEnvVars(); + /// ... + /// process.Start(); + /// +@@ -83,10 +83,10 @@ public static Runfiles Create() + /// If contains RUNFILES_MANIFEST_ONLY=1, this method returns a manifest-based implementation. + /// The manifest's path is defined by the RUNFILES_MANIFEST_FILE key's value in . + /// +- /// If contains RUNFILES_DIR=SOME_DIRECTORY or JAVA_RUNFILES=SOME_DIRECTORY, ++ /// If contains RUNFILES_DIR=SOME_DIRECTORY or JAVA_RUNFILES=SOME_DIRECTORY, + /// this method returns a directory-based implementation. + /// +- /// Otherwise this method tries to find a the manifest file based on the argv0 ++ /// Otherwise this method tries to find a the manifest file based on the argv0 + /// If argv0 + ".runfiles/MANFIEST" exists RUNFILES_MANIFEST_FILE will be set to to that path + /// else if argv0 + ".runfiles_manifest" exists RUNFILES_MANIFEST_FILE will be set to to that path. + /// If argv0 + ".runfiles" exists RUNFILES_DIR will be set to to that path. +@@ -153,7 +153,7 @@ public static Runfiles Create(string argv0, IDictionary env) + + /// + /// Returns the runtime path of a runfile (a Bazel-built binary's/test's data-dependency). +- /// ++ /// + /// The returned path may not be valid. The caller should check the path's validity and that the + /// path exists. + /// +@@ -178,7 +178,7 @@ public string Rlocation(string path) + throw new ArgumentException($"path is absolute without a drive letter: \"{path}\""); + } + +- if (Path.IsPathFullyQualified(path)) ++ if (IsPathFullyQualified(path)) + { + return path; + } +@@ -193,6 +193,93 @@ public string Rlocation(string path) + /// + public abstract IDictionary GetEnvVars(); + ++ /// ++ /// Returns true if the path is fixed to a specific drive or UNC path. This method does no ++ /// validation of the path (URIs will be returned as relative as a result). ++ /// Returns false if the path specified is relative to the current drive or working directory. ++ /// ++ /// Path to check. ++ /// ++ /// Handles paths that use the alternate directory separator. It is a frequent mistake to ++ /// assume that rooted paths are not relative. This isn't the case. ++ /// "C:a" is drive relative- meaning that it will be resolved against the current directory ++ /// for C: (rooted, but relative). "C:\a" is rooted and not relative (the current directory ++ /// will not be used to modify the path). ++ /// ++ /// ++ /// Thrown if is null. ++ /// ++ private static bool IsPathFullyQualified(string path) ++ { ++ if (path == null) ++ { ++ throw new ArgumentNullException(nameof(path)); ++ } ++ ++ return !IsPathPartiallyQualified(path); ++ } ++ ++ /// ++ /// Returns true if the path specified is relative to the current drive or working directory. ++ /// Returns false if the path is fixed to a specific drive or UNC path. This method does no ++ /// validation of the path (URIs will be returned as relative as a result). ++ /// ++ /// ++ /// Handles paths that use the alternate directory separator. It is a frequent mistake to ++ /// assume that rooted paths (Path.IsPathRooted) are not relative. This isn't the case. ++ /// "C:a" is drive relative- meaning that it will be resolved against the current directory ++ /// for C: (rooted, but relative). "C:\a" is rooted and not relative (the current directory ++ /// will not be used to modify the path). ++ /// ++ private static bool IsPathPartiallyQualified(string path) ++ { ++ if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ++ { ++ return !Path.IsPathRooted(path); ++ } ++ else ++ { ++ if (path.Length < 2) ++ { ++ // It isn't fixed, it must be relative. There is no way to specify a fixed ++ // path with one character (or less). ++ return false; ++ } ++ ++ if (IsDirectorySeparator(path[0])) ++ { ++ // There is no valid way to specify a relative path with two initial slashes or ++ // \? as ? isn't valid for drive relative paths and \??\ is equivalent to \\?\ ++ return !(path[1] == '?' || IsDirectorySeparator(path[1])); ++ } ++ ++ // The only way to specify a fixed path that doesn't begin with two slashes ++ // is the drive, colon, slash format- i.e. C:\ ++ return !((path.Length >= 3) ++ && (path[1] == Path.VolumeSeparatorChar) ++ && IsDirectorySeparator(path[2]) ++ // To match old behavior we'll check the drive character for validity as the path is technically ++ // not qualified if you don't have a valid drive. "=:\" is the "=" file's default data stream. ++ && IsValidDriveChar(path[0])); ++ } ++ } ++ ++ /// ++ /// True if the given character is a directory separator. ++ /// ++ private static bool IsDirectorySeparator(char character) ++ { ++ return character == Path.DirectorySeparatorChar || character == Path.AltDirectorySeparatorChar; ++ } ++ ++ /// ++ /// Returns true if the given character is a valid drive letter ++ /// ++ private static bool IsValidDriveChar(char value) ++ { ++ return (uint)((value | 0x20) - 'a') <= (uint)('z' - 'a'); ++ } ++ + private static Boolean isManifestOnly(IDictionary env) + { + env.TryGetValue("RUNFILES_MANIFEST_ONLY", out var value); +diff --git a/tools/runfiles/Runfiles.csproj b/tools/runfiles/Runfiles.csproj +index 83c3bbf5..83b7ca42 100644 +--- a/tools/runfiles/Runfiles.csproj ++++ b/tools/runfiles/Runfiles.csproj +@@ -1,7 +1,7 @@ + + + +- netstandard2.1 ++ netstandard2.0 + false + + diff --git a/dotnet/0004-Ensure-data-runfiles-are-added-to-tests.patch b/dotnet/0004-Ensure-data-runfiles-are-added-to-tests.patch new file mode 100644 index 0000000000000..99c0675075d4e --- /dev/null +++ b/dotnet/0004-Ensure-data-runfiles-are-added-to-tests.patch @@ -0,0 +1,28 @@ +diff --git a/dotnet/private/rules/common/binary.bzl b/dotnet/private/rules/common/binary.bzl +index 1c48385..4063d24 100644 +--- a/dotnet/private/rules/common/binary.bzl ++++ b/dotnet/private/rules/common/binary.bzl +@@ -143,12 +143,19 @@ def build_binary(ctx, compile_action): + if depsjson != None: + direct_runfiles.append(depsjson) + ++ runfiles = ctx.runfiles( ++ files = direct_runfiles, ++ transitive_files = depset(transitive = [result.transitive_libs, result.transitive_native, result.transitive_data]), ++ ) ++ ++ for d in ctx.attr.data: ++ if not DefaultInfo in d: ++ continue ++ runfiles = runfiles.merge(d[DefaultInfo].default_runfiles) ++ + default_info = DefaultInfo( + executable = launcher, +- runfiles = ctx.runfiles( +- files = direct_runfiles, +- transitive_files = depset(transitive = [result.transitive_libs, result.transitive_native, result.transitive_data]), +- ), ++ runfiles = runfiles, + files = depset(default_info_files), + ) + diff --git a/dotnet/0005-Ensure-csharp_library-files-are-unique.patch b/dotnet/0005-Ensure-csharp_library-files-are-unique.patch new file mode 100644 index 0000000000000..fcd79427caa70 --- /dev/null +++ b/dotnet/0005-Ensure-csharp_library-files-are-unique.patch @@ -0,0 +1,44 @@ +diff --git a/dotnet/private/rules/common/binary.bzl b/dotnet/private/rules/common/binary.bzl +index 1c48385..fc63f69 100644 +--- a/dotnet/private/rules/common/binary.bzl ++++ b/dotnet/private/rules/common/binary.bzl +@@ -98,7 +98,7 @@ def build_binary(ctx, compile_action): + depsjson = None + if is_core_framework(tfm): + # Create the runtimeconfig.json for the binary +- runtimeconfig = ctx.actions.declare_file("bazelout/%s/%s.runtimeconfig.json" % (tfm, ctx.attr.out or ctx.attr.name)) ++ runtimeconfig = ctx.actions.declare_file("bazelout/%s/%s/%s.runtimeconfig.json" % (tfm, ctx.attr.name, ctx.attr.out or ctx.attr.name)) + runtimeconfig_struct = generate_runtimeconfig( + target_framework = tfm, + project_sdk = ctx.attr.project_sdk, +@@ -114,6 +114,8 @@ def build_binary(ctx, compile_action): + "./external", + "../", + "../external", ++ "../../", ++ "../../external", + # This one is for when the binary target is used as an tool in e.g. a custom rule + "{}.runfiles".format(launcher.path), + ] +@@ -122,7 +124,7 @@ def build_binary(ctx, compile_action): + content = json.encode_indent(runtimeconfig_struct), + ) + +- depsjson = ctx.actions.declare_file("bazelout/%s/%s.deps.json" % (tfm, ctx.attr.out or ctx.attr.name)) ++ depsjson = ctx.actions.declare_file("bazelout/%s/%s/%s.deps.json" % (tfm, ctx.attr.name, ctx.attr.out or ctx.attr.name)) + depsjson_struct = generate_depsjson( + ctx, + target_framework = tfm, +diff --git a/dotnet/private/rules/csharp/actions/csharp_assembly.bzl b/dotnet/private/rules/csharp/actions/csharp_assembly.bzl +index c30cf6a..d031d8b 100644 +--- a/dotnet/private/rules/csharp/actions/csharp_assembly.bzl ++++ b/dotnet/private/rules/csharp/actions/csharp_assembly.bzl +@@ -145,7 +145,7 @@ def AssemblyAction( + + defines = framework_preprocessor_symbols(target_framework) + defines + +- out_dir = "bazelout/" + target_framework ++ out_dir = "bazelout/%s/%s" % (target_framework, target_name) + out_ext = "dll" + + out_dll = actions.declare_file("%s/%s.%s" % (out_dir, assembly_name, out_ext)) diff --git a/dotnet/BUILD.bazel b/dotnet/BUILD.bazel index 4fbb077ff88a1..13a56b1506092 100644 --- a/dotnet/BUILD.bazel +++ b/dotnet/BUILD.bazel @@ -1,12 +1,22 @@ -load("@bazel_skylib//rules:common_settings.bzl", "string_flag") +load("@rules_pkg//pkg:zip.bzl", "pkg_zip") exports_files([ - "WebDriver.snk", "AssemblyInfo.cs.template", + "WebDriver.snk", ]) -string_flag( - name = "nuget-api-key", - build_setting_default = "", - visibility = ["//dotnet:__subpackages__"], +pkg_zip( + name = "strongnamed", + srcs = [ + "//dotnet/src/support:support-strongnamed", + "//dotnet/src/webdriver:webdriver-strongnamed", + ], +) + +pkg_zip( + name = "release", + srcs = [ + "//dotnet/src/support", + "//dotnet/src/webdriver", + ], ) diff --git a/dotnet/defs.bzl b/dotnet/defs.bzl index 98c5b433c7d96..827de3f8d904a 100644 --- a/dotnet/defs.bzl +++ b/dotnet/defs.bzl @@ -1,9 +1,10 @@ +load("@rules_dotnet//dotnet:defs.bzl", _csharp_binary = "csharp_binary", _csharp_library = "csharp_library", _csharp_test = "csharp_test") load("//dotnet:selenium-dotnet-version.bzl", "SUPPORTED_DEVTOOLS_VERSIONS") -load("//dotnet/private:assembly_info.bzl", _generated_assembly_info = "generated_assembly_info") -load("//dotnet/private:executable_assembly.bzl", _csharp_executable = "csharp_executable") +load("//dotnet/private:dotnet_nunit_test_suite.bzl", _dotnet_nunit_test_suite = "dotnet_nunit_test_suite") +load("//dotnet/private:framework.bzl", _framework = "framework") load("//dotnet/private:generate_devtools.bzl", _generate_devtools = "generate_devtools") -load("//dotnet/private:merge_assemblies.bzl", _merged_assembly = "merged_assembly") -load("//dotnet/private:nuget.bzl", _nuget_package = "nuget_package", _nuget_push = "nuget_push") +load("//dotnet/private:generated_assembly_info.bzl", _generated_assembly_info = "generated_assembly_info") +load("//dotnet/private:nuget_pack.bzl", _nuget_pack = "nuget_pack") load("//dotnet/private:nunit_test.bzl", _nunit_test = "nunit_test") def devtools_version_targets(): @@ -12,10 +13,12 @@ def devtools_version_targets(): targets.append("//dotnet/src/webdriver/cdp:generate-{}".format(devtools_version)) return targets -generated_assembly_info = _generated_assembly_info -csharp_executable = _csharp_executable +csharp_binary = _csharp_binary +csharp_library = _csharp_library +csharp_test = _csharp_test +dotnet_nunit_test_suite = _dotnet_nunit_test_suite +framework = _framework generate_devtools = _generate_devtools -merged_assembly = _merged_assembly -nuget_package = _nuget_package -nuget_push = _nuget_push +generated_assembly_info = _generated_assembly_info +nuget_pack = _nuget_pack nunit_test = _nunit_test diff --git a/dotnet/paket.bzl b/dotnet/paket.bzl new file mode 100644 index 0000000000000..958e104ab84a6 --- /dev/null +++ b/dotnet/paket.bzl @@ -0,0 +1,51 @@ +"Generated by paket2bazel" + +load("@rules_dotnet//dotnet:defs.bzl", "nuget_repo") + +def paket(): + "paket" + nuget_repo( + name = "paket.nuget", + packages = [ + {"id": "BenderProxy", "version": "1.0.0", "sha512": "sha512-zNsAtO6ZwNa0MfyFFJAzA6rsTtqnjY+bD2gCDHSUIbRS31wRJ9GfOeummSlEVaH/DSxxiuQaIhZmtIFAM0WW+A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "Castle.Core", "version": "5.1.1", "sha512": "sha512-N4oUnr+qEtAMs1vK7ogGgD33vHWYDJ4MZ/NuPgV9avKrrq0kzYJ0qVlcesdMuVl8nWkTsRJbhuaxVqZvehrC+g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Diagnostics.EventLog"], "net6.0": ["System.Diagnostics.EventLog"], "net7.0": ["System.Diagnostics.EventLog"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "netcoreapp2.1": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "netcoreapp2.2": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "netcoreapp3.0": ["System.Diagnostics.EventLog"], "netcoreapp3.1": ["System.Diagnostics.EventLog"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "netstandard2.1": ["System.Diagnostics.EventLog"]}, "targeting_pack_overrides": []}, + {"id": "CommandLineParser", "version": "2.8.0", "sha512": "sha512-jCdlE9/pHlvHLPs7lqDSRBHuO9Lpgy1CP2rePzlkoBHbuXfKkGAXUPoTOgol/nL2aVW+f2mnL11rc8fzEwlLXw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "Handlebars.Net", "version": "1.11.5", "sha512": "sha512-0MwU7vAXI3hT+9W7r7vadVZ21+HoGC5Z0Qc39JP+xxMlF7YOyZEhFByoQ2gtldWyeG6Gt2LglcFH8kJaXg/uiQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "net6.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "net7.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp1.0": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netcoreapp1.1": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netcoreapp2.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp2.1": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp2.2": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp3.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp3.1": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.4": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.5": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.6": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard2.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netstandard2.1": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"]}, "targeting_pack_overrides": []}, + {"id": "Humanizer.Core", "version": "2.8.26", "sha512": "sha512-hdDm8u0FrPEorV1qXA+W01DCR9zeNX5fwe5fXFUyzmA/JjLxMjt7/W672rSOWIjWHGkD6cZYOFLjIg/0O+a8kg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["NETStandard.Library"], "net451": ["NETStandard.Library"], "net452": ["NETStandard.Library"], "net46": ["NETStandard.Library"], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["NETStandard.Library"], "netcoreapp1.1": ["NETStandard.Library"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["NETStandard.Library"], "netstandard1.1": ["NETStandard.Library"], "netstandard1.2": ["NETStandard.Library"], "netstandard1.3": ["NETStandard.Library"], "netstandard1.4": ["NETStandard.Library"], "netstandard1.5": ["NETStandard.Library"], "netstandard1.6": ["NETStandard.Library"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "Microsoft.AspNetCore.App.Ref", "version": "6.0.9", "sha512": "sha512-uD7Y3nff4uUBryVsahaW3/krbzh0yPI2DY9iCak/wPTqJucwmVszCmkEIQOfmT4L9f13xcsqHq3eN+ka6YvIYg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": ["Microsoft.Extensions.Caching.Abstractions|6.0.0", "Microsoft.Extensions.Caching.Memory|6.0.0", "Microsoft.Extensions.Configuration.Abstractions|6.0.0", "Microsoft.Extensions.Configuration.Binder|6.0.0", "Microsoft.Extensions.Configuration.CommandLine|6.0.0", "Microsoft.Extensions.Configuration|6.0.0", "Microsoft.Extensions.Configuration.EnvironmentVariables|6.0.0", "Microsoft.Extensions.Configuration.FileExtensions|6.0.0", "Microsoft.Extensions.Configuration.Ini|6.0.0", "Microsoft.Extensions.Configuration.Json|6.0.0", "Microsoft.Extensions.Configuration.UserSecrets|6.0.0", "Microsoft.Extensions.Configuration.Xml|6.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions|6.0.0", "Microsoft.Extensions.DependencyInjection|6.0.0", "Microsoft.Extensions.FileProviders.Abstractions|6.0.0", "Microsoft.Extensions.FileProviders.Composite|6.0.0", "Microsoft.Extensions.FileProviders.Physical|6.0.0", "Microsoft.Extensions.FileSystemGlobbing|6.0.0", "Microsoft.Extensions.Hosting.Abstractions|6.0.0", "Microsoft.Extensions.Hosting|6.0.0", "Microsoft.Extensions.Http|6.0.0", "Microsoft.Extensions.Logging.Abstractions|6.0.0", "Microsoft.Extensions.Logging.Configuration|6.0.0", "Microsoft.Extensions.Logging.Console|6.0.0", "Microsoft.Extensions.Logging.Debug|6.0.0", "Microsoft.Extensions.Logging|6.0.0", "Microsoft.Extensions.Logging.EventLog|6.0.0", "Microsoft.Extensions.Logging.EventSource|6.0.0", "Microsoft.Extensions.Logging.TraceSource|6.0.0", "Microsoft.Extensions.Options.ConfigurationExtensions|6.0.0", "Microsoft.Extensions.Options.DataAnnotations|6.0.0", "Microsoft.Extensions.Options|6.0.0", "Microsoft.Extensions.Primitives|6.0.0", "System.Diagnostics.EventLog|6.0.0", "System.IO.Pipelines|6.0.0", "System.Security.Cryptography.Xml|6.0.0", "Microsoft.AspNetCore.Antiforgery|6.0.0", "Microsoft.AspNetCore.Authentication.Abstractions|6.0.0", "Microsoft.AspNetCore.Authentication.Cookies|6.0.0", "Microsoft.AspNetCore.Authentication.Core|6.0.0", "Microsoft.AspNetCore.Authentication|6.0.0", "Microsoft.AspNetCore.Authentication.OAuth|6.0.0", "Microsoft.AspNetCore.Authorization|6.0.0", "Microsoft.AspNetCore.Authorization.Policy|6.0.0", "Microsoft.AspNetCore.Components.Authorization|6.0.0", "Microsoft.AspNetCore.Components|6.0.0", "Microsoft.AspNetCore.Components.Forms|6.0.0", "Microsoft.AspNetCore.Components.Server|6.0.0", "Microsoft.AspNetCore.Components.Web|6.0.0", "Microsoft.AspNetCore.Connections.Abstractions|6.0.0", "Microsoft.AspNetCore.CookiePolicy|6.0.0", "Microsoft.AspNetCore.Cors|6.0.0", "Microsoft.AspNetCore.Cryptography.Internal|6.0.0", "Microsoft.AspNetCore.Cryptography.KeyDerivation|6.0.0", "Microsoft.AspNetCore.DataProtection.Abstractions|6.0.0", "Microsoft.AspNetCore.DataProtection|6.0.0", "Microsoft.AspNetCore.DataProtection.Extensions|6.0.0", "Microsoft.AspNetCore.Diagnostics.Abstractions|6.0.0", "Microsoft.AspNetCore.Diagnostics|6.0.0", "Microsoft.AspNetCore.Diagnostics.HealthChecks|6.0.0", "Microsoft.AspNetCore|6.0.0", "Microsoft.AspNetCore.HostFiltering|6.0.0", "Microsoft.AspNetCore.Hosting.Abstractions|6.0.0", "Microsoft.AspNetCore.Hosting|6.0.0", "Microsoft.AspNetCore.Hosting.Server.Abstractions|6.0.0", "Microsoft.AspNetCore.Html.Abstractions|6.0.0", "Microsoft.AspNetCore.Http.Abstractions|6.0.0", "Microsoft.AspNetCore.Http.Connections.Common|6.0.0", "Microsoft.AspNetCore.Http.Connections|6.0.0", "Microsoft.AspNetCore.Http|6.0.0", "Microsoft.AspNetCore.Http.Extensions|6.0.0", "Microsoft.AspNetCore.Http.Features|6.0.0", "Microsoft.AspNetCore.Http.Results|6.0.0", "Microsoft.AspNetCore.HttpLogging|6.0.0", "Microsoft.AspNetCore.HttpOverrides|6.0.0", "Microsoft.AspNetCore.HttpsPolicy|6.0.0", "Microsoft.AspNetCore.Identity|6.0.0", "Microsoft.AspNetCore.Localization|6.0.0", "Microsoft.AspNetCore.Localization.Routing|6.0.0", "Microsoft.AspNetCore.Metadata|6.0.0", "Microsoft.AspNetCore.Mvc.Abstractions|6.0.0", "Microsoft.AspNetCore.Mvc.ApiExplorer|6.0.0", "Microsoft.AspNetCore.Mvc.Core|6.0.0", "Microsoft.AspNetCore.Mvc.Cors|6.0.0", "Microsoft.AspNetCore.Mvc.DataAnnotations|6.0.0", "Microsoft.AspNetCore.Mvc|6.0.0", "Microsoft.AspNetCore.Mvc.Formatters.Json|6.0.0", "Microsoft.AspNetCore.Mvc.Formatters.Xml|6.0.0", "Microsoft.AspNetCore.Mvc.Localization|6.0.0", "Microsoft.AspNetCore.Mvc.Razor|6.0.0", "Microsoft.AspNetCore.Mvc.RazorPages|6.0.0", "Microsoft.AspNetCore.Mvc.TagHelpers|6.0.0", "Microsoft.AspNetCore.Mvc.ViewFeatures|6.0.0", "Microsoft.AspNetCore.Razor|6.0.0", "Microsoft.AspNetCore.Razor.Runtime|6.0.0", "Microsoft.AspNetCore.ResponseCaching.Abstractions|6.0.0", "Microsoft.AspNetCore.ResponseCaching|6.0.0", "Microsoft.AspNetCore.ResponseCompression|6.0.0", "Microsoft.AspNetCore.Rewrite|6.0.0", "Microsoft.AspNetCore.Routing.Abstractions|6.0.0", "Microsoft.AspNetCore.Routing|6.0.0", "Microsoft.AspNetCore.Server.HttpSys|6.0.0", "Microsoft.AspNetCore.Server.IIS|6.0.0", "Microsoft.AspNetCore.Server.IISIntegration|6.0.0", "Microsoft.AspNetCore.Server.Kestrel.Core|6.0.0", "Microsoft.AspNetCore.Server.Kestrel|6.0.0", "Microsoft.AspNetCore.Server.Kestrel.Transport.Quic|6.0.0", "Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets|6.0.0", "Microsoft.AspNetCore.Session|6.0.0", "Microsoft.AspNetCore.SignalR.Common|6.0.0", "Microsoft.AspNetCore.SignalR.Core|6.0.0", "Microsoft.AspNetCore.SignalR|6.0.0", "Microsoft.AspNetCore.SignalR.Protocols.Json|6.0.0", "Microsoft.AspNetCore.StaticFiles|6.0.0", "Microsoft.AspNetCore.WebSockets|6.0.0", "Microsoft.AspNetCore.WebUtilities|6.0.0", "Microsoft.Extensions.Configuration.KeyPerFile|6.0.0", "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions|6.0.0", "Microsoft.Extensions.Diagnostics.HealthChecks|6.0.0", "Microsoft.Extensions.Features|6.0.0", "Microsoft.Extensions.FileProviders.Embedded|6.0.0", "Microsoft.Extensions.Identity.Core|6.0.0", "Microsoft.Extensions.Identity.Stores|6.0.0", "Microsoft.Extensions.Localization.Abstractions|6.0.0", "Microsoft.Extensions.Localization|6.0.0", "Microsoft.Extensions.ObjectPool|6.0.0", "Microsoft.Extensions.WebEncoders|6.0.0", "Microsoft.JSInterop|6.0.0", "Microsoft.Net.Http.Headers|6.0.0"]}, + {"id": "Microsoft.Bcl.AsyncInterfaces", "version": "7.0.0", "sha512": "sha512-Nb9B1lxCab0LZi0ijNLEpw4hgwt0Wl8QQM1DxIhJS2otChAtIVMfyGrYl3YzdSjspvBYPliJlr0kCtizNAVe3w==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Threading.Tasks.Extensions"], "net462": ["System.Threading.Tasks.Extensions"], "net47": ["System.Threading.Tasks.Extensions"], "net471": ["System.Threading.Tasks.Extensions"], "net472": ["System.Threading.Tasks.Extensions"], "net48": ["System.Threading.Tasks.Extensions"], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["System.Threading.Tasks.Extensions"], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Threading.Tasks.Extensions"], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "Microsoft.CSharp", "version": "4.5.0", "sha512": "sha512-yWWeTbGCzBOlRPWDCIxiTZW1ecZiMbao0ZT97KKEWdBhrLvUqU8RdzkhzuCRQzvoxzxlR7vytO43OOgFdkxv6g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netcoreapp1.1": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["NETStandard.Library"], "netstandard1.1": ["NETStandard.Library"], "netstandard1.2": ["NETStandard.Library"], "netstandard1.3": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.4": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.5": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.6": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "Microsoft.Extensions.DependencyInjection", "version": "3.1.9", "sha512": "sha512-vMQqPTihUGUTAzlr4354IcThGnC+ayzonlXLGBmnC6tdNUi40kKlqVl1d71RFgqV7Sj6L/ZmATPaX/xxCj5hAA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net462": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net47": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net471": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net472": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net48": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net5.0": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "net6.0": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "net7.0": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "netcoreapp2.1": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "netcoreapp2.2": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "netcoreapp3.0": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "netcoreapp3.1": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "netstandard2.1": ["Microsoft.Extensions.DependencyInjection.Abstractions"]}, "targeting_pack_overrides": []}, + {"id": "Microsoft.Extensions.DependencyInjection.Abstractions", "version": "3.1.9", "sha512": "sha512-qbiwYBpKjQ2u3FNFDuznksbzsR7e/pUK2XR/osxiU/1Lo+M8MqjRnvBm5x/Uvtv2iDdMNQ2N+smrPgRGKDXboQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "Microsoft.NETCore.App.Ref", "version": "6.0.9", "sha512": "sha512-dudkoXKqcCPEjNnwYQzRipKGcIB21o3CjbTffACrnSmUAoZS+IdIv3COpwKIaZKDPl7euUUpb7WhAc0WH8+//A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": ["Microsoft.CSharp|4.4.0", "Microsoft.Win32.Primitives|4.3.0", "Microsoft.Win32.Registry|4.4.0", "runtime.debian.8-x64.runtime.native.System|4.3.0", "runtime.debian.8-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.debian.8-x64.runtime.native.System.Net.Http|4.3.0", "runtime.debian.8-x64.runtime.native.System.Net.Security|4.3.0", "runtime.debian.8-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.fedora.23-x64.runtime.native.System|4.3.0", "runtime.fedora.23-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.fedora.23-x64.runtime.native.System.Net.Http|4.3.0", "runtime.fedora.23-x64.runtime.native.System.Net.Security|4.3.0", "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.fedora.24-x64.runtime.native.System|4.3.0", "runtime.fedora.24-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.fedora.24-x64.runtime.native.System.Net.Http|4.3.0", "runtime.fedora.24-x64.runtime.native.System.Net.Security|4.3.0", "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.osx.10.10-x64.runtime.native.System|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Net.Http|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Net.Security|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.rhel.7-x64.runtime.native.System|4.3.0", "runtime.rhel.7-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.rhel.7-x64.runtime.native.System.Net.Http|4.3.0", "runtime.rhel.7-x64.runtime.native.System.Net.Security|4.3.0", "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "System.AppContext|4.3.0", "System.Buffers|4.4.0", "System.Collections|4.3.0", "System.Collections.Concurrent|4.3.0", "System.Collections.Immutable|1.4.0", "System.Collections.NonGeneric|4.3.0", "System.Collections.Specialized|4.3.0", "System.ComponentModel|4.3.0", "System.ComponentModel.EventBasedAsync|4.3.0", "System.ComponentModel.Primitives|4.3.0", "System.ComponentModel.TypeConverter|4.3.0", "System.Console|4.3.0", "System.Data.Common|4.3.0", "System.Diagnostics.Contracts|4.3.0", "System.Diagnostics.Debug|4.3.0", "System.Diagnostics.DiagnosticSource|4.4.0", "System.Diagnostics.FileVersionInfo|4.3.0", "System.Diagnostics.Process|4.3.0", "System.Diagnostics.StackTrace|4.3.0", "System.Diagnostics.TextWriterTraceListener|4.3.0", "System.Diagnostics.Tools|4.3.0", "System.Diagnostics.TraceSource|4.3.0", "System.Diagnostics.Tracing|4.3.0", "System.Dynamic.Runtime|4.3.0", "System.Globalization|4.3.0", "System.Globalization.Calendars|4.3.0", "System.Globalization.Extensions|4.3.0", "System.IO|4.3.0", "System.IO.Compression|4.3.0", "System.IO.Compression.ZipFile|4.3.0", "System.IO.FileSystem|4.3.0", "System.IO.FileSystem.AccessControl|4.4.0", "System.IO.FileSystem.DriveInfo|4.3.0", "System.IO.FileSystem.Primitives|4.3.0", "System.IO.FileSystem.Watcher|4.3.0", "System.IO.IsolatedStorage|4.3.0", "System.IO.MemoryMappedFiles|4.3.0", "System.IO.Pipes|4.3.0", "System.IO.UnmanagedMemoryStream|4.3.0", "System.Linq|4.3.0", "System.Linq.Expressions|4.3.0", "System.Linq.Queryable|4.3.0", "System.Net.Http|4.3.0", "System.Net.NameResolution|4.3.0", "System.Net.Primitives|4.3.0", "System.Net.Requests|4.3.0", "System.Net.Security|4.3.0", "System.Net.Sockets|4.3.0", "System.Net.WebHeaderCollection|4.3.0", "System.ObjectModel|4.3.0", "System.Private.DataContractSerialization|4.3.0", "System.Reflection|4.3.0", "System.Reflection.Emit|4.3.0", "System.Reflection.Emit.ILGeneration|4.3.0", "System.Reflection.Emit.Lightweight|4.3.0", "System.Reflection.Extensions|4.3.0", "System.Reflection.Metadata|1.5.0", "System.Reflection.Primitives|4.3.0", "System.Reflection.TypeExtensions|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.Runtime.InteropServices.RuntimeInformation|4.3.0", "System.Runtime.Loader|4.3.0", "System.Runtime.Numerics|4.3.0", "System.Runtime.Serialization.Formatters|4.3.0", "System.Runtime.Serialization.Json|4.3.0", "System.Runtime.Serialization.Primitives|4.3.0", "System.Security.AccessControl|4.4.0", "System.Security.Claims|4.3.0", "System.Security.Cryptography.Algorithms|4.3.0", "System.Security.Cryptography.Cng|4.4.0", "System.Security.Cryptography.Csp|4.3.0", "System.Security.Cryptography.Encoding|4.3.0", "System.Security.Cryptography.OpenSsl|4.4.0", "System.Security.Cryptography.Primitives|4.3.0", "System.Security.Cryptography.X509Certificates|4.3.0", "System.Security.Cryptography.Xml|4.4.0", "System.Security.Principal|4.3.0", "System.Security.Principal.Windows|4.4.0", "System.Text.Encoding|4.3.0", "System.Text.Encoding.Extensions|4.3.0", "System.Text.RegularExpressions|4.3.0", "System.Threading|4.3.0", "System.Threading.Overlapped|4.3.0", "System.Threading.Tasks|4.3.0", "System.Threading.Tasks.Extensions|4.3.0", "System.Threading.Tasks.Parallel|4.3.0", "System.Threading.Thread|4.3.0", "System.Threading.ThreadPool|4.3.0", "System.Threading.Timer|4.3.0", "System.ValueTuple|4.3.0", "System.Xml.ReaderWriter|4.3.0", "System.Xml.XDocument|4.3.0", "System.Xml.XmlDocument|4.3.0", "System.Xml.XmlSerializer|4.3.0", "System.Xml.XPath|4.3.0", "System.Xml.XPath.XDocument|4.3.0"]}, + {"id": "Microsoft.NETCore.App.Runtime.linux-x64", "version": "6.0.15", "sha512": "sha512-hO+FrI8U0/8oJOCevQb4PMqBmGTXGLCmnD0MSFdUiOnO9cNDb1MC4X+ndV/xVQyLnE/WJfYG8HDj84ieyj25ow==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "Microsoft.NETCore.App.Runtime.osx-arm64", "version": "6.0.15", "sha512": "sha512-YjL1PzK4SQgWWrDk8QIRwpgXraM8Yst0rbqicFioXrGV+/hltlfJMvfPY9NmHV8f2ydjcSdY88aBXHQxDOD/zw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "Microsoft.NETCore.App.Runtime.osx-x64", "version": "6.0.15", "sha512": "sha512-lM8ibaNG0wJJoEsHqyAqf3ZZmDRxRqtk48jx5zOuTV/hIqtjidbx+8i5FibNdAf/zBeONLHI29TdW8km+V1tTg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "Microsoft.NETCore.App.Runtime.win-x64", "version": "6.0.15", "sha512": "sha512-F/BqQdowumzmKRXewGJXG9+HhxhmzlNm8Jr151AX7RjAz/1cjSx5P/iZJsIimg+2uzIIGQI8+5UEpLnIFor5sA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "Microsoft.NETCore.Platforms", "version": "7.0.4", "sha512": "sha512-mcQWjuDBh4WHGG4WcBI0k025WAdA2afMm6fs42sm1f+3gRyNQUiuMVT5gAWNUGSHmlu6qn/TCnAQpfl4Gm6cBw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "Microsoft.NETCore.Targets", "version": "5.0.0", "sha512": "sha512-hYHm3JAjQO/nySxcl1EpZhYEW+2P3H1eLZNr+QxgO5TnLS6hqtfi5WchjQzjid45MYmhy2X7IOmcWtDP4fpMGw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "Microsoft.Win32.SystemEvents", "version": "7.0.0", "sha512": "sha512-GO6SWx/wSZIFvxOn67Y6OiIGdz9JGCg5CRDDbSAAvBDQeZFbybu9sEOUb9w/vUlQv+A2XakTFZg9Ug1w+tgbWQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "Moq", "version": "4.12.0", "sha512": "sha512-52OnOpSKKlXfi+ukMOeRJ1Md1bOeloP7L7HkzvWtjkfRBkWmpo3vBGWX4P1wPVJEfgrDTeXCvq8S1vLasXdFJA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net451": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net452": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net46": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net461": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net462": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net47": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net471": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net472": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net48": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net5.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net6.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net7.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Castle.Core", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": []}, + {"id": "NETStandard.Library", "version": "2.0.3", "sha512": "sha512-548M6mnBSJWxsIlkQHfbzoYxpiYFXZZSL00p4GHYv8PkiqFBnnT68mW5mGEsA/ch9fDO9GkPgkFQpWiXZN7mAQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["Microsoft.NETCore.Platforms"], "net451": ["Microsoft.NETCore.Platforms"], "net452": ["Microsoft.NETCore.Platforms"], "net46": ["Microsoft.NETCore.Platforms"], "net461": ["Microsoft.NETCore.Platforms"], "net462": ["Microsoft.NETCore.Platforms"], "net47": ["Microsoft.NETCore.Platforms"], "net471": ["Microsoft.NETCore.Platforms"], "net472": ["Microsoft.NETCore.Platforms"], "net48": ["Microsoft.NETCore.Platforms"], "net5.0": ["Microsoft.NETCore.Platforms"], "net6.0": ["Microsoft.NETCore.Platforms"], "net7.0": ["Microsoft.NETCore.Platforms"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.0": ["Microsoft.NETCore.Platforms"], "netstandard2.1": ["Microsoft.NETCore.Platforms"]}, "targeting_pack_overrides": []}, + {"id": "Newtonsoft.Json", "version": "13.0.1", "sha512": "sha512-g3MbZi6vBTeaI/hEbvR7vBETSd1DWLe9i1E4P+nPY34v5i94zqUqDXvdWC3G+7tYN9SnsdU9zzegrnRz4h7nsQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["Microsoft.CSharp", "NETStandard.Library"], "netcoreapp1.1": ["Microsoft.CSharp", "NETStandard.Library"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.1": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.2": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.3": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.4": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.5": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.6": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "NUnit", "version": "3.13.2", "sha512": "sha512-foKGnF2ckq6uRAybnw1PIMDsDxdp1rbuEBJ4t2LYa5HDL80mOcEUjdbVqRDMTsKNiikfkPEBoeyGV42ZXiLLQA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["NETStandard.Library"], "net6.0": ["NETStandard.Library"], "net7.0": ["NETStandard.Library"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["NETStandard.Library"], "netcoreapp2.1": ["NETStandard.Library"], "netcoreapp2.2": ["NETStandard.Library"], "netcoreapp3.0": ["NETStandard.Library"], "netcoreapp3.1": ["NETStandard.Library"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["NETStandard.Library"], "netstandard2.1": ["NETStandard.Library"]}, "targeting_pack_overrides": []}, + {"id": "NUnitLite", "version": "3.13.2", "sha512": "sha512-kPGW4B0ycZAqDPLPKU058JR9onD3svLKAYEghQ1Oyy1YC8bIgtniGUKUbjqeNI3i5KnqFMxEdiHTGF0XxDG9hQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": ["NUnit"], "net40": ["NUnit"], "net403": ["NUnit"], "net45": ["NUnit"], "net451": ["NUnit"], "net452": ["NUnit"], "net46": ["NUnit"], "net461": ["NUnit"], "net462": ["NUnit"], "net47": ["NUnit"], "net471": ["NUnit"], "net472": ["NUnit"], "net48": ["NUnit"], "net5.0": ["NUnit", "NETStandard.Library"], "net6.0": ["NUnit", "NETStandard.Library"], "net7.0": ["NUnit", "NETStandard.Library"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["NUnit", "NETStandard.Library"], "netcoreapp2.1": ["NUnit", "NETStandard.Library"], "netcoreapp2.2": ["NUnit", "NETStandard.Library"], "netcoreapp3.0": ["NUnit", "NETStandard.Library"], "netcoreapp3.1": ["NUnit", "NETStandard.Library"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["NUnit", "NETStandard.Library"], "netstandard2.1": ["NUnit", "NETStandard.Library"]}, "targeting_pack_overrides": []}, + {"id": "System.Diagnostics.EventLog", "version": "7.0.0", "sha512": "sha512-m/H4Rg7KukGEmfRpl+rXU1UbMN3GYbv42cbMHRgMwHIiUL3svKoFFR76Fk/mHN5TgrwGx64fS0Fp+p3qICKg/Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Security.Principal.Windows"], "net462": ["System.Security.Principal.Windows"], "net47": ["System.Security.Principal.Windows"], "net471": ["System.Security.Principal.Windows"], "net472": ["System.Security.Principal.Windows"], "net48": ["System.Security.Principal.Windows"], "net5.0": ["System.Security.Principal.Windows"], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Security.Principal.Windows"], "netcoreapp2.1": ["System.Security.Principal.Windows"], "netcoreapp2.2": ["System.Security.Principal.Windows"], "netcoreapp3.0": ["System.Security.Principal.Windows"], "netcoreapp3.1": ["System.Security.Principal.Windows"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Security.Principal.Windows"], "netstandard2.1": ["System.Security.Principal.Windows"]}, "targeting_pack_overrides": []}, + {"id": "System.Diagnostics.Tools", "version": "4.3.0", "sha512": "sha512-Fk1pd+chy860Tt57/XWwO42XceBCau+l1Axxhn6WQJL9xqaAi8vFVZ7XPsLFMsplfWR2r3mknKOth5uDZvE9kA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": []}, + {"id": "System.Drawing.Common", "version": "7.0.0", "sha512": "sha512-0TJd5U26gRDgGa/rqABgHC5OBAiyl7Mm3pIzPgKfpmPXFQ8CFVWyGi+4mkEaCK715ViOBDkU2pC2nAiPunLw7Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": ["Microsoft.Win32.SystemEvents"], "net7.0": ["Microsoft.Win32.SystemEvents"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "System.IO", "version": "4.3.0", "sha512": "sha512-v8paIePhmGuXZbE9xvvNb4uJ5ME4OFXR1+8la/G/L1GIl2nbU2WFnddgb79kVK3U2us7q1aZT/uY/R0D/ovB5g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"]}, "targeting_pack_overrides": []}, + {"id": "System.Reflection", "version": "4.3.0", "sha512": "sha512-IyW2ftYNzgMCgHBk8lQiy+G3+ydbU5tE+6PEqM5JJvIdeFKaXDSzHAPYDREPe6zpr5WJ1Fcma+rAFCIAV6+DMw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"]}, "targeting_pack_overrides": []}, + {"id": "System.Reflection.Emit", "version": "4.7.0", "sha512": "sha512-EMAyW5k6MdmTxYre7l8cb9f/Zhc78ivw0pXSm/sw8OAewwQqzqxeJFu2LY+/7WPOAq33TgTPVYEeDPPVQbiXqQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netcoreapp1.1": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.2": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.3": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.4": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.5": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.6": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard2.0": ["System.Reflection.Emit.ILGeneration"], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "System.Reflection.Emit.ILGeneration", "version": "4.7.0", "sha512": "sha512-iQ2Xw8qC8YCsh3+OUAMtD4g8LiA5r9ZxVhlDZn3Dok7C382JbLlPNyyXXCW3KRiv0Ebvwt7b1ZYqmIoCerrI2Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp1.1": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.1": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.2": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.3": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.4": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.5": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.6": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "System.Reflection.Primitives", "version": "4.3.0", "sha512": "sha512-1LnMkF9aXKuQAgYzjoiQaL9mwY7oY6KdaO/zzeLMynNBEqKoUfLi5TiKIewoAF+hkxfGTZsjkjsF1jRL4uSeqg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": []}, + {"id": "System.Reflection.TypeExtensions", "version": "4.7.0", "sha512": "sha512-Q/fczHO357fqTntQPZBSwhstHCcZFvgqOwBnkO+lhMyS2pYBDtXyfRQblK3SYXN8GXHOEJzjNM5Tr12zp73c6A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["System.Reflection", "System.Runtime"], "netcoreapp1.1": ["System.Reflection", "System.Runtime"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["System.Reflection", "System.Runtime"], "netstandard1.4": ["System.Reflection", "System.Runtime"], "netstandard1.5": ["System.Reflection", "System.Runtime"], "netstandard1.6": ["System.Reflection", "System.Runtime"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "System.Runtime", "version": "4.3.1", "sha512": "sha512-Al69mPDfzdD+bKGK2HAfB+lNFOHFqnkqzNnUJmmvUe1/qEPK9M7EiTT4zuycKDPy7ev11xz8XVgJWKP0hm7NIA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"]}, "targeting_pack_overrides": []}, + {"id": "System.Runtime.CompilerServices.Unsafe", "version": "6.0.0", "sha512": "sha512-1AVzAb5OxJNvJLnOADtexNmWgattm2XVOT3TjQTN7Dd4SqoSwai1CsN2fth42uQldJSQdz/sAec0+TzxBFgisw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "System.Runtime.Handles", "version": "4.3.0", "sha512": "sha512-CluvHdVUv54BvLTOCCyybugreDNk/rR8unMPruzXDtxSjvrQOU3M4R831/lQf4YI8VYp668FGQa/01E+Rq8PEQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": []}, + {"id": "System.Runtime.InteropServices", "version": "4.3.0", "sha512": "sha512-ZQeZw+ZU77ua1nFXycYM5G8oioFZe+N84qC/XUg1BEBl7z9luZcyjLu7+4H0yJuNfn1hOAiAAZ3u5us/lj9w2Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": ["System.Runtime"], "net47": ["System.Runtime"], "net471": ["System.Runtime"], "net472": ["System.Runtime"], "net48": ["System.Runtime"], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"]}, "targeting_pack_overrides": []}, + {"id": "System.Security.Principal.Windows", "version": "5.0.0", "sha512": "sha512-RKkgqq8ishctQTGbtXqyuOGkUx1fAhkqb1OoHYdRJRlbYLoLWkSkWYHRN/17DzplsSlZtf2Xr8BXjNhO8nRnzQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netcoreapp1.1": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms"], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netstandard1.4": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netstandard1.5": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netstandard1.6": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": []}, + {"id": "System.Text.Encoding", "version": "4.3.0", "sha512": "sha512-b/f+7HMTpxIfeV7H03bkuHKMFylCGfr9/U6gePnfFFW0aF8LOWLDgQCY6V1oWUqDksC3mdNuyChM1vy9TP4sZw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": []}, + {"id": "System.Threading.Tasks", "version": "4.3.0", "sha512": "sha512-fUiP+CyyCjs872OA8trl6p97qma/da1xGq3h4zAbJZk8zyaU4zyEfqW5vbkP80xG/Nimun1vlWBboMEk7XxdEw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": []}, + {"id": "System.Threading.Tasks.Extensions", "version": "4.5.4", "sha512": "sha512-aAUghud9PHGYc3o9oWPWd0C3xE+TJQw5ZZs78htlR6mr9ky/QEgfXHjyQ2GvOq9H1S0YizcVVKCSin92ZcH8FA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["System.Runtime.CompilerServices.Unsafe"], "net451": ["System.Runtime.CompilerServices.Unsafe"], "net452": ["System.Runtime.CompilerServices.Unsafe"], "net46": ["System.Runtime.CompilerServices.Unsafe"], "net461": ["System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Runtime.CompilerServices.Unsafe"], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netcoreapp1.1": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netcoreapp2.0": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.1": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.2": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.3": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.4": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.5": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.6": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard2.0": ["System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": []}, + ], + ) diff --git a/dotnet/paket.dependencies b/dotnet/paket.dependencies new file mode 100644 index 0000000000000..bfa068c3c3ad1 --- /dev/null +++ b/dotnet/paket.dependencies @@ -0,0 +1,26 @@ +group nuget +framework: net7.0,netstandard2.0 +source https://api.nuget.org/v3/index.json + +nuget BenderProxy 1.0.0 +nuget CommandLineParser 2.8.0 +nuget Handlebars.Net 1.11.5 +nuget Humanizer.Core 2.8.26 +nuget Microsoft.AspNetCore.App.Ref 6.0.9 +nuget Microsoft.CSharp 4.5.0 +nuget Microsoft.Extensions.DependencyInjection 3.1.9 +nuget Microsoft.Extensions.DependencyInjection.Abstractions 3.1.9 +nuget Microsoft.NETCore.App.Runtime.linux-x64 6.0.15 +nuget Microsoft.NETCore.App.Runtime.osx-arm64 6.0.15 +nuget Microsoft.NETCore.App.Runtime.osx-x64 6.0.15 +nuget Microsoft.NETCore.App.Runtime.win-x64 6.0.15 +nuget Microsoft.NETCore.App.Ref 6.0.9 +nuget Moq 4.12.0 +nuget NETStandard.Library 2.0.3 +nuget Newtonsoft.Json 13.0.1 +nuget NUnit 3.13.2 +nuget NUnitLite 3.13.2 +nuget System.Diagnostics.Tools 4.3.0 +nuget System.Drawing.Common 7.0.0 +nuget System.Runtime 4.3.1 +nuget System.Runtime.InteropServices 4.3.0 diff --git a/dotnet/paket.lock b/dotnet/paket.lock new file mode 100644 index 0000000000000..04fb8b87b010a --- /dev/null +++ b/dotnet/paket.lock @@ -0,0 +1,97 @@ + + +GROUP nuget +RESTRICTION: || (== net7.0) (== netstandard2.0) +NUGET + remote: https://api.nuget.org/v3/index.json + BenderProxy (1.0) + Castle.Core (5.1.1) + System.Diagnostics.EventLog (>= 4.7) - restriction: || (&& (== net7.0) (< net6.0)) (&& (== net7.0) (< netstandard2.1)) (== netstandard2.0) + System.Diagnostics.EventLog (>= 6.0) - restriction: || (== net7.0) (&& (== netstandard2.0) (>= net6.0)) + System.Reflection.Emit (>= 4.7) - restriction: || (&& (== net7.0) (< netstandard2.1)) (== netstandard2.0) + CommandLineParser (2.8) + Handlebars.Net (1.11.5) + Microsoft.CSharp (>= 4.4) + System.Reflection.TypeExtensions (>= 4.4) + Humanizer.Core (2.8.26) + Microsoft.AspNetCore.App.Ref (6.0.9) + Microsoft.Bcl.AsyncInterfaces (7.0) - restriction: || (&& (== net7.0) (>= net461)) (&& (== net7.0) (< netstandard2.1)) (== netstandard2.0) + System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (&& (== net7.0) (>= net462)) (&& (== net7.0) (< netstandard2.1)) (== netstandard2.0) + Microsoft.CSharp (4.5) + Microsoft.Extensions.DependencyInjection (3.1.9) + Microsoft.Bcl.AsyncInterfaces (>= 1.1.1) - restriction: || (&& (== net7.0) (>= net461)) (&& (== net7.0) (< netstandard2.1)) (== netstandard2.0) + Microsoft.Extensions.DependencyInjection.Abstractions (>= 3.1.9) + Microsoft.Extensions.DependencyInjection.Abstractions (3.1.9) + Microsoft.NETCore.App.Ref (6.0.9) + Microsoft.NETCore.App.Runtime.linux-x64 (6.0.15) + Microsoft.NETCore.App.Runtime.osx-arm64 (6.0.15) + Microsoft.NETCore.App.Runtime.osx-x64 (6.0.15) + Microsoft.NETCore.App.Runtime.win-x64 (6.0.15) + Microsoft.NETCore.Platforms (7.0.4) + Microsoft.NETCore.Targets (5.0) + Microsoft.Win32.SystemEvents (7.0) - restriction: || (== net7.0) (&& (== netstandard2.0) (>= net6.0)) + Moq (4.12) + Castle.Core (>= 4.4) + System.Threading.Tasks.Extensions (>= 4.5.1) + NETStandard.Library (2.0.3) + Microsoft.NETCore.Platforms (>= 1.1) + Newtonsoft.Json (13.0.1) + NUnit (3.13.2) + NETStandard.Library (>= 2.0) + NUnitLite (3.13.2) + NETStandard.Library (>= 2.0) + NUnit (3.13.2) + System.Diagnostics.EventLog (7.0) + System.Security.Principal.Windows (>= 5.0) - restriction: || (&& (== net7.0) (>= net462)) (&& (== net7.0) (< net6.0)) (== netstandard2.0) + System.Diagnostics.Tools (4.3) + Microsoft.NETCore.Platforms (>= 1.1) + Microsoft.NETCore.Targets (>= 1.1) + System.Runtime (>= 4.3) + System.Drawing.Common (7.0) + Microsoft.Win32.SystemEvents (>= 7.0) - restriction: || (== net7.0) (&& (== netstandard2.0) (>= net6.0)) + System.IO (4.3) + Microsoft.NETCore.Platforms (>= 1.1) + Microsoft.NETCore.Targets (>= 1.1) + System.Runtime (>= 4.3) + System.Text.Encoding (>= 4.3) + System.Threading.Tasks (>= 4.3) + System.Reflection (4.3) + Microsoft.NETCore.Platforms (>= 1.1) + Microsoft.NETCore.Targets (>= 1.1) + System.IO (>= 4.3) + System.Reflection.Primitives (>= 4.3) + System.Runtime (>= 4.3) + System.Reflection.Emit (4.7) - restriction: || (&& (== net7.0) (< netstandard2.1)) (== netstandard2.0) + System.Reflection.Emit.ILGeneration (>= 4.7) - restriction: || (&& (== net7.0) (< netcoreapp2.0) (< netstandard2.1)) (&& (== net7.0) (< netstandard1.1)) (&& (== net7.0) (< netstandard2.0)) (&& (== net7.0) (>= uap10.1)) (== netstandard2.0) + System.Reflection.Emit.ILGeneration (4.7) - restriction: || (&& (== net7.0) (< netcoreapp2.0) (< netstandard2.1)) (&& (== net7.0) (< netstandard1.1)) (&& (== net7.0) (< netstandard2.0)) (&& (== net7.0) (>= uap10.1)) (== netstandard2.0) + System.Reflection.Primitives (4.3) + Microsoft.NETCore.Platforms (>= 1.1) + Microsoft.NETCore.Targets (>= 1.1) + System.Runtime (>= 4.3) + System.Reflection.TypeExtensions (4.7) + System.Runtime (4.3.1) + Microsoft.NETCore.Platforms (>= 1.1.1) + Microsoft.NETCore.Targets (>= 1.1.3) + System.Runtime.CompilerServices.Unsafe (6.0) - restriction: || (&& (== net7.0) (>= net461)) (&& (== net7.0) (< netcoreapp2.1)) (&& (== net7.0) (< netstandard1.0)) (&& (== net7.0) (< netstandard2.0)) (&& (== net7.0) (>= wp8)) (== netstandard2.0) + System.Runtime.Handles (4.3) + Microsoft.NETCore.Platforms (>= 1.1) + Microsoft.NETCore.Targets (>= 1.1) + System.Runtime (>= 4.3) + System.Runtime.InteropServices (4.3) + Microsoft.NETCore.Platforms (>= 1.1) + Microsoft.NETCore.Targets (>= 1.1) + System.Reflection (>= 4.3) + System.Reflection.Primitives (>= 4.3) + System.Runtime (>= 4.3) + System.Runtime.Handles (>= 4.3) + System.Security.Principal.Windows (5.0) - restriction: || (&& (== net7.0) (>= net462)) (&& (== net7.0) (< net6.0)) (== netstandard2.0) + System.Text.Encoding (4.3) + Microsoft.NETCore.Platforms (>= 1.1) + Microsoft.NETCore.Targets (>= 1.1) + System.Runtime (>= 4.3) + System.Threading.Tasks (4.3) + Microsoft.NETCore.Platforms (>= 1.1) + Microsoft.NETCore.Targets (>= 1.1) + System.Runtime (>= 4.3) + System.Threading.Tasks.Extensions (4.5.4) + System.Runtime.CompilerServices.Unsafe (>= 4.5.3) - restriction: || (&& (== net7.0) (>= net461)) (&& (== net7.0) (< netcoreapp2.1)) (&& (== net7.0) (< netstandard1.0)) (&& (== net7.0) (< netstandard2.0)) (&& (== net7.0) (>= wp8)) (== netstandard2.0) diff --git a/dotnet/private/dotnet_nunit_test_suite.bzl b/dotnet/private/dotnet_nunit_test_suite.bzl new file mode 100644 index 0000000000000..4f81f32b00969 --- /dev/null +++ b/dotnet/private/dotnet_nunit_test_suite.bzl @@ -0,0 +1,171 @@ +load("@rules_dotnet//dotnet:defs.bzl", "csharp_test") +load( + "//common:browsers.bzl", + "COMMON_TAGS", + "chrome_data", + "edge_data", + "firefox_data", +) + +_BROWSERS = { + "chrome": { + "args": [ + "--params=ActiveDriverConfig=Chrome", + ] + select({ + "@selenium//common:use_pinned_linux_chrome": [ + "--params=DriverServiceLocation=$(location @linux_chromedriver//:chromedriver)", + "--params=BrowserLocation=$(location @linux_chrome//:chrome-linux64/chrome)", + ], + "@selenium//common:use_pinned_macos_chrome": [ + "--params=DriverServiceLocation=$(location @mac_chromedriver//:chromedriver)", + "--params=BrowserLocation=$(location @mac_chrome//:Chrome.app)/Contents/MacOS/Chrome", + ], + "@selenium//common:use_local_chromedriver": [], + "//conditions:default": [ + "--where=SkipTest==True", + ], + }), + "data": chrome_data, + "tags": [], + }, + "edge": { + "args": [ + "--params=ActiveDriverConfig=Edge", + ] + select({ + "@selenium//common:use_pinned_macos_edge": [ + "--params=DriverServiceLocation=$(location @mac_edgedriver//:msedgedriver)", + "\"--params=BrowserLocation=$(location @mac_edge//:Edge.app)/Contents/MacOS/Microsoft Edge\"", + ], + "@selenium//common:use_local_msedgedriver": [], + "//conditions:default": [ + "--where=SkipTest==True", + ], + }), + "data": edge_data, + "tags": ["skip-remote"], + }, + "firefox": { + "args": [ + "--params=ActiveDriverConfig=Firefox", + ] + select({ + "@selenium//common:use_pinned_linux_firefox": [ + "--params=DriverServiceLocation=$(location @linux_geckodriver//:geckodriver)", + "--params=BrowserLocation=$(location @linux_firefox//:firefox/firefox)", + ], + "@selenium//common:use_pinned_macos_firefox": [ + "--params=DriverServiceLocation=$(location @mac_geckodriver//:geckodriver)", + "--params=BrowserLocation=$(location @mac_firefox//:Firefox.app)/Contents/MacOS/firefox", + ], + "@selenium//common:use_local_geckodriver": [], + "//conditions:default": [ + "--where=SkipTest==True", + ], + }), + "data": firefox_data, + "tags": [], + }, + "ie": { + "args": [ + "--params=ActiveDriverConfig=IE", + ] + select({ + "//common:windows": [], + "//conditions:default": [ + "--where=SkipTest==True", + ], + }), + "data": [], + "tags": ["skip-remote"], + }, + "safari": { + "args": [ + "--params=ActiveDriverConfig=Safari", + ] + select({ + "//common:macos": [], + "//conditions:default": [ + "--where=SkipTest==True", + ], + }), + "data": [], + "tags": ["skip-remote"], + }, +} + +_HEADLESS_ARGS = select({ + "@selenium//common:use_headless_browser": [ + "--params=Headless=true", + ], + "//conditions:default": [], +}) + +def _is_test(src, test_suffixes): + for suffix in test_suffixes: + if src.endswith(suffix): + return True + return False + +def dotnet_nunit_test_suite( + name, + srcs, + deps = [], + target_frameworks = None, + test_suffixes = ["Test.cs", "Tests.cs"], + size = None, + tags = [], + data = [], + browsers = None, + **kwargs): + test_srcs = [src for src in srcs if _is_test(src, test_suffixes)] + lib_srcs = [src for src in srcs if not _is_test(src, test_suffixes)] + + extra_deps = [ + "@paket.nuget//nunitlite", + ] + + if browsers and len(browsers): + default_browser = browsers[0] + else: + default_browser = None + + tests = [] + for src in test_srcs: + suffix = src.rfind(".") + test_name = src[:suffix] + + if not browsers or not len(browsers): + csharp_test( + name = test_name, + srcs = lib_srcs + [src] + ["@rules_dotnet//dotnet/private/rules/common/nunit:shim.cs"], + deps = deps + extra_deps, + target_frameworks = target_frameworks, + data = data, + tags = tags, + **kwargs + ) + tests.append(test_name) + else: + for browser in browsers: + browser_test_name = "%s-%s" % (test_name, browser) + + if browser == default_browser: + native.test_suite( + name = test_name, + tests = [browser_test_name], + ) + + csharp_test( + name = browser_test_name, + srcs = lib_srcs + [src] + ["@rules_dotnet//dotnet/private/rules/common/nunit:shim.cs"], + deps = deps + extra_deps, + target_frameworks = target_frameworks, + args = _BROWSERS[browser]["args"] + _HEADLESS_ARGS, + data = data + _BROWSERS[browser]["data"], + tags = tags + [browser] + COMMON_TAGS + _BROWSERS[browser]["tags"], + **kwargs + ) + tests.append(browser_test_name) + + native.test_suite( + name = name, + tests = tests, + tags = ["manual"] + tags, + ) diff --git a/dotnet/private/dotnet_utils.bzl b/dotnet/private/dotnet_utils.bzl new file mode 100644 index 0000000000000..066d6cac47fa3 --- /dev/null +++ b/dotnet/private/dotnet_utils.bzl @@ -0,0 +1,31 @@ +# The change to the PATH is recommended here: +# https://learn.microsoft.com/en-us/dotnet/core/install/linux-scripted-manual?source=recommendations#set-environment-variables-system-wide +# We list our .Net installation first because we +# want it to be picked up first + +# The `MSBuildEnableWorkloadResolver` is disabled to prevent warnings +# about a missing Microsoft.NET.SDK.WorkloadAutoImportPropsLocator + +def dotnet_preamble(toolchain): + return """ +export DOTNET="$(pwd)/{dotnet}" +export DOTNET_CLI_HOME="$(dirname $DOTNET)" +export DOTNET_CLI_TELEMETRY_OPTOUT=1 +export DOTNET_NOLOGO=1 +export DOTNET_ROOT="$(dirname $DOTNET)" +export PATH=$DOTNET_ROOT:$DOTNET_ROOT/tools:$PATH +export MSBuildEnableWorkloadResolver=false +export CWD=$(pwd) + +# Required to make packing work on Windows +export APPDATA="$(pwd)" +export PROGRAMFILES="$(pwd)" + +# Create `global.json` to trick .Net into using the hermetic toolchain +# https://learn.microsoft.com/en-us/dotnet/core/tools/global-json +echo '{{"sdk": {{"version": "{version}"}} }}' >$(pwd)/global.json + +""".format( + dotnet = toolchain.runtime.files_to_run.executable.path, + version = toolchain.dotnetinfo.sdk_version, + ) diff --git a/dotnet/private/framework.bzl b/dotnet/private/framework.bzl new file mode 100644 index 0000000000000..3d59e382399ac --- /dev/null +++ b/dotnet/private/framework.bzl @@ -0,0 +1,2 @@ +def framework(framework_moniker, name): + return "@paket.%s//%s" % (framework_moniker, name.lower()) diff --git a/dotnet/private/framework_transition.bzl b/dotnet/private/framework_transition.bzl new file mode 100644 index 0000000000000..ce892d20506e6 --- /dev/null +++ b/dotnet/private/framework_transition.bzl @@ -0,0 +1,40 @@ +load("@bazel_skylib//lib:dicts.bzl", "dicts") +load( + "@rules_dotnet//dotnet/private:common.bzl", + "FRAMEWORK_COMPATIBILITY", + "is_core_framework", +) +load("@rules_dotnet//dotnet/private:rids.bzl", "RUNTIME_GRAPH") +load( + "@rules_dotnet//dotnet/private/transitions:common.bzl", + "FRAMEWORK_COMPATABILITY_TRANSITION_OUTPUTS", + "RID_COMPATABILITY_TRANSITION_OUTPUTS", +) + +DEFAULT_TOOL_FRAMEWORK = "net6.0" + +def _target_framework_transition_impl(settings, attr): + target_framework = getattr(attr, "target_framework", DEFAULT_TOOL_FRAMEWORK) + + if not is_core_framework(target_framework): + msg = "Transitions must be to a .Net Core framework: " + target_framework + fail(msg) + + incoming_tfm = settings["@rules_dotnet//dotnet:target_framework"] + + if incoming_tfm not in FRAMEWORK_COMPATABILITY_TRANSITION_OUTPUTS: + fail("Error setting @rules_dotnet//dotnet:target_framework: invalid value '" + incoming_tfm + "'. Allowed values are " + str(FRAMEWORK_COMPATIBILITY.keys())) + + transitioned_tfm = target_framework + + runtime_identifier = settings["@rules_dotnet//dotnet:rid"] + + return dicts.add({"@rules_dotnet//dotnet:target_framework": transitioned_tfm}, {"@rules_dotnet//dotnet:rid": runtime_identifier}, FRAMEWORK_COMPATABILITY_TRANSITION_OUTPUTS[transitioned_tfm], RID_COMPATABILITY_TRANSITION_OUTPUTS[runtime_identifier]) + +target_framework_transition = transition( + implementation = _target_framework_transition_impl, + inputs = ["@rules_dotnet//dotnet:target_framework", "@rules_dotnet//dotnet:rid", "//command_line_option:cpu", "//command_line_option:platforms"], + outputs = ["@rules_dotnet//dotnet:target_framework", "@rules_dotnet//dotnet:rid"] + + ["@rules_dotnet//dotnet:framework_compatible_%s" % framework for framework in FRAMEWORK_COMPATIBILITY.keys()] + + ["@rules_dotnet//dotnet:rid_compatible_%s" % rid for rid in RUNTIME_GRAPH.keys()], +) diff --git a/dotnet/private/generate_devtools.bzl b/dotnet/private/generate_devtools.bzl index f04468e773d69..de2cc20343fe0 100644 --- a/dotnet/private/generate_devtools.bzl +++ b/dotnet/private/generate_devtools.bzl @@ -34,7 +34,6 @@ def _generate_devtools_impl(ctx): ctx.file.browser_protocol, ctx.file.js_protocol, ] + template_files, - use_default_shell_env = True, ) return DefaultInfo(files = depset([ diff --git a/dotnet/private/assembly_info.bzl b/dotnet/private/generated_assembly_info.bzl similarity index 100% rename from dotnet/private/assembly_info.bzl rename to dotnet/private/generated_assembly_info.bzl diff --git a/dotnet/private/nuget_pack.bzl b/dotnet/private/nuget_pack.bzl new file mode 100644 index 0000000000000..1197c6169aa24 --- /dev/null +++ b/dotnet/private/nuget_pack.bzl @@ -0,0 +1,220 @@ +load("@rules_dotnet//dotnet/private:common.bzl", "is_debug") +load("@rules_dotnet//dotnet/private:providers.bzl", "DotnetAssemblyInfo", "NuGetInfo") +load(":dotnet_utils.bzl", "dotnet_preamble") + +def _guess_dotnet_version(assembly_info): + if len(assembly_info.libs) == 0: + fail("Cannot guess .Net version without an output dll: ", assembly_info.name) + + # We're going to rely on the structure of the output names for now + # rather than scanning through the dependencies. If this works, + # life will be good. + + # The dirname will be something like `bazel-out/darwin_arm64-fastbuild-ST-5c013bc87029/bin/dotnet/src/webdriver/bazelout/net5.0` + # Note that the last segment of the path is the framework we're + # targeting. Happy days! + full_path = assembly_info.libs[0].dirname + + # And that framework is after the constant string `bazelout` + index = full_path.index("bazelout") + + # The actual start is at the _end_ of the `bazelout` string + index += len("bazelout") + 1 + slash_index = full_path.index("/", index + 1) + to_return = full_path[index:slash_index] + return to_return + +def nuget_pack_impl(ctx): + nuspec = ctx.actions.declare_file("%s-generated.nuspec" % ctx.label.name) + + ctx.actions.expand_template( + template = ctx.file.nuspec_template, + output = nuspec, + substitutions = { + "$packageid$": ctx.attr.id, + "$version$": ctx.attr.version, + }, + ) + + build_flavor = "Debug" if is_debug(ctx) else "Release" + + # A mapping of files to the paths in which we expect to find them in the package + paths = {} + + for (lib, name) in ctx.attr.libs.items(): + assembly_info = lib[DotnetAssemblyInfo] + + for dll in assembly_info.libs: + paths[dll] = "lib/%s/%s.dll" % (_guess_dotnet_version(assembly_info), name) + for pdb in assembly_info.pdbs: + paths[pdb] = "lib/%s/%s.pdb" % (_guess_dotnet_version(assembly_info), name) + for doc in assembly_info.xml_docs: + paths[doc] = "lib/%s/%s.xml" % (_guess_dotnet_version(assembly_info), name) + + csproj_template = """ + + netstandard2.0 + %s + OpenQA.Selenium + + +""" % ctx.attr.id + + csproj_file = ctx.actions.declare_file("%s-generated.csproj" % ctx.label.name) + ctx.actions.write(csproj_file, csproj_template) + paths[csproj_file] = "project.csproj" + + for (file, name) in ctx.attr.files.items(): + paths[file.files.to_list()[0]] = name + + # Zip everything up so we have the right file structure + zip_file = ctx.actions.declare_file("%s-intermediate.zip" % ctx.label.name) + args = ctx.actions.args() + args.add_all(["Cc", zip_file]) + for (file, path) in paths.items(): + args.add("%s=%s" % (path, file.path)) + args.add("project.nuspec=%s" % (nuspec.path)) + + ctx.actions.run( + executable = ctx.executable._zip, + arguments = [args], + inputs = paths.keys() + [nuspec], + outputs = [zip_file], + ) + + # Now lay everything out on disk and execute the dotnet pack rule + + # Now we have everything, let's build our package + toolchain = ctx.toolchains["@rules_dotnet//dotnet:toolchain_type"] + + nupkg_name_stem = "%s.%s" % (ctx.attr.id, ctx.attr.version) + + dotnet = toolchain.runtime.files_to_run.executable + pkg = ctx.actions.declare_file("%s.nupkg" % nupkg_name_stem) + symbols_pkg = ctx.actions.declare_file("%s.snupkg" % nupkg_name_stem) + + # Prepare our cache of nupkg files + packages = ctx.actions.declare_directory("%s-nuget-packages" % ctx.label.name) + packages_cmd = "mkdir -p %s " % packages.path + + transitive_libs = depset(transitive = [l[DotnetAssemblyInfo].transitive_runtime_deps for l in ctx.attr.libs]).to_list() + package_files = depset([lib.nuget_info.nupkg for lib in transitive_libs]).to_list() + + if len(package_files): + packages_cmd += "&& cp " + " ".join([f.path for f in package_files]) + " " + packages.path + + ctx.actions.run_shell( + outputs = [packages], + inputs = package_files, + command = packages_cmd, + mnemonic = "LayoutNugetPackages", + ) + + cmd = dotnet_preamble(toolchain) + \ + "mkdir %s-working-dir && " % ctx.label.name + \ + "echo $(pwd) && " + \ + "$(location @bazel_tools//tools/zip:zipper) x %s -d %s-working-dir && " % (zip_file.path, ctx.label.name) + \ + "cd %s-working-dir && " % ctx.label.name + \ + "echo '' >nuget.config && " % packages.path + \ + "$DOTNET restore --no-dependencies && " + \ + "$DOTNET pack --no-build --include-symbols -p:NuspecFile=project.nuspec --include-symbols -p:SymbolPackageFormat=snupkg -p:Configuration=%s -p:PackageId=%s -p:Version=%s -p:PackageVersion=%s -p:NuspecProperties=\"version=%s\" && " % (build_flavor, ctx.attr.id, ctx.attr.version, ctx.attr.version, ctx.attr.version) + \ + "cp bin/%s/%s.%s.nupkg ../%s && " % (build_flavor, ctx.attr.id, ctx.attr.version, pkg.path) + \ + "cp bin/%s/%s.%s.snupkg ../%s" % (build_flavor, ctx.attr.id, ctx.attr.version, symbols_pkg.path) + + cmd = ctx.expand_location( + cmd, + targets = [ + ctx.attr._zip, + ], + ) + + ctx.actions.run_shell( + outputs = [pkg, symbols_pkg], + inputs = [ + zip_file, + dotnet, + packages, + ], + tools = [ + ctx.executable._zip, + dotnet, + ] + toolchain.default.files.to_list() + toolchain.runtime.default_runfiles.files.to_list() + toolchain.runtime.data_runfiles.files.to_list(), + command = cmd, + mnemonic = "CreateNupkg", + ) + + assembly_infos = [lib[DotnetAssemblyInfo] for lib in ctx.attr.libs] + all_libs = depset() + for info in assembly_infos: + all_libs = depset(info.libs, transitive = [all_libs]) + + return [ + DefaultInfo( + files = depset([pkg, symbols_pkg]), + runfiles = ctx.runfiles(files = [pkg, symbols_pkg]), + ), + DotnetAssemblyInfo( + name = ctx.attr.id, + version = ctx.attr.version, + project_sdk = "default", + libs = all_libs.to_list(), + refs = all_libs.to_list(), + irefs = [], + analyzers = [], + xml_docs = [], + native = [], + data = [], + compile_data = [], + exports = [], + transitive_libs = depset(transitive = [lib[DotnetAssemblyInfo].transitive_libs for lib in ctx.attr.libs]), + transitive_native = depset(), + transitive_data = depset(), + transitive_compile_data = depset([]), + transitive_refs = depset(), + transitive_analyzers = depset(), + internals_visible_to = [], + runtime_deps = [], + transitive_runtime_deps = depset(), + ), + NuGetInfo( + targeting_pack_overrides = {}, + sha512 = None, + nupkg = pkg, + ), + ] + +nuget_pack = rule( + nuget_pack_impl, + attrs = { + "id": attr.string( + doc = "Nuget ID of the package", + mandatory = True, + ), + "version": attr.string( + mandatory = True, + ), + "libs": attr.label_keyed_string_dict( + doc = "The .Net libraries that are being published", + providers = [DotnetAssemblyInfo], + ), + "files": attr.label_keyed_string_dict( + doc = "Mapping of files to paths within the nuget package", + allow_empty = True, + allow_files = True, + ), + "property_group_vars": attr.string_dict( + doc = "Keys and values for variables declared in `PropertyGroup`s in the `csproj_file`", + allow_empty = True, + ), + "nuspec_template": attr.label( + mandatory = True, + allow_single_file = True, + ), + "_zip": attr.label( + default = "@bazel_tools//tools/zip:zipper", + executable = True, + cfg = "exec", + ), + }, + toolchains = ["@rules_dotnet//dotnet:toolchain_type"], +) diff --git a/dotnet/private/nunit_test.bzl b/dotnet/private/nunit_test.bzl index c66c054857ff6..20308286d440e 100644 --- a/dotnet/private/nunit_test.bzl +++ b/dotnet/private/nunit_test.bzl @@ -1,94 +1,12 @@ -""" -Rules for compiling NUnit tests. -""" +load("@rules_dotnet//dotnet:defs.bzl", "csharp_test") +load("//dotnet/private:framework.bzl", "framework") -load("@d2l_rules_csharp//csharp/private:providers.bzl", "AnyTargetFrameworkInfo") -load("//dotnet/private:executable_assembly.bzl", "create_executable_assembly") - -def _nunit_test_impl(ctx): - extra_srcs = [ctx.file._nunit_shim] - extra_deps = [ctx.attr._nunitlite, ctx.attr._nunitframework] - return create_executable_assembly(ctx, extra_srcs, extra_deps) - -nunit_test = rule( - _nunit_test_impl, - doc = "Run NUnit tests", - attrs = { - "srcs": attr.label_list( - doc = "C# source files.", - allow_files = [".cs"], - ), - "additionalfiles": attr.label_list( - doc = "Extra files to configure analyzers.", - allow_files = True, - ), - "analyzers": attr.label_list( - doc = "A list of analyzer references.", - providers = AnyTargetFrameworkInfo, - ), - "keyfile": attr.label( - doc = "The key file used to sign the assembly with a strong name.", - allow_single_file = True, - ), - "langversion": attr.string( - doc = "The version string for the C# language.", - ), - "resources": attr.label_list( - doc = "A list of files to embed in the DLL as resources.", - allow_files = True, - ), - "out": attr.string( - doc = "File name, without extension, of the built assembly.", - ), - "target_frameworks": attr.string_list( - doc = "A list of target framework monikers to build" + - "See https://docs.microsoft.com/en-us/dotnet/standard/frameworks", - allow_empty = False, - ), - "defines": attr.string_list( - doc = "A list of preprocessor directive symbols to define.", - default = [], - allow_empty = True, - ), - "include_stdrefs": attr.bool( - doc = "Whether to reference @net//:StandardReferences (the default set of references that MSBuild adds to every project).", - default = True, - ), - "runtimeconfig_template": attr.label( - doc = "A template file to use for generating runtimeconfig.json", - default = "@d2l_rules_csharp//csharp/private:runtimeconfig.json.tpl", - allow_single_file = True, - ), - "_stdrefs": attr.label( - doc = "The standard set of assemblies to reference.", - default = "@net//:StandardReferences", - ), - "deps": attr.label_list( - doc = "Other C# libraries, binaries, or imported DLLs", - providers = AnyTargetFrameworkInfo, - ), - "data": attr.label_list( - doc = "Additional data files or targets that are required to run tests.", - allow_files = True, - ), - "_nunit_shim": attr.label( - doc = "Entry point for NUnitLite", - allow_single_file = [".cs"], - default = "@d2l_rules_csharp//csharp/private:nunit/shim.cs", - ), - "_nunitlite": attr.label( - doc = "The NUnitLite library", - providers = AnyTargetFrameworkInfo, - default = "@NUnitLite//:nunitlite", - ), - "_nunitframework": attr.label( - doc = "The NUnit framework", - providers = AnyTargetFrameworkInfo, - default = "@NUnit//:nunit.framework", - ), - "is_windows": attr.bool(default = False), - }, - test = True, - executable = True, - toolchains = ["@d2l_rules_csharp//csharp/private:toolchain_type"], -) +def nunit_test(name, srcs = [], deps = [], **kwargs): + csharp_test( + name = name, + srcs = srcs + ["@rules_dotnet//dotnet/private/rules/common/nunit:shim.cs"], + deps = deps + [ + framework("nuget", "NUnitLite"), + ], + **kwargs + ) diff --git a/dotnet/private/providers.bzl b/dotnet/private/providers.bzl new file mode 100644 index 0000000000000..129b61dda375d --- /dev/null +++ b/dotnet/private/providers.bzl @@ -0,0 +1,7 @@ +NugetPackageInfo = provider( + fields = { + "csproj": "The `.csproj` `File` that generated this package. May be `None`", + "package": "The nuget package as a `File`", + "symbols": "The symbols nuget package as a `File`", + }, +) diff --git a/dotnet/src/support/BUILD.bazel b/dotnet/src/support/BUILD.bazel index bcad13210544d..fc0fac34f0f11 100644 --- a/dotnet/src/support/BUILD.bazel +++ b/dotnet/src/support/BUILD.bazel @@ -1,10 +1,9 @@ -load("@d2l_rules_csharp//csharp:defs.bzl", "csharp_library") -load("//common:defs.bzl", "copy_file") load( "//dotnet:defs.bzl", + "csharp_library", + "framework", "generated_assembly_info", - "nuget_package", - "nuget_push", + "nuget_pack", ) load( "//dotnet:selenium-dotnet-version.bzl", @@ -28,7 +27,7 @@ generated_assembly_info( ) csharp_library( - name = "webdriver-support", + name = "support-lib", srcs = glob([ "*.cs", "Events/*.cs", @@ -37,17 +36,37 @@ csharp_library( "UI/*.cs", ]) + [":assembly-info"], out = "WebDriver.Support", + private_deps = [ + framework("nuget", "NETStandard.Library"), + ], target_frameworks = [ "netstandard2.0", ], - visibility = ["//visibility:public"], deps = [ "//dotnet/src/webdriver", + framework("nuget", "NETStandard.Library"), + ], +) + +nuget_pack( + name = "support", + files = { + "//common/images:selenium_logo_small.png": "images/icon.png", + }, + id = "Selenium.Support", + libs = { + ":support-lib": "WebDriver.Support", + }, + nuspec_template = "WebDriver.Support.nuspec", + tags = [ + "block-network", ], + version = SE_VERSION, + visibility = ["//visibility:public"], ) csharp_library( - name = "webdriver-support-strongnamed", + name = "support-strongnamed-lib", srcs = glob([ "*.cs", "Events/*.cs", @@ -55,56 +74,33 @@ csharp_library( "PageObjects/**/*.cs", "UI/*.cs", ]) + [":assembly-info"], - out = "strongnamed/WebDriver.Support", + out = "WebDriver.Support", keyfile = "//dotnet:WebDriver.snk", + private_deps = [ + framework("nuget", "NETStandard.Library"), + ], target_frameworks = [ "netstandard2.0", ], - visibility = ["//visibility:public"], deps = [ "//dotnet/src/webdriver:webdriver-strongnamed", + framework("nuget", "NETStandard.Library"), ], ) -copy_file( - name = "logo", - src = "//common/images:selenium_logo_small.png", - out = "icon.png", -) - -nuget_package( - name = "package", - src = "WebDriver.Support.nuspec", - create_symbol_package = True, - is_windows = select({ - "@bazel_tools//src/conditions:host_windows": True, - "//conditions:default": False, - }), - package_id = "Selenium.Support", - package_version = "{}".format(SE_VERSION), - deps = [ - ":logo", - ":webdriver-support", +nuget_pack( + name = "support-strongnamed", + files = { + "//common/images:selenium_logo_small.png": "images/icon.png", + }, + id = "Selenium.Support.StrongNamed", + libs = { + ":support-strongnamed-lib": "WebDriver.Support", + }, + nuspec_template = "WebDriver.Support.nuspec", + tags = [ + "block-network", ], -) - -nuget_package( - name = "package-strongnamed", - src = "WebDriver.Support.nuspec", - is_windows = select({ - "@bazel_tools//src/conditions:host_windows": True, - "//conditions:default": False, - }), - package_id = "Selenium.Support.StrongNamed", - package_version = "{}".format(SE_VERSION), - deps = [ - ":logo", - ":webdriver-support-strongnamed", - ], -) - -nuget_push( - name = "publish", - src = ":package", - api_key = "//dotnet:nuget-api-key", + version = SE_VERSION, + visibility = ["//visibility:public"], ) diff --git a/dotnet/src/support/WebDriver.Support.StrongNamed.nuspec b/dotnet/src/support/WebDriver.Support.StrongNamed.nuspec index ec53649269d1e..d61d53359823f 100644 --- a/dotnet/src/support/WebDriver.Support.StrongNamed.nuspec +++ b/dotnet/src/support/WebDriver.Support.StrongNamed.nuspec @@ -35,9 +35,6 @@ - - - - + diff --git a/dotnet/src/support/WebDriver.Support.csproj b/dotnet/src/support/WebDriver.Support.csproj index 4138545294521..6a4541cb6b4fa 100644 --- a/dotnet/src/support/WebDriver.Support.csproj +++ b/dotnet/src/support/WebDriver.Support.csproj @@ -9,7 +9,16 @@ Selenium WebDriver Support - Selenium WebDriver .NET Bindings support classes + + Selenium is a set of different software tools each with a different approach + to supporting browser automation. These tools are highly flexible, allowing + many options for locating and manipulating elements within a browser, and one + of its key features is the support for automating multiple browser platforms. + This package contains .NET support utilites and classes that users may find + useful in using Selenium WebDriver. These support classes are mainly intended + to spark ideas of what is possible with Selenium WebDriver, and may not be + entirely appropriate for production use. + Selenium Committers Copyright © Software Freedom Conservancy 2018 Selenium @@ -32,8 +41,12 @@ + + ..\webdriver + + - + diff --git a/dotnet/src/support/WebDriver.Support.nuspec b/dotnet/src/support/WebDriver.Support.nuspec index c24a36bc87173..3b07f39f0584e 100644 --- a/dotnet/src/support/WebDriver.Support.nuspec +++ b/dotnet/src/support/WebDriver.Support.nuspec @@ -35,9 +35,6 @@ - - - - + diff --git a/dotnet/src/tools/BUILD.bazel b/dotnet/src/tools/BUILD.bazel new file mode 100644 index 0000000000000..11ec00b5d2735 --- /dev/null +++ b/dotnet/src/tools/BUILD.bazel @@ -0,0 +1,12 @@ +load("//dotnet:defs.bzl", "csharp_binary", "framework") + +csharp_binary( + name = "reflector", + srcs = [ + "Reflector.cs", + ], + private_deps = [ + framework("nuget", "NETStandard.Library"), + ], + target_frameworks = ["net7.0"], +) diff --git a/dotnet/src/tools/Reflector.cs b/dotnet/src/tools/Reflector.cs new file mode 100644 index 0000000000000..af0f9c70d6ed1 --- /dev/null +++ b/dotnet/src/tools/Reflector.cs @@ -0,0 +1,11 @@ +using System; +using System.Reflection; + +public class Reflector +{ + public static void Main(string[] args) + { + Console.Error.WriteLine(args[0]); + Console.WriteLine(AssemblyName.GetAssemblyName(args[0])); + } +} diff --git a/dotnet/src/webdriver/BUILD.bazel b/dotnet/src/webdriver/BUILD.bazel index 4dff09a9bfb2a..c8de65fc8e2e8 100644 --- a/dotnet/src/webdriver/BUILD.bazel +++ b/dotnet/src/webdriver/BUILD.bazel @@ -1,12 +1,5 @@ -load("@d2l_rules_csharp//csharp:defs.bzl", "csharp_library") load("//common:defs.bzl", "copy_file") -load( - "//dotnet:defs.bzl", - "devtools_version_targets", - "generated_assembly_info", - "nuget_package", - "nuget_push", -) +load("//dotnet:defs.bzl", "csharp_library", "devtools_version_targets", "framework", "generated_assembly_info", "nuget_pack") load( "//dotnet:selenium-dotnet-version.bzl", "ASSEMBLY_COMPANY", @@ -17,6 +10,10 @@ load( "SE_VERSION", ) +exports_files([ + "WebDriver.csproj", +]) + generated_assembly_info( name = "assembly-info", company = ASSEMBLY_COMPANY, @@ -29,26 +26,16 @@ generated_assembly_info( ) csharp_library( - name = "webdriver", - srcs = glob([ - "*.cs", - "Chrome/*.cs", - "Chromium/*.cs", - "DevTools/**/*.cs", - "Edge/*.cs", - "Firefox/**/*.cs", - "IE/*.cs", - "Interactions/*.cs", - "Internal/*.cs", - "Properties/*.cs", - "Remote/**/*.cs", - "Safari/*.cs", - "Support/*.cs", - "VirtualAuth/*.cs", - ]) + [ + name = "webdriver-lib", + srcs = [ ":assembly-info", - ] + devtools_version_targets(), + ] + glob([ + "**/*.cs", + ]) + devtools_version_targets(), out = "WebDriver", + private_deps = [ + framework("nuget", "NETStandard.Library"), + ], resources = [ "//javascript/atoms/fragments:find-elements.js", "//javascript/atoms/fragments:is-displayed.js", @@ -59,35 +46,25 @@ csharp_library( target_frameworks = [ "netstandard2.0", ], - visibility = ["//visibility:public"], deps = [ - "@json.net//:Newtonsoft.Json", - "@system.drawing.common//:System.Drawing.Common", + framework("nuget", "NETStandard.Library"), + framework("nuget", "Newtonsoft.Json"), + framework("nuget", "System.Drawing.Common"), ], ) csharp_library( - name = "webdriver-strongnamed", - srcs = glob([ - "*.cs", - "Chrome/*.cs", - "Chromium/*.cs", - "DevTools/**/*.cs", - "Edge/*.cs", - "Firefox/**/*.cs", - "IE/*.cs", - "Interactions/*.cs", - "Internal/*.cs", - "Properties/*.cs", - "Remote/**/*.cs", - "Safari/*.cs", - "Support/*.cs", - "VirtualAuth/*.cs", - ]) + [ + name = "webdriver-strongnamed-lib", + srcs = [ ":assembly-info", - ] + devtools_version_targets(), - out = "strongnamed/WebDriver", + ] + glob([ + "**/*.cs", + ]) + devtools_version_targets(), + out = "WebDriver", keyfile = "//dotnet:WebDriver.snk", + private_deps = [ + framework("nuget", "NETStandard.Library"), + ], resources = [ "//javascript/atoms/fragments:find-elements.js", "//javascript/atoms/fragments:is-displayed.js", @@ -98,81 +75,73 @@ csharp_library( target_frameworks = [ "netstandard2.0", ], - visibility = ["//visibility:public"], deps = [ - "@json.net//:Newtonsoft.Json", - "@system.drawing.common//:System.Drawing.Common", + framework("nuget", "NETStandard.Library"), + framework("nuget", "Newtonsoft.Json"), + framework("nuget", "System.Drawing.Common"), ], ) -copy_file( - name = "logo", - src = "//common/images:selenium_logo_small.png", - out = "icon.png", -) - copy_file( name = "props", - src = "build/Selenium.WebDriver.targets", + src = "//dotnet/src/webdriver/build:Selenium.WebDriver.targets", out = "Selenium.WebDriver.targets", ) copy_file( - name = "manager-linux", - src = "//common/manager:selenium-manager-linux", - out = "manager/linux/selenium-manager", + name = "transitive-props", + src = "//dotnet/src/webdriver/build:Selenium.WebDriver.targets", + out = "transitive.Selenium.WebDriver.targets", ) -copy_file( - name = "manager-macos", - src = "//common/manager:selenium-manager-macos", - out = "manager/macos/selenium-manager", -) - -copy_file( - name = "manager-windows", - src = "//common/manager:selenium-manager-windows", - out = "manager/windows/selenium-manager.exe", -) - -nuget_package( - name = "package", - src = "WebDriver.nuspec", - create_symbol_package = True, - is_windows = select({ - "@bazel_tools//src/conditions:host_windows": True, - "//conditions:default": False, - }), - package_id = "Selenium.WebDriver", - package_version = "{}".format(SE_VERSION), - visibility = ["//visibility:public"], - deps = [ - ":logo", - ":manager-linux", - ":manager-macos", - ":manager-windows", - ":props", - ":webdriver", +nuget_pack( + name = "webdriver", + files = { + "//common/images:selenium_logo_small.png": "images/icon.png", + "//common/manager:selenium-manager-linux": "manager/linux/selenium-manager", + "//common/manager:selenium-manager-macos": "manager/macos/selenium-manager", + "//common/manager:selenium-manager-windows": "manager/windows/selenium-manager.exe", + ":props": "build/Selenium.WebDriver.targets", + ":transitive-props": "buildTransitive/Selenium.WebDriver.targets", + }, + id = "Selenium.WebDriver", + libs = { + ":webdriver-lib": "WebDriver", + }, + nuspec_template = "WebDriver.nuspec", + tags = [ + "block-network", ], -) - -nuget_package( - name = "package-strongnamed", - src = "WebDriver.StrongNamed.nuspec", - is_windows = select({ - "@bazel_tools//src/conditions:host_windows": True, - "//conditions:default": False, - }), - package_id = "Selenium.WebDriver.StrongNamed", - package_version = "{}".format(SE_VERSION), - visibility = ["//visibility:public"], - deps = [ - ":webdriver-strongnamed", + version = SE_VERSION, + visibility = [ + "//dotnet:__subpackages__", ], ) -nuget_push( - name = "publish", - src = ":package", - api_key = "//dotnet:nuget-api-key", +nuget_pack( + name = "webdriver-strongnamed", + files = { + "//common/images:selenium_logo_small.png": "images/icon.png", + "//common/manager:selenium-manager-linux": "manager/linux/selenium-manager", + "//common/manager:selenium-manager-macos": "manager/macos/selenium-manager", + "//common/manager:selenium-manager-windows": "manager/windows/selenium-manager.exe", + ":props": "build/Selenium.WebDriver.StrongNamed.targets", + ":transitive-props": "buildTransitive/Selenium.WebDriver.StrongNamed.targets", + }, + id = "Selenium.WebDriver.StrongNamed", + libs = { + ":webdriver-strongnamed-lib": "WebDriver", + }, + nuspec_template = "WebDriver.StrongNamed.nuspec", + property_group_vars = { + "BaseImagePath": "images", + "BaseSeleniumManagerPath": "manager", + }, + tags = [ + "block-network", + ], + version = SE_VERSION, + visibility = [ + "//dotnet:__subpackages__", + ], ) diff --git a/dotnet/src/webdriver/Firefox/FirefoxDriver.cs b/dotnet/src/webdriver/Firefox/FirefoxDriver.cs index bc3b3827400ae..7d8edbecd4f7a 100644 --- a/dotnet/src/webdriver/Firefox/FirefoxDriver.cs +++ b/dotnet/src/webdriver/Firefox/FirefoxDriver.cs @@ -202,7 +202,8 @@ public FirefoxDriver(FirefoxDriverService service, FirefoxOptions options, TimeS /// private static ICommandExecutor GenerateDriverServiceCommandExecutor(DriverService service, DriverOptions options, TimeSpan commandTimeout) { - if (service.DriverServicePath == null) { + if (service.DriverServicePath == null) + { string fullServicePath = DriverFinder.FullPath(options); service.DriverServicePath = Path.GetDirectoryName(fullServicePath); service.DriverServiceExecutableName = Path.GetFileName(fullServicePath); diff --git a/dotnet/src/webdriver/Internal/Base64UrlEncoder.cs b/dotnet/src/webdriver/Internal/Base64UrlEncoder.cs index 86f613e9bc7a1..b5fa69b2dfd8b 100644 --- a/dotnet/src/webdriver/Internal/Base64UrlEncoder.cs +++ b/dotnet/src/webdriver/Internal/Base64UrlEncoder.cs @@ -23,7 +23,7 @@ namespace OpenQA.Selenium.Internal /// /// Encodes and Decodes strings as Base64Url encoding. /// - internal static class Base64UrlEncoder + public static class Base64UrlEncoder { private const char base64PadCharacter = '='; private const string doubleBase64PadCharacter = "=="; @@ -126,7 +126,7 @@ public static byte[] DecodeBytes(string str) // 62nd char of encoding str = str.Replace(base64UrlCharacter62, base64Character62); - + // 63rd char of encoding str = str.Replace(base64UrlCharacter63, base64Character63); diff --git a/dotnet/src/webdriver/Internal/PortUtilities.cs b/dotnet/src/webdriver/Internal/PortUtilities.cs index 8c6a42596820c..46e327692e02e 100644 --- a/dotnet/src/webdriver/Internal/PortUtilities.cs +++ b/dotnet/src/webdriver/Internal/PortUtilities.cs @@ -24,7 +24,7 @@ namespace OpenQA.Selenium.Internal /// /// Encapsulates methods for working with ports. /// - internal static class PortUtilities + public static class PortUtilities { /// /// Finds a random, free port to be listened on. diff --git a/dotnet/src/webdriver/Internal/ResourceUtilities.cs b/dotnet/src/webdriver/Internal/ResourceUtilities.cs index 40ef810637751..47d8994d63ab4 100644 --- a/dotnet/src/webdriver/Internal/ResourceUtilities.cs +++ b/dotnet/src/webdriver/Internal/ResourceUtilities.cs @@ -44,7 +44,15 @@ public static string ProductVersion if (productVersion == null) { Assembly executingAssembly = Assembly.GetExecutingAssembly(); - productVersion = executingAssembly.GetCustomAttribute().InformationalVersion; + var assemblyInformationalVersionAttribute = executingAssembly.GetCustomAttribute(); + if (assemblyInformationalVersionAttribute == null) + { + productVersion = "Unknown"; + } + else + { + productVersion = assemblyInformationalVersionAttribute.InformationalVersion; + } } return productVersion; diff --git a/dotnet/src/webdriver/Properties/AssemblyInfo.cs b/dotnet/src/webdriver/Properties/AssemblyInfo.cs deleted file mode 100644 index d80031fbf396d..0000000000000 --- a/dotnet/src/webdriver/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,3 +0,0 @@ -using System.Runtime.CompilerServices; - -[assembly:InternalsVisibleTo("WebDriver.Common.Tests")] diff --git a/dotnet/src/webdriver/WebDriver.StrongNamed.nuspec b/dotnet/src/webdriver/WebDriver.StrongNamed.nuspec index 06c6606fa687e..64567f9f882b1 100644 --- a/dotnet/src/webdriver/WebDriver.StrongNamed.nuspec +++ b/dotnet/src/webdriver/WebDriver.StrongNamed.nuspec @@ -36,9 +36,6 @@ - - - - + diff --git a/dotnet/src/webdriver/WebDriver.csproj b/dotnet/src/webdriver/WebDriver.csproj index da7814592ab14..2fd8002edd459 100644 --- a/dotnet/src/webdriver/WebDriver.csproj +++ b/dotnet/src/webdriver/WebDriver.csproj @@ -95,11 +95,15 @@ ..\..\..\common\manager + + ..\..\..\common\images + + - + diff --git a/dotnet/src/webdriver/WebDriver.nuspec b/dotnet/src/webdriver/WebDriver.nuspec index 3190089c5b60f..64567f9f882b1 100644 --- a/dotnet/src/webdriver/WebDriver.nuspec +++ b/dotnet/src/webdriver/WebDriver.nuspec @@ -36,12 +36,6 @@ - - - - - - - + diff --git a/dotnet/src/webdriver/build/BUILD.bazel b/dotnet/src/webdriver/build/BUILD.bazel new file mode 100644 index 0000000000000..8c71e172b86e2 --- /dev/null +++ b/dotnet/src/webdriver/build/BUILD.bazel @@ -0,0 +1,3 @@ +exports_files([ + "Selenium.WebDriver.targets", +]) diff --git a/dotnet/src/webdriver/cdp/BUILD.bazel b/dotnet/src/webdriver/cdp/BUILD.bazel index f6252774f9d43..fbea7aec9ff45 100644 --- a/dotnet/src/webdriver/cdp/BUILD.bazel +++ b/dotnet/src/webdriver/cdp/BUILD.bazel @@ -1,22 +1,25 @@ load("//dotnet:defs.bzl", "generate_devtools") load("//dotnet:selenium-dotnet-version.bzl", "SUPPORTED_DEVTOOLS_VERSIONS") -[generate_devtools( - name = "generate-{}".format(devtools_version), - out = "{}".format(devtools_version), - browser_protocol = "//common/devtools/chromium/{}:browser_protocol".format(devtools_version), - generator = "//third_party/dotnet/devtools/src/generator:generator", - js_protocol = "//common/devtools/chromium/{}:js_protocol".format(devtools_version), - protocol_version = "{}".format(devtools_version), - templates = [ - "//third_party/dotnet/devtools/src/generator/Templates:command.hbs", - "//third_party/dotnet/devtools/src/generator/Templates:DevToolsSessionDomains.hbs", - "//third_party/dotnet/devtools/src/generator/Templates:domain.hbs", - "//third_party/dotnet/devtools/src/generator/Templates:event.hbs", - "//third_party/dotnet/devtools/src/generator/Templates:project.hbs", - "//third_party/dotnet/devtools/src/generator/Templates:type-enum.hbs", - "//third_party/dotnet/devtools/src/generator/Templates:type-hash.hbs", - "//third_party/dotnet/devtools/src/generator/Templates:type-object.hbs", - ], - visibility = ["//visibility:public"], -) for devtools_version in SUPPORTED_DEVTOOLS_VERSIONS] +[ + generate_devtools( + name = "generate-{}".format(devtools_version), + out = "{}".format(devtools_version), + browser_protocol = "//common/devtools/chromium/{}:browser_protocol".format(devtools_version), + generator = "//third_party/dotnet/devtools/src/generator", + js_protocol = "//common/devtools/chromium/{}:js_protocol".format(devtools_version), + protocol_version = "{}".format(devtools_version), + templates = [ + "//third_party/dotnet/devtools/src/generator/Templates:command.hbs", + "//third_party/dotnet/devtools/src/generator/Templates:DevToolsSessionDomains.hbs", + "//third_party/dotnet/devtools/src/generator/Templates:domain.hbs", + "//third_party/dotnet/devtools/src/generator/Templates:event.hbs", + "//third_party/dotnet/devtools/src/generator/Templates:project.hbs", + "//third_party/dotnet/devtools/src/generator/Templates:type-enum.hbs", + "//third_party/dotnet/devtools/src/generator/Templates:type-hash.hbs", + "//third_party/dotnet/devtools/src/generator/Templates:type-object.hbs", + ], + visibility = ["//dotnet:__subpackages__"], + ) + for devtools_version in SUPPORTED_DEVTOOLS_VERSIONS +] diff --git a/dotnet/test/common/BUILD.bazel b/dotnet/test/common/BUILD.bazel index 0569614a8ed4d..28fe78b9e445c 100644 --- a/dotnet/test/common/BUILD.bazel +++ b/dotnet/test/common/BUILD.bazel @@ -1,86 +1,89 @@ -load("//dotnet:defs.bzl", "nunit_test") +load("//dotnet:defs.bzl", "csharp_library", "dotnet_nunit_test_suite", "framework") -exports_files(["appconfig.json"]) - -SUPPORTED_BROWSERS = [ - ("chrome", "Chrome"), - ("chromedev", "ChromeDev"), - ("firefox", "Firefox"), - ("firefoxnightly", "FirefoxNightly"), - ("ie", "IE"), - ("edge", "Edge"), - ("safari", "Safari"), - ("safaritechpreview", "SafariTechPreview"), -] - -config_setting( - name = "netframework", - values = {"define": "framework=netfx"}, -) - -config_setting( - name = "netcore", - values = {"define": "framework=netcore"}, +filegroup( + name = "assembly-fixtures", + testonly = True, + srcs = [ + "AssemblyTeardown.cs", + ], + visibility = [ + "//dotnet/test:__subpackages__", + ], ) -[nunit_test( - name = "{}".format(target_name), - size = "enormous", - srcs = glob([ - "*.cs", - "CustomDriverConfigs/*.cs", - "CustomTestAttributes/*.cs", - "DevTools/*.cs", - "Environment/*.cs", - "Interactions/*.cs", - ]), - out = "WebDriver.Common.Tests.dll", - args = [ - "--workers=1", - "--params=ConfigFile=$(location appconfig.json)", - "--params=ActiveDriverConfig={}".format(config_setting), - ], +filegroup( + name = "test-data", + testonly = True, + srcs = [], data = [ "appconfig.json", "//common/src/web", - "//java/test/org/openqa/selenium/environment:appserver_deploy.jar", + "//java/test/org/openqa/selenium/environment:appserver", "//java/test/org/openqa/selenium/environment:keystore", "//javascript/atoms", "//third_party/closure/goog", "//third_party/js/selenium:webdriver_json", ], - is_windows = select({ - "@bazel_tools//src/conditions:host_windows": True, - "//conditions:default": False, - }), - tags = [ - "no-sandbox", - "requires-network", + visibility = [ + "//dotnet/test:__subpackages__", ], - target_frameworks = select({ - ":netframework": ["net48"], - ":netcore": ["net6.0"], - "//conditions:default": ["net6.0"], - }), - visibility = ["//visibility:public"], - deps = select({ - ":netframework": [ - "//dotnet/src/webdriver", - "@benderproxy//:BenderProxy", - "@json.net//:Newtonsoft.Json", - "@moq//:Moq", - ], - ":netcore": [ - "//dotnet/src/webdriver", - "@benderproxy//:BenderProxy", - "@json.net//:Newtonsoft.Json", - "@moq//:Moq", - ], - "//conditions:default": [ - "//dotnet/src/webdriver", - "@benderproxy//:BenderProxy", - "@json.net//:Newtonsoft.Json", - "@moq//:Moq", +) + +csharp_library( + name = "fixtures", + testonly = True, + srcs = glob( + ["**/*.cs"], + exclude = [ + "**/*Test.cs", + "**/*Tests.cs", ], - }), -) for (target_name, config_setting) in SUPPORTED_BROWSERS] + ), + private_deps = [ + framework("nuget", "NETStandard.Library"), + ], + target_frameworks = ["netstandard2.0"], + visibility = [ + "//dotnet/test:__subpackages__", + ], + deps = [ + "//dotnet/src/webdriver", + "@rules_dotnet//tools/runfiles", + framework("nuget", "Newtonsoft.Json"), + framework("nuget", "NUnit"), + ], +) + +dotnet_nunit_test_suite( + name = "AllTests", + size = "large", + srcs = glob([ + "**/*Test.cs", + "**/*Tests.cs", + ]) + [ + ":assembly-fixtures", + ], + browsers = [ + # The first browser in this list is assumed to be the one that should + # be used by default. + "firefox", + # "safari", # Skipping safari for now + "ie", + "edge", + "chrome", + ], + data = [ + ":test-data", + ], + private_deps = [ + framework("nuget", "NETStandard.Library"), + ], + target_frameworks = ["net7.0"], + deps = [ + ":fixtures", + "//dotnet/src/webdriver", + framework("nuget", "BenderProxy"), + framework("nuget", "Newtonsoft.Json"), + framework("nuget", "NUnit"), + ], +) diff --git a/dotnet/test/common/Environment/DriverFactory.cs b/dotnet/test/common/Environment/DriverFactory.cs index 3bc8948dab56a..e690b14f80a16 100644 --- a/dotnet/test/common/Environment/DriverFactory.cs +++ b/dotnet/test/common/Environment/DriverFactory.cs @@ -5,18 +5,33 @@ using OpenQA.Selenium.Safari; using System; using System.Collections.Generic; +using System.IO; using System.Reflection; +using NUnit.Framework; using OpenQA.Selenium.Chromium; namespace OpenQA.Selenium.Environment { public class DriverFactory { + string driverPath; + string browserBinaryLocation; private Dictionary serviceTypes = new Dictionary(); private Dictionary optionsTypes = new Dictionary(); - public DriverFactory() + public DriverFactory(string driverPath, string browserBinaryLocation) { + if (string.IsNullOrEmpty(driverPath)) + { + this.driverPath = TestContext.CurrentContext.TestDirectory; + } + else + { + this.driverPath = driverPath; + } + + this.browserBinaryLocation = browserBinaryLocation; + this.PopulateServiceTypes(); this.PopulateOptionsTypes(); } @@ -59,7 +74,16 @@ public IWebDriver CreateDriverWithOptions(Type driverType, DriverOptions driverO { browser = Browser.Chrome; options = GetDriverOptions(driverType, driverOptions); + options.UseWebSocketUrl = true; + + var chromeOptions = (ChromeOptions)options; + chromeOptions.AddArguments("--no-sandbox", "--disable-dev-shm-usage"); + service = CreateService(); + if (!string.IsNullOrEmpty(this.browserBinaryLocation)) + { + ((ChromeOptions)options).BinaryLocation = this.browserBinaryLocation; + } if (enableLogging) { ((ChromiumDriverService)service).EnableVerboseLogging = true; @@ -70,6 +94,10 @@ public IWebDriver CreateDriverWithOptions(Type driverType, DriverOptions driverO browser = Browser.Edge; options = GetDriverOptions(driverType, driverOptions); service = CreateService(); + if (!string.IsNullOrEmpty(this.browserBinaryLocation)) + { + ((EdgeOptions)options).BinaryLocation = this.browserBinaryLocation; + } if (enableLogging) { ((ChromiumDriverService)service).EnableVerboseLogging = true; @@ -90,6 +118,10 @@ public IWebDriver CreateDriverWithOptions(Type driverType, DriverOptions driverO browser = Browser.Firefox; options = GetDriverOptions(driverType, driverOptions); service = CreateService(); + if (!string.IsNullOrEmpty(this.browserBinaryLocation)) + { + ((FirefoxOptions)options).BrowserExecutableLocation = this.browserBinaryLocation; + } if (enableLogging) { ((FirefoxDriverService)service).LogLevel = FirefoxDriverLogLevel.Trace; @@ -102,6 +134,12 @@ public IWebDriver CreateDriverWithOptions(Type driverType, DriverOptions driverO service = CreateService(); } + if (!String.IsNullOrEmpty(this.driverPath) && service != null) + { + service.DriverServicePath = Path.GetDirectoryName(this.driverPath); + service.DriverServiceExecutableName = Path.GetFileName(this.driverPath); + } + this.OnDriverLaunching(service, options); if (browser != Browser.All) diff --git a/dotnet/test/common/Environment/EnvironmentManager.cs b/dotnet/test/common/Environment/EnvironmentManager.cs index 6b79c34e3f90b..dde1be1557463 100644 --- a/dotnet/test/common/Environment/EnvironmentManager.cs +++ b/dotnet/test/common/Environment/EnvironmentManager.cs @@ -1,8 +1,10 @@ +using Bazel; using System; using System.Reflection; using System.IO; using Newtonsoft.Json; using NUnit.Framework; +using OpenQA.Selenium.Internal; namespace OpenQA.Selenium.Environment { @@ -17,27 +19,35 @@ public class EnvironmentManager private DriverFactory driverFactory; private RemoteSeleniumServer remoteServer; private string remoteCapabilities; - private bool logging; private EnvironmentManager() { + var runfiles = Runfiles.Create(); + var dataFilePath = runfiles.Rlocation("selenium/dotnet/test/common/appconfig.json"); string currentDirectory = this.CurrentDirectory; - string defaultConfigFile = Path.Combine(currentDirectory, "appconfig.json"); - string configFile = TestContext.Parameters.Get("ConfigFile", defaultConfigFile).Replace('/', Path.DirectorySeparatorChar); - string content = File.ReadAllText(configFile); + string content = File.ReadAllText(dataFilePath); TestEnvironment env = JsonConvert.DeserializeObject(content); string activeDriverConfig = System.Environment.GetEnvironmentVariable("ACTIVE_DRIVER_CONFIG") ?? TestContext.Parameters.Get("ActiveDriverConfig", env.ActiveDriverConfig); + string driverServiceLocation = System.Environment.GetEnvironmentVariable("DRIVER_SERVICE_LOCATION") ?? TestContext.Parameters.Get("DriverServiceLocation", env.DriverServiceLocation); + + string browserLocation = System.Environment.GetEnvironmentVariable("BROWSER_LOCATION") ?? TestContext.Parameters.Get("BrowserLocation", string.Empty); + string activeWebsiteConfig = TestContext.Parameters.Get("ActiveWebsiteConfig", env.ActiveWebsiteConfig); DriverConfig driverConfig = env.DriverConfigs[activeDriverConfig]; WebsiteConfig websiteConfig = env.WebSiteConfigs[activeWebsiteConfig]; + + int port = PortUtilities.FindFreePort(); + websiteConfig.Port = port.ToString(); + TestWebServerConfig webServerConfig = env.TestWebServerConfig; webServerConfig.CaptureConsoleOutput = TestContext.Parameters.Get("CaptureWebServerOutput", env.TestWebServerConfig.CaptureConsoleOutput); webServerConfig.HideCommandPromptWindow = TestContext.Parameters.Get("HideWebServerCommandPrompt", env.TestWebServerConfig.HideCommandPromptWindow); webServerConfig.JavaHomeDirectory = TestContext.Parameters.Get("WebServerJavaHome", env.TestWebServerConfig.JavaHomeDirectory); + webServerConfig.Port = websiteConfig.Port; - this.driverFactory = new DriverFactory(); + this.driverFactory = new DriverFactory(driverServiceLocation, browserLocation); this.driverFactory.DriverStarting += OnDriverStarting; Assembly driverAssembly = null; @@ -53,7 +63,6 @@ private EnvironmentManager() driverType = driverAssembly.GetType(driverConfig.DriverTypeName); browser = driverConfig.BrowserValue; remoteCapabilities = driverConfig.RemoteCapabilities; - logging = driverConfig.Logging; urlBuilder = new UrlBuilder(websiteConfig); @@ -192,11 +201,6 @@ public string RemoteCapabilities get { return remoteCapabilities; } } - public bool Logging - { - get { return logging; } - } - public UrlBuilder UrlBuilder { get @@ -211,18 +215,20 @@ public IWebDriver GetCurrentDriver() { return driver; } - - return CreateFreshDriver(); + else + { + return CreateFreshDriver(); + } } public IWebDriver CreateDriverInstance() { - return driverFactory.CreateDriver(driverType, Logging); + return driverFactory.CreateDriver(driverType); } public IWebDriver CreateDriverInstance(DriverOptions options) { - return driverFactory.CreateDriverWithOptions(driverType, options, Logging); + return driverFactory.CreateDriverWithOptions(driverType, options); } public IWebDriver CreateFreshDriver() @@ -236,15 +242,9 @@ public void CloseCurrentDriver() { if (driver != null) { - try - { - driver.Quit(); - } - finally - { - driver = null; - } + driver.Quit(); } + driver = null; } protected void OnDriverStarting(object sender, DriverStartingEventArgs e) diff --git a/dotnet/test/common/Environment/TestEnvironment.cs b/dotnet/test/common/Environment/TestEnvironment.cs index 95ab14df89224..f8b201575ca3c 100644 --- a/dotnet/test/common/Environment/TestEnvironment.cs +++ b/dotnet/test/common/Environment/TestEnvironment.cs @@ -9,6 +9,9 @@ class TestEnvironment [JsonProperty] public bool CaptureWebServerOutput { get; set; } + [JsonProperty] + public string DriverServiceLocation { get; set; } + [JsonProperty] public bool HideWebServerCommandPrompt { get; set; } diff --git a/dotnet/test/common/Environment/TestWebServer.cs b/dotnet/test/common/Environment/TestWebServer.cs index 72a4d313d1c1a..7c22c76cc695c 100644 --- a/dotnet/test/common/Environment/TestWebServer.cs +++ b/dotnet/test/common/Environment/TestWebServer.cs @@ -1,9 +1,11 @@ +using Bazel; using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Diagnostics; using System.Text; +using OpenQA.Selenium.Internal; using NUnit.Framework; namespace OpenQA.Selenium.Environment @@ -12,11 +14,12 @@ public class TestWebServer { private Process webserverProcess; - private string standaloneTestJar = @"java/test/org/openqa/selenium/environment/appserver_deploy.jar"; + private string standaloneTestJar = @"selenium/java/test/org/openqa/selenium/environment/appserver"; private string projectRootPath; private bool captureWebServerOutput; private bool hideCommandPrompt; private string javaHomeDirectory; + private string port; private StringBuilder outputData = new StringBuilder(); @@ -26,14 +29,19 @@ public TestWebServer(string projectRoot, TestWebServerConfig config) this.captureWebServerOutput = config.CaptureConsoleOutput; this.hideCommandPrompt = config.HideCommandPromptWindow; this.javaHomeDirectory = config.JavaHomeDirectory; + this.port = config.Port; } public void Start() { if (webserverProcess == null || webserverProcess.HasExited) { - standaloneTestJar = standaloneTestJar.Replace('/', Path.DirectorySeparatorChar); - if (!File.Exists(Path.Combine(projectRootPath, standaloneTestJar))) + var runfiles = Runfiles.Create(); + standaloneTestJar = runfiles.Rlocation(standaloneTestJar); + + Console.Write("Standalone jar is " + standaloneTestJar); + + if (!File.Exists(standaloneTestJar)) { throw new FileNotFoundException( string.Format( @@ -43,47 +51,39 @@ public void Start() projectRootPath)); } - string javaExecutableName = "java"; - if (System.Environment.OSVersion.Platform == PlatformID.Win32NT || System.Environment.OSVersion.Platform == PlatformID.Win32Windows) - { - javaExecutableName = javaExecutableName + ".exe"; - } - - string javaExecutablePath = string.Empty; - if (!string.IsNullOrEmpty(this.javaHomeDirectory)) - { - javaExecutablePath = Path.Combine(this.javaHomeDirectory, "bin"); - } - - List javaSystemProperties = new List(); + //List javaSystemProperties = new List(); StringBuilder processArgsBuilder = new StringBuilder(); - foreach (string systemProperty in javaSystemProperties) - { - if (processArgsBuilder.Length > 0) - { - processArgsBuilder.Append(" "); - } - - processArgsBuilder.AppendFormat("-D{0}", systemProperty); - } - - if (processArgsBuilder.Length > 0) - { - processArgsBuilder.Append(" "); - } - - processArgsBuilder.AppendFormat("-jar {0}", standaloneTestJar); + // foreach (string systemProperty in javaSystemProperties) + // { + // if (processArgsBuilder.Length > 0) + // { + // processArgsBuilder.Append(" "); + // } + // + // processArgsBuilder.AppendFormat("-D{0}", systemProperty); + // } + // + // if (processArgsBuilder.Length > 0) + // { + // processArgsBuilder.Append(" "); + // } + // + // processArgsBuilder.AppendFormat("-jar {0}", standaloneTestJar); + processArgsBuilder.AppendFormat(" {0}", this.port); + + Console.Write(processArgsBuilder.ToString()); webserverProcess = new Process(); - if (!string.IsNullOrEmpty(javaExecutablePath)) - { - webserverProcess.StartInfo.FileName = Path.Combine(javaExecutablePath, javaExecutableName); - } - else - { - webserverProcess.StartInfo.FileName = javaExecutableName; - } + webserverProcess.StartInfo.FileName = standaloneTestJar; + // if (!string.IsNullOrEmpty(javaExecutablePath)) + // { + // webserverProcess.StartInfo.FileName = Path.Combine(javaExecutablePath, javaExecutableName); + // } + // else + // { + // webserverProcess.StartInfo.FileName = javaExecutableName; + // } webserverProcess.StartInfo.Arguments = processArgsBuilder.ToString(); webserverProcess.StartInfo.WorkingDirectory = projectRootPath; @@ -94,6 +94,8 @@ public void Start() webserverProcess.StartInfo.EnvironmentVariables["JAVA_HOME"] = this.javaHomeDirectory; } + captureWebServerOutput = true; + if (captureWebServerOutput) { webserverProcess.StartInfo.RedirectStandardOutput = true; diff --git a/dotnet/test/common/Environment/TestWebServerConfig.cs b/dotnet/test/common/Environment/TestWebServerConfig.cs index 5b06e001b3a76..0bc795371360c 100644 --- a/dotnet/test/common/Environment/TestWebServerConfig.cs +++ b/dotnet/test/common/Environment/TestWebServerConfig.cs @@ -14,5 +14,7 @@ public class TestWebServerConfig [JsonProperty] public string JavaHomeDirectory { get; set; } + + public string Port { get; set; } } } diff --git a/dotnet/test/common/PageLoadingTest.cs b/dotnet/test/common/PageLoadingTest.cs index f1c13a7881e48..1ecee97596ca7 100644 --- a/dotnet/test/common/PageLoadingTest.cs +++ b/dotnet/test/common/PageLoadingTest.cs @@ -422,6 +422,7 @@ private Func TitleToBeEqualTo(string expectedTitle) * Side effects: 1) {@link #driver} is configured to use given pageLoadTimeout, * 2) test HTTP server still didn't serve the page to browser (some browsers may still * be waiting for the page to load despite the fact that driver responded with the timeout). + *

*/ private void TestPageLoadTimeoutIsEnforced(long webDriverPageLoadTimeoutInSeconds) { diff --git a/dotnet/test/common/TakesScreenshotTest.cs b/dotnet/test/common/TakesScreenshotTest.cs index 4024ee153ddc3..7a832471a8c86 100644 --- a/dotnet/test/common/TakesScreenshotTest.cs +++ b/dotnet/test/common/TakesScreenshotTest.cs @@ -101,7 +101,7 @@ public void ShouldCaptureScreenshotOfCurrentViewport() [IgnoreBrowser(Browser.Edge, "Color comparisons fail on Edge")] public void ShouldTakeScreenshotsOfAnElement() { -#if NET6_0 +#if NET6_0 || NET7_0 Assert.Ignore("Skipping test: this framework can not process colors."); #endif @@ -130,7 +130,7 @@ public void ShouldTakeScreenshotsOfAnElement() [IgnoreBrowser(Browser.Edge, "Color comparisons fail on Edge")] public void ShouldCaptureScreenshotAtFramePage() { -#if NET6_0 +#if NET6_0 || NET7_0 Assert.Ignore("Skipping test: this framework can not process colors."); #endif @@ -175,7 +175,7 @@ public void ShouldCaptureScreenshotAtFramePage() [IgnoreBrowser(Browser.Edge, "Color comparisons fail on Edge")] public void ShouldCaptureScreenshotAtIFramePage() { -#if NET6_0 +#if NET6_0 || NET7_0 Assert.Ignore("Skipping test: this framework can not process colors."); #endif @@ -218,7 +218,7 @@ public void ShouldCaptureScreenshotAtIFramePage() [IgnoreBrowser(Browser.Edge, "Color comparisons fail on Edge")] public void ShouldCaptureScreenshotAtFramePageAfterSwitching() { -#if NET6_0 +#if NET6_0 || NET7_0 Assert.Ignore("Skipping test: this framework can not process colors."); #endif @@ -259,7 +259,7 @@ public void ShouldCaptureScreenshotAtFramePageAfterSwitching() [IgnoreBrowser(Browser.Edge, "Color comparisons fail on Edge")] public void ShouldCaptureScreenshotAtIFramePageAfterSwitching() { -#if NET6_0 +#if NET6_0 || NET7_0 Assert.Ignore("Skipping test: this framework can not process colors."); #endif @@ -335,7 +335,7 @@ private HashSet ScanActualColors(Screenshot screenshot, int stepX, int s { HashSet colors = new HashSet(); -#if !NET6_0 +#if !NET6_0 && !NET7_0 try { Image image = Image.FromStream(new MemoryStream(screenshot.AsByteArray)); @@ -369,7 +369,7 @@ private Color GetPixelColor(Screenshot screenshot, int x, int y) { Color pixelColor = Color.Black; -#if !NET6_0 +#if !NET6_0 && !NET7_0 Image image = Image.FromStream(new MemoryStream(screenshot.AsByteArray)); Bitmap bitmap = new Bitmap(image); pixelColor = bitmap.GetPixel(1, 1); diff --git a/dotnet/test/common/WebDriver.Common.Tests.csproj b/dotnet/test/common/WebDriver.Common.Tests.csproj index c759d2f2acb93..9cae056c97d25 100644 --- a/dotnet/test/common/WebDriver.Common.Tests.csproj +++ b/dotnet/test/common/WebDriver.Common.Tests.csproj @@ -1,7 +1,7 @@ - net6.0;net48 + net7.0 WebDriver.Common.Tests OpenQA.Selenium diff --git a/dotnet/test/common/appconfig.json b/dotnet/test/common/appconfig.json index 3bb05d483db4e..9ed48075d594c 100644 --- a/dotnet/test/common/appconfig.json +++ b/dotnet/test/common/appconfig.json @@ -1,4 +1,5 @@ { + "DriverServiceLocation": "", "ActiveDriverConfig": "Chrome", "ActiveWebsiteConfig": "Default", "TestWebServerConfig": { diff --git a/dotnet/test/support/BUILD.bazel b/dotnet/test/support/BUILD.bazel deleted file mode 100644 index 2fdeabfa268b5..0000000000000 --- a/dotnet/test/support/BUILD.bazel +++ /dev/null @@ -1,41 +0,0 @@ -load("//dotnet:defs.bzl", "nunit_test") - -nunit_test( - name = "support", - size = "enormous", - srcs = glob([ - "*.cs", - "Events/*.cs", - "Extensions/*.cs", - "UI/*.cs", - ]), - out = "WebDriver.Support.Tests.dll", - args = [ - "--workers=1", - "--params=ConfigFile=$(location //dotnet/test/common:appconfig.json)", - "--params=ActiveDriverConfig={}".format(config_setting), - "--params=ActiveWebsiteConfig=HostsFileRedirect", - ], - data = [ - "//common/src/web", - "//dotnet/test/common:appconfig.json", - "//java/test/org/openqa/selenium/environment:appserver_deploy.jar", - ], - is_windows = select({ - "@bazel_tools//src/conditions:host_windows": True, - "//conditions:default": False, - }), - tags = [ - "no-sandbox", - "requires-network", - ], - target_frameworks = ["netcoreapp3.1"], - visibility = ["//visibility:public"], - deps = [ - "//dotnet/src/support:netstandard2.1", - "//dotnet/src/webdriver:netstandard2.1", - "//dotnet/test/common:firefox", - "@json.net//:Newtonsoft.Json", - "@moq//:Moq", - ], -) diff --git a/dotnet/test/support/Events/BUILD.bazel b/dotnet/test/support/Events/BUILD.bazel new file mode 100644 index 0000000000000..a5f7c2f7d60b0 --- /dev/null +++ b/dotnet/test/support/Events/BUILD.bazel @@ -0,0 +1,52 @@ +load("//dotnet:defs.bzl", "dotnet_nunit_test_suite", "framework", "nunit_test") + +SMALL_TESTS = [ + "EventFiringWebDriverTest.cs", +] + +nunit_test( + name = "SmallTests", + size = "small", + srcs = SMALL_TESTS, + private_deps = [ + framework("nuget", "NETStandard.Library"), + ], + target_frameworks = ["net7.0"], + deps = [ + "//dotnet/src/support", + "//dotnet/src/webdriver", + "//dotnet/test/common:fixtures", + framework("nuget", "NUnit"), + framework("nuget", "Moq"), + ], +) + +dotnet_nunit_test_suite( + name = "LargeTests", + size = "large", + srcs = glob( + [ + "**/*Test.cs", + "**/*Tests.cs", + ], + exclude = SMALL_TESTS, + ) + [ + "//dotnet/test/common:assembly-fixtures", + ], + browsers = [ + "firefox", + ], + data = [ + "//dotnet/test/common:test-data", + ], + private_deps = [ + framework("nuget", "NETStandard.Library"), + ], + target_frameworks = ["net7.0"], + deps = [ + "//dotnet/src/support", + "//dotnet/src/webdriver", + "//dotnet/test/common:fixtures", + framework("nuget", "NUnit"), + ], +) diff --git a/dotnet/test/support/Extensions/BUILD.bazel b/dotnet/test/support/Extensions/BUILD.bazel new file mode 100644 index 0000000000000..5bd63a4ab7583 --- /dev/null +++ b/dotnet/test/support/Extensions/BUILD.bazel @@ -0,0 +1,18 @@ +load("//dotnet:defs.bzl", "framework", "nunit_test") + +nunit_test( + name = "SmallTests", + size = "small", + srcs = glob(["*.cs"]), + private_deps = [ + framework("nuget", "NETStandard.Library"), + ], + target_frameworks = ["net7.0"], + deps = [ + "//dotnet/src/support", + "//dotnet/src/webdriver", + "//dotnet/test/common:fixtures", + framework("nuget", "Moq"), + framework("nuget", "NUnit"), + ], +) diff --git a/dotnet/test/support/UI/BUILD.bazel b/dotnet/test/support/UI/BUILD.bazel new file mode 100644 index 0000000000000..15bce7010c76c --- /dev/null +++ b/dotnet/test/support/UI/BUILD.bazel @@ -0,0 +1,57 @@ +load("//dotnet:defs.bzl", "dotnet_nunit_test_suite", "framework", "nunit_test") + +SMALL_TESTS = [ + "DefaultWaitTest.cs", + "FakeClock.cs", + "LoadableComponentTests.cs", + "SelectTests.cs", + "SlowLoadableComponentTest.cs", + "WebDriverWaitTest.cs", +] + +nunit_test( + name = "SmallTests", + size = "small", + srcs = SMALL_TESTS, + private_deps = [ + framework("nuget", "NETStandard.Library"), + ], + target_frameworks = ["net7.0"], + deps = [ + "//dotnet/src/support", + "//dotnet/src/webdriver", + "//dotnet/test/common:fixtures", + framework("nuget", "NUnit"), + framework("nuget", "Moq"), + ], +) + +dotnet_nunit_test_suite( + name = "LargeTests", + size = "large", + srcs = glob( + [ + "**/*Test.cs", + "**/*Tests.cs", + ], + exclude = SMALL_TESTS, + ) + [ + "//dotnet/test/common:assembly-fixtures", + ], + browsers = [ + "firefox", + ], + data = [ + "//dotnet/test/common:test-data", + ], + private_deps = [ + framework("nuget", "NETStandard.Library"), + ], + target_frameworks = ["net7.0"], + deps = [ + "//dotnet/src/support", + "//dotnet/src/webdriver", + "//dotnet/test/common:fixtures", + framework("nuget", "NUnit"), + ], +) diff --git a/dotnet/update-deps.sh b/dotnet/update-deps.sh new file mode 100755 index 0000000000000..e2056c70b305e --- /dev/null +++ b/dotnet/update-deps.sh @@ -0,0 +1,9 @@ +#! /usr/bin/env bash + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +( + cd "$SCRIPT_DIR" || exit 1 + (dotnet tool restore && dotnet tool run paket install) + bazel run @rules_dotnet//tools/paket2bazel:paket2bazel.exe -- --dependencies-file "$(pwd)"/paket.dependencies --output-folder "$(pwd)" +) diff --git a/java/test/org/openqa/selenium/environment/webserver/NettyAppServer.java b/java/test/org/openqa/selenium/environment/webserver/NettyAppServer.java index 3b025f4dbae64..d477bb4f1a2fd 100644 --- a/java/test/org/openqa/selenium/environment/webserver/NettyAppServer.java +++ b/java/test/org/openqa/selenium/environment/webserver/NettyAppServer.java @@ -95,8 +95,13 @@ private static Config createDefaultConfig() { } public static void main(String[] args) { + int port = 2310; + if (args.length > 0) { + port = Integer.parseInt(args[0]); + } + MemoizedConfig config = - new MemoizedConfig(new MapConfig(singletonMap("server", singletonMap("port", 2310)))); + new MemoizedConfig(new MapConfig(singletonMap("server", singletonMap("port", port)))); BaseServerOptions options = new BaseServerOptions(config); HttpHandler handler = diff --git a/scripts/github-actions/ci-build.sh b/scripts/github-actions/ci-build.sh index 6a3c08f195f1d..1f51aee69143c 100755 --- a/scripts/github-actions/ci-build.sh +++ b/scripts/github-actions/ci-build.sh @@ -13,6 +13,6 @@ bazel query @npm//:all >/dev/null # Now run the tests. The engflow build uses pinned browsers # so this should be fine # shellcheck disable=SC2046 -bazel test --config=remote-ci --build_tests_only --test_tag_filters=-exclusive-if-local,-skip-remote --keep_going --flaky_test_attempts=2 //java/... //py/... -- $(cat .skipped-tests | tr '\n' ' ') -# Build the entire java tree -bazel build --config=remote-ci java/src/... //py:selenium-wheel +bazel test --config=remote-ci --build_tests_only --test_tag_filters=-exclusive-if-local,-skip-remote --keep_going --flaky_test_attempts=2 //dotnet/... //java/... //py/... -- $(cat .skipped-tests | tr '\n' ' ') +# Build the packages we want to ship to users +bazel build --config=remote-ci //dotnet:all java/src/... //py:selenium-wheel diff --git a/scripts/ij.bazelproject b/scripts/ij.bazelproject index 6ac770687b228..c18be8e5ef06c 100644 --- a/scripts/ij.bazelproject +++ b/scripts/ij.bazelproject @@ -2,7 +2,6 @@ directories: # Add the directories you want added as source here # By default, we've added your entire workspace ('.') . - -dotnet test_sources: java/test diff --git a/third_party/dotnet/devtools/src/generator/BUILD.bazel b/third_party/dotnet/devtools/src/generator/BUILD.bazel index 7f861986a3af8..d2efbb9b24a2d 100644 --- a/third_party/dotnet/devtools/src/generator/BUILD.bazel +++ b/third_party/dotnet/devtools/src/generator/BUILD.bazel @@ -1,47 +1,22 @@ -load("//dotnet:defs.bzl", "csharp_executable", "generated_assembly_info") -load( - "//dotnet:selenium-dotnet-version.bzl", - "ASSEMBLY_COMPANY", - "ASSEMBLY_COPYRIGHT", - "ASSEMBLY_INFORMATIONAL_VERSION", - "ASSEMBLY_PRODUCT", - "ASSEMBLY_VERSION", -) - -generated_assembly_info( - name = "assembly-info", - company = ASSEMBLY_COMPANY, - copyright = ASSEMBLY_COPYRIGHT, - description = "Selenium DevTools Protocol Code Generator", - informational_version = ASSEMBLY_INFORMATIONAL_VERSION, - product = ASSEMBLY_PRODUCT, - title = "Selenium DevTools Protocol Code Generator", - version = ASSEMBLY_VERSION, -) +load("//dotnet:defs.bzl", "csharp_binary", "framework") -csharp_executable( +csharp_binary( name = "generator", - srcs = glob([ - "*.cs", - "CodeGen/**/*.cs", - "Converters/**/*.cs", - "ProtocolDefinition/**/*.cs", - ]) + [":assembly-info"], - out = "DevToolsGenerator", - is_windows = select({ - "@bazel_tools//src/conditions:host_windows": True, - "//conditions:default": False, - }), - target_frameworks = [ - "net6.0", + srcs = glob(["**/*.cs"]), + # Used as a tool in our build, so just target one framework + target_frameworks = ["net6.0"], + visibility = [ + "//dotnet:__subpackages__", ], - visibility = ["//visibility:public"], deps = [ - "@commandlineparser//:CommandLine", - "@dependencyinjection//:Microsoft.Extensions.DependencyInjection", - "@dependencyinjectionabstractions//:Microsoft.Extensions.DependencyInjection.Abstractions", - "@handlebars//:Handlebars", - "@humanizer//:Humanizer", - "@json.net//:Newtonsoft.Json", + framework("nuget", "Microsoft.NETCore.App.Ref"), + framework("nuget", "CommandLineParser"), + framework("nuget", "Handlebars.Net"), + framework("nuget", "Humanizer.Core"), + framework("nuget", "Microsoft.CSharp"), + framework("nuget", "Microsoft.Extensions.DependencyInjection"), + framework("nuget", "Microsoft.Extensions.DependencyInjection.Abstractions"), + framework("nuget", "Newtonsoft.Json"), + framework("nuget", "System.Runtime"), ], )