Skip to content
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions src/Temporalio/Bridge/OptionsExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,15 @@ public static unsafe Interop.TemporalCoreClientOptions ToInteropOptions(
{
throw new ArgumentException("Identity missing from options.");
}
var scheme = options.Tls == null ? "http" : "https";

// Auto-enable TLS when API key is provided and TLS is not explicitly set
var tls = options.Tls;
if (!string.IsNullOrEmpty(options.ApiKey) && !options.TlsExplicitlySet)
{
tls = new Temporalio.Client.TlsOptions();
}

var scheme = tls == null ? "http" : "https";
return new Interop.TemporalCoreClientOptions()
{
target_url = scope.ByteArray($"{scheme}://{options.TargetHost}"),
Expand All @@ -251,7 +259,7 @@ public static unsafe Interop.TemporalCoreClientOptions ToInteropOptions(
api_key = scope.ByteArray(options.ApiKey),
identity = scope.ByteArray(options.Identity),
tls_options =
options.Tls == null ? null : scope.Pointer(options.Tls.ToInteropOptions(scope)),
tls == null ? null : scope.Pointer(tls.ToInteropOptions(scope)),
retry_options =
options.RpcRetry == null
? null
Expand Down
22 changes: 19 additions & 3 deletions src/Temporalio/Client/TemporalConnectionOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ namespace Temporalio.Client
/// </summary>
public class TemporalConnectionOptions : ICloneable
{
private TlsOptions? tls;

/// <summary>
/// Initializes a new instance of the <see cref="TemporalConnectionOptions"/> class.
/// Create default options.
Expand Down Expand Up @@ -38,9 +40,18 @@ public TemporalConnectionOptions()
/// Gets or sets the TLS options for connection.
/// </summary>
/// <remarks>
/// This must be set, even to a default instance, to do any TLS connection.
/// This must be set, even to a default instance, to do any TLS connection. If not set and
/// <see cref="ApiKey"/> is provided, TLS will be automatically enabled with default options.
/// </remarks>
public TlsOptions? Tls { get; set; }
public TlsOptions? Tls
{
get => tls;
set
{
tls = value;
TlsExplicitlySet = true;
}
}

/// <summary>
/// Gets or sets retry options for this connection.
Expand Down Expand Up @@ -103,6 +114,11 @@ public TemporalConnectionOptions()
/// </remarks>
public TemporalRuntime? Runtime { get; set; }

/// <summary>
/// Gets a value indicating whether TLS was explicitly set (even to null).
/// </summary>
internal bool TlsExplicitlySet { get; private set; }
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we should take this approach. The difference between a user manually doing = null and the default of null would be very confusing. I think for .NET we should add a bool Disabled property to TlsOptions for users that want to explicitly disable TLS. null should be considered unset/default (regardless of whether it's set that way)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, this is a bit nicer. Done


/// <summary>
/// Create a shallow copy of these options.
/// </summary>
Expand All @@ -113,7 +129,7 @@ public virtual object Clone()
var copy = (TemporalConnectionOptions)MemberwiseClone();
if (Tls != null)
{
copy.Tls = (TlsOptions)Tls.Clone();
copy.tls = (TlsOptions)Tls.Clone();
}
if (RpcRetry != null)
{
Expand Down
69 changes: 69 additions & 0 deletions tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs
Copy link
Member

@cretz cretz Dec 3, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hrmm, these tests may be bit too detailed/low-level. You are testing internals and only relying on us making internals visible to this test project. Note we don't have any other tests confirming the bridge options conversions. Usually we test user-facing behavior.

How would a user write a test to confirm their setting of TLS disabled or API key or whatever does the right thing? Granted it's probably not very easy to do this. One approach that you may take is to alter the "Test cloud" CI test to use API key instead of mTLS to at least confirm the API key default.

Regardless, not a big deal if you keep these, just a bit strange for this repo (and why there never was anything like this in the past).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably going to keep them. Changed the cloud CI workflow to use api key secret and remove the mTLS secrets

Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
namespace Temporalio.Tests.Client;

using Temporalio.Bridge;
using Temporalio.Client;
using Xunit;

public unsafe class TemporalConnectionOptionsTests
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you add tests for when:

  1. ApiKey is not set, is null, or is empty?
  2. Tls is set to a non-null value?

{
[Fact]
public void ToInteropOptions_AutoEnablesTls_WhenApiKeyProvidedAndTlsNotSet()
{
var options = new TemporalConnectionOptions("localhost:7233")
{
ApiKey = "test-api-key",
Identity = "test-identity",
};

using var scope = new Scope();
var interopOptions = options.ToInteropOptions(scope);

// TLS should be auto-enabled when API key is provided and TLS not explicitly set
Assert.NotNull(interopOptions.tls_options);

Check failure on line 22 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (macos-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 22 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (macos-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 22 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / features-tests / test

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 22 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / features-tests / test

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 22 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (ubuntu-latest)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 22 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (ubuntu-latest)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 22 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (ubuntu-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 22 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (ubuntu-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 22 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (windows-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 22 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (windows-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 22 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (macos-intel)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 22 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (macos-intel)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 22 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (windows-latest)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 22 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (windows-latest)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'
}

[Fact]
public void ToInteropOptions_RespectsExplicitTlsNull_WhenApiKeyProvided()
{
var options = new TemporalConnectionOptions("localhost:7233")
{
ApiKey = "test-api-key",
Identity = "test-identity",
Tls = null, // Explicitly disable TLS
};

using var scope = new Scope();
var interopOptions = options.ToInteropOptions(scope);

// TLS should remain disabled when explicitly set to null
Assert.Null(interopOptions.tls_options);

Check failure on line 39 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (macos-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 39 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (macos-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 39 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / features-tests / test

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 39 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / features-tests / test

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 39 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (ubuntu-latest)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 39 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (ubuntu-latest)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 39 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (ubuntu-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 39 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (ubuntu-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 39 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (windows-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 39 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (windows-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 39 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (macos-intel)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 39 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (macos-intel)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 39 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (windows-latest)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 39 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (windows-latest)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'
}

[Fact]
public void ToInteropOptions_TlsDisabled_WhenNoApiKeyAndTlsNotSet()
{
var options = new TemporalConnectionOptions("localhost:7233");

using var scope = new Scope();
var interopOptions = options.ToInteropOptions(scope);

// TLS should be disabled when no API key and TLS not set
Assert.Null(interopOptions.tls_options);

Check failure on line 51 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (macos-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 51 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (macos-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 51 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / features-tests / test

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 51 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / features-tests / test

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 51 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (ubuntu-latest)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 51 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (ubuntu-latest)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 51 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (ubuntu-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 51 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (ubuntu-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 51 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (windows-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 51 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (windows-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 51 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (macos-intel)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 51 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (macos-intel)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 51 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (windows-latest)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 51 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (windows-latest)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'
}

[Fact]
public void ToInteropOptions_TlsEnabled_WhenExplicitlySet()
{
var options = new TemporalConnectionOptions("localhost:7233")
{
Identity = "test-identity",
Tls = new TlsOptions(),
};

using var scope = new Scope();
var interopOptions = options.ToInteropOptions(scope);

// TLS should be enabled when explicitly set
Assert.NotNull(interopOptions.tls_options);

Check failure on line 67 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (macos-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 67 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (macos-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 67 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / features-tests / test

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 67 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / features-tests / test

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 67 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (ubuntu-latest)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 67 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (ubuntu-latest)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 67 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (ubuntu-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 67 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (ubuntu-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 67 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (windows-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 67 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (windows-arm)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 67 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (macos-intel)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 67 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (macos-intel)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 67 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (windows-latest)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'

Check failure on line 67 in tests/Temporalio.Tests/Client/TemporalConnectionOptionsTests.cs

View workflow job for this annotation

GitHub Actions / build-lint-test (windows-latest)

Argument 1: cannot convert from 'Temporalio.Bridge.Interop.TemporalCoreClientTlsOptions*' to 'object?'
}
}
1 change: 1 addition & 0 deletions tests/Temporalio.Tests/Temporalio.Tests.csproj
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<GenerateProgramFile>false</GenerateProgramFile>
<ImplicitUsings>enable</ImplicitUsings>
Expand Down
Loading