From fc67869fd4af80132760b28ded11e1a08a673fe6 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 7 Aug 2026 20:50:53 -0700 Subject: [PATCH 1/3] Clarify assembly-qualified names for native hosting (#55315) Clarify the native hosting tutorial with requirements for assembly-qualified names when you load a managed assembly and obtain a function pointer. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: elinor-fung <47805090+elinor-fung@users.noreply.github.com> --- docs/core/tutorials/netcore-hosting.md | 4 ++-- .../csharp/HostWithHostFxr/src/NativeHost/nativehost.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/core/tutorials/netcore-hosting.md b/docs/core/tutorials/netcore-hosting.md index af6c95d9e5053..85299e8503132 100644 --- a/docs/core/tutorials/netcore-hosting.md +++ b/docs/core/tutorials/netcore-hosting.md @@ -69,7 +69,7 @@ The `hostfxr_initialize_for_runtime_config` and `hostfxr_get_runtime_delegate` f ### Step 3 - Load managed assembly and get function pointer to a managed method -The runtime delegate is called to load the managed assembly and get a function pointer to a managed method. The delegate requires the assembly path, type name, and method name as inputs and returns a function pointer that can be used to invoke the managed method. +The runtime delegate is called to load the managed assembly and get a function pointer to a managed method. The delegate requires the assembly path, assembly-qualified type name, and method name as inputs and returns a function pointer that can be used to invoke the managed method. [!code-cpp[HostFxrHost#LoadAndGet](~/samples/snippets/core/tutorials/netcore-hosting/csharp/HostWithHostFxr/src/NativeHost/nativehost.cpp#LoadAndGet)] @@ -79,7 +79,7 @@ By passing `nullptr` as the delegate type name when calling the runtime delegate public delegate int ComponentEntryPoint(IntPtr args, int sizeBytes); ``` -A different signature can be used by specifying the delegate type name when calling the runtime delegate. +A different signature can be used by specifying an assembly-qualified delegate type name when calling the runtime delegate. ### Step 4 - Run managed code! diff --git a/samples/snippets/core/tutorials/netcore-hosting/csharp/HostWithHostFxr/src/NativeHost/nativehost.cpp b/samples/snippets/core/tutorials/netcore-hosting/csharp/HostWithHostFxr/src/NativeHost/nativehost.cpp index 6dffe1a4b828e..832ab52e49ea8 100644 --- a/samples/snippets/core/tutorials/netcore-hosting/csharp/HostWithHostFxr/src/NativeHost/nativehost.cpp +++ b/samples/snippets/core/tutorials/netcore-hosting/csharp/HostWithHostFxr/src/NativeHost/nativehost.cpp @@ -91,10 +91,10 @@ int main(int argc, char *argv[]) // // STEP 3: Load managed assembly and get function pointer to a managed method // + // const string_t dotnetlib_path = root_path + STR("DotNetLib.dll"); const char_t *dotnet_type = STR("DotNetLib.Lib, DotNetLib"); const char_t *dotnet_type_method = STR("Hello"); - // // Function pointer to managed delegate component_entry_point_fn hello = nullptr; int rc = load_assembly_and_get_function_pointer( From b96cc8272455bc730e48667474040a689a269f7a Mon Sep 17 00:00:00 2001 From: Bill Wagner Date: Mon, 10 Aug 2026 10:44:15 -0400 Subject: [PATCH 2/3] Update to secretless access (#55346) * Update to secretless access Update the docs repo sequester to use secretless access. * Update bulk workflow as well Add the same changes in the bulk workflow. --- .github/workflows/quest-bulk.yml | 12 ++++++++++-- .github/workflows/quest.yml | 13 +++++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/.github/workflows/quest-bulk.yml b/.github/workflows/quest-bulk.yml index 300d807a90df3..6701cb5db8a96 100644 --- a/.github/workflows/quest-bulk.yml +++ b/.github/workflows/quest-bulk.yml @@ -46,13 +46,21 @@ jobs: client-id: ${{ secrets.CLIENT_ID }} tenant-id: ${{ secrets.TENANT_ID }} audience: ${{ secrets.OSMP_API_AUDIENCE }} - + + - name: Azure DevOps OpenID Connect + id: azure-devops-oidc-auth + uses: dotnet/docs-tools/.github/actions/oidc-auth-flow@main + with: + client-id: ${{ secrets.CLIENT_ID }} + tenant-id: ${{ secrets.TENANT_ID }} + audience: ${{ secrets.QUEST_AUDIENCE }} + - name: bulk-sequester id: bulk-sequester uses: dotnet/docs-tools/actions/sequester@main env: ImportOptions__ApiKeys__GitHubToken: ${{ secrets.GITHUB_TOKEN }} - ImportOptions__ApiKeys__QuestKey: ${{ secrets.QUEST_KEY }} + ImportOptions__ApiKeys__QuestAccessToken: ${{ steps.azure-devops-oidc-auth.outputs.access-token }} ImportOptions__ApiKeys__AzureAccessToken: ${{ steps.azure-oidc-auth.outputs.access-token }} ImportOptions__ApiKeys__SequesterPrivateKey: ${{ secrets.SEQUESTER_PRIVATEKEY }} ImportOptions__ApiKeys__SequesterAppID: ${{ secrets.SEQUESTER_APPID }} diff --git a/.github/workflows/quest.yml b/.github/workflows/quest.yml index 2e89a38897475..e635c6ea4d382 100644 --- a/.github/workflows/quest.yml +++ b/.github/workflows/quest.yml @@ -50,6 +50,15 @@ jobs: tenant-id: ${{ secrets.TENANT_ID }} audience: ${{ secrets.OSMP_API_AUDIENCE }} + - name: Azure DevOps OpenID Connect for manual test runs + id: azure-devops-oidc-auth + uses: dotnet/docs-tools/.github/actions/oidc-auth-flow@main + with: + client-id: ${{ secrets.CLIENT_ID }} + tenant-id: ${{ secrets.TENANT_ID }} + audience: ${{ secrets.QUEST_AUDIENCE }} + + # This step occurs when ran manually, passing the manual issue number input - name: manual-sequester if: ${{ github.event_name == 'workflow_dispatch' }} @@ -58,7 +67,7 @@ jobs: env: ImportOptions__ApiKeys__GitHubToken: ${{ secrets.GITHUB_TOKEN }} ImportOptions__ApiKeys__AzureAccessToken: ${{ steps.azure-oidc-auth.outputs.access-token }} - ImportOptions__ApiKeys__QuestKey: ${{ secrets.QUEST_KEY }} + ImportOptions__ApiKeys__QuestAccessToken: ${{ steps.azure-devops-oidc-auth.outputs.access-token }} ImportOptions__ApiKeys__SequesterPrivateKey: ${{ secrets.SEQUESTER_PRIVATEKEY }} ImportOptions__ApiKeys__SequesterAppID: ${{ secrets.SEQUESTER_APPID }} with: @@ -74,7 +83,7 @@ jobs: env: ImportOptions__ApiKeys__GitHubToken: ${{ secrets.GITHUB_TOKEN }} ImportOptions__ApiKeys__AzureAccessToken: ${{ steps.azure-oidc-auth.outputs.access-token }} - ImportOptions__ApiKeys__QuestKey: ${{ secrets.QUEST_KEY }} + ImportOptions__ApiKeys__QuestAccessToken: ${{ steps.azure-devops-oidc-auth.outputs.access-token }} ImportOptions__ApiKeys__SequesterPrivateKey: ${{ secrets.SEQUESTER_PRIVATEKEY }} ImportOptions__ApiKeys__SequesterAppID: ${{ secrets.SEQUESTER_APPID }} with: From a9ec51e5b9252888111b270406961f41ce682b93 Mon Sep 17 00:00:00 2001 From: Xulei Liu Date: Mon, 10 Aug 2026 17:01:39 +0200 Subject: [PATCH 3/3] Update equality-operators.md (#55332) --- docs/csharp/language-reference/operators/equality-operators.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/csharp/language-reference/operators/equality-operators.md b/docs/csharp/language-reference/operators/equality-operators.md index 66002797fffc0..c4a0a326d4767 100644 --- a/docs/csharp/language-reference/operators/equality-operators.md +++ b/docs/csharp/language-reference/operators/equality-operators.md @@ -57,7 +57,7 @@ As the example shows, user-defined reference types support the `==` operator by :::code language="csharp" source="snippets/shared/EqualityOperators.cs" id="RecordTypesEquality"::: -As the preceding example shows, for reference-type members their reference values are compared, not the referenced instances. +As the preceding example shows, the equality of reference-type members is compared using their specific equality implementations. ### String equality