Skip to content

Commit

Permalink
Merge branch master into develop
Browse files Browse the repository at this point in the history
# Conflicts:
#	Alpaca.Markets.Extensions.Tests/AlpacaTradingClientTest.cs
#	Alpaca.Markets.Extensions/Alpaca.Markets.Extensions.csproj
#	Alpaca.Markets.Extensions/CompatibilitySuppressions.xml
#	Alpaca.Markets.Extensions/GlobalSuppressions.cs
#	Alpaca.Markets.Extensions/Pagination/AlpacaOptionsDataClientExtensions.cs
#	Alpaca.Markets.Extensions/Pagination/AlpacaTradingClientExtensions.cs
#	Alpaca.Markets.Extensions/packages.lock.json
#	Alpaca.Markets.Tests/AlpacaTradingClientTest.Options.cs
#	Alpaca.Markets.Tests/AlpacaTradingClientTest.Positions.cs
#	Alpaca.Markets/Alpaca.Markets.csproj
#	Alpaca.Markets/AlpacaCryptoDataClient.cs
#	Alpaca.Markets/CompatibilitySuppressions.xml
#	Alpaca.Markets/Helpers/AccountActivityTypeEnumConverter.cs
#	Alpaca.Markets/Helpers/AssetAttributesEnumConverter.cs
#	Alpaca.Markets/Helpers/CryptoExchangeEnumConverter.cs
#	Alpaca.Markets/Helpers/EnumExtensions.cs
#	Alpaca.Markets/Helpers/ExchangeEnumConverter.cs
#	Alpaca.Markets/Helpers/OrderSideEnumConverter.cs
#	Alpaca.Markets/Messages/JsonCashDividend.cs
#	Alpaca.Markets/Messages/JsonCashMerger.cs
#	Alpaca.Markets/Messages/JsonNameChange.cs
#	Alpaca.Markets/Messages/JsonOptionSnapshotsData.cs
#	Alpaca.Markets/Messages/JsonRedemption.cs
#	Alpaca.Markets/Messages/JsonStockAndCashMerger.cs
#	Alpaca.Markets/Messages/JsonStockDividend.cs
#	Alpaca.Markets/Messages/JsonStockMerger.cs
#	Alpaca.Markets/Messages/JsonWorthlessRemoval.cs
#	Alpaca.Markets/Obsolete/ITimeInterval.cs
#	Alpaca.Markets/Obsolete/LatestBestBidOfferListRequest.cs
#	Alpaca.Markets/Obsolete/LatestBestBidOfferRequest.cs
#	Alpaca.Markets/Parameters/HistoricalAuctionsRequest.cs
#	Alpaca.Markets/Parameters/HistoricalBarsRequest.cs
#	Alpaca.Markets/Parameters/HistoricalCryptoBarsRequest.cs
#	Alpaca.Markets/Parameters/HistoricalCryptoQuotesRequest.cs
#	Alpaca.Markets/Parameters/HistoricalCryptoTradesRequest.cs
#	Alpaca.Markets/Parameters/HistoricalOptionBarsRequest.cs
#	Alpaca.Markets/Parameters/HistoricalOptionTradesRequest.cs
#	Alpaca.Markets/Parameters/HistoricalQuotesRequest.cs
#	Alpaca.Markets/Parameters/HistoricalTradesRequest.cs
#	Alpaca.Markets/Parameters/LatestDataListRequest.cs
#	Alpaca.Markets/Parameters/OptionChainRequest.cs
#	Alpaca.Markets/Parameters/PortfolioHistoryRequest.cs
#	Alpaca.Markets/PublicAPI.Shipped.txt
#	Alpaca.Markets/packages.lock.json
#	README.md
#	UsageExamples/UsageExamples.csproj
  • Loading branch information
OlegRa committed Jan 19, 2025
2 parents 8aa6fa6 + 40750af commit de5a975
Show file tree
Hide file tree
Showing 39 changed files with 169 additions and 167 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<AssemblyOriginatorKeyFile>..\Alpaca.Markets.snk</AssemblyOriginatorKeyFile>
<SuppressTfmSupportBuildWarnings>true</SuppressTfmSupportBuildWarnings>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<ImplicitUsings>enable</ImplicitUsings>
<LangVersion>latest</LangVersion>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public async Task GetAverageDailyTradeVolumeAsyncWithIntervalWorks()
Crypto, _timeInterval.AsDateInterval());

Assert.Equal(Volume, adtv);
Assert.True(count != 0);
Assert.NotEqual(0u, count);
}

private static void addPaginatedResponses<TConfiguration, TClient>(
Expand Down
5 changes: 3 additions & 2 deletions Alpaca.Markets.Extensions/Alpaca.Markets.Extensions.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
</PackageReleaseNotes>
<Description>C# SDK for Alpaca Trade API https://docs.alpaca.markets/</Description>
<RepositoryUrl>https://github.com/alpacahq/alpaca-trade-api-csharp</RepositoryUrl>
<Copyright>© 2018-2023 Alpaca Securities LLC. All rights reserved.</Copyright>
<Copyright>© 2018-2025 Alpaca Securities LLC. All rights reserved.</Copyright>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PackageTags>Aplaca API SDK REST WebSocket trading</PackageTags>
<Product>Extansions for .NET SDK for Alpaca Trade API</Product>
Expand All @@ -49,8 +49,9 @@
<PropertyGroup>
<EnableStrictModeForCompatibleFrameworksInPackage>true</EnableStrictModeForCompatibleFrameworksInPackage>
<!--<GenerateCompatibilitySuppressionFile>true</GenerateCompatibilitySuppressionFile>-->
<PackageValidationBaselineVersion>7.1.0</PackageValidationBaselineVersion>
<PackageValidationBaselineVersion>7.2.0</PackageValidationBaselineVersion>
<EnableStrictModeForCompatibleTfms>true</EnableStrictModeForCompatibleTfms>
<SuppressTfmSupportBuildWarnings>true</SuppressTfmSupportBuildWarnings>
<EnablePackageValidation>true</EnablePackageValidation>
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
Expand Down
2 changes: 0 additions & 2 deletions Alpaca.Markets.Extensions/GlobalSuppressions.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
// This file is used by Code Analysis to maintain SuppressMessage attributes that are applied to this project.

global using System.Diagnostics;

#if NETFRAMEWORK
global using System.Net.Http;
#endif
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ private static OptionSnapshotRequest getRequestWithoutPageToken(
OptionSnapshotRequest request) =>
new(request.Symbols)
{
//Pagination = { Size = Pagination.MaxPageSize },
Pagination = { Size = request.Pagination.Size },
OptionsFeed = request.OptionsFeed
};

Expand Down Expand Up @@ -172,7 +172,7 @@ private static OptionChainRequest getRequestWithoutPageToken(
StrikePriceGreaterThanOrEqualTo = request.StrikePriceGreaterThanOrEqualTo,
StrikePriceLessThanOrEqualTo = request.StrikePriceLessThanOrEqualTo,
ExpirationDateEqualTo = request.ExpirationDateEqualTo,
Pagination = { Size = Pagination.MaxPageSize },
Pagination = { Size = request.Pagination.Size },
OptionType = request.OptionType,
RootSymbol = request.RootSymbol
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ private static OptionContractsRequest getRequestForFirstPage(
StrikePriceGreaterThanOrEqualTo = request.StrikePriceGreaterThanOrEqualTo,
StrikePriceLessThanOrEqualTo = request.StrikePriceLessThanOrEqualTo,
ExpirationDateEqualTo = request.ExpirationDateEqualTo,
Pagination = { Size = Pagination.MaxPageSize },
Pagination = { Size = request.Pagination.Size },
AssetStatus = request.AssetStatus,
OptionStyle = request.OptionStyle,
OptionType = request.OptionType,
Expand Down
2 changes: 1 addition & 1 deletion Alpaca.Markets.Extensions/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ See full online documentation [here](https://olegra.github.io/Alpaca.Markets/api

1. Create a new console application in a new, empty folder by running `dotnet new console`.
2. Add a reference for Alpaca .NET SDK with `dotnet add package Alpaca.Markets`.
3. Replace content of the auto-generated `Programm.cs` file with this code snippet:
3. Replace content of the auto-generated `Program.cs` file with this code snippet:
```cs
using System;
using Alpaca.Markets;
Expand Down
18 changes: 16 additions & 2 deletions Alpaca.Markets.Extensions/Reconnection/ClientWithReconnectBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,21 @@ protected virtual ValueTask OnReconnection(
CancellationToken cancellationToken) =>
new(); // DO nothing by default for auto-resubscribed clients.

private async void handleSocketClosed() =>
await handleSocketClosedAsync().ConfigureAwait(false);

[SuppressMessage(
"Design", "CA1031:Do not catch general exception types",
Justification = "Expected behavior - we report exceptions via OnError event.")]
private async void handleSocketClosed()
{
try
{
await handleSocketClosedAsync().ConfigureAwait(false);
}
catch (Exception exception)
{
handleOnError(exception);
}
}

[SuppressMessage(
"Design", "CA1031:Do not catch general exception types",
Expand Down Expand Up @@ -178,6 +191,7 @@ await OnReconnection(_cancellationTokenSource.Token)
[SuppressMessage(
"Design", "CA1031:Do not catch general exception types",
Justification = "Expected behavior - we report exceptions via OnError event.")]
// ReSharper disable once AsyncVoidMethod
private async void handleOnError(
Exception exception)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,20 @@ public event Action<TItem>? Received
remove => _subscription.Received -= value;
}

public async void Dispose() =>
await DisposeAsync().ConfigureAwait(false);
[SuppressMessage(
"Design", "CA1031:Do not catch general exception types",
Justification = "Expected behavior - we report exceptions via OnError event.")]
public async void Dispose()
{
try
{
await DisposeAsync().ConfigureAwait(false);
}
catch (Exception exception)
{
Trace.TraceInformation(exception.Message);
}
}

public async ValueTask DisposeAsync()
{
Expand Down
1 change: 1 addition & 0 deletions Alpaca.Markets.Tests/Alpaca.Markets.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<AssemblyOriginatorKeyFile>..\Alpaca.Markets.snk</AssemblyOriginatorKeyFile>
<SuppressTfmSupportBuildWarnings>true</SuppressTfmSupportBuildWarnings>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<ImplicitUsings>enable</ImplicitUsings>
<LangVersion>latest</LangVersion>
Expand Down
12 changes: 7 additions & 5 deletions Alpaca.Markets.Tests/AlpacaTradingClientTest.Account.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ public sealed partial class AlpacaTradingClientTest
private const Decimal Price = 1234.56M;

[Fact]
#pragma warning disable IDE0079 // Remove unnecessary suppression
[SuppressMessage("ReSharper", "StringLiteralTypo")]
#pragma warning restore IDE0079 // Remove unnecessary suppression
public async Task GetAccountAsyncWorks()
{
const Decimal cash = 10_000M;
Expand Down Expand Up @@ -67,11 +69,11 @@ public async Task GetAccountAsyncWorks()
Assert.Equal(transfer, account.AccruedFees);
Assert.Equal(cash, account.OptionsBuyingPower);

Assert.True(account.LastMaintenanceMargin != 0M);
Assert.True(account.MaintenanceMargin != 0M);
Assert.True(account.TradableCash != 0M);
Assert.True(account.LastEquity != 0M);
Assert.True(account.Sma != 0M);
Assert.NotEqual(0M, account.LastMaintenanceMargin);
Assert.NotEqual(0M, account.MaintenanceMargin);
Assert.NotEqual(0M, account.TradableCash);
Assert.NotEqual(0M, account.LastEquity);
Assert.NotEqual(0M, account.Sma);

Assert.NotNull(account.AccountNumber);

Expand Down
4 changes: 3 additions & 1 deletion Alpaca.Markets.Tests/AlpacaTradingClientTest.Assets.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,9 @@ private static JObject createAsset(
new JProperty("name", symbol),
new JProperty("id", assetId));

#pragma warning disable IDE0079
[SuppressMessage("ReSharper", "ParameterOnlyUsedForPreconditionCheck.Local")]
#pragma warning restore IDE0079
private static void validateAsset(
IAsset asset,
Guid assetId,
Expand All @@ -91,6 +93,6 @@ private static void validateAsset(
Assert.NotNull(asset.MaintenanceMarginRequirement);

Assert.Single(asset.Attributes);
Assert.Equal(AssetAttributes.PtpNoException, asset.Attributes.First());
Assert.Equal(AssetAttributes.PtpNoException, asset.Attributes[0]);
}
}
2 changes: 2 additions & 0 deletions Alpaca.Markets.Tests/AlpacaTradingClientTest.Options.cs
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,9 @@ private static JObject createOptionContract(
new JProperty("name", symbol),
new JProperty("size", 100));

#pragma warning disable IDE0079
[SuppressMessage("ReSharper", "ParameterOnlyUsedForPreconditionCheck.Local")]
#pragma warning restore IDE0079
private static void validateOptionContract(
IOptionContract optionContract,
Guid contractId,
Expand Down
24 changes: 13 additions & 11 deletions Alpaca.Markets.Tests/AlpacaTradingClientTest.Positions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,9 @@ public async Task ExerciseOptionsPositionBySymbolAsyncWorks()
Assert.True(await mock.Client.ExerciseOptionsPositionBySymbolAsync(Stock));
}

#pragma warning disable IDE0079 // Remove unnecessary suppression
[SuppressMessage("ReSharper", "StringLiteralTypo")]
#pragma warning restore IDE0079 // Remove unnecessary suppression
private static JObject createPosition() =>
new(
new JProperty("unrealized_intraday_plpc", ProfitLossPercent),
Expand Down Expand Up @@ -145,17 +147,17 @@ private static void validatePosition(

Assert.NotEqual(Guid.Empty, position.AssetId);

Assert.True(position.AssetChangePercent != 0M);
Assert.True(position.AverageEntryPrice != 0M);
Assert.True(position.AssetCurrentPrice!= 0M);
Assert.True(position.AssetLastPrice != 0M);
Assert.True(position.MarketValue != 0M);
Assert.True(position.CostBasis != 0M);

Assert.True(position.UnrealizedProfitLoss != 0M);
Assert.True(position.UnrealizedProfitLossPercent != 0M);
Assert.True(position.IntradayUnrealizedProfitLoss != 0M);
Assert.True(position.IntradayUnrealizedProfitLossPercent != 0M);
Assert.NotEqual(0M, position.AssetChangePercent);
Assert.NotEqual(0M, position.AverageEntryPrice);
Assert.NotEqual(0M, position.AssetCurrentPrice);
Assert.NotEqual(0M, position.AssetLastPrice);
Assert.NotEqual(0M, position.MarketValue);
Assert.NotEqual(0M, position.CostBasis);

Assert.NotEqual(0M, position.UnrealizedProfitLoss);
Assert.NotEqual(0M, position.UnrealizedProfitLossPercent);
Assert.NotEqual(0M, position.IntradayUnrealizedProfitLoss);
Assert.NotEqual(0M, position.IntradayUnrealizedProfitLossPercent);
}

private static JArray getDeletePositionsResponse() =>
Expand Down
4 changes: 2 additions & 2 deletions Alpaca.Markets.Tests/AlpacaTradingClientTest.Watchlists.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public async Task CreateWatchListAsyncWorks()
mock.AddPost(WatchlistsUrl, createWatchList());

var watchList = await mock.Client.CreateWatchListAsync(new NewWatchListRequest(
Guid.NewGuid().ToString("D"), new [] { Stock, Crypto }));
Guid.NewGuid().ToString("D"), [Stock, Crypto]));

validateWatchList(watchList);
}
Expand All @@ -68,7 +68,7 @@ public async Task UpdateWatchListByIdAsyncWorks()
mock.AddPut(WatchListsWildcardUrl, createWatchList());

var watchList = await mock.Client.UpdateWatchListByIdAsync(new UpdateWatchListRequest(
Guid.NewGuid(), Guid.NewGuid().ToString("D"), new [] { Stock, Crypto }));
Guid.NewGuid(), Guid.NewGuid().ToString("D"), [Stock, Crypto]));

validateWatchList(watchList);
}
Expand Down
13 changes: 6 additions & 7 deletions Alpaca.Markets.Tests/AlpacaTradingClientTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -126,12 +126,11 @@ public async Task GetRateLimitValuesWorks()
return;

IEnumerable<KeyValuePair<String, String>> GetHeaders() =>
new KeyValuePair<String, String>[]
{
new("X-Ratelimit-Limit", "100"),
new("X-Ratelimit-Remaining", "99"),
new("X-Ratelimit-Reset",
resetTime.ToUnixTimeSeconds().ToString(CultureInfo.InvariantCulture))
};
[
new("X-Ratelimit-Limit", "100"),
new("X-Ratelimit-Remaining", "99"),
new("X-Ratelimit-Reset",
resetTime.ToUnixTimeSeconds().ToString(CultureInfo.InvariantCulture))
];
}
}
20 changes: 20 additions & 0 deletions Alpaca.Markets.Tests/DefaultValuesTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,24 @@ public void RestClientErrorExceptionWorks()
Assert.Equal(message, withInnerException.Message);
Assert.Equal(defaultValue, withInnerException.InnerException);
}

[Fact]
public void RequestValidationExceptionWorks()
{
var defaultValue = new RequestValidationException();

Assert.NotNull(defaultValue.Message);
Assert.Null(defaultValue.InnerException);

var message = Guid.NewGuid().ToString("N");
var withMessage = new RequestValidationException(message);

Assert.Equal(message, withMessage.Message);
Assert.Null(withMessage.InnerException);

var withInnerException = new RequestValidationException(message, defaultValue);

Assert.Equal(message, withInnerException.Message);
Assert.Equal(defaultValue, withInnerException.InnerException);
}
}
7 changes: 4 additions & 3 deletions Alpaca.Markets.Tests/HistoricalDataHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Alpaca.Markets.Tests;

#pragma warning disable IDE0079 // Remove unnecessary suppression
[SuppressMessage("ReSharper", "ParameterOnlyUsedForPreconditionCheck.Global")]
[SuppressMessage("ReSharper", "ParameterOnlyUsedForPreconditionCheck.Local")]
#pragma warning restore IDE0079 // Remove unnecessary suppression
Expand Down Expand Up @@ -199,9 +200,9 @@ public static Boolean Validate(
Assert.InRange(bar.Open, bar.Low, bar.High);

Assert.True(bar.TimeUtc <= DateTime.UtcNow);
Assert.True(bar.TradeCount != 0);
Assert.True(bar.Volume != 0M);
Assert.True(bar.Vwap != 0M);
Assert.NotEqual(0UL, bar.TradeCount);
Assert.NotEqual(0M, bar.Volume);
Assert.NotEqual(0M, bar.Vwap);

return true;
}
Expand Down
2 changes: 2 additions & 0 deletions Alpaca.Markets.Tests/MockClientsFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@

namespace Alpaca.Markets.Tests;

#pragma warning disable IDE0079 // Remove unnecessary suppression
[SuppressMessage("ReSharper", "ClassNeverInstantiated.Global")]
#pragma warning restore IDE0079 // Remove unnecessary suppression
public sealed class MockClientsFactoryFixture
{
private readonly SecurityKey _secretKey = new SecretKey(
Expand Down
8 changes: 4 additions & 4 deletions Alpaca.Markets.Tests/RequestValidationTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public void HistoricalRequestBaseNoSymbolsValidationWorks() =>

[Fact]
public void HistoricalRequestBaseEmptySymbolValidationWorks() =>
validate(new HistoricalCryptoBarsRequest(new [] { String.Empty }, _interval, BarTimeFrame.Day));
validate(new HistoricalCryptoBarsRequest([String.Empty], _interval, BarTimeFrame.Day));

[Fact]
public void HistoricalRequestBaseEmptyPageValidationWorks() =>
Expand All @@ -25,7 +25,7 @@ public void HistoricalRequestBaseEmptyPageValidationWorks() =>

[Fact]
public void NewsArticlesRequestEmptySymbolValidationWorks() =>
validate(new NewsArticlesRequest(new [] { String.Empty }));
validate(new NewsArticlesRequest([String.Empty]));

[Fact]
public void NewsArticlesRequestBigPageValidationWorks() =>
Expand All @@ -46,7 +46,7 @@ public void NewWatchListRequestEmptyNameValidationWorks() =>

[Fact]
public void NewWatchListRequestEmptySymbolValidationWorks() =>
validate(new NewWatchListRequest(Guid.NewGuid().ToString("D"), new [] { String.Empty}));
validate(new NewWatchListRequest(Guid.NewGuid().ToString("D"), [String.Empty]));

[Fact]
public void UpdateWatchListRequestEmptyNameValidationWorks() =>
Expand All @@ -55,7 +55,7 @@ public void UpdateWatchListRequestEmptyNameValidationWorks() =>
[Fact]
public void UpdateWatchListRequestEmptySymbolValidationWorks() =>
validate(new UpdateWatchListRequest(Guid.NewGuid(),
Guid.NewGuid().ToString("D"), new [] { String.Empty}));
Guid.NewGuid().ToString("D"), [String.Empty]));

[Fact]
public void ChangeWatchListRequestEmptyNameValidationWorks() =>
Expand Down
5 changes: 3 additions & 2 deletions Alpaca.Markets/Alpaca.Markets.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
</PackageReleaseNotes>
<Description>C# SDK for Alpaca Trade API https://docs.alpaca.markets/</Description>
<RepositoryUrl>https://github.com/alpacahq/alpaca-trade-api-csharp</RepositoryUrl>
<Copyright>© 2018-2023 Alpaca Securities LLC. All rights reserved.</Copyright>
<Copyright>© 2018-2025 Alpaca Securities LLC. All rights reserved.</Copyright>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PackageTags>Aplaca API SDK REST WebSocket trading</PackageTags>
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
Expand All @@ -49,8 +49,9 @@
<PropertyGroup>
<EnableStrictModeForCompatibleFrameworksInPackage>true</EnableStrictModeForCompatibleFrameworksInPackage>
<!--<GenerateCompatibilitySuppressionFile>true</GenerateCompatibilitySuppressionFile>-->
<PackageValidationBaselineVersion>7.1.0</PackageValidationBaselineVersion>
<PackageValidationBaselineVersion>7.2.0</PackageValidationBaselineVersion>
<EnableStrictModeForCompatibleTfms>true</EnableStrictModeForCompatibleTfms>
<SuppressTfmSupportBuildWarnings>true</SuppressTfmSupportBuildWarnings>
<EnablePackageValidation>true</EnablePackageValidation>
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
Expand Down
Loading

0 comments on commit de5a975

Please sign in to comment.