Merge branch 'master' into merge/release/5.0-preview3-to-master
This commit is contained in:
commit
28f9139cb6
|
|
@ -71,6 +71,7 @@ variables:
|
|||
# The following extra properties are not set when testing. Use with final build.[cmd,sh] of asset-producing jobs.
|
||||
- name: _PublishArgs
|
||||
value: /p:Publish=true
|
||||
/p:GenerateChecksums=true
|
||||
/p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1)
|
||||
/p:DotNetPublishBlobFeedUrl=https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json
|
||||
/p:DotNetPublishToBlobFeed=$(_DotNetPublishToBlobFeed)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.Net.Component.4.6.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.2.SDK",
|
||||
"Microsoft.Net.Component.4.7.2.TargetingPack",
|
||||
"Microsoft.VisualStudio.Workload.ManagedDesktop",
|
||||
"Microsoft.VisualStudio.Workload.NetCoreTools",
|
||||
"Microsoft.VisualStudio.Workload.NetWeb",
|
||||
"Microsoft.VisualStudio.Workload.VisualStudioExtension"
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
# Code of Conduct
|
||||
|
||||
This project has adopted the code of conduct defined by the Contributor Covenant
|
||||
to clarify expected behavior in our community.
|
||||
|
||||
For more information, see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct).
|
||||
|
|
@ -57,4 +57,4 @@ Your pull request will now go through extensive checks by the subject matter exp
|
|||
|
||||
## Code of conduct
|
||||
|
||||
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information, see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
|
||||
See [CODE-OF-CONDUCT.md](./CODE-OF-CONDUCT.md)
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
<IsReferenceAssemblyProject Condition="$(MSBuildProjectDirectory.EndsWith('ref'))">true</IsReferenceAssemblyProject>
|
||||
<OutDirName Condition="'$(IsReferenceAssemblyProject)' == 'true'">$(MSBuildProjectName)-ref</OutDirName>
|
||||
|
||||
<IsBenchmarkProject Condition="$(MSBuildProjectName.EndsWith('.Performance')) OR $(RepoRelativeProjectDir.Contains('perf'))">true</IsBenchmarkProject>
|
||||
<IsBenchmarkProject Condition="$(MSBuildProjectName.EndsWith('.Performance')) OR $(RepoRelativeProjectDir.Contains('perf')) OR $(RepoRelativeProjectDir.Contains('benchmarkapps'))">true</IsBenchmarkProject>
|
||||
<IsSpecificationTestProject Condition="$(MSBuildProjectName.EndsWith('.Specification.Tests'))">true</IsSpecificationTestProject>
|
||||
<IsUnitTestProject>false</IsUnitTestProject>
|
||||
<IsUnitTestProject Condition="'$(IsSpecificationTestProject)' != 'true' and ( $(MSBuildProjectName.EndsWith('Tests')) or $(MSBuildProjectName.EndsWith('.Test')) or $(MSBuildProjectName.EndsWith('.FunctionalTest')) )">true</IsUnitTestProject>
|
||||
|
|
@ -105,8 +105,18 @@
|
|||
<InternalInstallerBaseName>$(RuntimeInstallerBaseName)-internal</InternalInstallerBaseName>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup Condition="'$(DisablePubternalApiCheck)' != 'true' AND '$(IsTestProject)' != 'true' AND '$(IsBenchmarkProject)' != 'true' AND '$(IsTestAssetProject)' != 'true'">
|
||||
<PackageReference Include="Internal.AspNetCore.Analyzers" PrivateAssets="All" Version="$(InternalAspNetCoreAnalyzersPackageVersion)" IsImplicitlyDefined="true" />
|
||||
<ItemGroup
|
||||
Condition="'$(DisablePubternalApiCheck)' != 'true'
|
||||
AND '$(IsTestProject)' != 'true'
|
||||
AND '$(IsBenchmarkProject)' != 'true'
|
||||
AND '$(IsTestAssetProject)' != 'true'
|
||||
AND '$(MSBuildProjectName)' != 'Internal.AspNetCore.Analyzers'
|
||||
AND '$(MSBuildProjectExtension)' == '.csproj'">
|
||||
<ProjectReference
|
||||
Include="$(RepoRoot)src\Analyzers\Internal.AspNetCore.Analyzers\src\Internal.AspNetCore.Analyzers.csproj"
|
||||
PrivateAssets="All"
|
||||
Version="$(InternalAspNetCoreAnalyzersPackageVersion)"
|
||||
IsImplicitlyDefined="true" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Compilation options which apply to all languages. Language-specific options should be set in eng/targets/$(lang).Common.props -->
|
||||
|
|
@ -179,7 +189,6 @@
|
|||
|
||||
<ArchiveExtension>.tar.gz</ArchiveExtension>
|
||||
<ArchiveExtension Condition="'$(TargetOsName)' == 'win'">.zip</ArchiveExtension>
|
||||
<ChecksumExtension>.sha512</ChecksumExtension>
|
||||
</PropertyGroup>
|
||||
|
||||
<Import Project="eng\Workarounds.props" />
|
||||
|
|
|
|||
|
|
@ -105,6 +105,14 @@
|
|||
<SkipTests Condition="'$(SkipHelixReadyTests)' == 'true' AND '$(BuildHelixPayload)' == 'true'">true</SkipTests>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<PackageThirdPartyNoticesFile Condition="'$(PackageThirdPartyNoticesFile)' == ''">$(RepoRoot)THIRD-PARTY-NOTICES.TXT</PackageThirdPartyNoticesFile>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup Condition="'$(IsPackable)' == 'true'">
|
||||
<None Include="$(PackageThirdPartyNoticesFile)" Pack="true" PackagePath="." />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(Language)' == 'C#' AND '$(IsReferenceAssemblyProject)' == 'true'">
|
||||
<Compile Include="$(SharedSourceRoot)ReferenceAssemblyInfo.cs" LinkBase="Properties" />
|
||||
</ItemGroup>
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ Follow the [Getting Started](https://docs.microsoft.com/aspnet/core/getting-star
|
|||
|
||||
Also check out the [.NET Homepage](https://www.microsoft.com/net) for released versions of .NET, getting started guides, and learning resources.
|
||||
|
||||
See the [Issue Management Policies](https://github.com/dotnet/aspnetcore/blob/anurse/issue-policies/docs/IssueManagementPolicies.md) document for more information on how we handle incoming issues.
|
||||
See the [Issue Management Policies](https://github.com/dotnet/aspnetcore/blob/master/docs/IssueManagementPolicies.md) document for more information on how we handle incoming issues.
|
||||
|
||||
## How to Engage, Contribute, and Give Feedback
|
||||
|
||||
|
|
@ -37,4 +37,4 @@ These are some other repos for related projects:
|
|||
|
||||
## Code of conduct
|
||||
|
||||
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
|
||||
See [CODE-OF-CONDUCT](./CODE-OF-CONDUCT.md)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
<Project>
|
||||
|
||||
<Import Project="Sdk.props" Sdk="Microsoft.DotNet.Arcade.Sdk" Condition="'$(GenerateChecksums)' == 'true'" />
|
||||
|
||||
<PropertyGroup Condition="'$(GenerateChecksums)' == 'true'">
|
||||
<!-- The one use of ArtifactsDir in Publish.proj adds an additional slash, confusing itself. -->
|
||||
<ArtifactsDir Condition=" HasTrailingSlash('$(ArtifactsDir)') ">$(ArtifactsDir.Substring(0, $([MSBuild]::Subtract($(ArtifactsDir.Length), 1))))</ArtifactsDir>
|
||||
<!-- $(InstallersOutputPath) is not defined. Root Directory.Build.props is not imported. -->
|
||||
<InstallersOutputPath>$(ArtifactsDir)\installers\</InstallersOutputPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<Target Name="PopulateGenerateChecksumItems"
|
||||
Condition="'$(GenerateChecksums)' == 'true'"
|
||||
AfterTargets="Build"
|
||||
BeforeTargets="GenerateChecksums" >
|
||||
|
||||
<ItemGroup>
|
||||
<InstallerFiles Include="$(InstallersOutputPath)**\*.msi" />
|
||||
<InstallerFiles Include="$(InstallersOutputPath)**\*.exe" />
|
||||
<InstallerFiles Include="$(InstallersOutputPath)**\*.zip" />
|
||||
<InstallerFiles Include="$(InstallersOutputPath)**\*.tar.gz" />
|
||||
<InstallerFiles Include="$(InstallersOutputPath)**\*.wixlib" />
|
||||
<InstallerFiles Include="$(InstallersOutputPath)**\*.rpm" />
|
||||
<GenerateChecksumItems Include="%(InstallerFiles.Identity)" >
|
||||
<DestinationPath>%(FullPath).sha512</DestinationPath>
|
||||
</GenerateChecksumItems>
|
||||
</ItemGroup>
|
||||
|
||||
</Target>
|
||||
|
||||
<Import Project="Sdk.targets" Sdk="Microsoft.DotNet.Arcade.Sdk" Condition="'$(GenerateChecksums)' == 'true'" />
|
||||
|
||||
</Project>
|
||||
|
|
@ -6,12 +6,12 @@
|
|||
</PropertyGroup>
|
||||
<!-- Package: AspNetCoreRuntime.3.0.x64-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x64' ">
|
||||
<BaselinePackageVersion>3.0.2</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.0.3</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x64' AND '$(TargetFramework)' == 'net461' " />
|
||||
<!-- Package: AspNetCoreRuntime.3.0.x86-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x86' ">
|
||||
<BaselinePackageVersion>3.0.2</BaselinePackageVersion>
|
||||
<BaselinePackageVersion>3.0.3</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x86' AND '$(TargetFramework)' == 'net461' " />
|
||||
<!-- Package: dotnet-sql-cache-->
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@ Update this list when preparing for a new patch.
|
|||
|
||||
-->
|
||||
<Baseline Version="3.1.3">
|
||||
<Package Id="AspNetCoreRuntime.3.0.x64" Version="3.0.2" />
|
||||
<Package Id="AspNetCoreRuntime.3.0.x86" Version="3.0.2" />
|
||||
<Package Id="AspNetCoreRuntime.3.0.x64" Version="3.0.3" />
|
||||
<Package Id="AspNetCoreRuntime.3.0.x86" Version="3.0.3" />
|
||||
<Package Id="dotnet-sql-cache" Version="3.1.3" />
|
||||
<Package Id="Microsoft.AspNetCore.ApiAuthorization.IdentityServer" Version="3.1.3" />
|
||||
<Package Id="Microsoft.AspNetCore.App.Runtime.win-x64" Version="3.1.3" />
|
||||
|
|
|
|||
|
|
@ -152,6 +152,7 @@
|
|||
$(RepoRoot)src\SiteExtensions\LoggingAggregate\test\**\*.csproj;
|
||||
$(RepoRoot)src\Shared\**\*.*proj;
|
||||
$(RepoRoot)src\Tools\**\*.*proj;
|
||||
$(RepoRoot)src\Logging.AzureAppServices\**\src\*.csproj;
|
||||
$(RepoRoot)src\Middleware\**\*.csproj;
|
||||
$(RepoRoot)src\Razor\**\*.*proj;
|
||||
$(RepoRoot)src\Mvc\**\*.*proj;
|
||||
|
|
@ -191,6 +192,7 @@
|
|||
$(RepoRoot)src\Security\**\src\*.csproj;
|
||||
$(RepoRoot)src\SiteExtensions\**\src\*.csproj;
|
||||
$(RepoRoot)src\Tools\**\src\*.csproj;
|
||||
$(RepoRoot)src\Logging.AzureAppServices\**\src\*.csproj;
|
||||
$(RepoRoot)src\Middleware\**\src\*.csproj;
|
||||
$(RepoRoot)src\Razor\**\src\*.csproj;
|
||||
$(RepoRoot)src\Mvc\**\src\*.csproj;
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@ and are generated based on the last package release.
|
|||
<LatestPackageReference Include="Microsoft.CodeAnalysis.Razor" Version="$(MicrosoftCodeAnalysisRazorPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.CSharp" Version="$(MicrosoftCSharpPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.DotNet.GenAPI" Version="$(MicrosoftDotNetGenApiPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.DotNet.PlatformAbstractions" Version="$(MicrosoftDotNetPlatformAbstractionsPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="$(MicrosoftExtensionsCachingAbstractionsPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.Extensions.Caching.Memory" Version="$(MicrosoftExtensionsCachingMemoryPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="$(MicrosoftExtensionsConfigurationAbstractionsPackageVersion)" />
|
||||
|
|
@ -105,7 +104,6 @@ and are generated based on the last package release.
|
|||
|
||||
<ItemGroup Label=".NET team dependencies (Non-source-build)" Condition="'$(DotNetBuildFromSource)' != 'true'">
|
||||
<LatestPackageReference Include="Microsoft.AspNet.WebApi.Client" Version="$(MicrosoftAspNetWebApiClientPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.AspNetCore.Analyzer.Testing" Version="$(MicrosoftAspNetCoreAnalyzerTestingPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.AspNetCore.AzureAppServices.SiteExtension.2.1" Version="$(MicrosoftAspNetCoreAzureAppServicesSiteExtension21PackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.AspNetCore.AzureAppServices.SiteExtension.2.2" Version="$(MicrosoftAspNetCoreAzureAppServicesSiteExtension22PackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.AspNetCore.AzureAppServices.SiteExtension.3.1.x64" Version="$(MicrosoftAspNetCoreAzureAppServicesSiteExtension31PackageVersion)" />
|
||||
|
|
@ -120,13 +118,11 @@ and are generated based on the last package release.
|
|||
<LatestPackageReference Include="Microsoft.EntityFrameworkCore" Version="$(MicrosoftEntityFrameworkCorePackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.Extensions.Caching.SqlServer" Version="$(MicrosoftExtensionsCachingSqlServerPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="$(MicrosoftExtensionsCachingStackExchangeRedisPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.Extensions.Logging.AzureAppServices" Version="$(MicrosoftExtensionsLoggingAzureAppServicesPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.Extensions.Logging.Testing" Version="$(MicrosoftExtensionsLoggingTestingPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.IdentityModel.Clients.ActiveDirectory" Version="$(MicrosoftIdentityModelClientsActiveDirectoryPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="$(MicrosoftIdentityModelProtocolsOpenIdConnectPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.IdentityModel.Protocols.WsFederation" Version="$(MicrosoftIdentityModelProtocolsWsFederationPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.Internal.AspNetCore.H2Spec.All" Version="$(MicrosoftInternalAspNetCoreH2SpecAllPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.Internal.Extensions.Refs" Version="$(MicrosoftInternalExtensionsRefsPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.Extensions.Internal.Transport" Version="$(MicrosoftExtensionsInternalTransportPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.NETCore.Windows.ApiSets" Version="$(MicrosoftNETCoreWindowsApiSetsPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.Owin.Security.Cookies" Version="$(MicrosoftOwinSecurityCookiesPackageVersion)" />
|
||||
<LatestPackageReference Include="Microsoft.Owin.Testing" Version="$(MicrosoftOwinTestingPackageVersion)" />
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@
|
|||
<ProjectReferenceProvider Include="Microsoft.Extensions.ApiDescription.Server" ProjectPath="$(RepoRoot)src\Tools\Extensions.ApiDescription.Server\src\Microsoft.Extensions.ApiDescription.Server.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.DeveloperCertificates.XPlat" ProjectPath="$(RepoRoot)src\Tools\FirstRunCertGenerator\src\Microsoft.AspNetCore.DeveloperCertificates.XPlat.csproj" />
|
||||
<ProjectReferenceProvider Include="GetDocument.Insider" ProjectPath="$(RepoRoot)src\Tools\GetDocumentInsider\src\GetDocumentInsider.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.Extensions.Logging.AzureAppServices" ProjectPath="$(RepoRoot)src\Logging.AzureAppServices\src\Microsoft.Extensions.Logging.AzureAppServices.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.ConcurrencyLimiter" ProjectPath="$(RepoRoot)src\Middleware\ConcurrencyLimiter\src\Microsoft.AspNetCore.ConcurrencyLimiter.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" ProjectPath="$(RepoRoot)src\Middleware\Diagnostics.EntityFrameworkCore\src\Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.HeaderPropagation" ProjectPath="$(RepoRoot)src\Middleware\HeaderPropagation\src\Microsoft.AspNetCore.HeaderPropagation.csproj" />
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<Project>
|
||||
<PropertyGroup Condition=" HasTrailingSlash('$(ArtifactsDir)') ">
|
||||
<PropertyGroup>
|
||||
<!-- The one use of ArtifactsDir in Publish.proj adds an additional slash, confusing itself. -->
|
||||
<ArtifactsDir>$(ArtifactsDir.Substring(0, $([MSBuild]::Subtract($(ArtifactsDir.Length), 1))))</ArtifactsDir>
|
||||
<ArtifactsDir Condition=" HasTrailingSlash('$(ArtifactsDir)') ">$(ArtifactsDir.Substring(0, $([MSBuild]::Subtract($(ArtifactsDir.Length), 1))))</ArtifactsDir>
|
||||
|
||||
<PublishDependsOnTargets>$(PublishDependsOnTargets);_PublishInstallersAndChecksums</PublishDependsOnTargets>
|
||||
|
||||
|
|
@ -50,12 +50,10 @@
|
|||
<!-- Do not push .nupkg files from Linux and macOS builds. They'll be packed up separately and signed on Windows. -->
|
||||
<ItemsToPushToBlobFeed Remove="@(ItemsToPushToBlobFeed)" Condition="'$(OS)' != 'Windows_NT'" />
|
||||
|
||||
<!-- Skip publishing checksums for now - the checksums for the .zip files don't match (https://github.com/dotnet/aspnetcore/issues/18792)
|
||||
<ItemsToPushToBlobFeed Include="@(_ChecksumsToPublish)">
|
||||
<PublishFlatContainer>true</PublishFlatContainer>
|
||||
<RelativeBlobPath>$(_UploadPathRoot)/Runtime/$(_PackageVersion)/%(Filename)%(Extension)</RelativeBlobPath>
|
||||
</ItemsToPushToBlobFeed>
|
||||
-->
|
||||
|
||||
<ItemsToPushToBlobFeed Include="@(_InstallersToPublish)">
|
||||
<IsShipping>true</IsShipping>
|
||||
|
|
|
|||
|
|
@ -18,9 +18,8 @@
|
|||
<SystemWindowsExtensionsPackageVersion>$(SystemWindowsExtensionsPackageVersion.Split('.')[0]).$(SystemWindowsExtensionsPackageVersion.Split('.')[1]).0</SystemWindowsExtensionsPackageVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<!-- Dependencies from dotnet/extensions -->
|
||||
<!-- Dependencies from dotnet/runtime -->
|
||||
<ExternalAspNetCoreAppReference Include="Microsoft.Extensions.Caching.Abstractions" Version="$(MicrosoftExtensionsCachingAbstractionsPackageVersion)" />
|
||||
<ExternalAspNetCoreAppReference Include="Microsoft.Extensions.Caching.Memory" Version="$(MicrosoftExtensionsCachingMemoryPackageVersion)" />
|
||||
<ExternalAspNetCoreAppReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="$(MicrosoftExtensionsConfigurationAbstractionsPackageVersion)" />
|
||||
|
|
@ -54,8 +53,6 @@
|
|||
<ExternalAspNetCoreAppReference Include="Microsoft.Extensions.Options.DataAnnotations" Version="$(MicrosoftExtensionsOptionsDataAnnotationsPackageVersion)" />
|
||||
<ExternalAspNetCoreAppReference Include="Microsoft.Extensions.Options" Version="$(MicrosoftExtensionsOptionsPackageVersion)" />
|
||||
<ExternalAspNetCoreAppReference Include="Microsoft.Extensions.Primitives" Version="$(MicrosoftExtensionsPrimitivesPackageVersion)" />
|
||||
|
||||
<!-- Dependencies from dotnet/corefx -->
|
||||
<ExternalAspNetCoreAppReference Include="System.IO.Pipelines" Version="$(SystemIOPipelinesPackageVersion)" />
|
||||
<ExternalAspNetCoreAppReference Include="System.Security.Cryptography.Xml" Version="$(SystemSecurityCryptographyXmlPackageVersion)" />
|
||||
|
||||
|
|
|
|||
|
|
@ -13,320 +13,292 @@
|
|||
<Uri>https://github.com/dotnet/blazor</Uri>
|
||||
<Sha>dd7fb4d3931d556458f62642c2edfc59f6295bfb</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="5.0.0-preview.3.20205.2">
|
||||
<Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="5.0.0-preview.4.20201.4">
|
||||
<Uri>https://github.com/dotnet/aspnetcore-tooling</Uri>
|
||||
<Sha>8587529296124ad1d7e2a9b75f536e2a2c301e48</Sha>
|
||||
<Sha>4ec71cb57e45db101bbd4ffcf64dafa1711de0af</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="5.0.0-preview.3.20205.2">
|
||||
<Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="5.0.0-preview.4.20201.4">
|
||||
<Uri>https://github.com/dotnet/aspnetcore-tooling</Uri>
|
||||
<Sha>8587529296124ad1d7e2a9b75f536e2a2c301e48</Sha>
|
||||
<Sha>4ec71cb57e45db101bbd4ffcf64dafa1711de0af</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.CodeAnalysis.Razor" Version="5.0.0-preview.3.20205.2">
|
||||
<Dependency Name="Microsoft.CodeAnalysis.Razor" Version="5.0.0-preview.4.20201.4">
|
||||
<Uri>https://github.com/dotnet/aspnetcore-tooling</Uri>
|
||||
<Sha>8587529296124ad1d7e2a9b75f536e2a2c301e48</Sha>
|
||||
<Sha>4ec71cb57e45db101bbd4ffcf64dafa1711de0af</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.NET.Sdk.Razor" Version="5.0.0-preview.3.20205.2">
|
||||
<Dependency Name="Microsoft.NET.Sdk.Razor" Version="5.0.0-preview.4.20201.4">
|
||||
<Uri>https://github.com/dotnet/aspnetcore-tooling</Uri>
|
||||
<Sha>8587529296124ad1d7e2a9b75f536e2a2c301e48</Sha>
|
||||
<Sha>4ec71cb57e45db101bbd4ffcf64dafa1711de0af</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="dotnet-ef" Version="5.0.0-preview.3.20181.2">
|
||||
<Dependency Name="dotnet-ef" Version="5.0.0-preview.4.20203.1">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>7a6aa0a4f513c28b5a0501a2db8880885def2236</Sha>
|
||||
<Sha>b0636ed8050797d0a9c16da8b98c2eea7d7e1f16</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="5.0.0-preview.3.20181.2">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="5.0.0-preview.4.20203.1">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>7a6aa0a4f513c28b5a0501a2db8880885def2236</Sha>
|
||||
<Sha>b0636ed8050797d0a9c16da8b98c2eea7d7e1f16</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="5.0.0-preview.3.20181.2">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="5.0.0-preview.4.20203.1">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>7a6aa0a4f513c28b5a0501a2db8880885def2236</Sha>
|
||||
<Sha>b0636ed8050797d0a9c16da8b98c2eea7d7e1f16</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.0-preview.3.20181.2">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.0-preview.4.20203.1">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>7a6aa0a4f513c28b5a0501a2db8880885def2236</Sha>
|
||||
<Sha>b0636ed8050797d0a9c16da8b98c2eea7d7e1f16</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0-preview.3.20181.2">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0-preview.4.20203.1">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>7a6aa0a4f513c28b5a0501a2db8880885def2236</Sha>
|
||||
<Sha>b0636ed8050797d0a9c16da8b98c2eea7d7e1f16</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0-preview.3.20181.2">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0-preview.4.20203.1">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>7a6aa0a4f513c28b5a0501a2db8880885def2236</Sha>
|
||||
<Sha>b0636ed8050797d0a9c16da8b98c2eea7d7e1f16</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore" Version="5.0.0-preview.3.20181.2">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore" Version="5.0.0-preview.4.20203.1">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>7a6aa0a4f513c28b5a0501a2db8880885def2236</Sha>
|
||||
<Sha>b0636ed8050797d0a9c16da8b98c2eea7d7e1f16</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Hosting" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Http" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Testing" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Options" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Primitives" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Internal.Extensions.Refs" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Win32.Registry" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Win32.SystemEvents" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.ComponentModel.Annotations" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Diagnostics.EventLog" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Drawing.Common" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.IO.Pipelines" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Net.Http.WinHttpHandler" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Reflection.Metadata" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Cryptography.Cng" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Cryptography.Pkcs" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Cryptography.Xml" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Permissions" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Principal.Windows" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.ServiceProcess.ServiceController" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Text.Encodings.Web" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Text.Json" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Threading.Channels" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Windows.Extensions" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.Extensions.Hosting" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="5.0.0-preview.3-runtime.20202.4" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Dependency Name="Microsoft.Extensions.Http" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.NETCore.App.Ref" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Options" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Primitives" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Internal.Transport" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Win32.Registry" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Win32.SystemEvents" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.ComponentModel.Annotations" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Diagnostics.EventLog" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Drawing.Common" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.IO.Pipelines" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Net.Http.WinHttpHandler" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Reflection.Metadata" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Cryptography.Cng" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Cryptography.Pkcs" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Cryptography.Xml" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Permissions" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Principal.Windows" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.ServiceProcess.ServiceController" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Text.Encodings.Web" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Text.Json" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Threading.Channels" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Windows.Extensions" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="5.0.0-preview.4-runtime.20201.1" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.NETCore.App.Ref" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<!--
|
||||
Win-x64 is used here because we have picked an arbitrary runtime identifier to flow the version of the latest NETCore.App runtime.
|
||||
All Runtime.$rid packages should have the same version.
|
||||
-->
|
||||
<Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.NETCore.App.Internal" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Dependency Name="Microsoft.NETCore.App.Internal" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
</ProductDependencies>
|
||||
<ToolsetDependencies>
|
||||
<!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
||||
<Dependency Name="Microsoft.NETCore.Platforms" Version="5.0.0-preview.3.20202.4" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Dependency Name="Microsoft.NETCore.Platforms" Version="5.0.0-preview.4.20201.1" CoherentParentDependency="Microsoft.NETCore.App.Runtime.win-x64">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>2b487f31064fe07d3b3398a7432edd1fa5777796</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Internal.AspNetCore.Analyzers" Version="5.0.0-preview.3.20204.4" CoherentParentDependency="Microsoft.AspNetCore.Razor.Language">
|
||||
<Uri>https://github.com/dotnet/extensions</Uri>
|
||||
<Sha>bdc30606a08a10db8fb6909b75e9ebf6f9f482d4</Sha>
|
||||
<Sha>e1fa5d7648d46f067e265211fc2c695d409fe788</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.DotNet.GenAPI" Version="5.0.0-beta.20180.5">
|
||||
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||
|
|
@ -340,9 +312,9 @@
|
|||
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||
<Sha>09bb9d929120b402348c9a0e9c8c951e824059aa</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Net.Compilers.Toolset" Version="3.6.0-3.20177.6" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Dependency Name="Microsoft.Net.Compilers.Toolset" Version="3.6.0-3.20201.6" CoherentParentDependency="Microsoft.Extensions.Logging">
|
||||
<Uri>https://github.com/dotnet/roslyn</Uri>
|
||||
<Sha>c9f2423cb5a2ab1ee8de0ef10e536d7672b1a2ea</Sha>
|
||||
<Sha>8167e4880190407325d6cf7282f6bb62267abc56</Sha>
|
||||
</Dependency>
|
||||
</ToolsetDependencies>
|
||||
</Dependencies>
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
<AspNetCoreMajorVersion>5</AspNetCoreMajorVersion>
|
||||
<AspNetCoreMinorVersion>0</AspNetCoreMinorVersion>
|
||||
<AspNetCorePatchVersion>0</AspNetCorePatchVersion>
|
||||
<PreReleaseVersionIteration>3</PreReleaseVersionIteration>
|
||||
<PreReleaseVersionIteration>4</PreReleaseVersionIteration>
|
||||
<!--
|
||||
When StabilizePackageVersion is set to 'true', this branch will produce stable outputs for 'Shipping' packages
|
||||
-->
|
||||
|
|
@ -64,92 +64,83 @@
|
|||
<!-- Packages from dotnet/arcade -->
|
||||
<MicrosoftDotNetGenAPIPackageVersion>5.0.0-beta.20180.5</MicrosoftDotNetGenAPIPackageVersion>
|
||||
<!-- Packages from dotnet/roslyn -->
|
||||
<MicrosoftNetCompilersToolsetPackageVersion>3.6.0-3.20177.6</MicrosoftNetCompilersToolsetPackageVersion>
|
||||
<!-- Packages from dotnet/core-setup -->
|
||||
<MicrosoftExtensionsDependencyModelPackageVersion>5.0.0-preview.3-runtime.20202.4</MicrosoftExtensionsDependencyModelPackageVersion>
|
||||
<MicrosoftNETCoreAppInternalPackageVersion>5.0.0-preview.3.20202.4</MicrosoftNETCoreAppInternalPackageVersion>
|
||||
<MicrosoftNETCoreAppRefPackageVersion>5.0.0-preview.3.20202.4</MicrosoftNETCoreAppRefPackageVersion>
|
||||
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>5.0.0-preview.3.20202.4</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
|
||||
<!-- Packages from dotnet/corefx -->
|
||||
<MicrosoftWin32RegistryPackageVersion>5.0.0-preview.3.20202.4</MicrosoftWin32RegistryPackageVersion>
|
||||
<MicrosoftWin32SystemEventsPackageVersion>5.0.0-preview.3.20202.4</MicrosoftWin32SystemEventsPackageVersion>
|
||||
<SystemComponentModelAnnotationsPackageVersion>5.0.0-preview.3.20202.4</SystemComponentModelAnnotationsPackageVersion>
|
||||
<SystemDiagnosticsEventLogPackageVersion>5.0.0-preview.3.20202.4</SystemDiagnosticsEventLogPackageVersion>
|
||||
<SystemDrawingCommonPackageVersion>5.0.0-preview.3.20202.4</SystemDrawingCommonPackageVersion>
|
||||
<SystemIOPipelinesPackageVersion>5.0.0-preview.3.20202.4</SystemIOPipelinesPackageVersion>
|
||||
<SystemNetHttpWinHttpHandlerPackageVersion>5.0.0-preview.3.20202.4</SystemNetHttpWinHttpHandlerPackageVersion>
|
||||
<SystemNetWebSocketsWebSocketProtocolPackageVersion>5.0.0-preview.3.20202.4</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
||||
<SystemReflectionMetadataPackageVersion>5.0.0-preview.3.20202.4</SystemReflectionMetadataPackageVersion>
|
||||
<SystemRuntimeCompilerServicesUnsafePackageVersion>5.0.0-preview.3.20202.4</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
||||
<SystemSecurityCryptographyCngPackageVersion>5.0.0-preview.3.20202.4</SystemSecurityCryptographyCngPackageVersion>
|
||||
<SystemSecurityCryptographyPkcsPackageVersion>5.0.0-preview.3.20202.4</SystemSecurityCryptographyPkcsPackageVersion>
|
||||
<SystemSecurityCryptographyXmlPackageVersion>5.0.0-preview.3.20202.4</SystemSecurityCryptographyXmlPackageVersion>
|
||||
<SystemSecurityPermissionsPackageVersion>5.0.0-preview.3.20202.4</SystemSecurityPermissionsPackageVersion>
|
||||
<SystemSecurityPrincipalWindowsPackageVersion>5.0.0-preview.3.20202.4</SystemSecurityPrincipalWindowsPackageVersion>
|
||||
<SystemServiceProcessServiceControllerPackageVersion>5.0.0-preview.3.20202.4</SystemServiceProcessServiceControllerPackageVersion>
|
||||
<SystemTextEncodingsWebPackageVersion>5.0.0-preview.3.20202.4</SystemTextEncodingsWebPackageVersion>
|
||||
<SystemTextJsonPackageVersion>5.0.0-preview.3.20202.4</SystemTextJsonPackageVersion>
|
||||
<SystemThreadingChannelsPackageVersion>5.0.0-preview.3.20202.4</SystemThreadingChannelsPackageVersion>
|
||||
<SystemWindowsExtensionsPackageVersion>5.0.0-preview.3.20202.4</SystemWindowsExtensionsPackageVersion>
|
||||
<MicrosoftNetCompilersToolsetPackageVersion>3.6.0-3.20201.6</MicrosoftNetCompilersToolsetPackageVersion>
|
||||
<!-- Packages from dotnet/runtime -->
|
||||
<MicrosoftExtensionsDependencyModelPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsDependencyModelPackageVersion>
|
||||
<MicrosoftNETCoreAppInternalPackageVersion>5.0.0-preview.4.20201.1</MicrosoftNETCoreAppInternalPackageVersion>
|
||||
<MicrosoftNETCoreAppRefPackageVersion>5.0.0-preview.4.20201.1</MicrosoftNETCoreAppRefPackageVersion>
|
||||
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>5.0.0-preview.4.20201.1</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
|
||||
<MicrosoftWin32RegistryPackageVersion>5.0.0-preview.4.20201.1</MicrosoftWin32RegistryPackageVersion>
|
||||
<MicrosoftWin32SystemEventsPackageVersion>5.0.0-preview.4.20201.1</MicrosoftWin32SystemEventsPackageVersion>
|
||||
<MicrosoftExtensionsCachingAbstractionsPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsCachingMemoryPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsCachingMemoryPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationBinderPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationIniPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsConfigurationIniPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationXmlPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersCompositePackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
||||
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
||||
<MicrosoftExtensionsHostingAbstractionsPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsHostingPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsHostingPackageVersion>
|
||||
<MicrosoftExtensionsHttpPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsHttpPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConfigurationPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConsolePackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||
<MicrosoftExtensionsLoggingDebugPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventSourcePackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventLogPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsLoggingEventLogPackageVersion>
|
||||
<MicrosoftExtensionsLoggingPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsLoggingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
||||
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsOptionsPackageVersion>
|
||||
<MicrosoftExtensionsPrimitivesPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsPrimitivesPackageVersion>
|
||||
<MicrosoftExtensionsInternalTransportPackageVersion>5.0.0-preview.4-runtime.20201.1</MicrosoftExtensionsInternalTransportPackageVersion>
|
||||
<SystemComponentModelAnnotationsPackageVersion>5.0.0-preview.4.20201.1</SystemComponentModelAnnotationsPackageVersion>
|
||||
<SystemDiagnosticsEventLogPackageVersion>5.0.0-preview.4.20201.1</SystemDiagnosticsEventLogPackageVersion>
|
||||
<SystemDrawingCommonPackageVersion>5.0.0-preview.4.20201.1</SystemDrawingCommonPackageVersion>
|
||||
<SystemIOPipelinesPackageVersion>5.0.0-preview.4.20201.1</SystemIOPipelinesPackageVersion>
|
||||
<SystemNetHttpWinHttpHandlerPackageVersion>5.0.0-preview.4.20201.1</SystemNetHttpWinHttpHandlerPackageVersion>
|
||||
<SystemNetWebSocketsWebSocketProtocolPackageVersion>5.0.0-preview.4.20201.1</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
||||
<SystemReflectionMetadataPackageVersion>5.0.0-preview.4.20201.1</SystemReflectionMetadataPackageVersion>
|
||||
<SystemRuntimeCompilerServicesUnsafePackageVersion>5.0.0-preview.4.20201.1</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
||||
<SystemSecurityCryptographyCngPackageVersion>5.0.0-preview.4.20201.1</SystemSecurityCryptographyCngPackageVersion>
|
||||
<SystemSecurityCryptographyPkcsPackageVersion>5.0.0-preview.4.20201.1</SystemSecurityCryptographyPkcsPackageVersion>
|
||||
<SystemSecurityCryptographyXmlPackageVersion>5.0.0-preview.4.20201.1</SystemSecurityCryptographyXmlPackageVersion>
|
||||
<SystemSecurityPermissionsPackageVersion>5.0.0-preview.4.20201.1</SystemSecurityPermissionsPackageVersion>
|
||||
<SystemSecurityPrincipalWindowsPackageVersion>5.0.0-preview.4.20201.1</SystemSecurityPrincipalWindowsPackageVersion>
|
||||
<SystemServiceProcessServiceControllerPackageVersion>5.0.0-preview.4.20201.1</SystemServiceProcessServiceControllerPackageVersion>
|
||||
<SystemTextEncodingsWebPackageVersion>5.0.0-preview.4.20201.1</SystemTextEncodingsWebPackageVersion>
|
||||
<SystemTextJsonPackageVersion>5.0.0-preview.4.20201.1</SystemTextJsonPackageVersion>
|
||||
<SystemThreadingChannelsPackageVersion>5.0.0-preview.4.20201.1</SystemThreadingChannelsPackageVersion>
|
||||
<SystemWindowsExtensionsPackageVersion>5.0.0-preview.4.20201.1</SystemWindowsExtensionsPackageVersion>
|
||||
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
||||
<MicrosoftNETCorePlatformsPackageVersion>5.0.0-preview.3.20202.4</MicrosoftNETCorePlatformsPackageVersion>
|
||||
<MicrosoftNETCorePlatformsPackageVersion>5.0.0-preview.4.20201.1</MicrosoftNETCorePlatformsPackageVersion>
|
||||
<!-- Packages from dotnet/blazor -->
|
||||
<MicrosoftAspNetCoreBlazorMonoPackageVersion>3.2.0-preview1.20067.1</MicrosoftAspNetCoreBlazorMonoPackageVersion>
|
||||
<!-- Packages from dotnet/extensions -->
|
||||
<InternalAspNetCoreAnalyzersPackageVersion>5.0.0-preview.3.20204.4</InternalAspNetCoreAnalyzersPackageVersion>
|
||||
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>5.0.0-preview.3.20204.4</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
|
||||
<MicrosoftExtensionsCachingAbstractionsPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsCachingMemoryPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsCachingMemoryPackageVersion>
|
||||
<MicrosoftExtensionsCachingSqlServerPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsCachingSqlServerPackageVersion>
|
||||
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationBinderPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationIniPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsConfigurationIniPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationXmlPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
||||
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersCompositePackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
||||
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
||||
<MicrosoftExtensionsHostingAbstractionsPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsHostingPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsHostingPackageVersion>
|
||||
<MicrosoftExtensionsHttpPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsHttpPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConfigurationPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConsolePackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||
<MicrosoftExtensionsLoggingDebugPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventSourcePackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventLogPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsLoggingEventLogPackageVersion>
|
||||
<MicrosoftExtensionsLoggingPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsLoggingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTestingPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsLoggingTestingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
||||
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsOptionsPackageVersion>
|
||||
<MicrosoftExtensionsPrimitivesPackageVersion>5.0.0-preview.3.20204.4</MicrosoftExtensionsPrimitivesPackageVersion>
|
||||
<MicrosoftInternalExtensionsRefsPackageVersion>5.0.0-preview.3.20204.4</MicrosoftInternalExtensionsRefsPackageVersion>
|
||||
<!-- Packages from dotnet/efcore -->
|
||||
<dotnetefPackageVersion>5.0.0-preview.3.20181.2</dotnetefPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>5.0.0-preview.3.20181.2</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>5.0.0-preview.3.20181.2</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>5.0.0-preview.3.20181.2</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>5.0.0-preview.3.20181.2</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreToolsPackageVersion>5.0.0-preview.3.20181.2</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
||||
<MicrosoftEntityFrameworkCorePackageVersion>5.0.0-preview.3.20181.2</MicrosoftEntityFrameworkCorePackageVersion>
|
||||
<dotnetefPackageVersion>5.0.0-preview.4.20203.1</dotnetefPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>5.0.0-preview.4.20203.1</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>5.0.0-preview.4.20203.1</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>5.0.0-preview.4.20203.1</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>5.0.0-preview.4.20203.1</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreToolsPackageVersion>5.0.0-preview.4.20203.1</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
||||
<MicrosoftEntityFrameworkCorePackageVersion>5.0.0-preview.4.20203.1</MicrosoftEntityFrameworkCorePackageVersion>
|
||||
<!-- Packages from dotnet/aspnetcore-tooling -->
|
||||
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>5.0.0-preview.3.20205.2</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
|
||||
<MicrosoftAspNetCoreRazorLanguagePackageVersion>5.0.0-preview.3.20205.2</MicrosoftAspNetCoreRazorLanguagePackageVersion>
|
||||
<MicrosoftCodeAnalysisRazorPackageVersion>5.0.0-preview.3.20205.2</MicrosoftCodeAnalysisRazorPackageVersion>
|
||||
<MicrosoftNETSdkRazorPackageVersion>5.0.0-preview.3.20205.2</MicrosoftNETSdkRazorPackageVersion>
|
||||
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>5.0.0-preview.4.20201.4</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
|
||||
<MicrosoftAspNetCoreRazorLanguagePackageVersion>5.0.0-preview.4.20201.4</MicrosoftAspNetCoreRazorLanguagePackageVersion>
|
||||
<MicrosoftCodeAnalysisRazorPackageVersion>5.0.0-preview.4.20201.4</MicrosoftCodeAnalysisRazorPackageVersion>
|
||||
<MicrosoftNETSdkRazorPackageVersion>5.0.0-preview.4.20201.4</MicrosoftNETSdkRazorPackageVersion>
|
||||
</PropertyGroup>
|
||||
<!--
|
||||
|
||||
|
|
@ -168,6 +159,8 @@
|
|||
<MicrosoftNETCoreAppRuntimeVersion>$(MicrosoftNETCoreAppRuntimewinx64PackageVersion)</MicrosoftNETCoreAppRuntimeVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Manual">
|
||||
<!-- DiagnosticAdapter package pinned temporarily until migrated/deprecated -->
|
||||
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>5.0.0-preview.4.20180.4</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
|
||||
<!-- Build tool dependencies -->
|
||||
<InternalAspNetCoreBuildTasksPackageVersion>3.0.0-build-20190530.3</InternalAspNetCoreBuildTasksPackageVersion>
|
||||
<MicrosoftSymbolUploaderBuildTaskPackageVersion>1.0.0-beta-64023-03</MicrosoftSymbolUploaderBuildTaskPackageVersion>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
<Project>
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<Project>
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements.
|
||||
// The .NET Foundation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
namespace RunTests
|
||||
{
|
||||
public class ProcessResult
|
||||
{
|
||||
public ProcessResult(string standardOutput, string standardError, int exitCode)
|
||||
{
|
||||
StandardOutput = standardOutput;
|
||||
StandardError = standardError;
|
||||
ExitCode = exitCode;
|
||||
}
|
||||
|
||||
public string StandardOutput { get; }
|
||||
public string StandardError { get; }
|
||||
public int ExitCode { get; }
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,158 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements.
|
||||
// The .NET Foundation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
#nullable enable
|
||||
|
||||
namespace RunTests
|
||||
{
|
||||
public static class ProcessUtil
|
||||
{
|
||||
[DllImport("libc", SetLastError = true, EntryPoint = "kill")]
|
||||
private static extern int sys_kill(int pid, int sig);
|
||||
|
||||
public static async Task<ProcessResult> RunAsync(
|
||||
string filename,
|
||||
string arguments,
|
||||
string? workingDirectory = null,
|
||||
bool throwOnError = true,
|
||||
IDictionary<string, string?>? environmentVariables = null,
|
||||
Action<string>? outputDataReceived = null,
|
||||
Action<string>? errorDataReceived = null,
|
||||
Action<int>? onStart = null,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
Console.WriteLine($"Running '{filename} {arguments}'");
|
||||
using var process = new Process()
|
||||
{
|
||||
StartInfo =
|
||||
{
|
||||
FileName = filename,
|
||||
Arguments = arguments,
|
||||
RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
UseShellExecute = false,
|
||||
CreateNoWindow = true,
|
||||
},
|
||||
EnableRaisingEvents = true
|
||||
};
|
||||
|
||||
|
||||
if (workingDirectory != null)
|
||||
{
|
||||
process.StartInfo.WorkingDirectory = workingDirectory;
|
||||
}
|
||||
|
||||
if (environmentVariables != null)
|
||||
{
|
||||
foreach (var kvp in environmentVariables)
|
||||
{
|
||||
process.StartInfo.Environment.Add(kvp);
|
||||
}
|
||||
}
|
||||
|
||||
var outputBuilder = new StringBuilder();
|
||||
process.OutputDataReceived += (_, e) =>
|
||||
{
|
||||
if (e.Data != null)
|
||||
{
|
||||
if (outputDataReceived != null)
|
||||
{
|
||||
outputDataReceived.Invoke(e.Data);
|
||||
}
|
||||
else
|
||||
{
|
||||
outputBuilder.AppendLine(e.Data);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var errorBuilder = new StringBuilder();
|
||||
process.ErrorDataReceived += (_, e) =>
|
||||
{
|
||||
if (e.Data != null)
|
||||
{
|
||||
if (errorDataReceived != null)
|
||||
{
|
||||
errorDataReceived.Invoke(e.Data);
|
||||
}
|
||||
else
|
||||
{
|
||||
errorBuilder.AppendLine(e.Data);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var processLifetimeTask = new TaskCompletionSource<ProcessResult>();
|
||||
|
||||
process.Exited += (_, e) =>
|
||||
{
|
||||
Console.WriteLine($"'{process.StartInfo.FileName} {process.StartInfo.Arguments}' completed with exit code '{process.ExitCode}'");
|
||||
if (throwOnError && process.ExitCode != 0)
|
||||
{
|
||||
processLifetimeTask.TrySetException(new InvalidOperationException($"Command {filename} {arguments} returned exit code {process.ExitCode}"));
|
||||
}
|
||||
else
|
||||
{
|
||||
processLifetimeTask.TrySetResult(new ProcessResult(outputBuilder.ToString(), errorBuilder.ToString(), process.ExitCode));
|
||||
}
|
||||
};
|
||||
|
||||
process.Start();
|
||||
onStart?.Invoke(process.Id);
|
||||
|
||||
process.BeginOutputReadLine();
|
||||
process.BeginErrorReadLine();
|
||||
|
||||
var cancelledTcs = new TaskCompletionSource<object?>();
|
||||
await using var _ = cancellationToken.Register(() => cancelledTcs.TrySetResult(null));
|
||||
|
||||
var result = await Task.WhenAny(processLifetimeTask.Task, cancelledTcs.Task);
|
||||
|
||||
if (result == cancelledTcs.Task)
|
||||
{
|
||||
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
{
|
||||
sys_kill(process.Id, sig: 2); // SIGINT
|
||||
|
||||
var cancel = new CancellationTokenSource();
|
||||
|
||||
await Task.WhenAny(processLifetimeTask.Task, Task.Delay(TimeSpan.FromSeconds(5), cancel.Token));
|
||||
|
||||
cancel.Cancel();
|
||||
}
|
||||
|
||||
if (!process.HasExited)
|
||||
{
|
||||
process.CloseMainWindow();
|
||||
|
||||
if (!process.HasExited)
|
||||
{
|
||||
process.Kill();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return await processLifetimeTask.Task;
|
||||
}
|
||||
|
||||
public static void KillProcess(int pid)
|
||||
{
|
||||
try
|
||||
{
|
||||
using var process = Process.GetProcessById(pid);
|
||||
process?.Kill();
|
||||
}
|
||||
catch (ArgumentException) { }
|
||||
catch (InvalidOperationException) { }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.CommandLine;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RunTests
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static async Task Main(string[] args)
|
||||
{
|
||||
try
|
||||
{
|
||||
var runner = new TestRunner(RunTestsOptions.Parse(args));
|
||||
|
||||
var keepGoing = runner.SetupEnvironment();
|
||||
if (keepGoing)
|
||||
{
|
||||
keepGoing = await runner.InstallAspNetAppIfNeededAsync();
|
||||
}
|
||||
|
||||
runner.DisplayContents();
|
||||
|
||||
if (keepGoing)
|
||||
{
|
||||
if (!await runner.CheckTestDiscoveryAsync())
|
||||
{
|
||||
Console.WriteLine("RunTest stopping due to test discovery failure.");
|
||||
Environment.Exit(1);
|
||||
return;
|
||||
}
|
||||
|
||||
var exitCode = await runner.RunTestsAsync();
|
||||
runner.UploadResults();
|
||||
Console.WriteLine($"Completed Helix job with exit code '{exitCode}'");
|
||||
Environment.Exit(exitCode);
|
||||
}
|
||||
|
||||
Console.WriteLine("Tests were not run due to previous failures. Exit code=1");
|
||||
Environment.Exit(1);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine($"RunTests uncaught exception: {e.ToString()}");
|
||||
Environment.Exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>netcoreapp5.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="System.CommandLine" Version="2.0.0-beta1.20158.1" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.CommandLine;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RunTests
|
||||
{
|
||||
public class RunTestsOptions
|
||||
{
|
||||
public static RunTestsOptions Parse(string[] args)
|
||||
{
|
||||
var command = new RootCommand()
|
||||
{
|
||||
new Option(
|
||||
aliases: new string[] { "--target", "-t" },
|
||||
description: "The test dll to run")
|
||||
{ Argument = new Argument<string>(), Required = true },
|
||||
|
||||
new Option(
|
||||
aliases: new string[] { "--sdk" },
|
||||
description: "The version of the sdk being used")
|
||||
{ Argument = new Argument<string>(), Required = true },
|
||||
|
||||
new Option(
|
||||
aliases: new string[] { "--runtime" },
|
||||
description: "The version of the runtime being used")
|
||||
{ Argument = new Argument<string>(), Required = true },
|
||||
|
||||
new Option(
|
||||
aliases: new string[] { "--queue" },
|
||||
description: "The name of the Helix queue being run on")
|
||||
{ Argument = new Argument<string>(), Required = true },
|
||||
|
||||
new Option(
|
||||
aliases: new string[] { "--arch" },
|
||||
description: "The architecture being run on")
|
||||
{ Argument = new Argument<string>(), Required = true },
|
||||
|
||||
new Option(
|
||||
aliases: new string[] { "--quarantined" },
|
||||
description: "Whether quarantined tests should run or not")
|
||||
{ Argument = new Argument<bool>(), Required = true },
|
||||
|
||||
new Option(
|
||||
aliases: new string[] { "--ef" },
|
||||
description: "The version of the EF tool to use")
|
||||
{ Argument = new Argument<string>(), Required = true },
|
||||
};
|
||||
|
||||
var parseResult = command.Parse(args);
|
||||
var options = new RunTestsOptions();
|
||||
options.Target = parseResult.ValueForOption<string>("--target");
|
||||
options.SdkVersion = parseResult.ValueForOption<string>("--sdk");
|
||||
options.RuntimeVersion = parseResult.ValueForOption<string>("--runtime");
|
||||
options.HelixQueue = parseResult.ValueForOption<string>("--queue");
|
||||
options.Architecture = parseResult.ValueForOption<string>("--arch");
|
||||
options.Quarantined = parseResult.ValueForOption<bool>("--quarantined");
|
||||
options.EfVersion = parseResult.ValueForOption<string>("--ef");
|
||||
options.HELIX_WORKITEM_ROOT = Environment.GetEnvironmentVariable("HELIX_WORKITEM_ROOT");
|
||||
options.Path = Environment.GetEnvironmentVariable("PATH");
|
||||
options.DotnetRoot = Environment.GetEnvironmentVariable("DOTNET_ROOT");
|
||||
return options;
|
||||
}
|
||||
|
||||
public string Target { get; set;}
|
||||
public string SdkVersion { get; set;}
|
||||
public string RuntimeVersion { get; set;}
|
||||
public string HelixQueue { get; set;}
|
||||
public string Architecture { get; set;}
|
||||
public bool Quarantined { get; set;}
|
||||
public string EfVersion { get; set;}
|
||||
public string HELIX_WORKITEM_ROOT { get; set;}
|
||||
public string DotnetRoot { get; set; }
|
||||
public string Path { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,251 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.CommandLine;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RunTests
|
||||
{
|
||||
public class TestRunner
|
||||
{
|
||||
public TestRunner(RunTestsOptions options)
|
||||
{
|
||||
Options = options;
|
||||
EnvironmentVariables = new Dictionary<string, string>();
|
||||
}
|
||||
|
||||
public RunTestsOptions Options { get; set; }
|
||||
public Dictionary<string, string> EnvironmentVariables { get; set; }
|
||||
|
||||
public bool SetupEnvironment()
|
||||
{
|
||||
try
|
||||
{
|
||||
// Rename default.NuGet.config to NuGet.config if there is not a custom one from the project
|
||||
// We use a local NuGet.config file to avoid polluting global machine state and avoid relying on global machine state
|
||||
if (!File.Exists("NuGet.config"))
|
||||
{
|
||||
File.Copy("default.NuGet.config", "NuGet.config");
|
||||
}
|
||||
|
||||
EnvironmentVariables.Add("PATH", Options.Path);
|
||||
EnvironmentVariables.Add("DOTNET_ROOT", Options.DotnetRoot);
|
||||
EnvironmentVariables.Add("helix", Options.HelixQueue);
|
||||
|
||||
Console.WriteLine($"Current Directory: {Options.HELIX_WORKITEM_ROOT}");
|
||||
var helixDir = Options.HELIX_WORKITEM_ROOT;
|
||||
Console.WriteLine($"Setting HELIX_DIR: {helixDir}");
|
||||
EnvironmentVariables.Add("HELIX_DIR", helixDir);
|
||||
EnvironmentVariables.Add("NUGET_FALLBACK_PACKAGES", helixDir);
|
||||
var nugetRestore = Path.Combine(helixDir, "nugetRestore");
|
||||
EnvironmentVariables.Add("NUGET_RESTORE", nugetRestore);
|
||||
var dotnetEFFullPath = Path.Combine(nugetRestore, $"dotnet-ef/{Options.EfVersion}/tools/netcoreapp3.1/any/dotnet-ef.exe");
|
||||
Console.WriteLine($"Set DotNetEfFullPath: {dotnetEFFullPath}");
|
||||
EnvironmentVariables.Add("DotNetEfFullPath", dotnetEFFullPath);
|
||||
|
||||
Console.WriteLine($"Creating nuget restore directory: {nugetRestore}");
|
||||
Directory.CreateDirectory(nugetRestore);
|
||||
|
||||
// Rename default.runner.json to xunit.runner.json if there is not a custom one from the project
|
||||
if (!File.Exists("xunit.runner.json"))
|
||||
{
|
||||
File.Copy("default.runner.json", "xunit.runner.json");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine($"Exception in SetupEnvironment: {e.ToString()}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void DisplayContents()
|
||||
{
|
||||
try
|
||||
{
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("Displaying directory contents:");
|
||||
foreach (var file in Directory.EnumerateFiles("./"))
|
||||
{
|
||||
Console.WriteLine(Path.GetFileName(file));
|
||||
}
|
||||
foreach (var file in Directory.EnumerateDirectories("./"))
|
||||
{
|
||||
Console.WriteLine(Path.GetFileName(file));
|
||||
}
|
||||
Console.WriteLine();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine($"Exception in DisplayInitialState: {e.ToString()}");
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<bool> InstallAspNetAppIfNeededAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
Console.WriteLine("Checking for Microsoft.AspNetCore.App/");
|
||||
if (Directory.Exists("Microsoft.AspNetCore.App"))
|
||||
{
|
||||
var appRuntimePath = $"{Options.DotnetRoot}/shared/Microsoft.AspNetCore.App/{Options.RuntimeVersion}";
|
||||
Console.WriteLine($"Found Microsoft.AspNetCore.App/, copying to {appRuntimePath}");
|
||||
foreach (var file in Directory.EnumerateFiles("Microsoft.AspNetCore.App", "*.*", SearchOption.AllDirectories))
|
||||
{
|
||||
File.Copy(file, Path.Combine(appRuntimePath, file), overwrite: true);
|
||||
}
|
||||
|
||||
Console.WriteLine($"Adding current directory to nuget sources: {Options.HELIX_WORKITEM_ROOT}");
|
||||
|
||||
await ProcessUtil.RunAsync($"{Options.DotnetRoot}/dotnet",
|
||||
$"nuget add source {Options.HELIX_WORKITEM_ROOT} --configfile NuGet.config",
|
||||
environmentVariables: EnvironmentVariables);
|
||||
|
||||
await ProcessUtil.RunAsync($"{Options.DotnetRoot}/dotnet",
|
||||
"nuget add source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json --configfile NuGet.config",
|
||||
environmentVariables: EnvironmentVariables);
|
||||
|
||||
// Write nuget sources to console, useful for debugging purposes
|
||||
await ProcessUtil.RunAsync($"{Options.DotnetRoot}/dotnet",
|
||||
"nuget list source",
|
||||
environmentVariables: EnvironmentVariables,
|
||||
outputDataReceived: Console.WriteLine,
|
||||
errorDataReceived: Console.WriteLine);
|
||||
|
||||
await ProcessUtil.RunAsync($"{Options.DotnetRoot}/dotnet",
|
||||
$"tool install dotnet-ef --global --version {Options.EfVersion}",
|
||||
environmentVariables: EnvironmentVariables);
|
||||
|
||||
// ';' is the path separator on Windows, and ':' on Unix
|
||||
Options.Path += RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ";" : ":";
|
||||
Options.Path += $"{Environment.GetEnvironmentVariable("DOTNET_CLI_HOME")}/.dotnet/tools";
|
||||
EnvironmentVariables["PATH"] = Options.Path;
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"No app runtime found, skipping...");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine($"Exception in InstallAspNetAppIfNeeded: {e.ToString()}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<bool> CheckTestDiscoveryAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
// Run test discovery so we know if there are tests to run
|
||||
var discoveryResult = await ProcessUtil.RunAsync($"{Options.DotnetRoot}/dotnet",
|
||||
$"vstest {Options.Target} -lt",
|
||||
environmentVariables: EnvironmentVariables);
|
||||
|
||||
if (discoveryResult.StandardOutput.Contains("Exception thrown"))
|
||||
{
|
||||
Console.WriteLine("Exception thrown during test discovery.");
|
||||
Console.WriteLine(discoveryResult.StandardOutput);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine($"Exception in CheckTestDiscovery: {e.ToString()}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<int> RunTestsAsync()
|
||||
{
|
||||
var exitCode = 0;
|
||||
try
|
||||
{
|
||||
var commonTestArgs = $"vstest {Options.Target} --logger:xunit --logger:\"console;verbosity=normal\" --blame";
|
||||
if (Options.Quarantined)
|
||||
{
|
||||
Console.WriteLine("Running quarantined tests.");
|
||||
|
||||
// Filter syntax: https://github.com/Microsoft/vstest-docs/blob/master/docs/filter.md
|
||||
var result = await ProcessUtil.RunAsync($"{Options.DotnetRoot}/dotnet",
|
||||
commonTestArgs + " --TestCaseFilter:\"Quarantined=true\"",
|
||||
environmentVariables: EnvironmentVariables,
|
||||
outputDataReceived: Console.WriteLine,
|
||||
errorDataReceived: Console.WriteLine,
|
||||
throwOnError: false);
|
||||
|
||||
if (result.ExitCode != 0)
|
||||
{
|
||||
Console.WriteLine($"Failure in quarantined tests. Exit code: {result.ExitCode}.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Running non-quarantined tests.");
|
||||
|
||||
// Filter syntax: https://github.com/Microsoft/vstest-docs/blob/master/docs/filter.md
|
||||
var result = await ProcessUtil.RunAsync($"{Options.DotnetRoot}/dotnet",
|
||||
commonTestArgs + " --TestCaseFilter:\"Quarantined!=true\"",
|
||||
environmentVariables: EnvironmentVariables,
|
||||
outputDataReceived: Console.WriteLine,
|
||||
errorDataReceived: Console.Error.WriteLine,
|
||||
throwOnError: false);
|
||||
|
||||
if (result.ExitCode != 0)
|
||||
{
|
||||
Console.WriteLine($"Failure in non-quarantined tests. Exit code: {result.ExitCode}.");
|
||||
exitCode = result.ExitCode;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine($"Exception in RunTests: {e.ToString()}");
|
||||
exitCode = 1;
|
||||
}
|
||||
return exitCode;
|
||||
}
|
||||
|
||||
public void UploadResults()
|
||||
{
|
||||
// 'testResults.xml' is the file Helix looks for when processing test results
|
||||
Console.WriteLine("Trying to upload results...");
|
||||
if (File.Exists("TestResults/TestResults.xml"))
|
||||
{
|
||||
Console.WriteLine("Copying TestResults/TestResults.xml to ./testResults.xml");
|
||||
File.Copy("TestResults/TestResults.xml", "testResults.xml");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("No test results found.");
|
||||
}
|
||||
|
||||
var HELIX_WORKITEM_UPLOAD_ROOT = Environment.GetEnvironmentVariable("HELIX_WORKITEM_UPLOAD_ROOT");
|
||||
Console.WriteLine($"Copying artifacts/log/ to {HELIX_WORKITEM_UPLOAD_ROOT}/");
|
||||
if (Directory.Exists("artifacts/log"))
|
||||
{
|
||||
foreach (var file in Directory.EnumerateFiles("artifacts/log", "*.log", SearchOption.AllDirectories))
|
||||
{
|
||||
// Combine the directory name + log name for the copied log file name to avoid overwriting duplicate test names in different test projects
|
||||
var logName = $"{Path.GetFileName(Path.GetDirectoryName(file))}_{Path.GetFileName(file)}";
|
||||
Console.WriteLine($"Copying: {file} to {Path.Combine(HELIX_WORKITEM_UPLOAD_ROOT, logName)}");
|
||||
// Need to copy to HELIX_WORKITEM_UPLOAD_ROOT and HELIX_WORKITEM_UPLOAD_ROOT/../ in order for Azure Devops attachments to link properly and for Helix to store the logs
|
||||
File.Copy(file, Path.Combine(HELIX_WORKITEM_UPLOAD_ROOT, logName));
|
||||
File.Copy(file, Path.Combine(HELIX_WORKITEM_UPLOAD_ROOT, "..", logName));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("No logs found in artifacts/log");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<packageSources>
|
||||
<clear />
|
||||
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
|
||||
</packageSources>
|
||||
</configuration>
|
||||
|
|
@ -3,13 +3,9 @@ REM Need delayed expansion !PATH! so parens in the path don't mess up the parens
|
|||
setlocal enabledelayedexpansion
|
||||
|
||||
REM Use '$' as a variable name prefix to avoid MSBuild variable collisions with these variables
|
||||
set $target=%1
|
||||
set $sdkVersion=%2
|
||||
set $runtimeVersion=%3
|
||||
set $helixQueue=%4
|
||||
set $arch=%5
|
||||
set $quarantined=%6
|
||||
set $efVersion=%7
|
||||
|
||||
set DOTNET_HOME=%HELIX_CORRELATION_PAYLOAD%\sdk
|
||||
set DOTNET_ROOT=%DOTNET_HOME%\%$arch%
|
||||
|
|
@ -23,84 +19,14 @@ echo "Installing SDK"
|
|||
powershell.exe -NoProfile -ExecutionPolicy unrestricted -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -useb 'https://dot.net/v1/dotnet-install.ps1'))) -Architecture %$arch% -Version %$sdkVersion% -InstallDir %DOTNET_ROOT%"
|
||||
echo "Installing Runtime"
|
||||
powershell.exe -NoProfile -ExecutionPolicy unrestricted -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -useb 'https://dot.net/v1/dotnet-install.ps1'))) -Architecture %$arch% -Runtime dotnet -Version %$runtimeVersion% -InstallDir %DOTNET_ROOT%"
|
||||
echo "Checking for Microsoft.AspNetCore.App"
|
||||
if EXIST ".\Microsoft.AspNetCore.App" (
|
||||
echo "Found Microsoft.AspNetCore.App, copying to %DOTNET_ROOT%\shared\Microsoft.AspNetCore.App\%runtimeVersion%"
|
||||
xcopy /i /y ".\Microsoft.AspNetCore.App" %DOTNET_ROOT%\shared\Microsoft.AspNetCore.App\%runtimeVersion%\
|
||||
|
||||
echo "Adding current directory to nuget sources: %HELIX_WORKITEM_ROOT%"
|
||||
dotnet nuget add source %HELIX_WORKITEM_ROOT%
|
||||
dotnet nuget add source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json
|
||||
dotnet nuget list source
|
||||
dotnet tool install dotnet-ef --global --version %$efVersion%
|
||||
|
||||
set PATH=!PATH!;%DOTNET_CLI_HOME%\.dotnet\tools
|
||||
)
|
||||
|
||||
echo "Current Directory: %HELIX_WORKITEM_ROOT%"
|
||||
set HELIX=%$helixQueue%
|
||||
set HELIX_DIR=%HELIX_WORKITEM_ROOT%
|
||||
set NUGET_FALLBACK_PACKAGES=%HELIX_DIR%
|
||||
set NUGET_RESTORE=%HELIX_DIR%\nugetRestore
|
||||
set DotNetEfFullPath=%HELIX_DIR%\nugetRestore\dotnet-ef\%$efVersion%\tools\netcoreapp3.1\any\dotnet-ef.exe
|
||||
echo "Set DotNetEfFullPath: %DotNetEfFullPath%"
|
||||
echo "Setting HELIX_DIR: %HELIX_DIR%"
|
||||
echo Creating nuget restore directory: %NUGET_RESTORE%
|
||||
mkdir %NUGET_RESTORE%
|
||||
mkdir logs
|
||||
|
||||
REM "Rename default.runner.json to xunit.runner.json if there is not a custom one from the project"
|
||||
if not EXIST ".\xunit.runner.json" (
|
||||
copy default.runner.json xunit.runner.json
|
||||
)
|
||||
|
||||
dir
|
||||
|
||||
%DOTNET_ROOT%\dotnet vstest %$target% -lt >discovered.txt
|
||||
find /c "Exception thrown" discovered.txt
|
||||
REM "ERRORLEVEL is not %ERRORLEVEL%" https://blogs.msdn.microsoft.com/oldnewthing/20080926-00/?p=20743/
|
||||
if not errorlevel 1 (
|
||||
echo Exception thrown during test discovery. 1>&2
|
||||
type discovered.txt 1>&2
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
set exit_code=0
|
||||
|
||||
if %$quarantined%==True (
|
||||
set %$quarantined=true
|
||||
echo "Restore for RunTests..."
|
||||
dotnet restore RunTests\RunTests.csproj --source https://api.nuget.org/v3/index.json --ignore-failed-sources
|
||||
echo "Running tests..."
|
||||
dotnet run --project RunTests\RunTests.csproj -- --target %1 --sdk %2 --runtime %3 --queue %4 --arch %5 --quarantined %6 --ef %7
|
||||
if errorlevel 1 (
|
||||
set exit_code=1
|
||||
)
|
||||
|
||||
REM Disable "!Foo!" expansions because they break the filter syntax
|
||||
setlocal disabledelayedexpansion
|
||||
set NONQUARANTINE_FILTER="Quarantined!=true"
|
||||
set QUARANTINE_FILTER="Quarantined=true"
|
||||
if %$quarantined%==true (
|
||||
echo Running quarantined tests.
|
||||
%DOTNET_ROOT%\dotnet vstest %$target% --logger:xunit --logger:"console;verbosity=normal" --blame --TestCaseFilter:%QUARANTINE_FILTER%
|
||||
if errorlevel 1 (
|
||||
echo Failure in quarantined test 1>&2
|
||||
REM DO NOT EXIT and DO NOT SET EXIT_CODE to 1
|
||||
)
|
||||
) else (
|
||||
REM Filter syntax: https://github.com/Microsoft/vstest-docs/blob/master/docs/filter.md
|
||||
echo Running non-quarantined tests.
|
||||
%DOTNET_ROOT%\dotnet vstest %$target% --logger:xunit --logger:"console;verbosity=normal" --blame --TestCaseFilter:%NONQUARANTINE_FILTER%
|
||||
if errorlevel 1 (
|
||||
echo Failure in non-quarantined test 1>&2
|
||||
set exit_code=1
|
||||
REM DO NOT EXIT
|
||||
)
|
||||
)
|
||||
|
||||
echo "Copying TestResults\TestResults.xml to ."
|
||||
copy TestResults\TestResults.xml testResults.xml
|
||||
echo "Copying artifacts/logs to %HELIX_WORKITEM_UPLOAD_ROOT%\..\"
|
||||
for /R artifacts/log %%f in (*.log) do (
|
||||
echo "Copying: %%f"
|
||||
copy "%%f" %HELIX_WORKITEM_UPLOAD_ROOT%\..\
|
||||
copy "%%f" %HELIX_WORKITEM_UPLOAD_ROOT%\
|
||||
)
|
||||
|
||||
echo "Finished running tests: exit_code=%exit_code%"
|
||||
exit /b %exit_code%
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,7 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
test_binary_path="$1"
|
||||
dotnet_sdk_version="$2"
|
||||
dotnet_runtime_version="$3"
|
||||
helix_queue_name="$4"
|
||||
target_arch="$5"
|
||||
quarantined="$6"
|
||||
efVersion="$7"
|
||||
|
||||
RESET="\033[0m"
|
||||
RED="\033[0;31m"
|
||||
|
|
@ -30,19 +25,6 @@ export DOTNET_CLI_HOME="$DIR/.home$RANDOM"
|
|||
|
||||
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
|
||||
|
||||
# Used by SkipOnHelix attribute
|
||||
export helix="$helix_queue_name"
|
||||
export HELIX_DIR="$DIR"
|
||||
export NUGET_FALLBACK_PACKAGES="$DIR"
|
||||
export DotNetEfFullPath=$DIR\nugetRestore\dotnet-ef\$efVersion\tools\netcoreapp3.1\any\dotnet-ef.dll
|
||||
echo "Set DotNetEfFullPath: $DotNetEfFullPath"
|
||||
export NUGET_RESTORE="$DIR/nugetRestore"
|
||||
echo "Creating nugetRestore directory: $NUGET_RESTORE"
|
||||
mkdir $NUGET_RESTORE
|
||||
mkdir logs
|
||||
|
||||
ls -laR
|
||||
|
||||
RESET="\033[0m"
|
||||
RED="\033[0;31m"
|
||||
YELLOW="\033[0;33m"
|
||||
|
|
@ -93,29 +75,6 @@ if [ $? -ne 0 ]; then
|
|||
done
|
||||
fi
|
||||
|
||||
# Copy over any local shared fx if found
|
||||
if [ -d "Microsoft.AspNetCore.App" ]
|
||||
then
|
||||
echo "Found Microsoft.AspNetCore.App directory, copying to $DOTNET_ROOT/shared/Microsoft.AspNetCore.App/$dotnet_runtime_version."
|
||||
cp -r Microsoft.AspNetCore.App $DOTNET_ROOT/shared/Microsoft.AspNetCore.App/$dotnet_runtime_version
|
||||
|
||||
echo "Adding current directory to nuget sources: $DIR"
|
||||
dotnet nuget add source $DIR
|
||||
dotnet nuget add source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json
|
||||
dotnet nuget list source
|
||||
|
||||
dotnet tool install dotnet-ef --global --version $efVersion
|
||||
|
||||
# Ensure tools are on on PATH
|
||||
export PATH="$PATH:$DOTNET_CLI_HOME/.dotnet/tools"
|
||||
fi
|
||||
|
||||
# Rename default.runner.json to xunit.runner.json if there is not a custom one from the project
|
||||
if [ ! -f "xunit.runner.json" ]
|
||||
then
|
||||
cp default.runner.json xunit.runner.json
|
||||
fi
|
||||
|
||||
if [ -e /proc/self/coredump_filter ]; then
|
||||
# Include memory in private and shared file-backed mappings in the dump.
|
||||
# This ensures that we can see disassembly from our shared libraries when
|
||||
|
|
@ -123,40 +82,14 @@ if [ -e /proc/self/coredump_filter ]; then
|
|||
echo -n 0x3F > /proc/self/coredump_filter
|
||||
fi
|
||||
|
||||
# dontet-install.sh seems to affect the Linux filesystem and causes test flakiness unless we sync the filesystem before running tests
|
||||
sync
|
||||
|
||||
$DOTNET_ROOT/dotnet vstest $test_binary_path -lt >discovered.txt
|
||||
if grep -q "Exception thrown" discovered.txt; then
|
||||
echo -e "${RED}Exception thrown during test discovery${RESET}".
|
||||
cat discovered.txt
|
||||
exit 1
|
||||
fi
|
||||
|
||||
exit_code=0
|
||||
|
||||
# Filter syntax: https://github.com/Microsoft/vstest-docs/blob/master/docs/filter.md
|
||||
NONQUARANTINE_FILTER="Quarantined!=true"
|
||||
QUARANTINE_FILTER="Quarantined=true"
|
||||
if [ "$quarantined" == true ]; then
|
||||
echo "Running all tests including quarantined."
|
||||
$DOTNET_ROOT/dotnet vstest $test_binary_path --logger:xunit --logger:"console;verbosity=normal" --blame --TestCaseFilter:"$QUARANTINE_FILTER"
|
||||
if [ $? != 0 ]; then
|
||||
echo "Quarantined tests failed!" 1>&2
|
||||
# DO NOT EXIT
|
||||
fi
|
||||
else
|
||||
echo "Running non-quarantined tests."
|
||||
$DOTNET_ROOT/dotnet vstest $test_binary_path --logger:xunit --logger:"console;verbosity=normal" --blame --TestCaseFilter:"$NONQUARANTINE_FILTER"
|
||||
exit_code=$?
|
||||
if [ $exit_code != 0 ]; then
|
||||
echo "Non-quarantined tests failed!" 1>&2
|
||||
# DO NOT EXIT
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Copying TestResults/TestResults to ."
|
||||
cp TestResults/TestResults.xml testResults.xml
|
||||
echo "Copying artifacts/logs to $HELIX_WORKITEM_UPLOAD_ROOT/"
|
||||
cp `find . -name \*.log` $HELIX_WORKITEM_UPLOAD_ROOT/../
|
||||
cp `find . -name \*.log` $HELIX_WORKITEM_UPLOAD_ROOT/
|
||||
echo "Restore for RunTests..."
|
||||
$DOTNET_ROOT/dotnet restore RunTests/RunTests.csproj --source https://api.nuget.org/v3/index.json --ignore-failed-sources
|
||||
echo "Running tests..."
|
||||
$DOTNET_ROOT/dotnet run --project RunTests/RunTests.csproj -- --target $1 --sdk $2 --runtime $3 --queue $4 --arch $5 --quarantined $6 --ef $7
|
||||
exit_code = $?
|
||||
echo "Finished tests...exit_code=$exit_code"
|
||||
exit $exit_code
|
||||
|
|
|
|||
|
|
@ -38,6 +38,15 @@ function _killSeleniumTrackedProcesses() {
|
|||
}
|
||||
}
|
||||
|
||||
function _listProcesses($processName) {
|
||||
$processes = Get-WmiObject win32_process -Filter "name like '%$processName'" -ErrorAction SilentlyContinue;
|
||||
if ($processes) {
|
||||
Write-Host "These processes will be killed..."
|
||||
$processes | select commandline | Out-String -Width 800
|
||||
}
|
||||
}
|
||||
|
||||
_listProcesses dotnet
|
||||
_kill dotnet.exe
|
||||
_kill testhost.exe
|
||||
_kill iisexpress.exe
|
||||
|
|
|
|||
|
|
@ -1,4 +1,12 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# list processes that would be killed so they appear in the log
|
||||
p=$(pgrep dotnet)
|
||||
if [ $? -eq 0 ]
|
||||
then
|
||||
echo "These processes will be killed..."
|
||||
ps -p $p
|
||||
fi
|
||||
|
||||
pkill dotnet || true
|
||||
exit 0
|
||||
|
|
|
|||
|
|
@ -7,11 +7,8 @@
|
|||
],
|
||||
"add": [
|
||||
"Microsoft.Net.Component.4.6.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.6.2.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.2.SDK",
|
||||
"Microsoft.Net.Component.4.7.2.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.TargetingPack",
|
||||
"Microsoft.VisualStudio.Component.FSharp.MSBuild",
|
||||
"Microsoft.VisualStudio.Component.NuGet",
|
||||
"Microsoft.VisualStudio.Component.NuGet.BuildTools",
|
||||
|
|
|
|||
|
|
@ -7,11 +7,8 @@
|
|||
],
|
||||
"add": [
|
||||
"Microsoft.Net.Component.4.6.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.6.2.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.2.SDK",
|
||||
"Microsoft.Net.Component.4.7.2.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.TargetingPack",
|
||||
"Microsoft.VisualStudio.Component.FSharp.MSBuild",
|
||||
"Microsoft.VisualStudio.Component.NuGet",
|
||||
"Microsoft.VisualStudio.Component.NuGet.BuildTools",
|
||||
|
|
|
|||
|
|
@ -7,12 +7,8 @@
|
|||
],
|
||||
"add": [
|
||||
"Microsoft.Net.Component.4.6.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.6.2.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.2.SDK",
|
||||
"Microsoft.Net.Component.4.7.2.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.TargetingPack",
|
||||
"Microsoft.VisualStudio.Component.Azure.Storage.Emulator",
|
||||
"Microsoft.VisualStudio.Component.VC.ATL",
|
||||
"Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
|
||||
"Microsoft.VisualStudio.Component.Windows10SDK.17134",
|
||||
|
|
|
|||
|
|
@ -7,12 +7,8 @@
|
|||
],
|
||||
"add": [
|
||||
"Microsoft.Net.Component.4.6.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.6.2.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.2.SDK",
|
||||
"Microsoft.Net.Component.4.7.2.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.TargetingPack",
|
||||
"Microsoft.VisualStudio.Component.Azure.Storage.Emulator",
|
||||
"Microsoft.VisualStudio.Component.VC.ATL",
|
||||
"Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
|
||||
"Microsoft.VisualStudio.Component.Windows10SDK.17134",
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
<ItemGroup Condition="'$(IsRequiredCheck)' == 'true' AND '$(TargetArchitecture)' == 'x64'">
|
||||
<HelixAvailableTargetQueue Include="Ubuntu.1604.Amd64.Open" Platform="Linux" />
|
||||
<HelixAvailableTargetQueue Include="Windows.10.Amd64.Open" Platform="Windows" />
|
||||
<HelixAvailableTargetQueue Include="OSX.1014.Amd64.Open" Platform="Linux" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- daily scheduled only queues -->
|
||||
|
|
|
|||
|
|
@ -216,16 +216,16 @@
|
|||
Condition=" '$(CompileUsingReferenceAssemblies)' != false AND '$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' ">true</_CompileTfmUsingReferenceAssemblies>
|
||||
</PropertyGroup>
|
||||
<!--
|
||||
If we have a ref/ assembly from Extensions for a package, use that when compiling. The build-only reference to
|
||||
Microsoft.Internal.Extensions.Refs ensures package is installed and $(MicrosoftInternalExtensionsRefsPath) is set.
|
||||
If we have a ref/ assembly from dotnet/runtime for an Extension package, use that when compiling but do not reference its assemblies.
|
||||
-->
|
||||
<ItemGroup
|
||||
Condition=" $(_CompileTfmUsingReferenceAssemblies) OR ('$(IsTargetingPackBuilding)' != 'false' AND '$(MSBuildProjectName)' == 'Microsoft.AspNetCore.App.Ref') ">
|
||||
<PackageReference Include="Microsoft.Internal.Extensions.Refs"
|
||||
Version="$(MicrosoftInternalExtensionsRefsPackageVersion)"
|
||||
<PackageReference Include="Microsoft.Extensions.Internal.Transport"
|
||||
Version="$(MicrosoftExtensionsInternalTransportPackageVersion)"
|
||||
IsImplicitlyDefined="true"
|
||||
IncludeAssets="Build"
|
||||
PrivateAssets="All" />
|
||||
IncludeAssets="Compile"
|
||||
PrivateAssets="All"
|
||||
GeneratePathProperty="true" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- These targets are used to generate the map of assembly name to project files. See also the /t:GenerateProjectList target in build/repo.targets. -->
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.Net.Component.4.6.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.2.SDK",
|
||||
"Microsoft.Net.Component.4.7.2.TargetingPack",
|
||||
"Microsoft.VisualStudio.Workload.ManagedDesktop",
|
||||
"Microsoft.VisualStudio.Workload.NetCoreTools",
|
||||
"Microsoft.VisualStudio.Workload.NetWeb",
|
||||
"Microsoft.VisualStudio.Workload.VisualStudioExtension"
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.Net.Component.4.6.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.2.SDK",
|
||||
"Microsoft.Net.Component.4.7.2.TargetingPack",
|
||||
"Microsoft.VisualStudio.Workload.ManagedDesktop",
|
||||
"Microsoft.VisualStudio.Workload.NetCoreTools",
|
||||
"Microsoft.VisualStudio.Workload.NetWeb",
|
||||
"Microsoft.VisualStudio.Workload.VisualStudioExtension"
|
||||
]
|
||||
}
|
||||
|
|
@ -12,9 +12,9 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\src\Microsoft.AspNetCore.Analyzers.csproj" />
|
||||
<ProjectReference Include="$(RepoRoot)src\Analyzers\Analyzers\src\Microsoft.AspNetCore.Analyzers.csproj" />
|
||||
<ProjectReference Include="$(RepoRoot)src\Analyzers\Microsoft.AspNetCore.Analyzer.Testing\src\Microsoft.AspNetCore.Analyzer.Testing.csproj" />
|
||||
|
||||
<Reference Include="Microsoft.AspNetCore.Analyzer.Testing" />
|
||||
<Reference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" />
|
||||
|
||||
<!--
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<Description>ASP.NET Core internal use analyzers.</Description>
|
||||
<TargetFramework>netstandard1.3</TargetFramework>
|
||||
<PackageTags>$(PackageTags);analyzers</PackageTags>
|
||||
<NoWarn>$(NoWarn);CS1591</NoWarn>
|
||||
<BuildOutputTargetFolder>analyzers/dotnet/cs/</BuildOutputTargetFolder>
|
||||
<!--
|
||||
Except for analyzer unit tests, analyzers should not be referenced by other projects in this repo. Analyzers cannot be used as
|
||||
a project reference. The SDK currently only supports using analyzers as a PackageReference. This flag prevents this project from
|
||||
being used as a `<Reference>`, which indicates that a reference is interchangeable between ProjectRef and PackageRef.
|
||||
-->
|
||||
<IsProjectReferenceProvider>false</IsProjectReferenceProvider>
|
||||
<UseLatestPackageReferences>true</UseLatestPackageReferences>
|
||||
<SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>
|
||||
<IsPackable>true</IsPackable>
|
||||
<!-- This project needs an older version of M.CA.CSharp.Workspaces since it targets netstandard1.3 -->
|
||||
<DisablePackageReferenceRestrictions>true</DisablePackageReferenceRestrictions>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="2.8.0" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,279 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements.
|
||||
// The .NET Foundation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System.Collections.Immutable;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CSharp;
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
using Microsoft.CodeAnalysis.Diagnostics;
|
||||
|
||||
namespace Internal.AspNetCore.Analyzers
|
||||
{
|
||||
[DiagnosticAnalyzer(LanguageNames.CSharp)]
|
||||
public class PubternalityAnalyzer : DiagnosticAnalyzer
|
||||
{
|
||||
public PubternalityAnalyzer()
|
||||
{
|
||||
SupportedDiagnostics = ImmutableArray.Create(new[]
|
||||
{
|
||||
PubturnalityDescriptors.PUB0001,
|
||||
PubturnalityDescriptors.PUB0002
|
||||
});
|
||||
}
|
||||
|
||||
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; }
|
||||
|
||||
public override void Initialize(AnalysisContext context)
|
||||
{
|
||||
context.EnableConcurrentExecution();
|
||||
|
||||
context.RegisterCompilationStartAction(analysisContext =>
|
||||
{
|
||||
analysisContext.RegisterSymbolAction(symbolAnalysisContext => AnalyzeTypeUsage(symbolAnalysisContext), SymbolKind.Namespace);
|
||||
analysisContext.RegisterSyntaxNodeAction(syntaxContext => AnalyzeTypeUsage(syntaxContext), SyntaxKind.IdentifierName);
|
||||
});
|
||||
}
|
||||
|
||||
private void AnalyzeTypeUsage(SymbolAnalysisContext context)
|
||||
{
|
||||
var ns = (INamespaceSymbol)context.Symbol;
|
||||
if (IsInternal(ns))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var namespaceOrTypeSymbol in ns.GetMembers())
|
||||
{
|
||||
if (namespaceOrTypeSymbol.IsType)
|
||||
{
|
||||
CheckType((ITypeSymbol)namespaceOrTypeSymbol, context);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckType(ITypeSymbol typeSymbol, SymbolAnalysisContext context)
|
||||
{
|
||||
if (IsPrivate(typeSymbol) || IsPrivate(typeSymbol.ContainingType))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (typeSymbol.BaseType != null)
|
||||
{
|
||||
CheckType(context, typeSymbol.BaseType, typeSymbol.DeclaringSyntaxReferences);
|
||||
}
|
||||
|
||||
foreach (var member in typeSymbol.GetMembers())
|
||||
{
|
||||
CheckMember(context, member);
|
||||
}
|
||||
|
||||
foreach (var innerType in typeSymbol.GetTypeMembers())
|
||||
{
|
||||
CheckType(innerType, context);
|
||||
}
|
||||
|
||||
if (typeSymbol is INamedTypeSymbol namedTypeSymbol)
|
||||
{
|
||||
// Check delegate signatures
|
||||
if (namedTypeSymbol.DelegateInvokeMethod != null)
|
||||
{
|
||||
CheckMethod(context, namedTypeSymbol.DelegateInvokeMethod);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckMember(SymbolAnalysisContext context, ISymbol symbol)
|
||||
{
|
||||
if (IsPrivate(symbol))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (symbol)
|
||||
{
|
||||
case IFieldSymbol fieldSymbol:
|
||||
{
|
||||
CheckType(context, fieldSymbol.Type, fieldSymbol.DeclaringSyntaxReferences);
|
||||
break;
|
||||
}
|
||||
case IPropertySymbol propertySymbol:
|
||||
{
|
||||
CheckType(context, propertySymbol.Type, propertySymbol.DeclaringSyntaxReferences);
|
||||
break;
|
||||
}
|
||||
case IMethodSymbol methodSymbol:
|
||||
{
|
||||
// Skip compiler generated members that we already explicitly check
|
||||
switch (methodSymbol.MethodKind)
|
||||
{
|
||||
case MethodKind.EventAdd:
|
||||
case MethodKind.EventRaise:
|
||||
case MethodKind.EventRemove:
|
||||
case MethodKind.PropertyGet:
|
||||
case MethodKind.PropertySet:
|
||||
case MethodKind.DelegateInvoke:
|
||||
case MethodKind.Ordinary when methodSymbol.ContainingType.TypeKind == TypeKind.Delegate:
|
||||
return;
|
||||
}
|
||||
|
||||
CheckMethod(context, methodSymbol);
|
||||
break;
|
||||
}
|
||||
case IEventSymbol eventSymbol:
|
||||
CheckType(context, eventSymbol.Type, eventSymbol.DeclaringSyntaxReferences);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckMethod(SymbolAnalysisContext context, IMethodSymbol methodSymbol)
|
||||
{
|
||||
if (IsPrivate(methodSymbol))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var parameter in methodSymbol.Parameters)
|
||||
{
|
||||
CheckType(context, parameter.Type, parameter.DeclaringSyntaxReferences);
|
||||
}
|
||||
|
||||
CheckType(context, methodSymbol.ReturnType, methodSymbol.DeclaringSyntaxReferences);
|
||||
}
|
||||
|
||||
private static bool IsPrivate(ISymbol symbol)
|
||||
{
|
||||
return symbol != null &&
|
||||
(symbol.DeclaredAccessibility == Accessibility.Private ||
|
||||
symbol.DeclaredAccessibility == Accessibility.Internal ||
|
||||
IsInternal(symbol.ContainingNamespace));
|
||||
}
|
||||
|
||||
private void CheckAttributes(SymbolAnalysisContext context, ImmutableArray<AttributeData> attributes)
|
||||
{
|
||||
foreach (var attributeData in attributes)
|
||||
{
|
||||
CheckType(context, attributeData.AttributeClass, attributeData.ApplicationSyntaxReference);
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckType(SymbolAnalysisContext context, ITypeSymbol symbol, SyntaxReference syntax)
|
||||
{
|
||||
var pubternalType = GetPubternalType(symbol);
|
||||
if (pubternalType != null)
|
||||
{
|
||||
ReportPUB0001(context, pubternalType, syntax);
|
||||
}
|
||||
}
|
||||
private void CheckType(SymbolAnalysisContext context, ITypeSymbol symbol, ImmutableArray<SyntaxReference> syntaxReferences)
|
||||
{
|
||||
var pubternalType = GetPubternalType(symbol);
|
||||
if (pubternalType != null)
|
||||
{
|
||||
foreach (var syntaxReference in syntaxReferences)
|
||||
{
|
||||
ReportPUB0001(context, pubternalType, syntaxReference);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void ReportPUB0001(SymbolAnalysisContext context, ITypeSymbol pubternalType, SyntaxReference syntax)
|
||||
{
|
||||
var syntaxNode = syntax.GetSyntax();
|
||||
var location = syntaxNode.GetLocation();
|
||||
|
||||
if (syntaxNode is BaseTypeDeclarationSyntax baseTypeDeclarationSyntax)
|
||||
{
|
||||
location = baseTypeDeclarationSyntax.Identifier.GetLocation();
|
||||
}
|
||||
|
||||
if (syntaxNode is DelegateDeclarationSyntax delegateDeclarationSyntax)
|
||||
{
|
||||
location = delegateDeclarationSyntax.ReturnType.GetLocation();
|
||||
}
|
||||
|
||||
if (syntaxNode is BasePropertyDeclarationSyntax propertyDeclaration)
|
||||
{
|
||||
location = propertyDeclaration.Type.GetLocation();
|
||||
}
|
||||
|
||||
if (syntaxNode is MethodDeclarationSyntax method)
|
||||
{
|
||||
location = method.ReturnType.GetLocation();
|
||||
}
|
||||
|
||||
if (syntaxNode is VariableDeclaratorSyntax variableDeclarator)
|
||||
{
|
||||
if (variableDeclarator.Parent is VariableDeclarationSyntax fieldDeclaration)
|
||||
{
|
||||
location = fieldDeclaration.Type.GetLocation();
|
||||
}
|
||||
}
|
||||
|
||||
context.ReportDiagnostic(Diagnostic.Create(PubturnalityDescriptors.PUB0001, location, pubternalType.ToDisplayString()));
|
||||
}
|
||||
|
||||
private ITypeSymbol GetPubternalType(ITypeSymbol symbol)
|
||||
{
|
||||
if (IsInternal(symbol.ContainingNamespace))
|
||||
{
|
||||
return symbol;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (symbol is INamedTypeSymbol namedTypeSymbol && namedTypeSymbol.IsGenericType)
|
||||
{
|
||||
foreach (var argument in namedTypeSymbol.TypeArguments)
|
||||
{
|
||||
var argumentSymbol = GetPubternalType(argument);
|
||||
if (argumentSymbol != null)
|
||||
{
|
||||
return argumentSymbol;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private void AnalyzeTypeUsage(SyntaxNodeAnalysisContext syntaxContext)
|
||||
{
|
||||
var identifier = (IdentifierNameSyntax)syntaxContext.Node;
|
||||
|
||||
var symbolInfo = ModelExtensions.GetTypeInfo(syntaxContext.SemanticModel, identifier, syntaxContext.CancellationToken);
|
||||
if (symbolInfo.Type == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var type = symbolInfo.Type;
|
||||
if (!IsInternal(type.ContainingNamespace))
|
||||
{
|
||||
// don't care about non-pubternal type references
|
||||
return;
|
||||
}
|
||||
|
||||
if (!syntaxContext.ContainingSymbol.ContainingAssembly.Equals(type.ContainingAssembly))
|
||||
{
|
||||
syntaxContext.ReportDiagnostic(Diagnostic.Create(PubturnalityDescriptors.PUB0002, identifier.GetLocation(), type.ToDisplayString()));
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsInternal(INamespaceSymbol ns)
|
||||
{
|
||||
while (ns != null)
|
||||
{
|
||||
if (ns.Name == "Internal")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
ns = ns.ContainingNamespace;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements.
|
||||
// The .NET Foundation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using Microsoft.CodeAnalysis;
|
||||
|
||||
namespace Internal.AspNetCore.Analyzers
|
||||
{
|
||||
internal class PubturnalityDescriptors
|
||||
{
|
||||
public static DiagnosticDescriptor PUB0001 = new DiagnosticDescriptor(
|
||||
"PUB0001",
|
||||
"Pubternal type in public API",
|
||||
"Pubternal type ('{0}') usage in public API",
|
||||
"Usage",
|
||||
DiagnosticSeverity.Warning, true);
|
||||
|
||||
public static DiagnosticDescriptor PUB0002 = new DiagnosticDescriptor(
|
||||
"PUB0002",
|
||||
"Cross assembly pubternal reference",
|
||||
"Cross assembly pubternal type ('{0}') reference",
|
||||
"Usage",
|
||||
DiagnosticSeverity.Error, false);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>$(DefaultNetCoreTargetFramework);net472</TargetFrameworks>
|
||||
<PreserveCompilationContext>true</PreserveCompilationContext>
|
||||
<!-- Analyzers tests can't find netfx ref assemblies from a package -->
|
||||
<UsingToolNetFrameworkReferenceAssemblies Condition="'$(OS)' == 'Windows_NT'">false</UsingToolNetFrameworkReferenceAssemblies>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\src\Internal.AspNetCore.Analyzers.csproj" />
|
||||
<ProjectReference Include="..\..\Microsoft.AspNetCore.Analyzer.Testing\src\Microsoft.AspNetCore.Analyzer.Testing.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,260 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements.
|
||||
// The .NET Foundation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.AspNetCore.Analyzer.Testing;
|
||||
using Xunit;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Internal.AspNetCore.Analyzers.Tests
|
||||
{
|
||||
public class PubternabilityAnalyzerTests : DiagnosticVerifier
|
||||
{
|
||||
|
||||
private const string InternalDefinitions = @"
|
||||
namespace A.Internal.Namespace
|
||||
{
|
||||
public class C {}
|
||||
public delegate C CD ();
|
||||
public class CAAttribute: System.Attribute {}
|
||||
|
||||
public class Program
|
||||
{
|
||||
public static void Main() {}
|
||||
}
|
||||
}";
|
||||
public PubternabilityAnalyzerTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper)
|
||||
{
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(PublicMemberDefinitions))]
|
||||
public async Task PublicExposureOfPubternalTypeProducesPUB0001(string member)
|
||||
{
|
||||
var code = GetSourceFromNamespaceDeclaration($@"
|
||||
namespace A
|
||||
{{
|
||||
public class T
|
||||
{{
|
||||
{member}
|
||||
}}
|
||||
}}");
|
||||
var diagnostic = Assert.Single(await GetDiagnostics(code.Source));
|
||||
Assert.Equal("PUB0001", diagnostic.Id);
|
||||
AnalyzerAssert.DiagnosticLocation(code.DefaultMarkerLocation, diagnostic.Location);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(PublicMemberWithAllowedDefinitions))]
|
||||
public async Task PublicExposureOfPubternalMembersSometimesAllowed(string member)
|
||||
{
|
||||
var code = GetSourceFromNamespaceDeclaration($@"
|
||||
namespace A
|
||||
{{
|
||||
public class T
|
||||
{{
|
||||
{member}
|
||||
}}
|
||||
}}");
|
||||
Assert.Empty(await GetDiagnostics(code.Source));
|
||||
}
|
||||
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(PublicTypeDefinitions))]
|
||||
public async Task PublicExposureOfPubternalTypeProducesInTypeDefinitionPUB0001(string member)
|
||||
{
|
||||
var code = GetSourceFromNamespaceDeclaration($@"
|
||||
namespace A
|
||||
{{
|
||||
{member}
|
||||
}}");
|
||||
var diagnostic = Assert.Single(await GetDiagnostics(code.Source));
|
||||
Assert.Equal("PUB0001", diagnostic.Id);
|
||||
AnalyzerAssert.DiagnosticLocation(code.DefaultMarkerLocation, diagnostic.Location);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(PublicMemberDefinitions))]
|
||||
public async Task PrivateUsageOfPubternalTypeDoesNotProduce(string member)
|
||||
{
|
||||
var code = GetSourceFromNamespaceDeclaration($@"
|
||||
namespace A
|
||||
{{
|
||||
internal class T
|
||||
{{
|
||||
{member}
|
||||
}}
|
||||
}}");
|
||||
var diagnostics = await GetDiagnostics(code.Source);
|
||||
Assert.Empty(diagnostics);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(PrivateMemberDefinitions))]
|
||||
public async Task PrivateUsageOfPubternalTypeDoesNotProduceInPublicClasses(string member)
|
||||
{
|
||||
var code = GetSourceFromNamespaceDeclaration($@"
|
||||
namespace A
|
||||
{{
|
||||
public class T
|
||||
{{
|
||||
{member}
|
||||
}}
|
||||
}}");
|
||||
var diagnostics = await GetDiagnostics(code.Source);
|
||||
Assert.Empty(diagnostics);
|
||||
}
|
||||
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(PublicTypeWithAllowedDefinitions))]
|
||||
public async Task PublicExposureOfPubternalTypeSometimesAllowed(string member)
|
||||
{
|
||||
var code = GetSourceFromNamespaceDeclaration($@"
|
||||
namespace A
|
||||
{{
|
||||
{member}
|
||||
}}");
|
||||
var diagnostics = await GetDiagnostics(code.Source);
|
||||
Assert.Empty(diagnostics);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(PrivateMemberDefinitions))]
|
||||
[MemberData(nameof(PublicMemberDefinitions))]
|
||||
public async Task DefinitionOfPubternalCrossAssemblyProducesPUB0002(string member)
|
||||
{
|
||||
var code = TestSource.Read($@"
|
||||
using A.Internal.Namespace;
|
||||
namespace A
|
||||
{{
|
||||
internal class T
|
||||
{{
|
||||
{member}
|
||||
}}
|
||||
}}");
|
||||
|
||||
var diagnostic = Assert.Single(await GetDiagnosticWithProjectReference(code.Source));
|
||||
Assert.Equal("PUB0002", diagnostic.Id);
|
||||
AnalyzerAssert.DiagnosticLocation(code.DefaultMarkerLocation, diagnostic.Location);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(TypeUsages))]
|
||||
public async Task UsageOfPubternalCrossAssemblyProducesPUB0002(string usage)
|
||||
{
|
||||
var code = TestSource.Read($@"
|
||||
using A.Internal.Namespace;
|
||||
namespace A
|
||||
{{
|
||||
public class T
|
||||
{{
|
||||
private void M()
|
||||
{{
|
||||
{usage}
|
||||
}}
|
||||
}}
|
||||
}}");
|
||||
var diagnostic = Assert.Single(await GetDiagnosticWithProjectReference(code.Source));
|
||||
Assert.Equal("PUB0002", diagnostic.Id);
|
||||
AnalyzerAssert.DiagnosticLocation(code.DefaultMarkerLocation, diagnostic.Location);
|
||||
}
|
||||
|
||||
public static IEnumerable<object[]> PublicMemberDefinitions =>
|
||||
ApplyModifiers(MemberDefinitions, "public", "protected");
|
||||
|
||||
public static IEnumerable<object[]> PublicMemberWithAllowedDefinitions =>
|
||||
ApplyModifiers(AllowedMemberDefinitions, "public");
|
||||
|
||||
public static IEnumerable<object[]> PublicTypeDefinitions =>
|
||||
ApplyModifiers(TypeDefinitions, "public");
|
||||
|
||||
public static IEnumerable<object[]> PublicTypeWithAllowedDefinitions =>
|
||||
ApplyModifiers(AllowedDefinitions, "public");
|
||||
|
||||
public static IEnumerable<object[]> PrivateMemberDefinitions =>
|
||||
ApplyModifiers(MemberDefinitions, "private", "internal");
|
||||
|
||||
public static IEnumerable<object[]> TypeUsages =>
|
||||
ApplyModifiers(TypeUsageStrings, string.Empty);
|
||||
|
||||
public static string[] MemberDefinitions => new []
|
||||
{
|
||||
"/*MM*/C c;",
|
||||
"T(/*MM*/C c) {}",
|
||||
"/*MM*/CD c { get; }",
|
||||
"event /*MM*/CD c;",
|
||||
"delegate /*MM*/C WOW();"
|
||||
};
|
||||
|
||||
public static string[] TypeDefinitions => new []
|
||||
{
|
||||
"delegate /*MM*/C WOW();",
|
||||
"class /*MM*/T: P<C> { } public class P<T> {}",
|
||||
"class /*MM*/T: C {}",
|
||||
"class T { public class /*MM*/T1: C { } }"
|
||||
};
|
||||
|
||||
public static string[] AllowedMemberDefinitions => new []
|
||||
{
|
||||
"T([CA]int c) {}",
|
||||
"[CA] MOD int f;",
|
||||
"[CA] MOD int f { get; set; }",
|
||||
"[CA] MOD class CC { }"
|
||||
};
|
||||
|
||||
public static string[] AllowedDefinitions => new []
|
||||
{
|
||||
"class T: I<C> { } interface I<T> {}"
|
||||
};
|
||||
|
||||
public static string[] TypeUsageStrings => new []
|
||||
{
|
||||
"/*MM*/var c = new C();",
|
||||
"/*MM*/CD d = () => null;",
|
||||
"var t = typeof(/*MM*/CAAttribute);"
|
||||
};
|
||||
|
||||
private static IEnumerable<object[]> ApplyModifiers(string[] code, params string[] mods)
|
||||
{
|
||||
foreach (var mod in mods)
|
||||
{
|
||||
foreach (var s in code)
|
||||
{
|
||||
if (s.Contains("MOD"))
|
||||
{
|
||||
yield return new object[] { s.Replace("MOD", mod) };
|
||||
}
|
||||
else
|
||||
{
|
||||
yield return new object[] { mod + " " + s };
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private TestSource GetSourceFromNamespaceDeclaration(string namespaceDefinition)
|
||||
{
|
||||
return TestSource.Read("using A.Internal.Namespace;" + InternalDefinitions + namespaceDefinition);
|
||||
}
|
||||
|
||||
private Task<Diagnostic[]> GetDiagnosticWithProjectReference(string code)
|
||||
{
|
||||
var libraray = CreateProject(InternalDefinitions);
|
||||
|
||||
var mainProject = CreateProject(code).AddProjectReference(new ProjectReference(libraray.Id));
|
||||
|
||||
return GetDiagnosticsAsync(mainProject.Documents.ToArray(), new PubternalityAnalyzer(), new [] { "PUB0002" });
|
||||
}
|
||||
|
||||
private Task<Diagnostic[]> GetDiagnostics(string code)
|
||||
{
|
||||
return GetDiagnosticsAsync(new[] { code }, new PubternalityAnalyzer(), new [] { "PUB0002" });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements.
|
||||
// The .NET Foundation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Xunit.Sdk;
|
||||
|
||||
namespace Microsoft.AspNetCore.Analyzer.Testing
|
||||
{
|
||||
public class AnalyzerAssert
|
||||
{
|
||||
public static void DiagnosticLocation(DiagnosticLocation expected, Location actual)
|
||||
{
|
||||
var actualSpan = actual.GetLineSpan();
|
||||
var actualLinePosition = actualSpan.StartLinePosition;
|
||||
|
||||
// Only check line position if there is an actual line in the real diagnostic
|
||||
if (actualLinePosition.Line > 0)
|
||||
{
|
||||
if (actualLinePosition.Line + 1 != expected.Line)
|
||||
{
|
||||
throw new DiagnosticLocationAssertException(
|
||||
expected,
|
||||
actual,
|
||||
$"Expected diagnostic to be on line \"{expected.Line}\" was actually on line \"{actualLinePosition.Line + 1}\"");
|
||||
}
|
||||
}
|
||||
|
||||
// Only check column position if there is an actual column position in the real diagnostic
|
||||
if (actualLinePosition.Character > 0)
|
||||
{
|
||||
if (actualLinePosition.Character + 1 != expected.Column)
|
||||
{
|
||||
throw new DiagnosticLocationAssertException(
|
||||
expected,
|
||||
actual,
|
||||
$"Expected diagnostic to start at column \"{expected.Column}\" was actually on column \"{actualLinePosition.Character + 1}\"");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class DiagnosticLocationAssertException : EqualException
|
||||
{
|
||||
public DiagnosticLocationAssertException(
|
||||
DiagnosticLocation expected,
|
||||
Location actual,
|
||||
string message)
|
||||
: base(expected, actual)
|
||||
{
|
||||
Message = message;
|
||||
}
|
||||
|
||||
public override string Message { get; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements.
|
||||
// The .NET Foundation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CodeActions;
|
||||
using Microsoft.CodeAnalysis.CodeFixes;
|
||||
using Microsoft.CodeAnalysis.CSharp;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Analyzer.Testing
|
||||
{
|
||||
public class CodeFixRunner
|
||||
{
|
||||
public static CodeFixRunner Default { get; } = new CodeFixRunner();
|
||||
|
||||
public async Task<string> ApplyCodeFixAsync(
|
||||
CodeFixProvider codeFixProvider,
|
||||
Document document,
|
||||
Diagnostic analyzerDiagnostic,
|
||||
int codeFixIndex = 0)
|
||||
{
|
||||
var actions = new List<CodeAction>();
|
||||
var context = new CodeFixContext(document, analyzerDiagnostic, (a, d) => actions.Add(a), CancellationToken.None);
|
||||
await codeFixProvider.RegisterCodeFixesAsync(context);
|
||||
|
||||
Assert.NotEmpty(actions);
|
||||
|
||||
var updatedSolution = await ApplyFixAsync(actions[codeFixIndex]);
|
||||
|
||||
var updatedProject = updatedSolution.GetProject(document.Project.Id);
|
||||
await EnsureCompilable(updatedProject);
|
||||
|
||||
var updatedDocument = updatedSolution.GetDocument(document.Id);
|
||||
var sourceText = await updatedDocument.GetTextAsync();
|
||||
return sourceText.ToString();
|
||||
}
|
||||
|
||||
private async Task EnsureCompilable(Project project)
|
||||
{
|
||||
var compilationOptions = ConfigureCompilationOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));
|
||||
|
||||
var compilation = await project
|
||||
.WithCompilationOptions(compilationOptions)
|
||||
.GetCompilationAsync();
|
||||
var diagnostics = compilation.GetDiagnostics();
|
||||
if (diagnostics.Length != 0)
|
||||
{
|
||||
var message = string.Join(
|
||||
Environment.NewLine,
|
||||
diagnostics.Select(d => CSharpDiagnosticFormatter.Instance.Format(d)));
|
||||
throw new InvalidOperationException($"Compilation failed:{Environment.NewLine}{message}");
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task<Solution> ApplyFixAsync(CodeAction codeAction)
|
||||
{
|
||||
var operations = await codeAction.GetOperationsAsync(CancellationToken.None);
|
||||
return Assert.Single(operations.OfType<ApplyChangesOperation>()).ChangedSolution;
|
||||
}
|
||||
|
||||
protected virtual CompilationOptions ConfigureCompilationOptions(CompilationOptions options)
|
||||
{
|
||||
return options.WithOutputKind(OutputKind.DynamicallyLinkedLibrary);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,122 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements.
|
||||
// The .NET Foundation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.Diagnostics;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Analyzer.Testing
|
||||
{
|
||||
/// <summary>
|
||||
/// Base type for executing a <see cref="DiagnosticAnalyzer" />. Derived types implemented in the test assembly will
|
||||
/// correctly resolve reference assemblies required for compilaiton.
|
||||
/// </summary>
|
||||
public abstract class DiagnosticAnalyzerRunner
|
||||
{
|
||||
/// <summary>
|
||||
/// Given classes in the form of strings, and an DiagnosticAnalyzer to apply to it, return the diagnostics found in the string after converting it to a document.
|
||||
/// </summary>
|
||||
/// <param name="sources">Classes in the form of strings</param>
|
||||
/// <param name="analyzer">The analyzer to be run on the sources</param>
|
||||
/// <param name="additionalEnabledDiagnostics">Additional diagnostics to enable at Info level</param>
|
||||
/// <param name="getAllDiagnostics">
|
||||
/// When <c>true</c>, returns all diagnostics including compilation errors.
|
||||
/// Otherwise; only returns analyzer diagnostics.
|
||||
/// </param>
|
||||
/// <returns>An IEnumerable of Diagnostics that surfaced in the source code, sorted by Location</returns>
|
||||
protected Task<Diagnostic[]> GetDiagnosticsAsync(
|
||||
string[] sources,
|
||||
DiagnosticAnalyzer analyzer,
|
||||
string[] additionalEnabledDiagnostics,
|
||||
bool getAllDiagnostics = true)
|
||||
{
|
||||
var project = DiagnosticProject.Create(GetType().Assembly, sources);
|
||||
return GetDiagnosticsAsync(new[] { project }, analyzer, additionalEnabledDiagnostics);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Given an analyzer and a document to apply it to, run the analyzer and gather an array of diagnostics found in it.
|
||||
/// The returned diagnostics are then ordered by location in the source document.
|
||||
/// </summary>
|
||||
/// <param name="projects">Projects that the analyzer will be run on</param>
|
||||
/// <param name="analyzer">The analyzer to run on the documents</param>
|
||||
/// <param name="additionalEnabledDiagnostics">Additional diagnostics to enable at Info level</param>
|
||||
/// <param name="getAllDiagnostics">
|
||||
/// When <c>true</c>, returns all diagnostics including compilation errors.
|
||||
/// Otherwise only returns analyzer diagnostics.
|
||||
/// </param>
|
||||
/// <returns>An IEnumerable of Diagnostics that surfaced in the source code, sorted by Location</returns>
|
||||
protected async Task<Diagnostic[]> GetDiagnosticsAsync(
|
||||
IEnumerable<Project> projects,
|
||||
DiagnosticAnalyzer analyzer,
|
||||
string[] additionalEnabledDiagnostics,
|
||||
bool getAllDiagnostics = true)
|
||||
{
|
||||
var diagnostics = new List<Diagnostic>();
|
||||
foreach (var project in projects)
|
||||
{
|
||||
var compilation = await project.GetCompilationAsync();
|
||||
|
||||
// Enable any additional diagnostics
|
||||
var options = ConfigureCompilationOptions(compilation.Options);
|
||||
if (additionalEnabledDiagnostics.Length > 0)
|
||||
{
|
||||
options = compilation.Options
|
||||
.WithSpecificDiagnosticOptions(
|
||||
additionalEnabledDiagnostics.ToDictionary(s => s, s => ReportDiagnostic.Info));
|
||||
}
|
||||
|
||||
var compilationWithAnalyzers = compilation
|
||||
.WithOptions(options)
|
||||
.WithAnalyzers(ImmutableArray.Create(analyzer));
|
||||
|
||||
if (getAllDiagnostics)
|
||||
{
|
||||
var diags = await compilationWithAnalyzers.GetAllDiagnosticsAsync();
|
||||
|
||||
Assert.DoesNotContain(diags, d => d.Id == "AD0001");
|
||||
|
||||
// Filter out non-error diagnostics not produced by our analyzer
|
||||
// We want to KEEP errors because we might have written bad code. But sometimes we leave warnings in to make the
|
||||
// test code more convenient
|
||||
diags = diags.Where(d => d.Severity == DiagnosticSeverity.Error || analyzer.SupportedDiagnostics.Any(s => s.Id.Equals(d.Id))).ToImmutableArray();
|
||||
|
||||
foreach (var diag in diags)
|
||||
{
|
||||
if (diag.Location == Location.None || diag.Location.IsInMetadata)
|
||||
{
|
||||
diagnostics.Add(diag);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var document in projects.SelectMany(p => p.Documents))
|
||||
{
|
||||
var tree = await document.GetSyntaxTreeAsync();
|
||||
if (tree == diag.Location.SourceTree)
|
||||
{
|
||||
diagnostics.Add(diag);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
diagnostics.AddRange(await compilationWithAnalyzers.GetAnalyzerDiagnosticsAsync());
|
||||
}
|
||||
}
|
||||
|
||||
return diagnostics.OrderBy(d => d.Location.SourceSpan.Start).ToArray();
|
||||
}
|
||||
|
||||
protected virtual CompilationOptions ConfigureCompilationOptions(CompilationOptions options)
|
||||
{
|
||||
return options.WithOutputKind(OutputKind.DynamicallyLinkedLibrary);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements.
|
||||
// The .NET Foundation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System;
|
||||
|
||||
namespace Microsoft.AspNetCore.Analyzer.Testing
|
||||
{
|
||||
/// <summary>
|
||||
/// Location where the diagnostic appears, as determined by path, line number, and column number.
|
||||
/// </summary>
|
||||
public class DiagnosticLocation
|
||||
{
|
||||
public DiagnosticLocation(int line, int column)
|
||||
: this($"{DiagnosticProject.DefaultFilePathPrefix}.cs", line, column)
|
||||
{
|
||||
}
|
||||
|
||||
public DiagnosticLocation(string path, int line, int column)
|
||||
{
|
||||
if (line < -1)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(line), "line must be >= -1");
|
||||
}
|
||||
|
||||
if (column < -1)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(column), "column must be >= -1");
|
||||
}
|
||||
|
||||
Path = path;
|
||||
Line = line;
|
||||
Column = column;
|
||||
}
|
||||
|
||||
public string Path { get; }
|
||||
public int Line { get; }
|
||||
public int Column { get; }
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,99 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements.
|
||||
// The .NET Foundation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.Text;
|
||||
using Microsoft.Extensions.DependencyModel;
|
||||
using Microsoft.Extensions.DependencyModel.Resolution;
|
||||
|
||||
namespace Microsoft.AspNetCore.Analyzer.Testing
|
||||
{
|
||||
public class DiagnosticProject
|
||||
{
|
||||
/// <summary>
|
||||
/// File name prefix used to generate Documents instances from source.
|
||||
/// </summary>
|
||||
public static string DefaultFilePathPrefix = "Test";
|
||||
|
||||
/// <summary>
|
||||
/// Project name.
|
||||
/// </summary>
|
||||
public static string TestProjectName = "TestProject";
|
||||
|
||||
private static readonly Dictionary<Assembly, Solution> _solutionCache = new Dictionary<Assembly, Solution>();
|
||||
|
||||
public static Project Create(Assembly testAssembly, string[] sources)
|
||||
{
|
||||
Solution solution;
|
||||
lock (_solutionCache)
|
||||
{
|
||||
if (!_solutionCache.TryGetValue(testAssembly, out solution))
|
||||
{
|
||||
var projectId = ProjectId.CreateNewId(debugName: TestProjectName);
|
||||
solution = new AdhocWorkspace()
|
||||
.CurrentSolution
|
||||
.AddProject(projectId, TestProjectName, TestProjectName, LanguageNames.CSharp);
|
||||
|
||||
foreach (var defaultCompileLibrary in DependencyContext.Load(testAssembly).CompileLibraries)
|
||||
{
|
||||
foreach (var resolveReferencePath in defaultCompileLibrary.ResolveReferencePaths(new AppLocalResolver()))
|
||||
{
|
||||
solution = solution.AddMetadataReference(projectId, MetadataReference.CreateFromFile(resolveReferencePath));
|
||||
}
|
||||
}
|
||||
|
||||
_solutionCache.Add(testAssembly, solution);
|
||||
}
|
||||
}
|
||||
|
||||
var testProject = solution.ProjectIds.Single();
|
||||
var fileNamePrefix = DefaultFilePathPrefix;
|
||||
|
||||
for (var i = 0; i < sources.Length; i++)
|
||||
{
|
||||
var newFileName = fileNamePrefix;
|
||||
if (sources.Length > 1)
|
||||
{
|
||||
newFileName += i;
|
||||
}
|
||||
newFileName += ".cs";
|
||||
|
||||
var documentId = DocumentId.CreateNewId(testProject, debugName: newFileName);
|
||||
solution = solution.AddDocument(documentId, newFileName, SourceText.From(sources[i]));
|
||||
}
|
||||
|
||||
return solution.GetProject(testProject);
|
||||
}
|
||||
|
||||
// Required to resolve compilation assemblies inside unit tests
|
||||
private class AppLocalResolver : ICompilationAssemblyResolver
|
||||
{
|
||||
public bool TryResolveAssemblyPaths(CompilationLibrary library, List<string> assemblies)
|
||||
{
|
||||
foreach (var assembly in library.Assemblies)
|
||||
{
|
||||
var dll = Path.Combine(Directory.GetCurrentDirectory(), "refs", Path.GetFileName(assembly));
|
||||
if (File.Exists(dll))
|
||||
{
|
||||
assemblies.Add(dll);
|
||||
return true;
|
||||
}
|
||||
|
||||
dll = Path.Combine(Directory.GetCurrentDirectory(), Path.GetFileName(assembly));
|
||||
if (File.Exists(dll))
|
||||
{
|
||||
assemblies.Add(dll);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,213 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements.
|
||||
// The .NET Foundation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CSharp;
|
||||
using Microsoft.CodeAnalysis.Diagnostics;
|
||||
using Microsoft.CodeAnalysis.Text;
|
||||
using Microsoft.Extensions.DependencyModel;
|
||||
using Microsoft.Extensions.DependencyModel.Resolution;
|
||||
using Xunit;
|
||||
using Xunit.Abstractions;
|
||||
|
||||
namespace Microsoft.AspNetCore.Analyzer.Testing
|
||||
{
|
||||
/// <summary>
|
||||
/// Superclass of all Unit Tests for DiagnosticAnalyzers
|
||||
/// </summary>
|
||||
public abstract class DiagnosticVerifier
|
||||
{
|
||||
private readonly ITestOutputHelper _testOutputHelper;
|
||||
|
||||
/// <inheritdoc />
|
||||
protected DiagnosticVerifier(): this(null)
|
||||
{
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected DiagnosticVerifier(ITestOutputHelper testOutputHelper)
|
||||
{
|
||||
_testOutputHelper = testOutputHelper;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// File name prefix used to generate Documents instances from source.
|
||||
/// </summary>
|
||||
protected static string DefaultFilePathPrefix = "Test";
|
||||
/// <summary>
|
||||
/// Project name of
|
||||
/// </summary>
|
||||
protected static string TestProjectName = "TestProject";
|
||||
|
||||
protected Solution Solution { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Given classes in the form of strings, and an IDiagnosticAnalyzer to apply to it, return the diagnostics found in the string after converting it to a document.
|
||||
/// </summary>
|
||||
/// <param name="sources">Classes in the form of strings</param>
|
||||
/// <param name="analyzer">The analyzer to be run on the sources</param>
|
||||
/// <param name="additionalEnabledDiagnostics">Additional diagnostics to enable at Info level</param>
|
||||
/// <returns>An IEnumerable of Diagnostics that surfaced in the source code, sorted by Location</returns>
|
||||
protected Task<Diagnostic[]> GetDiagnosticsAsync(string[] sources, DiagnosticAnalyzer analyzer, string[] additionalEnabledDiagnostics)
|
||||
{
|
||||
return GetDiagnosticsAsync(GetDocuments(sources), analyzer, additionalEnabledDiagnostics);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Given an analyzer and a document to apply it to, run the analyzer and gather an array of diagnostics found in it.
|
||||
/// The returned diagnostics are then ordered by location in the source document.
|
||||
/// </summary>
|
||||
/// <param name="documents">The Documents that the analyzer will be run on</param>
|
||||
/// <param name="analyzer">The analyzer to run on the documents</param>
|
||||
/// <param name="additionalEnabledDiagnostics">Additional diagnostics to enable at Info level</param>
|
||||
/// <returns>An IEnumerable of Diagnostics that surfaced in the source code, sorted by Location</returns>
|
||||
protected async Task<Diagnostic[]> GetDiagnosticsAsync(Document[] documents, DiagnosticAnalyzer analyzer, string[] additionalEnabledDiagnostics)
|
||||
{
|
||||
var projects = new HashSet<Project>();
|
||||
foreach (var document in documents)
|
||||
{
|
||||
projects.Add(document.Project);
|
||||
}
|
||||
|
||||
var diagnostics = new List<Diagnostic>();
|
||||
foreach (var project in projects)
|
||||
{
|
||||
var compilation = await project.GetCompilationAsync();
|
||||
|
||||
// Enable any additional diagnostics
|
||||
var options = compilation.Options;
|
||||
if (additionalEnabledDiagnostics.Length > 0)
|
||||
{
|
||||
options = compilation.Options
|
||||
.WithSpecificDiagnosticOptions(
|
||||
additionalEnabledDiagnostics.ToDictionary(s => s, s => ReportDiagnostic.Info));
|
||||
}
|
||||
|
||||
var compilationWithAnalyzers = compilation
|
||||
.WithOptions(options)
|
||||
.WithAnalyzers(ImmutableArray.Create(analyzer));
|
||||
|
||||
var diags = await compilationWithAnalyzers.GetAllDiagnosticsAsync();
|
||||
|
||||
foreach (var diag in diags)
|
||||
{
|
||||
_testOutputHelper?.WriteLine("Diagnostics: " + diag);
|
||||
}
|
||||
|
||||
Assert.DoesNotContain(diags, d => d.Id == "AD0001");
|
||||
|
||||
// Filter out non-error diagnostics not produced by our analyzer
|
||||
// We want to KEEP errors because we might have written bad code. But sometimes we leave warnings in to make the
|
||||
// test code more convenient
|
||||
diags = diags.Where(d => d.Severity == DiagnosticSeverity.Error || analyzer.SupportedDiagnostics.Any(s => s.Id.Equals(d.Id))).ToImmutableArray();
|
||||
|
||||
foreach (var diag in diags)
|
||||
{
|
||||
if (diag.Location == Location.None || diag.Location.IsInMetadata)
|
||||
{
|
||||
diagnostics.Add(diag);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var document in documents)
|
||||
{
|
||||
var tree = await document.GetSyntaxTreeAsync();
|
||||
if (tree == diag.Location.SourceTree)
|
||||
{
|
||||
diagnostics.Add(diag);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return diagnostics.OrderBy(d => d.Location.SourceSpan.Start).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Given an array of strings as sources and a language, turn them into a project and return the documents and spans of it.
|
||||
/// </summary>
|
||||
/// <param name="sources">Classes in the form of strings</param>
|
||||
/// <returns>An array of Documents produced from the sources.</returns>
|
||||
private Document[] GetDocuments(string[] sources)
|
||||
{
|
||||
var project = CreateProject(sources);
|
||||
var documents = project.Documents.ToArray();
|
||||
|
||||
Debug.Assert(sources.Length == documents.Length);
|
||||
|
||||
return documents;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a project using the inputted strings as sources.
|
||||
/// </summary>
|
||||
/// <param name="sources">Classes in the form of strings</param>
|
||||
/// <returns>A Project created out of the Documents created from the source strings</returns>
|
||||
protected Project CreateProject(params string[] sources)
|
||||
{
|
||||
var fileNamePrefix = DefaultFilePathPrefix;
|
||||
|
||||
var projectId = ProjectId.CreateNewId(debugName: TestProjectName);
|
||||
|
||||
Solution = Solution ?? new AdhocWorkspace().CurrentSolution;
|
||||
|
||||
Solution = Solution.AddProject(projectId, TestProjectName, TestProjectName, LanguageNames.CSharp)
|
||||
.WithProjectCompilationOptions(projectId, new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));
|
||||
|
||||
foreach (var defaultCompileLibrary in DependencyContext.Load(GetType().Assembly).CompileLibraries)
|
||||
{
|
||||
foreach (var resolveReferencePath in defaultCompileLibrary.ResolveReferencePaths(new AppLocalResolver()))
|
||||
{
|
||||
Solution = Solution.AddMetadataReference(projectId, MetadataReference.CreateFromFile(resolveReferencePath));
|
||||
}
|
||||
}
|
||||
|
||||
var count = 0;
|
||||
foreach (var source in sources)
|
||||
{
|
||||
var newFileName = fileNamePrefix + count;
|
||||
|
||||
_testOutputHelper?.WriteLine("Adding file: " + newFileName + Environment.NewLine + source);
|
||||
|
||||
var documentId = DocumentId.CreateNewId(projectId, debugName: newFileName);
|
||||
Solution = Solution.AddDocument(documentId, newFileName, SourceText.From(source));
|
||||
count++;
|
||||
}
|
||||
return Solution.GetProject(projectId);
|
||||
}
|
||||
|
||||
// Required to resolve compilation assemblies inside unit tests
|
||||
private class AppLocalResolver : ICompilationAssemblyResolver
|
||||
{
|
||||
public bool TryResolveAssemblyPaths(CompilationLibrary library, List<string> assemblies)
|
||||
{
|
||||
foreach (var assembly in library.Assemblies)
|
||||
{
|
||||
var dll = Path.Combine(Directory.GetCurrentDirectory(), "refs", Path.GetFileName(assembly));
|
||||
if (File.Exists(dll))
|
||||
{
|
||||
assemblies.Add(dll);
|
||||
continue;
|
||||
}
|
||||
|
||||
dll = Path.Combine(Directory.GetCurrentDirectory(), Path.GetFileName(assembly));
|
||||
if (File.Exists(dll))
|
||||
{
|
||||
assemblies.Add(dll);
|
||||
}
|
||||
}
|
||||
|
||||
return assemblies.Count > 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<Description>Helpers for writing tests for Roslyn analyzers.</Description>
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<PackageTags>$(PackageTags);testing</PackageTags>
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
<!-- This is actually a library for test projects, not a test project. -->
|
||||
<IsUnitTestProject>false</IsUnitTestProject>
|
||||
<!-- This package is internal, so we don't generate a package baseline. Always build against the latest dependencies. -->
|
||||
<UseLatestPackageReferences>true</UseLatestPackageReferences>
|
||||
<IsPackable>true</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="System.Reflection.Metadata" />
|
||||
<Reference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" />
|
||||
<Reference Include="Microsoft.Extensions.DependencyModel" />
|
||||
|
||||
<!--
|
||||
This intentionally does not reference 'xunit', 'xunit.core', or any runner packages.
|
||||
XUnit recommends only using xunit.extensibility.*, xunit.assert, and xunit.abstractions for packages which "extend" xunit.
|
||||
This allows consumers to decide which type of xunit runner they want to use to run these tests,
|
||||
and avoids problems with `dotnet pack`.
|
||||
|
||||
See https://xunit.github.io/docs/nuget-packages and the special note in https://xunit.github.io/releases/2.3.
|
||||
-->
|
||||
<Reference Include="xunit.assert" />
|
||||
<Reference Include="xunit.abstractions" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="build\**\*" Pack="true" PackagePath="build" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements.
|
||||
// The .NET Foundation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace Microsoft.AspNetCore.Analyzer.Testing
|
||||
{
|
||||
public class TestSource
|
||||
{
|
||||
private const string MarkerStart = "/*MM";
|
||||
private const string MarkerEnd = "*/";
|
||||
|
||||
public IDictionary<string, DiagnosticLocation> MarkerLocations { get; }
|
||||
= new Dictionary<string, DiagnosticLocation>(StringComparer.Ordinal);
|
||||
|
||||
public DiagnosticLocation DefaultMarkerLocation { get; private set; }
|
||||
|
||||
public string Source { get; private set; }
|
||||
|
||||
public static TestSource Read(string rawSource)
|
||||
{
|
||||
var testInput = new TestSource();
|
||||
var lines = rawSource.Split(new[] { "\n", "\r\n" }, StringSplitOptions.None);
|
||||
for (var i = 0; i < lines.Length; i++)
|
||||
{
|
||||
var line = lines[i];
|
||||
var markerStartIndex = line.IndexOf(MarkerStart, StringComparison.Ordinal);
|
||||
if (markerStartIndex != -1)
|
||||
{
|
||||
var markerEndIndex = line.IndexOf(MarkerEnd, markerStartIndex, StringComparison.Ordinal);
|
||||
var markerName = line.Substring(markerStartIndex + 2, markerEndIndex - markerStartIndex - 2);
|
||||
var markerLocation = new DiagnosticLocation(i + 1, markerStartIndex + 1);
|
||||
if (testInput.DefaultMarkerLocation == null)
|
||||
{
|
||||
testInput.DefaultMarkerLocation = markerLocation;
|
||||
}
|
||||
|
||||
testInput.MarkerLocations.Add(markerName, markerLocation);
|
||||
line = line.Substring(0, markerStartIndex) + line.Substring(markerEndIndex + MarkerEnd.Length);
|
||||
}
|
||||
|
||||
lines[i] = line;
|
||||
}
|
||||
|
||||
testInput.Source = string.Join(Environment.NewLine, lines);
|
||||
return testInput;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.Net.Component.4.6.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.2.SDK",
|
||||
"Microsoft.Net.Component.4.7.2.TargetingPack",
|
||||
"Microsoft.VisualStudio.Workload.ManagedDesktop",
|
||||
"Microsoft.VisualStudio.Workload.NetCoreTools",
|
||||
"Microsoft.VisualStudio.Workload.NetWeb",
|
||||
"Microsoft.VisualStudio.Workload.VisualStudioExtension"
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.Net.Component.4.6.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.2.SDK",
|
||||
"Microsoft.Net.Component.4.7.2.TargetingPack",
|
||||
"Microsoft.VisualStudio.Workload.ManagedDesktop",
|
||||
"Microsoft.VisualStudio.Workload.NetCoreTools",
|
||||
"Microsoft.VisualStudio.Workload.NetWeb",
|
||||
"Microsoft.VisualStudio.Workload.VisualStudioExtension"
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.Net.Component.4.6.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.2.SDK",
|
||||
"Microsoft.Net.Component.4.7.2.TargetingPack",
|
||||
"Microsoft.VisualStudio.Workload.ManagedDesktop",
|
||||
"Microsoft.VisualStudio.Workload.NetCoreTools",
|
||||
"Microsoft.VisualStudio.Workload.NetWeb",
|
||||
"Microsoft.VisualStudio.Workload.VisualStudioExtension"
|
||||
]
|
||||
}
|
||||
|
|
@ -2,17 +2,17 @@
|
|||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
|
||||
|
||||
<PreserveCompilationContext>true</PreserveCompilationContext>
|
||||
<BaseOutputPath />
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<!-- This is set to a ProjectReference because analyzers cannot be referenced via Reference. -->
|
||||
<ProjectReference Include="..\src\Microsoft.AspNetCore.Components.Analyzers.csproj" />
|
||||
<ProjectReference Include="$(RepoRoot)src\Analyzers\Microsoft.AspNetCore.Analyzer.Testing\src\Microsoft.AspNetCore.Analyzer.Testing.csproj" />
|
||||
|
||||
<Reference Include="Microsoft.AspNetCore.Components" />
|
||||
<Reference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" />
|
||||
<Reference Include="Microsoft.AspNetCore.Analyzer.Testing" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -10,6 +10,12 @@
|
|||
<Reference Include="Mono.WebAssembly.Interop" />
|
||||
<Reference Include="Microsoft.AspNetCore.Components.Web" />
|
||||
<Reference Include="Microsoft.Extensions.Options" />
|
||||
|
||||
<!--
|
||||
Supress a "BUILD001: Reference to 'Microsoft.Extensions.Configuration' was removed since the last stable release
|
||||
of this package." warning.
|
||||
-->
|
||||
<SuppressBaselineReference Include="Microsoft.Extensions.Configuration" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
<NuspecProperty Include="componentsversion=$(ComponentsPackageVersion)" />
|
||||
<NuspecProperty Include="razorversion=$(MicrosoftAspNetCoreRazorDesignPackageVersion)" />
|
||||
<NuspecProperty Include="blazormonoversion=$(MicrosoftAspNetCoreBlazorMonoPackageVersion)" />
|
||||
<NuspecProperty Include="PackageThirdPartyNoticesFile=$(PackageThirdPartyNoticesFile)" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
</metadata>
|
||||
<files>
|
||||
$CommonFileElements$
|
||||
<file src="..\..\..\THIRD-PARTY-NOTICES.txt" />
|
||||
<file src="$PackageThirdPartyNoticesFile$" target=".\THIRD-PARTY-NOTICES.txt" />
|
||||
<file src="build\**" target="build" />
|
||||
<file src="targets\**" target="targets" />
|
||||
<file src="$taskskDir$\**" target="tools/" />
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
<NuspecProperty Include="publishDir=$(PublishDir)" />
|
||||
<NuspecProperty Include="componentsrootdir=..\..\..\" />
|
||||
<NuspecProperty Include="blazorversion=$(PackageVersion)" />
|
||||
<NuspecProperty Include="PackageThirdPartyNoticesFile=$(PackageThirdPartyNoticesFile)" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -7,6 +7,6 @@
|
|||
$CommonFileElements$
|
||||
<file src="build\**" target="build" />
|
||||
<file src="$publishDir$**\*" target="tools" />
|
||||
<file src="$componentsrootdir$THIRD-PARTY-NOTICES.txt" target=".\THIRD-PARTY-NOTICES.txt" />
|
||||
<file src="$PackageThirdPartyNoticesFile$" target=".\THIRD-PARTY-NOTICES.txt" />
|
||||
</files>
|
||||
</package>
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@
|
|||
<NuspecProperty Condition="'$(DotNetBuildFromSource)' != 'true'" Include="systemComponentModelAnnotationsPackageVersion=$(SystemComponentModelAnnotationsPackageVersion)" />
|
||||
<NuspecProperty Include="AssemblyName=$(AssemblyName)" />
|
||||
<NuspecProperty Include="OutputPath=$(OutputPath)" />
|
||||
<NuspecProperty Include="PackageThirdPartyNoticesFile=$(PackageThirdPartyNoticesFile)" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -21,6 +21,6 @@
|
|||
<file src="$OutputPath$**\$AssemblyName$.dll" target="lib\" />
|
||||
<file src="$OutputPath$**\$AssemblyName$.pdb" target="lib\" />
|
||||
<file src="$OutputPath$**\$AssemblyName$.xml" target="lib\" />
|
||||
<file src="..\..\THIRD-PARTY-NOTICES.txt" target=".\THIRD-PARTY-NOTICES.txt" />
|
||||
<file src="$PackageThirdPartyNoticesFile$" target=".\THIRD-PARTY-NOTICES.txt" />
|
||||
</files>
|
||||
</package>
|
||||
|
|
|
|||
|
|
@ -15,6 +15,6 @@
|
|||
<file src="$OutputPath$**\$AssemblyName$.dll" target="lib\" />
|
||||
<file src="$OutputPath$**\$AssemblyName$.pdb" target="lib\" />
|
||||
<file src="$OutputPath$**\$AssemblyName$.xml" target="lib\" />
|
||||
<file src="..\..\THIRD-PARTY-NOTICES.txt" target=".\THIRD-PARTY-NOTICES.txt" />
|
||||
<file src="$PackageThirdPartyNoticesFile$" target=".\THIRD-PARTY-NOTICES.txt" />
|
||||
</files>
|
||||
</package>
|
||||
|
|
|
|||
|
|
@ -2810,8 +2810,7 @@ namespace Microsoft.AspNetCore.Components.Test
|
|||
Assert.Equal(10, component.OnAfterRenderCallCount);
|
||||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/7487")]
|
||||
[Fact]
|
||||
public async Task CanTriggerEventHandlerDisposedInEarlierPendingBatchAsync()
|
||||
{
|
||||
// This represents the scenario where the same event handler is being triggered
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@
|
|||
|
||||
<!-- So we can use the tool from source within the repo without having to pack -->
|
||||
<BlazorToolsDir>$(MSBuildThisFileDirectory)Blazor\Build\src\bin\$(Configuration)\$(DefaultNetCoreTargetFramework)\</BlazorToolsDir>
|
||||
|
||||
<PackageThirdPartyNoticesFile>$(MSBuildThisFileDirectory)THIRD-PARTY-NOTICES.txt</PackageThirdPartyNoticesFile>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
|
|
|
|||
|
|
@ -24,8 +24,6 @@
|
|||
</Target>
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="$(MSBuildThisFileDirectory)THIRD-PARTY-NOTICES.txt" Pack="true" PackagePath="." />
|
||||
|
||||
<!-- Add a project dependency without reference output assemblies to enforce build order -->
|
||||
<!-- Applying workaround for https://github.com/microsoft/msbuild/issues/2661 and https://github.com/dotnet/sdk/issues/952 -->
|
||||
<ProjectReference
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@
|
|||
<Reference Include="Microsoft.AspNetCore.Mvc" />
|
||||
<Reference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" />
|
||||
<Reference Include="Microsoft.AspNetCore.Mvc.ViewFeatures" />
|
||||
<Reference Include="Microsoft.AspNetCore.Testing" />
|
||||
<Reference Include="Microsoft.Extensions.Hosting" />
|
||||
<Reference Include="Microsoft.Extensions.Logging.Testing" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.Net.Component.4.6.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.2.SDK",
|
||||
"Microsoft.Net.Component.4.7.2.TargetingPack",
|
||||
"Microsoft.VisualStudio.Workload.ManagedDesktop",
|
||||
"Microsoft.VisualStudio.Workload.NetCoreTools",
|
||||
"Microsoft.VisualStudio.Workload.NetWeb",
|
||||
"Microsoft.VisualStudio.Workload.VisualStudioExtension"
|
||||
]
|
||||
}
|
||||
|
|
@ -115,7 +115,7 @@ namespace Microsoft.AspNetCore.DataProtection
|
|||
|
||||
[ConditionalFact]
|
||||
[X509StoreIsAvailable(StoreName.My, StoreLocation.CurrentUser)]
|
||||
[SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/6720")]
|
||||
[SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/6720", Queues = "OSX.1014.Amd64;OSX.1014.Amd64.Open")]
|
||||
public void System_UsesProvidedDirectoryAndCertificate()
|
||||
{
|
||||
var filePath = Path.Combine(GetTestFilesPath(), "TestCert.pfx");
|
||||
|
|
@ -165,7 +165,6 @@ namespace Microsoft.AspNetCore.DataProtection
|
|||
|
||||
[ConditionalFact]
|
||||
[X509StoreIsAvailable(StoreName.My, StoreLocation.CurrentUser)]
|
||||
[SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/6720")]
|
||||
public void System_UsesProvidedCertificateNotFromStore()
|
||||
{
|
||||
using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.Net.Component.4.6.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.2.SDK",
|
||||
"Microsoft.Net.Component.4.7.2.TargetingPack",
|
||||
"Microsoft.VisualStudio.Workload.ManagedDesktop",
|
||||
"Microsoft.VisualStudio.Workload.NetCoreTools",
|
||||
"Microsoft.VisualStudio.Workload.NetWeb",
|
||||
"Microsoft.VisualStudio.Workload.VisualStudioExtension"
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.Net.Component.4.6.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.2.SDK",
|
||||
"Microsoft.Net.Component.4.7.2.TargetingPack",
|
||||
"Microsoft.VisualStudio.Workload.ManagedDesktop",
|
||||
"Microsoft.VisualStudio.Workload.NetCoreTools",
|
||||
"Microsoft.VisualStudio.Workload.NetWeb",
|
||||
"Microsoft.VisualStudio.Workload.VisualStudioExtension"
|
||||
]
|
||||
}
|
||||
|
|
@ -6,6 +6,7 @@
|
|||
<!-- Shared between targeting pack and runtime build. -->
|
||||
<PlatformManifestFileName>PlatformManifest.txt</PlatformManifestFileName>
|
||||
<PlatformManifestOutputPath>$(ArtifactsObjDir)$(PlatformManifestFileName)</PlatformManifestOutputPath>
|
||||
<DisablePubternalApiCheck>true</DisablePubternalApiCheck>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -53,6 +53,10 @@ This package is an internal implementation of the .NET Core SDK and is not meant
|
|||
<!-- Platform manifest and package override metatdata -->
|
||||
<ReferencePackSharedFxVersion>$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion).0</ReferencePackSharedFxVersion>
|
||||
<ReferencePackSharedFxVersion Condition="'$(VersionSuffix)' != ''">$(ReferencePackSharedFxVersion)-$(VersionSuffix)</ReferencePackSharedFxVersion>
|
||||
|
||||
<!-- Runtime extensions transport paths -->
|
||||
<RuntimeExtensionsReferenceDirectory>$(PkgMicrosoft_Extensions_Internal_Transport)\ref\$(TargetFramework)\</RuntimeExtensionsReferenceDirectory>
|
||||
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
@ -109,14 +113,14 @@ This package is an internal implementation of the .NET Core SDK and is not meant
|
|||
BeforeTargets="_GetPackageFiles"
|
||||
DependsOnTargets="ResolveReferences;FindReferenceAssembliesForReferences">
|
||||
<ItemGroup>
|
||||
<_AvailableExtensionsRefAssemblies Include="$(MicrosoftInternalExtensionsRefsPath)\*.dll" />
|
||||
<_AvailableExtensionsRefAssemblies Include="$(RuntimeExtensionsReferenceDirectory)*.dll" />
|
||||
</ItemGroup>
|
||||
|
||||
<JoinItems Left="@(ReferencePathWithRefAssemblies)" Right="@(_AvailableExtensionsRefAssemblies)" LeftKey="Filename" RightKey="Filename" ItemSpecToUse="Left">
|
||||
<Output TaskParameter="JoinResult" ItemName="_ReferencedExtensionsRefAssemblies" />
|
||||
</JoinItems>
|
||||
|
||||
<!-- _DuplicatedExtensionsRefAssemblies represents ref assemblies that are present in Microsoft.Internal.Extensions.Refs package and also are built in this repo. -->
|
||||
<!-- _DuplicatedExtensionsRefAssemblies represents ref assemblies that are present in Microsoft.Extensions.Internal.Transport package and also are built in this repo. -->
|
||||
<!-- This should be temporary while we migrate sources since there should be no duplication when sources are deleted from extensions. -->
|
||||
<JoinItems Left="@(_ReferencedExtensionsRefAssemblies)" Right="@(_ResolvedProjectReferencePaths)" LeftKey="Filename" RightKey="Filename" ItemSpecToUse="Left">
|
||||
<Output TaskParameter="JoinResult" ItemName="_DuplicatedExtensionsRefAssemblies" />
|
||||
|
|
@ -131,7 +135,7 @@ This package is an internal implementation of the .NET Core SDK and is not meant
|
|||
</JoinItems>
|
||||
|
||||
<ItemGroup>
|
||||
<!-- Do not exclude the ref assemblies that we built in this repo if it's also included in Microsoft.Internal.Extensions.Refs -->
|
||||
<!-- Do not exclude the ref assemblies that we built in this repo if it's also included in Microsoft.Extensions.Internal.Transport -->
|
||||
<_ReferencedExtensionsRefAssembliesToExclude Include="@(_ReferencedExtensionsRefAssemblies)" Exclude="@(_DuplicatedExtensionsRefAssemblies)" />
|
||||
|
||||
<!-- Exclude transitive external dependencies that are not directly referenced by projects in AspNetCore or Extensions -->
|
||||
|
|
@ -147,10 +151,10 @@ This package is an internal implementation of the .NET Core SDK and is not meant
|
|||
@(ReferencePathWithRefAssemblies->WithMetadataValue('ReferenceGrouping', 'Microsoft.NETCore.App'));" />
|
||||
|
||||
<AspNetCoreReferenceAssemblyPath
|
||||
Include="@(_SelectedExtensionsRefAssemblies->'$(MicrosoftInternalExtensionsRefsPath)%(FileName)%(Extension)')" />
|
||||
Include="@(_SelectedExtensionsRefAssemblies->'$(RuntimeExtensionsReferenceDirectory)%(FileName)%(Extension)')" />
|
||||
|
||||
<AspNetCoreReferenceDocXml Include="@(_ResolvedProjectReferencePaths->WithMetadataValue('IsReferenceAssembly', 'false')->'%(RootDir)%(Directory)%(FileName).xml')" />
|
||||
<AspNetCoreReferenceDocXml Include="@(_SelectedExtensionsRefAssemblies->'$(MicrosoftInternalExtensionsRefsPath)%(FileName).xml')" />
|
||||
<AspNetCoreReferenceDocXml Include="@(_SelectedExtensionsRefAssemblies->'$(RuntimeExtensionsReferenceDirectory)%(FileName).xml')" />
|
||||
|
||||
<RefPackContent Include="@(AspNetCoreReferenceAssemblyPath)" PackagePath="$(RefAssemblyPackagePath)" />
|
||||
<RefPackContent Include="@(AspNetCoreReferenceDocXml)" PackagePath="$(RefAssemblyPackagePath)" />
|
||||
|
|
@ -165,7 +169,7 @@ This package is an internal implementation of the .NET Core SDK and is not meant
|
|||
Outputs="$(TargetDir)$(PackageConflictManifestFileName)">
|
||||
<ItemGroup>
|
||||
<!-- Use package version for non-Extensions references -->
|
||||
<_AspNetCoreAppPackageOverrides Include="@(AspNetCoreReferenceAssemblyPath->'%(NuGetPackageId)|%(NuGetPackageVersion)')" Condition="!Exists('$(MicrosoftInternalExtensionsRefsPath)%(AspNetCoreReferenceAssemblyPath.NuGetPackageId).dll') AND '%(AspNetCoreReferenceAssemblyPath.NuGetPackageId)' != 'Microsoft.NETCore.App' AND '%(AspNetCoreReferenceAssemblyPath.NuGetPackageId)' != 'Microsoft.Internal.Extensions.Refs' AND '%(AspNetCoreReferenceAssemblyPath.NuGetSourceType)' == 'Package' " />
|
||||
<_AspNetCoreAppPackageOverrides Include="@(AspNetCoreReferenceAssemblyPath->'%(NuGetPackageId)|%(NuGetPackageVersion)')" Condition="!Exists('$(RuntimeExtensionsReferenceDirectory)%(AspNetCoreReferenceAssemblyPath.NuGetPackageId).dll') AND '%(AspNetCoreReferenceAssemblyPath.NuGetPackageId)' != 'Microsoft.NETCore.App' AND '%(AspNetCoreReferenceAssemblyPath.NuGetPackageId)' != 'Microsoft.Extensions.Internal.Transport' AND '%(AspNetCoreReferenceAssemblyPath.NuGetSourceType)' == 'Package' " />
|
||||
|
||||
<!-- Pin version for extensions references -->
|
||||
<_AspNetCoreAppPackageOverrides Include="@(_SelectedExtensionsRefAssemblies->'%(FileName)|$(MicrosoftInternalExtensionsRefsPackageOverrideVersion)')" />
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ This package is an internal implementation of the .NET Core SDK and is not meant
|
|||
<!-- There is no way to suppress the .dev.runtimeconfig.json generation. -->
|
||||
<ProjectRuntimeConfigDevFilePath>$(IntermediateOutputPath)ignoreme.dev.runtimeconfig.json</ProjectRuntimeConfigDevFilePath>
|
||||
|
||||
<VersionFileIntermediateOutputPath>$(IntermediateOutputPath).version</VersionFileIntermediateOutputPath>
|
||||
<VersionFileIntermediateOutputPath>$(IntermediateOutputPath)$(SharedFxName).versions.txt</VersionFileIntermediateOutputPath>
|
||||
|
||||
<!-- The project representing the shared framework doesn't produce a .NET assembly or symbols. -->
|
||||
<DebugType>none</DebugType>
|
||||
|
|
@ -156,12 +156,6 @@ This package is an internal implementation of the .NET Core SDK and is not meant
|
|||
<RedistArchiveOutputPath>$(InstallersOutputPath)$(RedistArchiveOutputFileName)</RedistArchiveOutputPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup Condition="'$(DotNetBuildFromSource)' != 'true'">
|
||||
<GenerateChecksumItems Include="$(RedistArchiveOutputPath)">
|
||||
<DestinationPath>$(RedistArchiveOutputPath)$(ChecksumExtension)</DestinationPath>
|
||||
</GenerateChecksumItems>
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Target chain -->
|
||||
<PropertyGroup>
|
||||
<ResolveReferencesDependsOn>
|
||||
|
|
@ -501,4 +495,13 @@ This package is an internal implementation of the .NET Core SDK and is not meant
|
|||
</ItemGroup>
|
||||
</Target>
|
||||
|
||||
<Target Name="IncludeVersionFile"
|
||||
DependsOnTargets="GenerateSharedFxVersionsFiles"
|
||||
BeforeTargets="_GetPackageFiles">
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="$(VersionFileIntermediateOutputPath)" Pack="true" PackagePath="." />
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -36,6 +36,10 @@
|
|||
<_Parameter1>TargetingPackLayoutRoot</_Parameter1>
|
||||
<_Parameter2>$(TargetingPackLayoutRoot)</_Parameter2>
|
||||
</AssemblyAttribute>
|
||||
<AssemblyAttribute Include="Microsoft.AspNetCore.TestData">
|
||||
<_Parameter1>IsTargetingPackBuilding</_Parameter1>
|
||||
<_Parameter2>$(IsTargetingPackBuilding)</_Parameter2>
|
||||
</AssemblyAttribute>
|
||||
<AssemblyAttribute Include="Microsoft.AspNetCore.TestData">
|
||||
<_Parameter1>VerifyAncmBinary</_Parameter1>
|
||||
<_Parameter2>$(VerifyAncmBinary)</_Parameter2>
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@ namespace Microsoft.AspNetCore
|
|||
[Fact]
|
||||
public void ItContainsVersionFile()
|
||||
{
|
||||
var versionFile = Path.Combine(_sharedFxRoot, ".version");
|
||||
var versionFile = Path.Combine(_sharedFxRoot, "Microsoft.AspNetCore.App.versions.txt");
|
||||
AssertEx.FileExists(versionFile);
|
||||
var lines = File.ReadAllLines(versionFile);
|
||||
Assert.Equal(2, lines.Length);
|
||||
|
|
|
|||
|
|
@ -20,17 +20,24 @@ namespace Microsoft.AspNetCore
|
|||
private readonly string _expectedRid;
|
||||
private readonly string _targetingPackRoot;
|
||||
private readonly ITestOutputHelper _output;
|
||||
private readonly bool _isTargetingPackBuilding;
|
||||
|
||||
public TargetingPackTests(ITestOutputHelper output)
|
||||
{
|
||||
_output = output;
|
||||
_expectedRid = TestData.GetSharedFxRuntimeIdentifier();
|
||||
_targetingPackRoot = Path.Combine(TestData.GetTestDataValue("TargetingPackLayoutRoot"), "packs", "Microsoft.AspNetCore.App.Ref", TestData.GetTestDataValue("TargetingPackVersion"));
|
||||
_isTargetingPackBuilding = bool.Parse(TestData.GetTestDataValue("IsTargetingPackBuilding"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AssembliesAreReferenceAssemblies()
|
||||
{
|
||||
if (!_isTargetingPackBuilding)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
IEnumerable<string> dlls = Directory.GetFiles(_targetingPackRoot, "*.dll", SearchOption.AllDirectories);
|
||||
Assert.NotEmpty(dlls);
|
||||
|
||||
|
|
@ -58,6 +65,11 @@ namespace Microsoft.AspNetCore
|
|||
[Fact]
|
||||
public void PlatformManifestListsAllFiles()
|
||||
{
|
||||
if (!_isTargetingPackBuilding)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var platformManifestPath = Path.Combine(_targetingPackRoot, "data", "PlatformManifest.txt");
|
||||
var expectedAssemblies = TestData.GetSharedFxDependencies()
|
||||
.Split(';', StringSplitOptions.RemoveEmptyEntries)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.Net.Component.4.6.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.2.SDK",
|
||||
"Microsoft.Net.Component.4.7.2.TargetingPack",
|
||||
"Microsoft.VisualStudio.Workload.ManagedDesktop",
|
||||
"Microsoft.VisualStudio.Workload.NetCoreTools",
|
||||
"Microsoft.VisualStudio.Workload.NetWeb",
|
||||
"Microsoft.VisualStudio.Workload.VisualStudioExtension"
|
||||
]
|
||||
}
|
||||
|
|
@ -9,6 +9,7 @@
|
|||
<Reference Include="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" />
|
||||
<Reference Include="Microsoft.Extensions.Hosting.Abstractions" />
|
||||
<Reference Include="Microsoft.Extensions.Options" />
|
||||
<Reference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<InternalsVisibleTo Include="Microsoft.Extensions.Diagnostics.HealthChecks.Tests" Key="" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="'$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)'">
|
||||
|
|
@ -16,6 +17,7 @@
|
|||
<Reference Include="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" />
|
||||
<Reference Include="Microsoft.Extensions.Hosting.Abstractions" />
|
||||
<Reference Include="Microsoft.Extensions.Options" />
|
||||
<Reference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<InternalsVisibleTo Include="Microsoft.Extensions.Diagnostics.HealthChecks.Tests" Key="" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -125,7 +125,8 @@ namespace Microsoft.Extensions.Diagnostics.HealthChecks
|
|||
description: "A timeout occurred while running check.",
|
||||
duration: duration,
|
||||
exception: ex,
|
||||
data: null);
|
||||
data: null,
|
||||
tags: registration.Tags);
|
||||
|
||||
Log.HealthCheckError(_logger, registration, ex, duration);
|
||||
}
|
||||
|
|
@ -139,7 +140,8 @@ namespace Microsoft.Extensions.Diagnostics.HealthChecks
|
|||
description: ex.Message,
|
||||
duration: duration,
|
||||
exception: ex,
|
||||
data: null);
|
||||
data: null,
|
||||
tags: registration.Tags);
|
||||
|
||||
Log.HealthCheckError(_logger, registration, ex, duration);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ Microsoft.Extensions.Diagnostics.HealthChecks.IHealthChecksBuilder
|
|||
<Reference Include="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" />
|
||||
<Reference Include="Microsoft.Extensions.Hosting.Abstractions" />
|
||||
<Reference Include="Microsoft.Extensions.Options" />
|
||||
<Reference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -113,6 +113,47 @@ namespace Microsoft.Extensions.Diagnostics.HealthChecks
|
|||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task CheckAsync_TagsArePresentInHealthReportEntryIfExceptionOccurs()
|
||||
{
|
||||
const string ExceptionMessage = "exception-message";
|
||||
const string OperationCancelledMessage = "operation-cancelled-message";
|
||||
var exceptionTags = new[] { "unhealthy-check-tag" };
|
||||
var operationExceptionTags = new[] { "degraded-check-tag" };
|
||||
|
||||
// Arrange
|
||||
var service = CreateHealthChecksService(b =>
|
||||
{
|
||||
b.AddAsyncCheck("ExceptionCheck", _ => throw new Exception(ExceptionMessage), exceptionTags);
|
||||
b.AddAsyncCheck("OperationExceptionCheck", _ => throw new OperationCanceledException(OperationCancelledMessage), operationExceptionTags);
|
||||
});
|
||||
|
||||
// Act
|
||||
var results = await service.CheckHealthAsync();
|
||||
|
||||
// Assert
|
||||
Assert.Collection(
|
||||
results.Entries.OrderBy(kvp => kvp.Key),
|
||||
actual =>
|
||||
{
|
||||
Assert.Equal("ExceptionCheck", actual.Key);
|
||||
Assert.Equal(ExceptionMessage, actual.Value.Description);
|
||||
Assert.Equal(HealthStatus.Unhealthy, actual.Value.Status);
|
||||
Assert.Equal(ExceptionMessage, actual.Value.Exception.Message);
|
||||
Assert.Empty(actual.Value.Data);
|
||||
Assert.Equal(actual.Value.Tags, exceptionTags);
|
||||
},
|
||||
actual =>
|
||||
{
|
||||
Assert.Equal("OperationExceptionCheck", actual.Key);
|
||||
Assert.Equal("A timeout occurred while running check.", actual.Value.Description);
|
||||
Assert.Equal(HealthStatus.Unhealthy, actual.Value.Status);
|
||||
Assert.Equal(OperationCancelledMessage, actual.Value.Exception.Message);
|
||||
Assert.Empty(actual.Value.Data);
|
||||
Assert.Equal(actual.Value.Tags, operationExceptionTags);
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task CheckAsync_RunsFilteredChecksAndAggregatesResultsAsync()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.Net.Component.4.6.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.2.SDK",
|
||||
"Microsoft.Net.Component.4.7.2.TargetingPack",
|
||||
"Microsoft.VisualStudio.Workload.ManagedDesktop",
|
||||
"Microsoft.VisualStudio.Workload.NetCoreTools",
|
||||
"Microsoft.VisualStudio.Workload.NetWeb",
|
||||
"Microsoft.VisualStudio.Workload.VisualStudioExtension"
|
||||
]
|
||||
}
|
||||
|
|
@ -23,7 +23,6 @@
|
|||
<Reference Include="Microsoft.Extensions.FileProviders.Embedded" />
|
||||
<Reference Include="Microsoft.Extensions.Logging" />
|
||||
<Reference Include="Microsoft.Extensions.Logging.Console" />
|
||||
<Reference Include="Microsoft.Extensions.Logging.Testing" />
|
||||
<Reference Include="Microsoft.NETCore.Windows.ApiSets" />
|
||||
<Reference Include="Serilog.Extensions.Logging" />
|
||||
<Reference Include="Serilog.Sinks.File" />
|
||||
|
|
|
|||
|
|
@ -115,10 +115,25 @@ namespace Microsoft.AspNetCore.TestHost
|
|||
// This could throw an error if there was a pending server read. Needs to
|
||||
// happen before completing the response so the response returns the error.
|
||||
var requestBodyInProgress = RequestBodyReadInProgress();
|
||||
if (requestBodyInProgress)
|
||||
{
|
||||
// If request is still in progress then abort it.
|
||||
CancelRequestBody();
|
||||
}
|
||||
|
||||
// Matches Kestrel server: response is completed before request is drained
|
||||
await CompleteResponseAsync();
|
||||
await CompleteRequestAsync(requestBodyInProgress);
|
||||
|
||||
if (!requestBodyInProgress)
|
||||
{
|
||||
// Writer was already completed in send request callback.
|
||||
await _requestPipe.Reader.CompleteAsync();
|
||||
|
||||
// Don't wait for request to drain. It could block indefinitely. In a real server
|
||||
// we would wait for a timeout and then kill the socket.
|
||||
// Potential future improvement: add logging that the request timed out
|
||||
}
|
||||
|
||||
_application.DisposeContext(_testContext, exception: null);
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
@ -165,24 +180,6 @@ namespace Microsoft.AspNetCore.TestHost
|
|||
CancelRequestBody();
|
||||
}
|
||||
|
||||
private async Task CompleteRequestAsync(bool requestBodyInProgress)
|
||||
{
|
||||
if (requestBodyInProgress)
|
||||
{
|
||||
// If request is still in progress then abort it.
|
||||
CancelRequestBody();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Writer was already completed in send request callback.
|
||||
await _requestPipe.Reader.CompleteAsync();
|
||||
}
|
||||
|
||||
// Don't wait for request to drain. It could block indefinitely. In a real server
|
||||
// we would wait for a timeout and then kill the socket.
|
||||
// Potential future improvement: add logging that the request timed out
|
||||
}
|
||||
|
||||
private bool RequestBodyReadInProgress()
|
||||
{
|
||||
try
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ namespace Microsoft.AspNetCore.Hosting.FunctionalTests
|
|||
await ExecuteShutdownTest(nameof(ShutdownTestRun), "Run");
|
||||
}
|
||||
|
||||
[QuarantinedTest]
|
||||
[ConditionalFact]
|
||||
[OSSkipCondition(OperatingSystems.Windows)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
|
|
@ -133,7 +134,7 @@ namespace Microsoft.AspNetCore.Hosting.FunctionalTests
|
|||
|
||||
private static void WaitForExitOrKill(Process process)
|
||||
{
|
||||
process.WaitForExit(1000);
|
||||
process.WaitForExit(5 * 1000);
|
||||
if (!process.HasExited)
|
||||
{
|
||||
process.Kill();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.Net.Component.4.6.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.2.SDK",
|
||||
"Microsoft.Net.Component.4.7.2.TargetingPack",
|
||||
"Microsoft.VisualStudio.Workload.ManagedDesktop",
|
||||
"Microsoft.VisualStudio.Workload.NetCoreTools",
|
||||
"Microsoft.VisualStudio.Workload.NetWeb",
|
||||
"Microsoft.VisualStudio.Workload.VisualStudioExtension"
|
||||
]
|
||||
}
|
||||
|
|
@ -97,6 +97,14 @@ namespace Microsoft.AspNetCore.Cors.Infrastructure
|
|||
}
|
||||
namespace Microsoft.AspNetCore.Http
|
||||
{
|
||||
public partial class BadHttpRequestException : System.IO.IOException
|
||||
{
|
||||
public BadHttpRequestException(string message) { }
|
||||
public BadHttpRequestException(string message, System.Exception innerException) { }
|
||||
public BadHttpRequestException(string message, int statusCode) { }
|
||||
public BadHttpRequestException(string message, int statusCode, System.Exception innerException) { }
|
||||
public int StatusCode { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } }
|
||||
}
|
||||
public abstract partial class ConnectionInfo
|
||||
{
|
||||
protected ConnectionInfo() { }
|
||||
|
|
|
|||
|
|
@ -0,0 +1,60 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace Microsoft.AspNetCore.Http
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents an HTTP request error
|
||||
/// </summary>
|
||||
public class BadHttpRequestException : IOException
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="BadHttpRequestException"/> class.
|
||||
/// </summary>
|
||||
/// <param name="message">The message to associate with this exception.</param>
|
||||
/// <param name="statusCode">The HTTP status code to associate with this exception.</param>
|
||||
public BadHttpRequestException(string message, int statusCode)
|
||||
: base(message)
|
||||
{
|
||||
StatusCode = statusCode;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="BadHttpRequestException"/> class with the <see cref="StatusCode"/> set to 400 Bad Request.
|
||||
/// </summary>
|
||||
/// <param name="message">The message to associate with this exception</param>
|
||||
public BadHttpRequestException(string message)
|
||||
: base(message)
|
||||
{
|
||||
StatusCode = StatusCodes.Status400BadRequest;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="BadHttpRequestException"/> class.
|
||||
/// </summary>
|
||||
/// <param name="message">The message to associate with this exception.</param>
|
||||
/// <param name="statusCode">The HTTP status code to associate with this exception.</param>
|
||||
/// <param name="innerException">The inner exception to associate with this exception</param>
|
||||
public BadHttpRequestException(string message, int statusCode, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
StatusCode = statusCode;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="BadHttpRequestException"/> class with the <see cref="StatusCode"/> set to 400 Bad Request.
|
||||
/// </summary>
|
||||
/// <param name="message">The message to associate with this exception</param>
|
||||
/// <param name="innerException">The inner exception to associate with this exception</param>
|
||||
public BadHttpRequestException(string message, Exception innerException)
|
||||
: base(message, innerException)
|
||||
{
|
||||
StatusCode = StatusCodes.Status400BadRequest;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the HTTP status code for this exception.
|
||||
/// </summary>
|
||||
public int StatusCode { get; }
|
||||
}
|
||||
}
|
||||
|
|
@ -43,6 +43,7 @@ namespace Microsoft.AspNetCore.Http.Extensions
|
|||
public partial class QueryBuilder : System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, string>>, System.Collections.IEnumerable
|
||||
{
|
||||
public QueryBuilder() { }
|
||||
public QueryBuilder(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>> parameters) { }
|
||||
public QueryBuilder(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, string>> parameters) { }
|
||||
public void Add(string key, System.Collections.Generic.IEnumerable<string> values) { }
|
||||
public void Add(string key, string value) { }
|
||||
|
|
|
|||
|
|
@ -3,8 +3,10 @@
|
|||
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.Encodings.Web;
|
||||
using Microsoft.Extensions.Primitives;
|
||||
|
||||
namespace Microsoft.AspNetCore.Http.Extensions
|
||||
{
|
||||
|
|
@ -23,6 +25,12 @@ namespace Microsoft.AspNetCore.Http.Extensions
|
|||
_params = new List<KeyValuePair<string, string>>(parameters);
|
||||
}
|
||||
|
||||
public QueryBuilder(IEnumerable<KeyValuePair<string, StringValues>> parameters)
|
||||
: this(parameters.SelectMany(kvp => kvp.Value, (kvp, v) => KeyValuePair.Create(kvp.Key, v)))
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void Add(string key, IEnumerable<string> values)
|
||||
{
|
||||
foreach (var value in values)
|
||||
|
|
@ -78,4 +86,4 @@ namespace Microsoft.AspNetCore.Http.Extensions
|
|||
return _params.GetEnumerator();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.Extensions.Primitives;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Http.Extensions
|
||||
|
|
@ -70,6 +71,18 @@ namespace Microsoft.AspNetCore.Http.Extensions
|
|||
Assert.Equal("?key1=value1&key2=value2&key3=value3", builder.ToString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AddMultipleValuesViaConstructor_WithStringValues()
|
||||
{
|
||||
var builder = new QueryBuilder(new[]
|
||||
{
|
||||
new KeyValuePair<string, StringValues>("key1", new StringValues(new [] { "value1", string.Empty, "value3" })),
|
||||
new KeyValuePair<string, StringValues>("key2", string.Empty),
|
||||
new KeyValuePair<string, StringValues>("key3", StringValues.Empty)
|
||||
});
|
||||
Assert.Equal("?key1=value1&key1=&key1=value3&key2=", builder.ToString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AddMultipleValuesViaInitializer_AddedInOrder()
|
||||
{
|
||||
|
|
@ -95,4 +108,4 @@ namespace Microsoft.AspNetCore.Http.Extensions
|
|||
Assert.Equal("?key1=value1&key2=value2&key3=value3", builder1.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -216,6 +216,8 @@ namespace Microsoft.AspNetCore.WebUtilities
|
|||
public static partial class QueryHelpers
|
||||
{
|
||||
public static string AddQueryString(string uri, System.Collections.Generic.IDictionary<string, string> queryString) { throw null; }
|
||||
public static string AddQueryString(string uri, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>> queryString) { throw null; }
|
||||
public static string AddQueryString(string uri, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, string>> queryString) { throw null; }
|
||||
public static string AddQueryString(string uri, string name, string value) { throw null; }
|
||||
public static System.Collections.Generic.Dictionary<string, Microsoft.Extensions.Primitives.StringValues> ParseNullableQuery(string queryString) { throw null; }
|
||||
public static System.Collections.Generic.Dictionary<string, Microsoft.Extensions.Primitives.StringValues> ParseQuery(string queryString) { throw null; }
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.Encodings.Web;
|
||||
using Microsoft.Extensions.Primitives;
|
||||
|
|
@ -46,10 +47,10 @@ namespace Microsoft.AspNetCore.WebUtilities
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Append the given query keys and values to the uri.
|
||||
/// Append the given query keys and values to the URI.
|
||||
/// </summary>
|
||||
/// <param name="uri">The base uri.</param>
|
||||
/// <param name="queryString">A collection of name value query pairs to append.</param>
|
||||
/// <param name="uri">The base URI.</param>
|
||||
/// <param name="queryString">A dictionary of query keys and values to append.</param>
|
||||
/// <returns>The combined result.</returns>
|
||||
/// <exception cref="ArgumentNullException"><paramref name="uri"/> is <c>null</c>.</exception>
|
||||
/// <exception cref="ArgumentNullException"><paramref name="queryString"/> is <c>null</c>.</exception>
|
||||
|
|
@ -68,7 +69,38 @@ namespace Microsoft.AspNetCore.WebUtilities
|
|||
return AddQueryString(uri, (IEnumerable<KeyValuePair<string, string>>)queryString);
|
||||
}
|
||||
|
||||
private static string AddQueryString(
|
||||
/// <summary>
|
||||
/// Append the given query keys and values to the URI.
|
||||
/// </summary>
|
||||
/// <param name="uri">The base URI.</param>
|
||||
/// <param name="queryString">A collection of query names and values to append.</param>
|
||||
/// <returns>The combined result.</returns>
|
||||
/// <exception cref="ArgumentNullException"><paramref name="uri"/> is <c>null</c>.</exception>
|
||||
/// <exception cref="ArgumentNullException"><paramref name="queryString"/> is <c>null</c>.</exception>
|
||||
public static string AddQueryString(string uri, IEnumerable<KeyValuePair<string, StringValues>> queryString)
|
||||
{
|
||||
if (uri == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(uri));
|
||||
}
|
||||
|
||||
if (queryString == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(queryString));
|
||||
}
|
||||
|
||||
return AddQueryString(uri, queryString.SelectMany(kvp => kvp.Value, (kvp, v) => KeyValuePair.Create(kvp.Key, v)));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Append the given query keys and values to the URI.
|
||||
/// </summary>
|
||||
/// <param name="uri">The base URI.</param>
|
||||
/// <param name="queryString">A collection of name value query pairs to append.</param>
|
||||
/// <returns>The combined result.</returns>
|
||||
/// <exception cref="ArgumentNullException"><paramref name="uri"/> is <c>null</c>.</exception>
|
||||
/// <exception cref="ArgumentNullException"><paramref name="queryString"/> is <c>null</c>.</exception>
|
||||
public static string AddQueryString(
|
||||
string uri,
|
||||
IEnumerable<KeyValuePair<string, string>> queryString)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.Extensions.Primitives;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.WebUtilities
|
||||
|
|
@ -119,5 +120,37 @@ namespace Microsoft.AspNetCore.WebUtilities
|
|||
var result = QueryHelpers.AddQueryString(uri, queryStrings);
|
||||
Assert.Equal(expectedUri, result);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("http://contoso.com/", "http://contoso.com/?param1=value1¶m1=¶m1=value3¶m2=")]
|
||||
[InlineData("http://contoso.com/someaction", "http://contoso.com/someaction?param1=value1¶m1=¶m1=value3¶m2=")]
|
||||
[InlineData("http://contoso.com/someaction?param2=1", "http://contoso.com/someaction?param2=1¶m1=value1¶m1=¶m1=value3¶m2=")]
|
||||
[InlineData("http://contoso.com/some#action", "http://contoso.com/some?param1=value1¶m1=¶m1=value3¶m2=#action")]
|
||||
[InlineData("http://contoso.com/some?param2=1#action", "http://contoso.com/some?param2=1¶m1=value1¶m1=¶m1=value3¶m2=#action")]
|
||||
[InlineData("http://contoso.com/#action", "http://contoso.com/?param1=value1¶m1=¶m1=value3¶m2=#action")]
|
||||
[InlineData(
|
||||
"http://contoso.com/someaction?q=test#anchor?value",
|
||||
"http://contoso.com/someaction?q=test¶m1=value1¶m1=¶m1=value3¶m2=#anchor?value")]
|
||||
[InlineData(
|
||||
"http://contoso.com/someaction#anchor?stuff",
|
||||
"http://contoso.com/someaction?param1=value1¶m1=¶m1=value3¶m2=#anchor?stuff")]
|
||||
[InlineData(
|
||||
"http://contoso.com/someaction?name?something",
|
||||
"http://contoso.com/someaction?name?something¶m1=value1¶m1=¶m1=value3¶m2=")]
|
||||
[InlineData(
|
||||
"http://contoso.com/someaction#name#something",
|
||||
"http://contoso.com/someaction?param1=value1¶m1=¶m1=value3¶m2=#name#something")]
|
||||
public void AddQueryStringWithEnumerableOfKeysAndStringValues(string uri, string expectedUri)
|
||||
{
|
||||
var queryStrings = new Dictionary<string, StringValues>()
|
||||
{
|
||||
{ "param1", new StringValues(new [] { "value1", string.Empty, "value3" }) },
|
||||
{ "param2", string.Empty },
|
||||
{ "param3", StringValues.Empty }
|
||||
};
|
||||
|
||||
var result = QueryHelpers.AddQueryString(uri, queryStrings);
|
||||
Assert.Equal(expectedUri, result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.Net.Component.4.6.1.TargetingPack",
|
||||
"Microsoft.Net.Component.4.7.2.SDK",
|
||||
"Microsoft.Net.Component.4.7.2.TargetingPack",
|
||||
"Microsoft.VisualStudio.Workload.ManagedDesktop",
|
||||
"Microsoft.VisualStudio.Workload.NetCoreTools",
|
||||
"Microsoft.VisualStudio.Workload.NetWeb",
|
||||
"Microsoft.VisualStudio.Workload.VisualStudioExtension"
|
||||
]
|
||||
}
|
||||
|
|
@ -23,7 +23,6 @@ namespace Microsoft.AspNetCore.ApiAuthorization.IdentityServer
|
|||
X509KeyStorageFlags.DefaultKeySet);
|
||||
|
||||
[ConditionalFact]
|
||||
[SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/6720")]
|
||||
[FrameworkSkipCondition(RuntimeFrameworks.CLR)]
|
||||
public void Configure_AddsDevelopmentKeyFromConfiguration()
|
||||
{
|
||||
|
|
@ -64,7 +63,7 @@ namespace Microsoft.AspNetCore.ApiAuthorization.IdentityServer
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/6720")]
|
||||
[SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/6720", Queues = "OSX.1014.Amd64;OSX.1014.Amd64.Open")]
|
||||
public void Configure_LoadsPfxCertificateCredentialFromConfiguration()
|
||||
{
|
||||
// Arrange
|
||||
|
|
@ -94,7 +93,7 @@ namespace Microsoft.AspNetCore.ApiAuthorization.IdentityServer
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/6720")]
|
||||
[SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/6720", Queues = "OSX.1014.Amd64;OSX.1014.Amd64.Open")]
|
||||
public void Configure_LoadsCertificateStoreCertificateCredentialFromConfiguration()
|
||||
{
|
||||
try
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ namespace Microsoft.AspNetCore.ApiAuthorization.IdentityServer.Configuration
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/6720")]
|
||||
[SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/6720", Queues = "OSX.1014.Amd64;OSX.1014.Amd64.Open")]
|
||||
public static void LoadFromStoreCert_SkipsCertificatesNotYetValid()
|
||||
{
|
||||
try
|
||||
|
|
@ -82,7 +82,7 @@ namespace Microsoft.AspNetCore.ApiAuthorization.IdentityServer.Configuration
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/6720")]
|
||||
[SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/6720", Queues = "OSX.1014.Amd64;OSX.1014.Amd64.Open")]
|
||||
public static void LoadFromStoreCert_PrefersCertificatesCloserToExpirationDate()
|
||||
{
|
||||
try
|
||||
|
|
@ -105,7 +105,7 @@ namespace Microsoft.AspNetCore.ApiAuthorization.IdentityServer.Configuration
|
|||
}
|
||||
|
||||
[ConditionalFact]
|
||||
[SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/6720")]
|
||||
[SkipOnHelix("https://github.com/dotnet/aspnetcore/issues/6720", Queues = "OSX.1014.Amd64;OSX.1014.Amd64.Open")]
|
||||
public static void LoadFromStoreCert_SkipsExpiredCertificates()
|
||||
{
|
||||
try
|
||||
|
|
|
|||
|
|
@ -188,6 +188,8 @@ namespace Microsoft.Extensions.DependencyInjection
|
|||
public static Microsoft.AspNetCore.Identity.IdentityBuilder AddIdentity<TUser, TRole>(this Microsoft.Extensions.DependencyInjection.IServiceCollection services) where TUser : class where TRole : class { throw null; }
|
||||
public static Microsoft.AspNetCore.Identity.IdentityBuilder AddIdentity<TUser, TRole>(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action<Microsoft.AspNetCore.Identity.IdentityOptions> setupAction) where TUser : class where TRole : class { throw null; }
|
||||
public static Microsoft.Extensions.DependencyInjection.IServiceCollection ConfigureApplicationCookie(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action<Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationOptions> configure) { throw null; }
|
||||
public static Microsoft.Extensions.DependencyInjection.IServiceCollection ConfigureApplicationCookie<TService>(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action<Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationOptions, TService> configure) where TService : class { throw null; }
|
||||
public static Microsoft.Extensions.DependencyInjection.IServiceCollection ConfigureExternalCookie(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action<Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationOptions> configure) { throw null; }
|
||||
public static Microsoft.Extensions.DependencyInjection.IServiceCollection ConfigureExternalCookie<TService>(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action<Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationOptions, TService> configure) where TService : class { throw null; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue