Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Newtonsoft.Json version and other nuget versions (use CPM) #1510

Merged
merged 26 commits into from
Aug 19, 2023
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
33affd6
update documentation
Bertk Jul 30, 2023
f6d0adf
update nuget versions using CPM
Bertk Aug 3, 2023
e4e5bd0
restart CI
Bertk Aug 5, 2023
16f82a0
update SDK version (Collector.cs)
Bertk Aug 5, 2023
3ff04de
collect test result files
Bertk Aug 5, 2023
a40ae62
enable coverage for build report
Bertk Aug 5, 2023
97c72b1
fix yaml
Bertk Aug 5, 2023
0515e43
disable template publish-coverage-results.yml
Bertk Aug 5, 2023
7df9aa0
use Assert.Equal with static string
Bertk Aug 7, 2023
5415d32
fix markdown warnings and add properties PackageReadmeFile, PackageRe…
Bertk Aug 8, 2023
e1ab9e8
change limitation formatting
Bertk Aug 10, 2023
d729057
update requirements
Bertk Aug 12, 2023
a3432e4
update Tmds.ExecFunction version and enable test execution with .NET …
Bertk Aug 13, 2023
4ebed44
add comment
Bertk Aug 13, 2023
a73616b
remove rollForward from global.json (conflict with rollForwardOnNoCan…
Bertk Aug 15, 2023
50451a7
incorporate review comments
Bertk Aug 15, 2023
c901ebf
incorporate review comments
Bertk Aug 15, 2023
9c4fad5
run test only on windows plattform (net48 library)
Bertk Aug 15, 2023
40fffda
remove coverlet.tests.projectsample.vbmynamespace.vbproj from solutio…
Bertk Aug 15, 2023
007a9a1
run Instrumenter_MethodsWithoutReferenceToSource_AreSkipped only for …
Bertk Aug 15, 2023
fafa174
remove PackageReference VersionOverride for test dependencies
Bertk Aug 16, 2023
7d2d4a3
Merge branch 'master' into update-all-nuget-versions
Bertk Aug 16, 2023
646b06d
remove condition for coverlet.tests.projectsample.vbmynamespace.vbproj
Bertk Aug 19, 2023
960ad93
reverted os skip
daveMueller Aug 19, 2023
950347d
nit
daveMueller Aug 19, 2023
187ac2b
fix
daveMueller Aug 19, 2023
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
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -303,4 +303,6 @@ __pycache__/
.AssemblyAttributes
DeterministicTest.props
test/coverlet.integration.determisticbuild/*.txt
test/coverlet.integration.determisticbuild/runsettings
test/coverlet.integration.determisticbuild/runsettings

coverage.cobertura.xml
5 changes: 1 addition & 4 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
<LangVersion>preview</LangVersion>
<NoWarn>$(NoWarn);NU5105;CS1591</NoWarn>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
Bertk marked this conversation as resolved.
Show resolved Hide resolved
<RestoreSources>
https://api.nuget.org/v3/index.json;
</RestoreSources>
Expand All @@ -24,8 +25,4 @@
<Deterministic>true</Deterministic>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Nerdbank.GitVersioning" Version="3.6.133" PrivateAssets="all" />
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="all" />
</ItemGroup>
</Project>
28 changes: 0 additions & 28 deletions Directory.Build.targets
Original file line number Diff line number Diff line change
@@ -1,32 +1,4 @@
<Project>
<ItemGroup>
<PackageReference Update="Microsoft.Build.Utilities.Core" Version="15.5.180"/>
<PackageReference Update="Microsoft.CodeAnalysis.CSharp" Version="2.10.0" />
<PackageReference Update="Microsoft.Extensions.DependencyModel" Version="2.1.0" />
<PackageReference Update="Microsoft.Extensions.DependencyInjection" Version="6.0.1" />
<PackageReference Update="Microsoft.Extensions.FileSystemGlobbing" Version="2.0.1" />
<PackageReference Update="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<!-- https://github.com/coverlet-coverage/coverlet/issues/1042 -->
<PackageReference Update="Microsoft.TestPlatform.ObjectModel" Version="16.9.1" />
<PackageReference Update="Mono.Cecil" Version="0.11.5" />
<PackageReference Update="Moq" Version="4.10.1" />
<!-- Do not upgrade this version or we won't support old SDK -->
<PackageReference Update="Newtonsoft.Json" Version="9.0.1" />
<PackageReference Update="NuGet.Packaging" Version="5.4.0" />
<PackageReference Update="ReportGenerator.Core" Version="4.6.0" />
<!--
Do not change System.Reflection.Metadata version since we need to support VSTest DataCollectors. Goto https://www.nuget.org/packages/System.Reflection.Metadata to check versions.
We need to load assembly version 1.4.2.0 to properly work
We can check minimum supported package version here https://github.com/Microsoft/vstest/blob/master/src/Microsoft.TestPlatform.ObjectModel/Microsoft.TestPlatform.ObjectModel.csproj#L37
-->
<PackageReference Update="System.Reflection.Metadata" Version="1.5.0" />
<PackageReference Update="xunit" Version="2.4.2" />
<PackageReference Update="xunit.assert" Version="2.4.2" />
<PackageReference Update="xunit.runner.visualstudio" Version="2.4.1"/>
<PackageReference Update="Tmds.ExecFunction" Version="0.4.0" />
<PackageReference Update="System.CommandLine" Version="2.0.0-beta4.22272.1" />
</ItemGroup>

<!-- Deterministic build workaround -->
<Import Project="$(RepoRoot)\DeterministicBuild.targets" />
</Project>
58 changes: 58 additions & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
</PropertyGroup>

<ItemGroup>
<GlobalPackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" />
<GlobalPackageReference Include="Nerdbank.GitVersioning" Version="3.6.133" />
</ItemGroup>

<ItemGroup>
<PackageVersion Include="McMaster.Extensions.CommandLineUtils" Version="2.3.4" />
Bertk marked this conversation as resolved.
Show resolved Hide resolved
<PackageVersion Include="Microsoft.Build.Utilities.Core" Version="17.5.0"/>
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="2.10.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyModel" Version="7.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
<PackageVersion Include="Microsoft.Extensions.FileSystemGlobbing" Version="7.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.1" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<PackageVersion Include="Microsoft.TestPlatform.ObjectModel" Version="17.5.0" />
<!-- Microsoft.TestPlatform.ObjectModel has a dependency to NuGet.Frameworks with specific version -->
<!-- https://github.com/microsoft/vstest/blob/9a0c41811637edf4afe0e265e08fdd1cb18109ed/src/Microsoft.TestPlatform.ObjectModel/Microsoft.TestPlatform.ObjectModel.csproj#L35-->
<!-- wrong configuration will create "build\coverlet.msbuild.targets(72,5): error : Unable to read beyond the end of the stream." -->
<!--
vstest 17.5 version /scripts/build/TestPlatform.Dependencies.props
https://github.com/microsoft/vstest/blob/81f87947b316a4faf2bcb5b8c8fa1591baafcc39/scripts/build/TestPlatform.Dependencies.props#L57
vstest 17.8 version
NuGetFrameworksVersion is defined here https://github.com/microsoft/vstest/blob/9a0c41811637edf4afe0e265e08fdd1cb18109ed/eng/Versions.props#L94C1-L94C1
-->
<PackageVersion Include="NuGet.Frameworks" Version="5.11.5" />
<PackageVersion Include="Mono.Cecil" Version="0.11.5" />
<PackageVersion Include="Moq" Version="4.18.4" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
<PackageVersion Include="NuGet.Packaging" Version="6.6.1" />
<PackageVersion Include="ReportGenerator.Core" Version="5.1.23" />
<PackageVersion Include="LinqKit.Microsoft.EntityFrameworkCore" Version="7.1.4" />
Bertk marked this conversation as resolved.
Show resolved Hide resolved
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
<PackageVersion Include="System.Collections.Immutable" Version="7.0.0" />
<PackageVersion Include="System.Linq.Async" Version="6.0.1" />
<!--
Do not change System.Reflection.Metadata version since we need to support VSTest DataCollectors. Goto https://www.nuget.org/packages/System.Reflection.Metadata to check versions.
We need to load assembly version 1.6.0 to properly work
We can check minimum supported package version here https://github.com/Microsoft/vstest/blob/master/src/Microsoft.TestPlatform.ObjectModel/Microsoft.TestPlatform.ObjectModel.csproj#L34
-->
<PackageVersion Include="System.Reflection.Metadata" Version="1.6.0" />
<!-- Coverlet.Core.Tests executed in Visual Studio will fail with Tmds.ExecFunction version > 0.4.0 => use "dotnet test"
System.TypeInitializationException : The type initializer for 'Tmds.Utils.ExecFunction' threw an exception.
System.NotSupportedException : Application is running as testhost, unable to determine parent 'dotnet' process.
-->
<PackageVersion Include="Tmds.ExecFunction" Version="0.6.0" />
<PackageVersion Include="xunit" Version="2.5.0" />
<PackageVersion Include="xunit.assert" Version="2.5.0" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.5.0"/>


</ItemGroup>
</Project>
22 changes: 15 additions & 7 deletions Documentation/ConsumeNightlyBuild.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,46 +8,54 @@ To consume nightly builds, create a `NuGet.Config` in your root solution directo
<packageSources>
<clear />
<!-- Coverlet nightly build feed -->
<add key="coverletNightly" value="https://pkgs.dev.azure.com/tonerdo/coverlet/_packaging/coverlet-nightly/nuget/v3/index.json" />
<add key="coverletNightly" value="https://pkgs.dev.azure.com/tonerdo/coverlet/_packaging/coverlet-nightly/nuget/v3/index.json" />
<!-- Default nuget feed -->
<add key="nuget" value="https://api.nuget.org/v3/index.json" />
<add key="nuget" value="https://api.nuget.org/v3/index.json" />
<!-- Add all other needed feed -->
</packageSources>
</configuration>
```

## Install packages

### Visual Studio:
### Visual Studio

![File](images/nightly.PNG)\
Example:\
![File](images/nightlyExample.PNG)

### NuGet (Package Manager console):
### NuGet (Package Manager console)

```powershell
PM> Install-Package coverlet.msbuild -Version X.X.X-preview.X.XXX -Source https://pkgs.dev.azure.com/tonerdo/coverlet/_packaging/coverlet-nightly/nuget/v3/index.json
```

Example:

```powershell
PM> Install-Package coverlet.msbuild -Version 3.0.4-preview.4.g5de0ad7d60 -Source https://pkgs.dev.azure.com/tonerdo/coverlet/_packaging/coverlet-nightly/nuget/v3/index.json
```

### .NET CLI:
### .NET CLI

```bash
dotnet add package coverlet.msbuild --version X.X.X-preview.X.XXX --source https://pkgs.dev.azure.com/tonerdo/coverlet/_packaging/coverlet-nightly/nuget/v3/index.json
```

Example:

```bash
dotnet add package coverlet.msbuild --version 3.0.4-preview.4.g5de0ad7d60 --source https://pkgs.dev.azure.com/tonerdo/coverlet/_packaging/coverlet-nightly/nuget/v3/index.json
```

### MSBuild project file:
### MSBuild project file

```xml
<PackageReference Include="coverlet.msbuild" Version="X.X.X-preview.X.XXX " />
```

Example:

```xml
<PackageReference Include="coverlet.msbuild" Version="3.0.4-preview.4.g5de0ad7d60" />
```
```
9 changes: 5 additions & 4 deletions Documentation/DeterministicBuild.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,17 @@ Support for deterministic builds is available **only** in the `msbuild` (`/p:Col

From a coverage perspective, deterministic builds create some challenges because coverage tools usually need access to complete source file metadata (ie. local path) during instrumentation and report generation. These files are reported inside the `.pdb` files, where debugging information is stored.

In local (non-CI) builds, metadata emitted to pdbs are not "deterministic", which means that source files are reported with their full paths. For example, when we build the same project on different machines we'll have different paths emitted inside pdbs, hence, builds are "non deterministic".
In local (non-CI) builds, metadata emitted to pdbs are not "deterministic", which means that source files are reported with their full paths. For example, when we build the same project on different machines we'll have different paths emitted inside pdbs, hence, builds are "non deterministic".

As explained above, to improve the level of security of generated artifacts (for instance, DLLs inside the NuGet package), we need to apply some signature (signing with certificate) and validate before usage to avoid possible security issues like tampering.

Finally, thanks to deterministic CI builds (with the `ContinuousIntegrationBuild` property set to `true`) plus signature we can validate artifacts and be sure that the binary was built from specific sources (because there is no hard-coded variable metadata, like paths from different build machines).

# Deterministic report
## Deterministic report

Coverlet supports also deterministic reports(for now only for cobertura coverage format).
Coverlet supports also deterministic reports(for now only for cobertura coverage format).
If you include `DeterministicReport` parameters for `msbuild` and `collectors` integrations resulting report will be like:

```xml
<?xml version="1.0" encoding="utf-8"?>
<coverage line-rate="0.8571" branch-rate="0.5" version="1.9" timestamp="1612702997" lines-covered="6" lines-valid="7" branches-covered="1" branches-valid="2">
Expand All @@ -25,8 +26,8 @@ If you include `DeterministicReport` parameters for `msbuild` and `collectors` i
<methods>
...
```
As you can see we have empty `<sources />` element and the `filename` start with well known deterministic fragment `/_/...`

As you can see we have empty `<sources />` element and the `filename` start with well known deterministic fragment `/_/...`
**Deterministic build is supported without any workaround since version 3.1.100 of .NET Core SDK**

## Workaround only for .NET Core SDK < 3.1.100
Expand Down
1 change: 1 addition & 0 deletions Documentation/Examples.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Examples

## MSBuild Integration

* Using `/p:MergeWith` feature `Documentation/Examples/MSBuild/MergeWith/MergeWith.sln`
Expand Down
38 changes: 22 additions & 16 deletions Documentation/Examples/MSBuild/DeterministicBuild/HowTo.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
To run test we need to generates packages to reference in on test project.
To run test we need to generates packages to reference in on test project.
Run from repo root
```

```shell
C:\git\coverlet
λ dotnet pack
Microsoft (R) Build Engine version 16.5.0+d4cbfca49 for .NET Core
Expand Down Expand Up @@ -32,22 +33,24 @@ Copyright (C) Microsoft Corporation. All rights reserved.
Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.msbuild.2.9.0-preview.6.ga0e22ec622.nupkg'.
Bertk marked this conversation as resolved.
Show resolved Hide resolved
Successfully created package 'C:\git\coverlet\bin\Debug\Packages\coverlet.msbuild.2.9.0-preview.6.ga0e22ec622.snupkg'.
```

Add msbuild package version generated to `"..\Documentation\Examples\MSBuild\DeterministicBuild\XUnitTestProject1\XUnitTestProject1.csproj"`

```xml
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
<PackageReference Include="xunit" Version="2.4.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
<PackageReference Include="coverlet.collector" Version="1.2.0" />
<!-- version comes from coverlet.msbuild.2.9.0-preview.6.ga0e22ec622.nupkg -->
<PackageReference Include="coverlet.msbuild" Version="2.9.0-preview.6.ga0e22ec622" >
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<PackageReference Include="xunit" Version="2.5.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.0" />
<PackageReference Include="coverlet.collector" Version="6.0.0" />
Bertk marked this conversation as resolved.
Show resolved Hide resolved
<!-- version comes from coverlet.msbuild.6.0.1-preview.8.gcb9b802a5f.nupkg -->
<PackageReference Include="coverlet.msbuild" Version="coverlet.msbuild.6.0.1-preview.8.gcb9b802a5f.nupkg" >
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
Expand All @@ -58,14 +61,15 @@ Add msbuild package version generated to `"..\Documentation\Examples\MSBuild\Det
</ItemGroup>

</Project>

```

Go to test project folder and run
```

```shell
C:\git\coverlet\Documentation\Examples\MSBuild\DeterministicBuild (detbuilddocs -> origin)
λ dotnet test /p:CollectCoverage=true /p:DeterministicSourcePaths=true
Test run for C:\git\coverlet\Documentation\Examples\MSBuild\DeterministicBuild\XUnitTestProject1\bin\Debug\netcoreapp3.1\XUnitTestProject1.dll(.NETCoreApp,Version=v3.1)
Microsoft (R) Test Execution Command Line Tool Version 16.5.0
Test run for C:\git\coverlet\Documentation\Examples\MSBuild\DeterministicBuild\XUnitTestProject1\bin\Debug\net6.0\XUnitTestProject1.dll(.NETCoreApp,Version=v6.0)
Microsoft (R) Test Execution Command Line Tool Version 17.5.0
Copyright (c) Microsoft Corporation. All rights reserved.

Starting test execution, please wait...
Expand Down Expand Up @@ -94,8 +98,10 @@ Calculating coverage result...
| Average | 100% | 100% | 100% |
+---------+------+--------+--------+
```
You should see on output folder the coverlet source root mapping file generated.

You should see on output folder the coverlet source root mapping file generated.
This is the confirmation that you're running coverage on deterministic build.

```text
Documentation\Examples\MSBuild\DeterministicBuild\XUnitTestProject1\bin\Debug\net6.0\CoverletSourceRootsMapping
```
Documentation\Examples\MSBuild\DeterministicBuild\XUnitTestProject1\bin\Debug\netcoreapp3.1\CoverletSourceRootsMapping
```
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
<PackageReference Include="xunit" Version="2.4.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
<PackageReference Include="coverlet.collector" Version="1.2.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<PackageReference Include="xunit" Version="2.5.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.0" />
<PackageReference Include="coverlet.collector" Version="6.0.0" />
Bertk marked this conversation as resolved.
Show resolved Hide resolved
<PackageReference Include="coverlet.msbuild" Version="ADD VERSION FROM bin\Debug\Packages generated running 'dotnet pack' from repo root" >
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down
9 changes: 5 additions & 4 deletions Documentation/Examples/MSBuild/MergeWith/HowTo.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
**Run from solution root sln**

To merge report togheter you need to run separate test and merge in one `json` format file.
To merge report together you need to run separate test and merge in one `json` format file.
Last command will join and create final needed format file.

```
```shell
dotnet test XUnitTestProject1\XUnitTestProject1.csproj /p:CollectCoverage=true /p:CoverletOutput=../CoverageResults/
dotnet test XUnitTestProject2\XUnitTestProject2.csproj /p:CollectCoverage=true /p:CoverletOutput=../CoverageResults/ /p:MergeWith="../CoverageResults/coverage.json"
dotnet test XUnitTestProject3\XUnitTestProject3.csproj /p:CollectCoverage=true /p:CoverletOutput=../CoverageResults/ /p:MergeWith="../CoverageResults/coverage.json" /p:CoverletOutputFormat="opencover"
```

You can merge also running `dotnet test` and merge with single command from a solution file, but you need to ensure that tests will run sequentially(`-m:1`). This slow down testing but avoid invalid coverage result.

```
```shell
dotnet test /p:CollectCoverage=true /p:CoverletOutput=../CoverageResults/ /p:MergeWith="../CoverageResults/coverage.json" /p:CoverletOutputFormat=\"opencover,json\" -m:1
```

N.B. You need to specify `json` format plus another format(the final one), because Coverlet can only merge proprietary format. At the end you can delete temporary `coverage.json` file.

You can also merge the coverage result and generate another valid format to export the content than opencover, like cobertura.

```
```shell
dotnet test /p:CollectCoverage=true /p:CoverletOutput=../CoverageResults/ /p:MergeWith="../CoverageResults/coverage.json" /p:CoverletOutputFormat=\"cobertura,json\" -m:1
```
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="coverlet.msbuild" Version="2.8.0">
<PackageReference Include="coverlet.msbuild" Version="6.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
<PackageReference Include="xunit" Version="2.4.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<PackageReference Include="xunit" Version="2.5.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.0" />
</ItemGroup>

<ItemGroup>
Expand Down
Loading