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"),
],
)