Merge pull request #2 from aspnet/master

merge
This commit is contained in:
Isaac Levin 2019-06-03 16:38:22 -04:00 committed by GitHub
commit 979782fdfe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
961 changed files with 30529 additions and 18549 deletions

View File

@ -17,6 +17,10 @@ pr:
include:
- '*'
variables:
- name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE
value: true
jobs:
- template: jobs/default-build.yml
parameters:
@ -46,14 +50,14 @@ jobs:
# if they have already been signed. This results in slower builds due to re-submitting the same .nupkg many times for signing.
# The sign settings have been configured to
- script: ./eng/scripts/cibuild.cmd -arch x64 /p:DisableCodeSigning=true /bl:artifacts/log/build.x64.binlog
- script: ./eng/scripts/cibuild.cmd -BuildNative -arch x64 /p:DisableCodeSigning=true /bl:artifacts/log/build.x64.binlog
displayName: Build x64
# TODO: make it possible to build for one Windows architecture at a time
# This is going to actually build x86 native assets. See https://github.com/aspnet/AspNetCore/issues/7196
# Build the x86 shared framework
# Set DisableSignCheck because we'll run sign check in an explicit step after installers build
- script: ./eng/scripts/cibuild.cmd -arch x86 -NoRestore /t:BuildSharedFx /p:DisableCodeSigning=true /bl:artifacts/log/build.x86.binlog
- script: ./eng/scripts/cibuild.cmd -arch x86 -NoRestore -BuildNative /t:BuildSharedFx /p:DisableCodeSigning=true /bl:artifacts/log/build.x86.binlog
displayName: Build x86
# This is in a separate build step with -forceCoreMsbuild to workaround MAX_PATH limitations - https://github.com/Microsoft/msbuild/issues/53
@ -324,7 +328,7 @@ jobs:
agentOs: Windows
isTestingJob: true
buildScript: ./eng/scripts/cibuild.cmd
buildArgs: -test "/p:SkipIISBackwardsCompatibilityTests=true /p:SkipIISTests=true /p:SkipIISExpressTests=true /p:SkipIISForwardsCompatibilityTests=true /p:RunTemplateTests=false /p:BuildSiteExtensions=false"
buildArgs: -test -BuildNative "/p:SkipIISBackwardsCompatibilityTests=true /p:SkipIISTests=true /p:SkipIISExpressTests=true /p:SkipIISForwardsCompatibilityTests=true /p:RunTemplateTests=false /p:BuildSiteExtensions=false"
beforeBuild:
- powershell: "& ./src/Servers/IIS/tools/UpdateIISExpressCertificate.ps1; & ./src/Servers/IIS/tools/update_schema.ps1"
displayName: Setup IISExpress test certificates and schema

View File

@ -15,7 +15,7 @@ jobs:
agentOs: Windows
timeoutInMinutes: 240
steps:
- script: .\build.cmd -all -ci /t:Helix /p:IsHelixJob=true /bl:$env:BUILD_SOURCESDIRECTORY\artifacts\log\SendToHelix.binlog
- script: .\build.cmd -all -ci /p:BuildNative=true /t:Helix /p:IsHelixJob=true /bl:$env:BUILD_SOURCESDIRECTORY\artifacts\log\SendToHelix.binlog
displayName: Run build.cmd helix target
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken) # We need to set this env var to publish helix results to Azure Dev Ops

View File

@ -28,6 +28,12 @@ Our team members also monitor several other discussion forums:
## Contributing code and content
We accept fixes and features! Here are some resources to help you get started on how to contribute code or new content.
* Look at the [Contributor documentation](/docs/) to get started on building the source code on your own.
* ["Help wanted" issues](https://github.com/aspnet/AspNetCore/labels/help%20wanted) - these issues are up for grabs. Comment on an issue if you want to create a fix.
* ["Good first issue" issues](https://github.com/aspnet/AspNetCore/labels/good%20first%20issue) - we think these are a good for newcomers.
### Identifying the scale
If you would like to contribute to one of our repositories, first identify the scale of what you would like to contribute. If it is small (grammar/spelling or a bug fix) feel free to start working on a fix. If you are submitting a feature or substantial code contribution, please discuss it with the team and ensure it follows the product roadmap. You might also read these two blogs posts on contributing code: [Open Source Contribution Etiquette](http://tirania.org/blog/archive/2010/Dec-31.html) by Miguel de Icaza and [Don't "Push" Your Pull Requests](https://www.igvita.com/2011/12/19/dont-push-your-pull-requests/) by Ilya Grigorik. All code submissions will be rigorously reviewed and tested by the ASP.NET and Entity Framework teams, and only those that meet an extremely high bar for both quality and design/roadmap appropriateness will be merged into the source.

View File

@ -1,6 +1,15 @@
<Project>
<Import Project="version.props" />
<!--
These imports look funny.
Eventually they will be replaced by a simplified import that brings in
the entire Arcade SDK. For now, we're moving onto Arcade one piece at a time.
-->
<Import Project="../tools/DefaultVersions.Generated.props" Sdk="Microsoft.DotNet.Arcade.Sdk" />
<Import Project="eng\Versions.props" />
<Import Project="../tools/Compiler.props" Sdk="Microsoft.DotNet.Arcade.Sdk" Condition="'$(UsingToolMicrosoftNetCompilers)' == 'true'"/>
<PropertyGroup>
<Product>Microsoft ASP.NET Core</Product>
@ -121,7 +130,6 @@
<OutDirName Condition="'$(IsReferenceAssemblyProject)' == 'true'">$(MSBuildProjectName)-ref</OutDirName>
</PropertyGroup>
<Import Project="eng\Versions.props" />
<Import Project="build\sources.props" />
<!-- Artifacts layout -->
@ -190,7 +198,7 @@
<!-- Projects which reference Microsoft.AspNetCore.Mvc.Testing should import this targets file to ensure dependency .deps.json files are copied into test output. -->
<MvcTestingTargets>$(MSBuildThisFileDirectory)src\Mvc\Mvc.Testing\src\Microsoft.AspNetCore.Mvc.Testing.targets</MvcTestingTargets>
<!-- IIS native projects can only be built on Windows for x86 and x64. -->
<BuildIisNativeProjects Condition="'$(BuildNative)' != 'false' AND '$(TargetOsName)' == 'win' AND ('$(TargetArchitecture)' == 'x86' OR '$(TargetArchitecture)' == 'x64')">true</BuildIisNativeProjects>
<BuildIisNativeProjects Condition="'$(BuildNative)' == 'true' AND '$(TargetOsName)' == 'win' AND ('$(TargetArchitecture)' == 'x86' OR '$(TargetArchitecture)' == 'x64')">true</BuildIisNativeProjects>
<!-- This property is shared by several projects to layout the AspNetCore.App targeting pack for installers -->
<TargetingPackLayoutRoot>$(ArtifactsObjDir)TargetingPack.Layout\$(Configuration)\</TargetingPackLayoutRoot>
<!-- This property is shared by several projects to layout the AspNetCore.App shared framework for installers -->

View File

@ -81,9 +81,12 @@
<ItemGroup>
<KnownFrameworkReference Update="Microsoft.NETCore.App">
<LatestRuntimeFrameworkVersion>$(MicrosoftNETCoreAppPackageVersion)</LatestRuntimeFrameworkVersion>
<DefaultRuntimeFrameworkVersion Condition="'$(IsServicingBuild)' != 'true'">$(MicrosoftNETCoreAppPackageVersion)</DefaultRuntimeFrameworkVersion>
<TargetingPackVersion Condition="'$(IsServicingBuild)' != 'true'">$(MicrosoftNETCoreAppPackageVersion)</TargetingPackVersion>
<!-- Always update the 'latest version', whether the repo is servicing or not. -->
<LatestRuntimeFrameworkVersion Condition="'%(TargetFramework)' == '$(DefaultNetCoreTargetFramework)'">$(MicrosoftNETCoreAppPackageVersion)</LatestRuntimeFrameworkVersion>
<!-- Only update the default runtime version for preview builds. -->
<DefaultRuntimeFrameworkVersion Condition="'%(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' and '$(IsServicingBuild)' != 'true'">$(MicrosoftNETCoreAppPackageVersion)</DefaultRuntimeFrameworkVersion>
<!-- Only update the targeting pack version for preview builds. -->
<TargetingPackVersion Condition="'%(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' and '$(IsServicingBuild)' != 'true'">$(MicrosoftNETCoreAppPackageVersion)</TargetingPackVersion>
</KnownFrameworkReference>
<KnownFrameworkReference Condition="'$(UseAspNetCoreSharedRuntime)' != 'true'" Remove="Microsoft.AspNetCore.App" />
@ -95,6 +98,10 @@
<TargetingPackVersion Condition="'$(IsServicingBuild)' != 'true'">$(SharedFxVersion)</TargetingPackVersion>
</KnownFrameworkReference>
<KnownFrameworkReference Update="NETStandard.Library">
<TargetingPackVersion Condition="'%(TargetFramework)' == 'netstandard2.1' and '$(IsServicingBuild)' != 'true'">$(NETStandardLibraryRefPackageVersion)</TargetingPackVersion>
</KnownFrameworkReference>
</ItemGroup>
<!-- Copied from https://github.com/dotnet/arcade/blob/9d0fd805448082c8d55e2434607b481bca70a146/src/Microsoft.DotNet.Arcade.Sdk/tools/RepositoryInfo.targets#L12-L38 -->

15
SECURITY.md Normal file
View File

@ -0,0 +1,15 @@
# Security Policy
## Supported Versions
The .NET Core and ASP.NET Core support policy, including supported versions can be found at the [.NET Core Support Policy Page](https://dotnet.microsoft.com/platform/support/policy/dotnet-core).
## Reporting a Vulnerability
Security issues and bugs should be reported privately, via email, to the Microsoft Security Response Center (MSRC) secure@microsoft.com.
You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your
original message. Further information, including the MSRC PGP key, can be found in the [Security TechCenter](https://technet.microsoft.com/en-us/security/ff852094.aspx).
Reports via MSRC may qualify for the .NET Core Bug Bounty. Details of the .NET Core Bug Bounty including terms and conditions are at [https://aka.ms/corebounty](https://aka.ms/corebounty).
Please do not open issues for anything you think might have a security implication.

View File

@ -258,13 +258,12 @@ elseif ($Projects) {
}
# When adding new sub-group build flags, add them to this check.
elseif((-not $BuildNative) -and (-not $BuildManaged) -and (-not $BuildNodeJS) -and (-not $BuildInstallers) -and (-not $BuildJava)) {
Write-Warning "No default group of projects was specified, so building the 'managed' and 'native' subsets of projects. Run ``build.cmd -help`` for more details."
Write-Warning "No default group of projects was specified, so building the 'managed' subsets of projects. Run ``build.cmd -help`` for more details."
# This goal of this is to pick a sensible default for `build.cmd` with zero arguments.
# Now that we support subfolder invokations of build.cmd, we will be pushing to have build.cmd build everything (-all) by default
$BuildManaged = $true
$BuildNative = $true
}
if ($BuildInstallers) { $MSBuildArguments += "/p:BuildInstallers=true" }

View File

@ -3,6 +3,13 @@
<TargetRuntimeIdentifier Condition="'$(TargetRuntimeIdentifier)' == ''">$(TargetOsName)-$(TargetArchitecture)</TargetRuntimeIdentifier>
</PropertyGroup>
<PropertyGroup Condition=" '$(BuildAllProjects)' == 'true' ">
<BuildNative>true</BuildNative>
<BuildManaged>true</BuildManaged>
<BuildNodeJS>true</BuildNodeJS>
<BuildJava>true</BuildJava>
</PropertyGroup>
<PropertyGroup>
<!-- This repo does not have solutions to build -->
<DisableDefaultTargets>true</DisableDefaultTargets>
@ -27,13 +34,7 @@
<DisableSignCheckStrongName>true</DisableSignCheckStrongName>
<SharedSourcesFolder>$(RepoRoot)src\Shared\</SharedSourcesFolder>
</PropertyGroup>
<PropertyGroup Condition=" '$(BuildAllProjects)' == 'true' ">
<BuildNative>true</BuildNative>
<BuildManaged>true</BuildManaged>
<BuildNodeJS>true</BuildNodeJS>
<BuildJava>true</BuildJava>
<BuildIisNativeProjects Condition="'$(TargetOsName)' == 'win' AND ('$(TargetArchitecture)' == 'x86' OR '$(TargetArchitecture)' == 'x64')">true</BuildIisNativeProjects>
</PropertyGroup>
<!-- These projects are always excluded, even when -projects is specified on command line. -->

View File

@ -10,10 +10,12 @@
<RestoreSources Condition=" '$(DotNetBuildOffline)' != 'true' ">
$(RestoreSources);
https://dotnetfeed.blob.core.windows.net/aspnet-blazor/index.json;
https://dotnetfeed.blob.core.windows.net/aspnet-extensions/index.json;
https://dotnetfeed.blob.core.windows.net/aspnet-entityframeworkcore/index.json;
https://dotnetfeed.blob.core.windows.net/aspnet-aspnetcore-tooling/index.json;
https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json;
https://dotnet.myget.org/F/roslyn/api/v3/index.json;
https://grpc.jfrog.io/grpc/api/nuget/v3/grpc-nuget-dev;
https://api.nuget.org/v3/index.json;
</RestoreSources>
@ -27,11 +29,6 @@
$(RestoreSources);
https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json;
</RestoreSources>
<!-- TODO remove this once we move Microsoft.AspNetCore.Blazor.Mono to a non-myget feed -->
<RestoreSources>
$(RestoreSources);
https://dotnet.myget.org/F/blazor-dev/api/v3/index.json;
</RestoreSources>
<!-- In an orchestrated build, this may be overriden to other Azure feeds. -->
<DotNetAssetRootUrl Condition="'$(DotNetAssetRootUrl)'==''">https://dotnetcli.blob.core.windows.net/dotnet/</DotNetAssetRootUrl>

View File

@ -33,4 +33,4 @@ These are available in the [Visual Studio Preview](https://www.visualstudio.com/
* *Enable Source Link support* in Visual Studio should be enabled.
* *Enable source server support* in Visual should be enabled.
* *Enable Just My Code* should be disabled
* Add https://dotnet.myget.org/F/aspnetcore-dev/symbols to the list of symbol servers in the Visual Studio Debugging options
* Under Symbols enable the *Microsoft Symbol Servers* setting.

View File

@ -5,6 +5,7 @@ T:Microsoft.AspNetCore.Mvc.ApplicationModels.PageParameterModel
T:Microsoft.AspNetCore.Mvc.ApplicationModels.PagePropertyModel
# Manually implemented - https://github.com/aspnet/AspNetCore/issues/8825
T:Microsoft.AspNetCore.Components.AuthorizeView
T:Microsoft.AspNetCore.Components.AuthorizeViewCore
T:Microsoft.AspNetCore.Components.CascadingAuthenticationState
T:Microsoft.AspNetCore.Components.CascadingValue`1
T:Microsoft.AspNetCore.Components.Forms.DataAnnotationsValidator
@ -18,6 +19,6 @@ T:Microsoft.AspNetCore.Components.Forms.InputText
T:Microsoft.AspNetCore.Components.Forms.InputTextArea
T:Microsoft.AspNetCore.Components.Forms.ValidationMessage`1
T:Microsoft.AspNetCore.Components.Forms.ValidationSummary
T:Microsoft.AspNetCore.Components.Layouts.LayoutDisplay
T:Microsoft.AspNetCore.Components.PageDisplay
T:Microsoft.AspNetCore.Components.Routing.NavLink
T:Microsoft.AspNetCore.Components.Routing.Router

View File

@ -8,7 +8,7 @@
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Identity.Specification.Tests" ProjectPath="$(RepoRoot)src\Identity\Specification.Tests\src\Microsoft.AspNetCore.Identity.Specification.Tests.csproj" />
<ProjectReferenceProvider Include="Microsoft.Web.Xdt.Extensions" ProjectPath="$(RepoRoot)src\SiteExtensions\Microsoft.Web.Xdt.Extensions\src\Microsoft.Web.Xdt.Extensions.csproj" />
<ProjectReferenceProvider Include="Microsoft.AspNetCore.DeveloperCertificates.XPlat" ProjectPath="$(RepoRoot)src\Tools\FirstRunCertGenerator\src\Microsoft.AspNetCore.DeveloperCertificates.XPlat.csproj" />
<ProjectReferenceProvider Include="Microsoft.Extensions.ApiDescription.Tasks" ProjectPath="$(RepoRoot)src\Mvc\Extensions.ApiDescription.Client\src\Microsoft.Extensions.ApiDescription.Client.csproj" />
<ProjectReferenceProvider Include="Microsoft.Extensions.ApiDescription.Client" ProjectPath="$(RepoRoot)src\Mvc\Extensions.ApiDescription.Client\src\Microsoft.Extensions.ApiDescription.Client.csproj" />
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SignalR.Specification.Tests" ProjectPath="$(RepoRoot)src\SignalR\server\Specification.Tests\src\Microsoft.AspNetCore.SignalR.Specification.Tests.csproj" />
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Blazor.Build" ProjectPath="$(RepoRoot)src\Components\Blazor\Build\src\Microsoft.AspNetCore.Blazor.Build.csproj" />
<ProjectReferenceProvider Include="Microsoft.AspNetCore" ProjectPath="$(RepoRoot)src\DefaultBuilder\src\Microsoft.AspNetCore.csproj" RefProjectPath="$(RepoRoot)src\DefaultBuilder\ref\Microsoft.AspNetCore.csproj" />
@ -54,9 +54,9 @@
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Server.IIS" ProjectPath="$(RepoRoot)src\Servers\IIS\IIS\src\Microsoft.AspNetCore.Server.IIS.csproj" RefProjectPath="$(RepoRoot)src\Servers\IIS\IIS\ref\Microsoft.AspNetCore.Server.IIS.csproj" />
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Server.Kestrel.Core" ProjectPath="$(RepoRoot)src\Servers\Kestrel\Core\src\Microsoft.AspNetCore.Server.Kestrel.Core.csproj" RefProjectPath="$(RepoRoot)src\Servers\Kestrel\Core\ref\Microsoft.AspNetCore.Server.Kestrel.Core.csproj" />
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Server.Kestrel" ProjectPath="$(RepoRoot)src\Servers\Kestrel\Kestrel\src\Microsoft.AspNetCore.Server.Kestrel.csproj" RefProjectPath="$(RepoRoot)src\Servers\Kestrel\Kestrel\ref\Microsoft.AspNetCore.Server.Kestrel.csproj" />
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions" ProjectPath="$(RepoRoot)src\Servers\Kestrel\Transport.Abstractions\src\Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.csproj" RefProjectPath="$(RepoRoot)src\Servers\Kestrel\Transport.Abstractions\ref\Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.csproj" />
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" ProjectPath="$(RepoRoot)src\Servers\Kestrel\Transport.Libuv\src\Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.csproj" RefProjectPath="$(RepoRoot)src\Servers\Kestrel\Transport.Libuv\ref\Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.csproj" />
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets" ProjectPath="$(RepoRoot)src\Servers\Kestrel\Transport.Sockets\src\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.csproj" RefProjectPath="$(RepoRoot)src\Servers\Kestrel\Transport.Sockets\ref\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.csproj" />
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.Certificate" ProjectPath="$(RepoRoot)src\Security\Authentication\Certificate\src\Microsoft.AspNetCore.Authentication.Certificate.csproj" RefProjectPath="$(RepoRoot)src\Security\Authentication\Certificate\ref\Microsoft.AspNetCore.Authentication.Certificate.csproj" />
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.Cookies" ProjectPath="$(RepoRoot)src\Security\Authentication\Cookies\src\Microsoft.AspNetCore.Authentication.Cookies.csproj" RefProjectPath="$(RepoRoot)src\Security\Authentication\Cookies\ref\Microsoft.AspNetCore.Authentication.Cookies.csproj" />
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication" ProjectPath="$(RepoRoot)src\Security\Authentication\Core\src\Microsoft.AspNetCore.Authentication.csproj" RefProjectPath="$(RepoRoot)src\Security\Authentication\Core\ref\Microsoft.AspNetCore.Authentication.csproj" />
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Authentication.Facebook" ProjectPath="$(RepoRoot)src\Security\Authentication\Facebook\src\Microsoft.AspNetCore.Authentication.Facebook.csproj" RefProjectPath="$(RepoRoot)src\Security\Authentication\Facebook\ref\Microsoft.AspNetCore.Authentication.Facebook.csproj" />

62
eng/PublishSymbols.proj Normal file
View File

@ -0,0 +1,62 @@
<Project Sdk="Microsoft.NET.Sdk" DefaultTargets="RunPublishSymbols">
<PropertyGroup>
<!-- TFM doesn't matter. These settings are required to make NuGet happy so we can restore required MSBuild packages. -->
<TargetFramework>netcoreapp3.0</TargetFramework>
<DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
<ManifestsPath>artifacts\manifests\</ManifestsPath>
<DisablePackageReferenceRestrictions>true</DisablePackageReferenceRestrictions>
<!-- Expire symbols after 10 years (or so) by default. -->
<DotNetSymbolExpirationInDays Condition="'$(DotNetSymbolExpirationInDays)' == ''">3650</DotNetSymbolExpirationInDays>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.SymbolUploader.Build.Task" Version="$(MicrosoftSymbolUploaderBuildTaskPackageVersion)" />
</ItemGroup>
<!--
Initially copied from
https://github.com/dotnet/core-setup/blob/19390ee14c2824c39db393aff75a95788ececebf/publish/publish.proj#L242-L286
-->
<Target Name="RunPublishSymbols">
<ItemGroup>
<SymbolServerConfig
Include="MSDL (public symbols server)"
Url="https://microsoftpublicsymbols.artifacts.visualstudio.com/DefaultCollection"
Pat="$(MicrosoftSymbolServerPAT)" />
<SymbolServerConfig
Include="SymWeb (internal symbols server)"
Url="https://microsoft.artifacts.visualstudio.com/DefaultCollection"
Pat="$(SymwebSymbolServerPAT)" />
</ItemGroup>
<Error
Condition="'%(SymbolServerConfig.Pat)' == ''"
Text="Missing symbol server publish PAT for '%(SymbolServerConfig.Identity)'" />
<!-- Could also set SymbolDryRun, SymbolExpirationInDays or SymbolVerboseLogging. -->
<ItemGroup>
<SymbolServerPublishProject
Include="$(MSBuildProjectFullPath)"
AdditionalProperties="
SymbolServerDescription=%(SymbolServerConfig.Identity);
SymbolServerPath=%(SymbolServerConfig.Url);
SymbolServerPAT=%(SymbolServerConfig.Pat)" />
</ItemGroup>
<!-- Note: Can't run in parallel. Symbol publish opens the zips exclusively. -->
<MSBuild
Projects="@(SymbolServerPublishProject)"
Targets="SetupPublishSymbols;PublishSymbols"
Properties="SymbolDirectory=$(SymbolDirectory)" />
</Target>
<Target Name="SetupPublishSymbols">
<ItemGroup>
<SymbolPackagesToPublish Include="$(SymbolDirectory)/**/*.symbols.nupkg" />
</ItemGroup>
<Message Importance="High" Text="Publishing symbol packages to '$(SymbolServerDescription)':%0A @(SymbolPackagesToPublish, '%0A ')"/>
</Target>
</Project>

View File

@ -83,7 +83,7 @@
These compilation references are necessary to compile netstandard2.0 assemblies which are in the shared framework.
This references are part of Microsoft.NETCore.App, so are listed here as references to be used during compilation only.
-->
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0' or '$(TargetFramework)' == 'netstandard2.1'">
<_CompilationOnlyReference Include="System.Buffers" />
<_CompilationOnlyReference Include="System.ComponentModel.Annotations" />
<_CompilationOnlyReference Include="System.Runtime.CompilerServices.Unsafe" />

View File

@ -9,7 +9,9 @@
<ItemGroup>
<!-- These assemblies are available as both a NuGet package and in the shared framework -->
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Http.Features" />
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Metadata" />
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Connections.Abstractions" />
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Authorization" />
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.Http.Connections.Common" />
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.SignalR.Protocols.Json" />
<AspNetCoreAppReferenceAndPackage Include="Microsoft.AspNetCore.SignalR.Common" />
@ -33,7 +35,6 @@
<AspNetCoreAppReference Include="Microsoft.AspNetCore.Http.Abstractions" />
<AspNetCoreAppReference Include="Microsoft.AspNetCore.Http.Extensions" />
<AspNetCoreAppReference Include="Microsoft.AspNetCore.Http" />
<AspNetCoreAppReference Include="Microsoft.AspNetCore.Metadata" />
<AspNetCoreAppReference Include="Microsoft.AspNetCore.Routing.Abstractions" />
<AspNetCoreAppReference Include="Microsoft.AspNetCore.Routing" />
<AspNetCoreAppReference Include="Microsoft.AspNetCore.WebUtilities" />
@ -46,12 +47,10 @@
<AspNetCoreAppReference Include="Microsoft.AspNetCore.Server.IIS" />
<AspNetCoreAppReference Include="Microsoft.AspNetCore.Server.Kestrel.Core" />
<AspNetCoreAppReference Include="Microsoft.AspNetCore.Server.Kestrel" />
<AspNetCoreAppReference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions" />
<AspNetCoreAppReference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets" />
<AspNetCoreAppReference Include="Microsoft.AspNetCore.Authentication.Cookies" />
<AspNetCoreAppReference Include="Microsoft.AspNetCore.Authentication" />
<AspNetCoreAppReference Include="Microsoft.AspNetCore.Authentication.OAuth" />
<AspNetCoreAppReference Include="Microsoft.AspNetCore.Authorization" />
<AspNetCoreAppReference Include="Microsoft.AspNetCore.Authorization.Policy" />
<AspNetCoreAppReference Include="Microsoft.AspNetCore.CookiePolicy" />
<AspNetCoreAppReference Include="Microsoft.AspNetCore.Cors" />

View File

@ -9,392 +9,404 @@
-->
<Dependencies>
<ProductDependencies>
<Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="3.0.0-preview6.19270.2">
<Dependency Name="Microsoft.AspNetCore.Blazor.Mono" Version="0.10.0-preview7.19303.2">
<Uri>https://github.com/aspnet/Blazor</Uri>
<Sha>9bc8036bf68fd159fffa56f93f8b2471bf96efd4</Sha>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.Razor.Language" Version="3.0.0-preview6.19303.1">
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
<Sha>62e33dac1d5ec88ab15d7af694c1adf29ffc4c59</Sha>
<Sha>0156446a321deedadd175bdb32c8d1526be5f28d</Sha>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="3.0.0-preview6.19270.2">
<Dependency Name="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="3.0.0-preview6.19303.1">
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
<Sha>62e33dac1d5ec88ab15d7af694c1adf29ffc4c59</Sha>
<Sha>0156446a321deedadd175bdb32c8d1526be5f28d</Sha>
</Dependency>
<Dependency Name="Microsoft.CodeAnalysis.Razor" Version="3.0.0-preview6.19270.2">
<Dependency Name="Microsoft.CodeAnalysis.Razor" Version="3.0.0-preview6.19303.1">
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
<Sha>62e33dac1d5ec88ab15d7af694c1adf29ffc4c59</Sha>
<Sha>0156446a321deedadd175bdb32c8d1526be5f28d</Sha>
</Dependency>
<Dependency Name="Microsoft.NET.Sdk.Razor" Version="3.0.0-preview6.19270.2">
<Dependency Name="Microsoft.NET.Sdk.Razor" Version="3.0.0-preview6.19303.1">
<Uri>https://github.com/aspnet/AspNetCore-Tooling</Uri>
<Sha>62e33dac1d5ec88ab15d7af694c1adf29ffc4c59</Sha>
<Sha>0156446a321deedadd175bdb32c8d1526be5f28d</Sha>
</Dependency>
<Dependency Name="dotnet-ef" Version="3.0.0-preview6.19252.4" Pinned="true">
<Dependency Name="dotnet-ef" Version="3.0.0-preview6.19303.2">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>08edd86216be4857b45b47bf0a9b29e98e525c05</Sha>
<Sha>fd63251e1941070438c27577ed6b0068e33a139a</Sha>
</Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="3.0.0-preview6.19252.4" Pinned="true">
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="3.0.0-preview6.19303.2">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>08edd86216be4857b45b47bf0a9b29e98e525c05</Sha>
<Sha>fd63251e1941070438c27577ed6b0068e33a139a</Sha>
</Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="3.0.0-preview6.19252.4" Pinned="true">
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="3.0.0-preview6.19303.2">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>08edd86216be4857b45b47bf0a9b29e98e525c05</Sha>
<Sha>fd63251e1941070438c27577ed6b0068e33a139a</Sha>
</Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0-preview6.19252.4" Pinned="true">
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0-preview6.19303.2">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>08edd86216be4857b45b47bf0a9b29e98e525c05</Sha>
<Sha>fd63251e1941070438c27577ed6b0068e33a139a</Sha>
</Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0-preview6.19252.4" Pinned="true">
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0-preview6.19303.2">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>08edd86216be4857b45b47bf0a9b29e98e525c05</Sha>
<Sha>fd63251e1941070438c27577ed6b0068e33a139a</Sha>
</Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0-preview6.19252.4" Pinned="true">
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0-preview6.19303.2">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>08edd86216be4857b45b47bf0a9b29e98e525c05</Sha>
<Sha>fd63251e1941070438c27577ed6b0068e33a139a</Sha>
</Dependency>
<Dependency Name="Microsoft.EntityFrameworkCore" Version="3.0.0-preview6.19252.4" Pinned="true">
<Dependency Name="Microsoft.EntityFrameworkCore" Version="3.0.0-preview6.19303.2">
<Uri>https://github.com/aspnet/EntityFrameworkCore</Uri>
<Sha>08edd86216be4857b45b47bf0a9b29e98e525c05</Sha>
<Sha>fd63251e1941070438c27577ed6b0068e33a139a</Sha>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.AspNetCore.Analyzer.Testing" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.BenchmarkRunner.Sources" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.AspNetCore.BenchmarkRunner.Sources" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.ActivatorUtilities.Sources" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.ActivatorUtilities.Sources" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Caching.SqlServer" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Caching.StackExchangeRedis" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.CommandLineUtils.Sources" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.CommandLineUtils.Sources" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.KeyPerFile" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Configuration.KeyPerFile" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Configuration" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Configuration" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.DiagnosticAdapter" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Diagnostics.HealthChecks" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Embedded" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.FileProviders.Embedded" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.HashCodeCombiner.Sources" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.HashCodeCombiner.Sources" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Hosting" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Hosting" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Http" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Http" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Localization.Abstractions" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Localization.Abstractions" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Localization" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Localization" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Logging.AzureAppServices" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging.Testing" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Logging.Testing" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Logging" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Logging" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.ObjectPool" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.ObjectPool" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Options" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Options" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.ParameterDefaultValue.Sources" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.ParameterDefaultValue.Sources" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.Primitives" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.Primitives" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.TypeNameHelper.Sources" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.TypeNameHelper.Sources" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.ValueStopwatch.Sources" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.ValueStopwatch.Sources" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.WebEncoders" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Extensions.WebEncoders" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.Internal.Extensions.Refs" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.Internal.Extensions.Refs" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.JSInterop" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.JSInterop" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Mono.WebAssembly.Interop" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Mono.WebAssembly.Interop" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.CSharp" Version="4.6.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Dependency Name="Microsoft.CSharp" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="Microsoft.Win32.Registry" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="System.ComponentModel.Annotations" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="System.Data.SqlClient" Version="4.7.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App" Pinned="true">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
</Dependency>
<Dependency Name="Microsoft.Win32.Registry" Version="4.6.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Dependency Name="System.Diagnostics.EventLog" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="System.ComponentModel.Annotations" Version="4.6.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Dependency Name="System.IO.Pipelines" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="System.Data.SqlClient" Version="4.7.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Dependency Name="System.Net.Http.WinHttpHandler" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="System.Diagnostics.EventLog" Version="4.6.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="System.IO.Pipelines" Version="4.6.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Dependency Name="System.Reflection.Metadata" Version="1.7.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="System.Net.Http.WinHttpHandler" Version="4.6.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="4.6.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Dependency Name="System.Security.Cryptography.Cng" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="System.Reflection.Metadata" Version="1.7.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Dependency Name="System.Security.Cryptography.Pkcs" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="4.6.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Dependency Name="System.Security.Cryptography.Xml" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="System.Security.Cryptography.Cng" Version="4.6.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Dependency Name="System.Security.Permissions" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="System.Security.Cryptography.Pkcs" Version="4.6.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Dependency Name="System.Security.Principal.Windows" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="System.Security.Cryptography.Xml" Version="4.6.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Dependency Name="System.ServiceProcess.ServiceController" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="System.Security.Permissions" Version="4.6.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Dependency Name="System.Text.Encodings.Web" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="System.Security.Principal.Windows" Version="4.6.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Dependency Name="System.Text.Json" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="System.ServiceProcess.ServiceController" Version="4.6.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Dependency Name="System.Threading.Channels" Version="4.6.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="System.Text.Encodings.Web" Version="4.6.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
</Dependency>
<Dependency Name="System.Text.Json" Version="4.6.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
</Dependency>
<Dependency Name="System.Threading.Channels" Version="4.6.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
</Dependency>
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="3.0.0-preview6-27714-15" CoherentParentDependency="Microsoft.Extensions.Logging">
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="3.0.0-preview6-27730-01" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/core-setup</Uri>
<Sha>73226d6f119c757813f47b0dc021e8700d525f71</Sha>
<Sha>63abc77da6d99470caa5bfa0465afe244105e595</Sha>
</Dependency>
<Dependency Name="Microsoft.NETCore.App" Version="3.0.0-preview6-27714-15" CoherentParentDependency="Microsoft.Extensions.Logging">
<Dependency Name="Microsoft.NETCore.App" Version="3.0.0-preview6-27730-01" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/core-setup</Uri>
<Sha>73226d6f119c757813f47b0dc021e8700d525f71</Sha>
<Sha>63abc77da6d99470caa5bfa0465afe244105e595</Sha>
</Dependency>
<Dependency Name="NETStandard.Library.Ref" Version="2.1.0-preview6-27730-01" CoherentParentDependency="Microsoft.Extensions.Logging">
<Uri>https://github.com/dotnet/core-setup</Uri>
<Sha>63abc77da6d99470caa5bfa0465afe244105e595</Sha>
</Dependency>
</ProductDependencies>
<ToolsetDependencies>
<!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
<Dependency Name="Microsoft.NETCore.Platforms" Version="3.0.0-preview6.19264.9" CoherentParentDependency="Microsoft.NETCore.App">
<Dependency Name="Microsoft.NETCore.Platforms" Version="3.0.0-preview6.19279.8" CoherentParentDependency="Microsoft.NETCore.App">
<Uri>https://github.com/dotnet/corefx</Uri>
<Sha>a28176b5ec68b6da1472934fe9493790d1665cae</Sha>
<Sha>e23119d577e644d2c2a25419c88c1181681358e0</Sha>
</Dependency>
<Dependency Name="Internal.AspNetCore.Analyzers" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Internal.AspNetCore.Analyzers" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.19270.1">
<Dependency Name="Microsoft.DotNet.GenAPI" Version="1.0.0-beta.19302.2">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>e913fb3b02d4089a91ff91c041c5f6e7c29038b0</Sha>
<Sha>e6a5d5f970bb872451c6310ae34eda31041fb552</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="2.0.0-beta.19270.1">
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="1.0.0-beta.19302.2">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>e913fb3b02d4089a91ff91c041c5f6e7c29038b0</Sha>
<Sha>e6a5d5f970bb872451c6310ae34eda31041fb552</Sha>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.Testing" Version="3.0.0-preview6.19265.2" CoherentParentDependency="Microsoft.CodeAnalysis.Razor">
<Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="2.0.0-beta.19302.2">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>e6a5d5f970bb872451c6310ae34eda31041fb552</Sha>
</Dependency>
<Dependency Name="Microsoft.AspNetCore.Testing" Version="3.0.0-preview6.19280.1" CoherentParentDependency="Microsoft.EntityFrameworkCore">
<Uri>https://github.com/aspnet/Extensions</Uri>
<Sha>8dfb4ece7ca9a6dea14264dafc38a0c953874559</Sha>
<Sha>bfea1edf9e2e9a5465f331517149c4f543ac2ba6</Sha>
</Dependency>
</ToolsetDependencies>
</Dependencies>

View File

@ -5,6 +5,10 @@
-->
<Project>
<PropertyGroup Label="Arcade settings">
<!-- Opt-in to using the version of the Roslyn compiler bundled with Arcade. -->
<UsingToolMicrosoftNetCompilers Condition="'$(MSBuildProjectExtension)' == '.csproj' or '$(MSBuildProjectExtension)' == '.fsproj' or '$(MSBuildProjectExtension)' == '.vbproj'">true</UsingToolMicrosoftNetCompilers>
</PropertyGroup>
<!--
These versions should ONLY be updated by automation.
@ -17,107 +21,110 @@
-->
<PropertyGroup Label="Automated">
<!-- Packages from dotnet/arcade -->
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19270.1</MicrosoftDotNetGenAPIPackageVersion>
<MicrosoftDotNetGenAPIPackageVersion>1.0.0-beta.19302.2</MicrosoftDotNetGenAPIPackageVersion>
<!-- Packages from dotnet/core-setup -->
<MicrosoftExtensionsDependencyModelPackageVersion>3.0.0-preview6-27714-15</MicrosoftExtensionsDependencyModelPackageVersion>
<MicrosoftNETCoreAppPackageVersion>3.0.0-preview6-27714-15</MicrosoftNETCoreAppPackageVersion>
<MicrosoftExtensionsDependencyModelPackageVersion>3.0.0-preview6-27730-01</MicrosoftExtensionsDependencyModelPackageVersion>
<MicrosoftNETCoreAppPackageVersion>3.0.0-preview6-27730-01</MicrosoftNETCoreAppPackageVersion>
<NETStandardLibraryRefPackageVersion>2.1.0-preview6-27730-01</NETStandardLibraryRefPackageVersion>
<!-- Packages from dotnet/corefx -->
<MicrosoftCSharpPackageVersion>4.6.0-preview6.19264.9</MicrosoftCSharpPackageVersion>
<MicrosoftWin32RegistryPackageVersion>4.6.0-preview6.19264.9</MicrosoftWin32RegistryPackageVersion>
<SystemComponentModelAnnotationsPackageVersion>4.6.0-preview6.19264.9</SystemComponentModelAnnotationsPackageVersion>
<MicrosoftCSharpPackageVersion>4.6.0-preview6.19279.8</MicrosoftCSharpPackageVersion>
<MicrosoftWin32RegistryPackageVersion>4.6.0-preview6.19279.8</MicrosoftWin32RegistryPackageVersion>
<SystemComponentModelAnnotationsPackageVersion>4.6.0-preview6.19279.8</SystemComponentModelAnnotationsPackageVersion>
<SystemDataSqlClientPackageVersion>4.7.0-preview6.19264.9</SystemDataSqlClientPackageVersion>
<SystemDiagnosticsEventLogPackageVersion>4.6.0-preview6.19264.9</SystemDiagnosticsEventLogPackageVersion>
<SystemIOPipelinesPackageVersion>4.6.0-preview6.19264.9</SystemIOPipelinesPackageVersion>
<SystemNetHttpWinHttpHandlerPackageVersion>4.6.0-preview6.19264.9</SystemNetHttpWinHttpHandlerPackageVersion>
<SystemNetWebSocketsWebSocketProtocolPackageVersion>4.6.0-preview6.19264.9</SystemNetWebSocketsWebSocketProtocolPackageVersion>
<SystemReflectionMetadataPackageVersion>1.7.0-preview6.19264.9</SystemReflectionMetadataPackageVersion>
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.6.0-preview6.19264.9</SystemRuntimeCompilerServicesUnsafePackageVersion>
<SystemSecurityCryptographyCngPackageVersion>4.6.0-preview6.19264.9</SystemSecurityCryptographyCngPackageVersion>
<SystemSecurityCryptographyPkcsPackageVersion>4.6.0-preview6.19264.9</SystemSecurityCryptographyPkcsPackageVersion>
<SystemSecurityCryptographyXmlPackageVersion>4.6.0-preview6.19264.9</SystemSecurityCryptographyXmlPackageVersion>
<SystemSecurityPermissionsPackageVersion>4.6.0-preview6.19264.9</SystemSecurityPermissionsPackageVersion>
<SystemSecurityPrincipalWindowsPackageVersion>4.6.0-preview6.19264.9</SystemSecurityPrincipalWindowsPackageVersion>
<SystemServiceProcessServiceControllerPackageVersion>4.6.0-preview6.19264.9</SystemServiceProcessServiceControllerPackageVersion>
<SystemTextEncodingsWebPackageVersion>4.6.0-preview6.19264.9</SystemTextEncodingsWebPackageVersion>
<SystemTextJsonPackageVersion>4.6.0-preview6.19264.9</SystemTextJsonPackageVersion>
<SystemThreadingChannelsPackageVersion>4.6.0-preview6.19264.9</SystemThreadingChannelsPackageVersion>
<SystemDiagnosticsEventLogPackageVersion>4.6.0-preview6.19279.8</SystemDiagnosticsEventLogPackageVersion>
<SystemIOPipelinesPackageVersion>4.6.0-preview6.19279.8</SystemIOPipelinesPackageVersion>
<SystemNetHttpWinHttpHandlerPackageVersion>4.6.0-preview6.19279.8</SystemNetHttpWinHttpHandlerPackageVersion>
<SystemNetWebSocketsWebSocketProtocolPackageVersion>4.6.0-preview6.19279.8</SystemNetWebSocketsWebSocketProtocolPackageVersion>
<SystemReflectionMetadataPackageVersion>1.7.0-preview6.19279.8</SystemReflectionMetadataPackageVersion>
<SystemRuntimeCompilerServicesUnsafePackageVersion>4.6.0-preview6.19279.8</SystemRuntimeCompilerServicesUnsafePackageVersion>
<SystemSecurityCryptographyCngPackageVersion>4.6.0-preview6.19279.8</SystemSecurityCryptographyCngPackageVersion>
<SystemSecurityCryptographyPkcsPackageVersion>4.6.0-preview6.19279.8</SystemSecurityCryptographyPkcsPackageVersion>
<SystemSecurityCryptographyXmlPackageVersion>4.6.0-preview6.19279.8</SystemSecurityCryptographyXmlPackageVersion>
<SystemSecurityPermissionsPackageVersion>4.6.0-preview6.19279.8</SystemSecurityPermissionsPackageVersion>
<SystemSecurityPrincipalWindowsPackageVersion>4.6.0-preview6.19279.8</SystemSecurityPrincipalWindowsPackageVersion>
<SystemServiceProcessServiceControllerPackageVersion>4.6.0-preview6.19279.8</SystemServiceProcessServiceControllerPackageVersion>
<SystemTextEncodingsWebPackageVersion>4.6.0-preview6.19279.8</SystemTextEncodingsWebPackageVersion>
<SystemTextJsonPackageVersion>4.6.0-preview6.19279.8</SystemTextJsonPackageVersion>
<SystemThreadingChannelsPackageVersion>4.6.0-preview6.19279.8</SystemThreadingChannelsPackageVersion>
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
<MicrosoftNETCorePlatformsPackageVersion>3.0.0-preview6.19264.9</MicrosoftNETCorePlatformsPackageVersion>
<MicrosoftNETCorePlatformsPackageVersion>3.0.0-preview6.19279.8</MicrosoftNETCorePlatformsPackageVersion>
<!-- Packages from aspnet/Blazor -->
<MicrosoftAspNetCoreBlazorMonoPackageVersion>0.10.0-preview7.19303.2</MicrosoftAspNetCoreBlazorMonoPackageVersion>
<!-- Packages from aspnet/Extensions -->
<InternalAspNetCoreAnalyzersPackageVersion>3.0.0-preview6.19265.2</InternalAspNetCoreAnalyzersPackageVersion>
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.0.0-preview6.19265.2</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.0.0-preview6.19265.2</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
<MicrosoftAspNetCoreTestingPackageVersion>3.0.0-preview6.19265.2</MicrosoftAspNetCoreTestingPackageVersion>
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsCachingAbstractionsPackageVersion>
<MicrosoftExtensionsCachingMemoryPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsCachingMemoryPackageVersion>
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsCachingSqlServerPackageVersion>
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsConfigurationBinderPackageVersion>
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
<MicrosoftExtensionsConfigurationIniPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsConfigurationIniPackageVersion>
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsConfigurationJsonPackageVersion>
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
<MicrosoftExtensionsConfigurationPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsConfigurationPackageVersion>
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsConfigurationXmlPackageVersion>
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsDependencyInjectionPackageVersion>
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsFileProvidersCompositePackageVersion>
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsHostingAbstractionsPackageVersion>
<MicrosoftExtensionsHostingPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsHostingPackageVersion>
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
<MicrosoftExtensionsHttpPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsHttpPackageVersion>
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
<MicrosoftExtensionsLocalizationPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsLocalizationPackageVersion>
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsLoggingConfigurationPackageVersion>
<MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsLoggingConsolePackageVersion>
<MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsLoggingDebugPackageVersion>
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsLoggingEventSourcePackageVersion>
<MicrosoftExtensionsLoggingEventLogPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsLoggingEventLogPackageVersion>
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsLoggingPackageVersion>
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsLoggingTestingPackageVersion>
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
<MicrosoftExtensionsObjectPoolPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsObjectPoolPackageVersion>
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsOptionsPackageVersion>
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
<MicrosoftExtensionsPrimitivesPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsPrimitivesPackageVersion>
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
<MicrosoftExtensionsWebEncodersPackageVersion>3.0.0-preview6.19265.2</MicrosoftExtensionsWebEncodersPackageVersion>
<MicrosoftInternalExtensionsRefsPackageVersion>3.0.0-preview6.19265.2</MicrosoftInternalExtensionsRefsPackageVersion>
<MicrosoftJSInteropPackageVersion>3.0.0-preview6.19265.2</MicrosoftJSInteropPackageVersion>
<MonoWebAssemblyInteropPackageVersion>3.0.0-preview6.19265.2</MonoWebAssemblyInteropPackageVersion>
<InternalAspNetCoreAnalyzersPackageVersion>3.0.0-preview6.19280.1</InternalAspNetCoreAnalyzersPackageVersion>
<MicrosoftAspNetCoreAnalyzerTestingPackageVersion>3.0.0-preview6.19280.1</MicrosoftAspNetCoreAnalyzerTestingPackageVersion>
<MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>3.0.0-preview6.19280.1</MicrosoftAspNetCoreBenchmarkRunnerSourcesPackageVersion>
<MicrosoftAspNetCoreTestingPackageVersion>3.0.0-preview6.19280.1</MicrosoftAspNetCoreTestingPackageVersion>
<MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsActivatorUtilitiesSourcesPackageVersion>
<MicrosoftExtensionsCachingAbstractionsPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsCachingAbstractionsPackageVersion>
<MicrosoftExtensionsCachingMemoryPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsCachingMemoryPackageVersion>
<MicrosoftExtensionsCachingSqlServerPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsCachingSqlServerPackageVersion>
<MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsCachingStackExchangeRedisPackageVersion>
<MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
<MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsConfigurationAzureKeyVaultPackageVersion>
<MicrosoftExtensionsConfigurationBinderPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsConfigurationBinderPackageVersion>
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
<MicrosoftExtensionsConfigurationIniPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsConfigurationIniPackageVersion>
<MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsConfigurationJsonPackageVersion>
<MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsConfigurationKeyPerFilePackageVersion>
<MicrosoftExtensionsConfigurationPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsConfigurationPackageVersion>
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
<MicrosoftExtensionsConfigurationXmlPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsConfigurationXmlPackageVersion>
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
<MicrosoftExtensionsDependencyInjectionPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsDependencyInjectionPackageVersion>
<MicrosoftExtensionsDiagnosticAdapterPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsDiagnosticAdapterPackageVersion>
<MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsDiagnosticsHealthChecksAbstractionsPackageVersion>
<MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsDiagnosticsHealthChecksPackageVersion>
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
<MicrosoftExtensionsFileProvidersCompositePackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsFileProvidersCompositePackageVersion>
<MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsFileProvidersEmbeddedPackageVersion>
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
<MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsHashCodeCombinerSourcesPackageVersion>
<MicrosoftExtensionsHostingAbstractionsPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsHostingAbstractionsPackageVersion>
<MicrosoftExtensionsHostingPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsHostingPackageVersion>
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
<MicrosoftExtensionsHttpPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsHttpPackageVersion>
<MicrosoftExtensionsLocalizationAbstractionsPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsLocalizationAbstractionsPackageVersion>
<MicrosoftExtensionsLocalizationPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsLocalizationPackageVersion>
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
<MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsLoggingAzureAppServicesPackageVersion>
<MicrosoftExtensionsLoggingConfigurationPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsLoggingConfigurationPackageVersion>
<MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsLoggingConsolePackageVersion>
<MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsLoggingDebugPackageVersion>
<MicrosoftExtensionsLoggingEventSourcePackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsLoggingEventSourcePackageVersion>
<MicrosoftExtensionsLoggingEventLogPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsLoggingEventLogPackageVersion>
<MicrosoftExtensionsLoggingPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsLoggingPackageVersion>
<MicrosoftExtensionsLoggingTestingPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsLoggingTestingPackageVersion>
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
<MicrosoftExtensionsObjectPoolPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsObjectPoolPackageVersion>
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
<MicrosoftExtensionsOptionsPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsOptionsPackageVersion>
<MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsParameterDefaultValueSourcesPackageVersion>
<MicrosoftExtensionsPrimitivesPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsPrimitivesPackageVersion>
<MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsTypeNameHelperSourcesPackageVersion>
<MicrosoftExtensionsValueStopwatchSourcesPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsValueStopwatchSourcesPackageVersion>
<MicrosoftExtensionsWebEncodersPackageVersion>3.0.0-preview6.19280.1</MicrosoftExtensionsWebEncodersPackageVersion>
<MicrosoftInternalExtensionsRefsPackageVersion>3.0.0-preview6.19280.1</MicrosoftInternalExtensionsRefsPackageVersion>
<MicrosoftJSInteropPackageVersion>3.0.0-preview6.19280.1</MicrosoftJSInteropPackageVersion>
<MonoWebAssemblyInteropPackageVersion>3.0.0-preview6.19280.1</MonoWebAssemblyInteropPackageVersion>
<!-- Packages from aspnet/EntityFrameworkCore -->
<dotnetefPackageVersion>3.0.0-preview6.19252.4</dotnetefPackageVersion>
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.0.0-preview6.19252.4</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.0.0-preview6.19252.4</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.0.0-preview6.19252.4</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.0.0-preview6.19252.4</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.0.0-preview6.19252.4</MicrosoftEntityFrameworkCoreToolsPackageVersion>
<MicrosoftEntityFrameworkCorePackageVersion>3.0.0-preview6.19252.4</MicrosoftEntityFrameworkCorePackageVersion>
<dotnetefPackageVersion>3.0.0-preview6.19303.2</dotnetefPackageVersion>
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>3.0.0-preview6.19303.2</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>3.0.0-preview6.19303.2</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>3.0.0-preview6.19303.2</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>3.0.0-preview6.19303.2</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
<MicrosoftEntityFrameworkCoreToolsPackageVersion>3.0.0-preview6.19303.2</MicrosoftEntityFrameworkCoreToolsPackageVersion>
<MicrosoftEntityFrameworkCorePackageVersion>3.0.0-preview6.19303.2</MicrosoftEntityFrameworkCorePackageVersion>
<!-- Packages from aspnet/AspNetCore-Tooling -->
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>3.0.0-preview6.19270.2</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
<MicrosoftAspNetCoreRazorLanguagePackageVersion>3.0.0-preview6.19270.2</MicrosoftAspNetCoreRazorLanguagePackageVersion>
<MicrosoftCodeAnalysisRazorPackageVersion>3.0.0-preview6.19270.2</MicrosoftCodeAnalysisRazorPackageVersion>
<MicrosoftNETSdkRazorPackageVersion>3.0.0-preview6.19270.2</MicrosoftNETSdkRazorPackageVersion>
<MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>3.0.0-preview6.19303.1</MicrosoftAspNetCoreMvcRazorExtensionsPackageVersion>
<MicrosoftAspNetCoreRazorLanguagePackageVersion>3.0.0-preview6.19303.1</MicrosoftAspNetCoreRazorLanguagePackageVersion>
<MicrosoftCodeAnalysisRazorPackageVersion>3.0.0-preview6.19303.1</MicrosoftCodeAnalysisRazorPackageVersion>
<MicrosoftNETSdkRazorPackageVersion>3.0.0-preview6.19303.1</MicrosoftNETSdkRazorPackageVersion>
</PropertyGroup>
<!--
@ -136,6 +143,7 @@
<MicrosoftNETTestSdkPackageVersion>15.9.0</MicrosoftNETTestSdkPackageVersion>
<MicrosoftSourceLinkGitHubPackageVersion>1.0.0-beta2-18618-05</MicrosoftSourceLinkGitHubPackageVersion>
<MicrosoftSourceLinkVstsGitPackageVersion>1.0.0-beta2-18618-05</MicrosoftSourceLinkVstsGitPackageVersion>
<MicrosoftSymbolUploaderBuildTaskPackageVersion>1.0.0-beta-64023-03</MicrosoftSymbolUploaderBuildTaskPackageVersion>
<!-- Stable dotnet/corefx packages no longer updated for .NET Core 3 -->
<SystemBuffersPackageVersion>4.5.0</SystemBuffersPackageVersion>
<SystemCodeDomPackageVersion>4.4.0</SystemCodeDomPackageVersion>
@ -164,8 +172,6 @@
<MicrosoftWebAdministrationPackageVersion>11.1.0</MicrosoftWebAdministrationPackageVersion>
<MicrosoftWebXdtPackageVersion>1.4.0</MicrosoftWebXdtPackageVersion>
<SystemIdentityModelTokensJwtPackageVersion>5.3.0</SystemIdentityModelTokensJwtPackageVersion>
<!-- Dependencies for Blazor. -->
<MicrosoftAspNetCoreBlazorMonoPackageVersion>0.10.0-preview-20190523.1</MicrosoftAspNetCoreBlazorMonoPackageVersion>
<!-- Packages from 2.1/2.2 branches used for site extension build -->
<MicrosoftAspNetCoreAzureAppServicesSiteExtension21PackageVersion>2.1.1</MicrosoftAspNetCoreAzureAppServicesSiteExtension21PackageVersion>
<MicrosoftAspNetCoreAzureAppServicesSiteExtension22PackageVersion>2.2.0</MicrosoftAspNetCoreAzureAppServicesSiteExtension22PackageVersion>

View File

@ -0,0 +1,146 @@
# Source for this file was taken from https://github.com/microsoft/azure-pipelines-task-lib/blob/11c9439d4af17e6475d9fe058e6b2e03914d17e6/powershell/VstsTaskSdk/LoggingCommandFunctions.ps1
# NOTE: You should not be calling these method directly as they are likely to change. Instead you should be calling the Write-Pipeline* functions defined in tools.ps1
$script:loggingCommandPrefix = '##vso['
$script:loggingCommandEscapeMappings = @( # TODO: WHAT ABOUT "="? WHAT ABOUT "%"?
New-Object psobject -Property @{ Token = ';' ; Replacement = '%3B' }
New-Object psobject -Property @{ Token = "`r" ; Replacement = '%0D' }
New-Object psobject -Property @{ Token = "`n" ; Replacement = '%0A' }
New-Object psobject -Property @{ Token = "]" ; Replacement = '%5D' }
)
# TODO: BUG: Escape % ???
# TODO: Add test to verify don't need to escape "=".
<########################################
# Private functions.
########################################>
function Format-LoggingCommandData {
[CmdletBinding()]
param([string]$Value, [switch]$Reverse)
if (!$Value) {
return ''
}
if (!$Reverse) {
foreach ($mapping in $script:loggingCommandEscapeMappings) {
$Value = $Value.Replace($mapping.Token, $mapping.Replacement)
}
} else {
for ($i = $script:loggingCommandEscapeMappings.Length - 1 ; $i -ge 0 ; $i--) {
$mapping = $script:loggingCommandEscapeMappings[$i]
$Value = $Value.Replace($mapping.Replacement, $mapping.Token)
}
}
return $Value
}
function Format-LoggingCommand {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[string]$Area,
[Parameter(Mandatory = $true)]
[string]$Event,
[string]$Data,
[hashtable]$Properties)
# Append the preamble.
[System.Text.StringBuilder]$sb = New-Object -TypeName System.Text.StringBuilder
$null = $sb.Append($script:loggingCommandPrefix).Append($Area).Append('.').Append($Event)
# Append the properties.
if ($Properties) {
$first = $true
foreach ($key in $Properties.Keys) {
[string]$value = Format-LoggingCommandData $Properties[$key]
if ($value) {
if ($first) {
$null = $sb.Append(' ')
$first = $false
} else {
$null = $sb.Append(';')
}
$null = $sb.Append("$key=$value")
}
}
}
# Append the tail and output the value.
$Data = Format-LoggingCommandData $Data
$sb.Append(']').Append($Data).ToString()
}
function Write-LoggingCommand {
[CmdletBinding(DefaultParameterSetName = 'Parameters')]
param(
[Parameter(Mandatory = $true, ParameterSetName = 'Parameters')]
[string]$Area,
[Parameter(Mandatory = $true, ParameterSetName = 'Parameters')]
[string]$Event,
[Parameter(ParameterSetName = 'Parameters')]
[string]$Data,
[Parameter(ParameterSetName = 'Parameters')]
[hashtable]$Properties,
[Parameter(Mandatory = $true, ParameterSetName = 'Object')]
$Command,
[switch]$AsOutput)
if ($PSCmdlet.ParameterSetName -eq 'Object') {
Write-LoggingCommand -Area $Command.Area -Event $Command.Event -Data $Command.Data -Properties $Command.Properties -AsOutput:$AsOutput
return
}
$command = Format-LoggingCommand -Area $Area -Event $Event -Data $Data -Properties $Properties
if ($AsOutput) {
$command
} else {
Write-Host $command
}
}
function Write-LogIssue {
[CmdletBinding()]
param(
[ValidateSet('warning', 'error')]
[Parameter(Mandatory = $true)]
[string]$Type,
[string]$Message,
[string]$ErrCode,
[string]$SourcePath,
[string]$LineNumber,
[string]$ColumnNumber,
[switch]$AsOutput)
$command = Format-LoggingCommand -Area 'task' -Event 'logissue' -Data $Message -Properties @{
'type' = $Type
'code' = $ErrCode
'sourcepath' = $SourcePath
'linenumber' = $LineNumber
'columnnumber' = $ColumnNumber
}
if ($AsOutput) {
return $command
}
if ($Type -eq 'error') {
$foregroundColor = $host.PrivateData.ErrorForegroundColor
$backgroundColor = $host.PrivateData.ErrorBackgroundColor
if ($foregroundColor -isnot [System.ConsoleColor] -or $backgroundColor -isnot [System.ConsoleColor]) {
$foregroundColor = [System.ConsoleColor]::Red
$backgroundColor = [System.ConsoleColor]::Black
}
} else {
$foregroundColor = $host.PrivateData.WarningForegroundColor
$backgroundColor = $host.PrivateData.WarningBackgroundColor
if ($foregroundColor -isnot [System.ConsoleColor] -or $backgroundColor -isnot [System.ConsoleColor]) {
$foregroundColor = [System.ConsoleColor]::Yellow
$backgroundColor = [System.ConsoleColor]::Black
}
}
Write-Host $command -ForegroundColor $foregroundColor -BackgroundColor $backgroundColor
}

View File

@ -53,6 +53,8 @@
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'TOOLSET'">https://dotnetfeed.blob.core.windows.net/dotnet-toolset/index.json</TargetStaticFeed>
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'WINDOWSDESKTOP'">https://dotnetfeed.blob.core.windows.net/dotnet-windowsdesktop/index.json</TargetStaticFeed>
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'NUGETCLIENT'">https://dotnetfeed.blob.core.windows.net/nuget-nugetclient/index.json</TargetStaticFeed>
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'ASPNETENTITYFRAMEWORK6'">https://dotnetfeed.blob.core.windows.net/aspnet-entityframework6/index.json</TargetStaticFeed>
<TargetStaticFeed Condition="'$(ArtifactsCategory.ToUpper())' == 'ASPNETBLAZOR'">https://dotnetfeed.blob.core.windows.net/aspnet-blazor/index.json</TargetStaticFeed>
</PropertyGroup>
<Error

View File

@ -1,6 +1,7 @@
[CmdletBinding(PositionalBinding=$false)]
Param(
[string][Alias('c')]$configuration = "Debug",
[string]$platform = $null,
[string] $projects,
[string][Alias('v')]$verbosity = "minimal",
[string] $msbuildEngine = $null,
@ -29,6 +30,7 @@ Param(
function Print-Usage() {
Write-Host "Common settings:"
Write-Host " -configuration <value> Build configuration: 'Debug' or 'Release' (short: -c)"
Write-Host " -platform <value> Platform configuration: 'x86', 'x64' or any valid Platform value to pass to msbuild"
Write-Host " -verbosity <value> Msbuild verbosity: q[uiet], m[inimal], n[ormal], d[etailed], and diag[nostic] (short: -v)"
Write-Host " -binaryLog Output binary log (short: -bl)"
Write-Host " -help Print help and exit"
@ -77,6 +79,7 @@ function Build {
InitializeCustomToolset
$bl = if ($binaryLog) { "/bl:" + (Join-Path $LogDir "Build.binlog") } else { "" }
$platformArg = if ($platform) { "/p:Platform=$platform" } else { "" }
if ($projects) {
# Re-assign properties to a new variable because PowerShell doesn't let us append properties directly for unclear reasons.
@ -88,6 +91,7 @@ function Build {
MSBuild $toolsetBuildProj `
$bl `
$platformArg `
/p:Configuration=$configuration `
/p:RepoRoot=$RepoRoot `
/p:Restore=$restore `
@ -129,9 +133,8 @@ try {
Build
}
catch {
Write-Host $_
Write-Host $_.Exception
Write-Host $_.ScriptStackTrace
Write-PipelineTaskError -Message $_
ExitWithExitCode 1
}

View File

@ -66,6 +66,7 @@ ci=false
warn_as_error=true
node_reuse=true
binary_log=false
pipelines_log=false
projects=''
configuration='Debug'
@ -92,6 +93,9 @@ while [[ $# > 0 ]]; do
-binarylog|-bl)
binary_log=true
;;
-pipelineslog|-pl)
pipelines_log=true
;;
-restore|-r)
restore=true
;;
@ -146,6 +150,7 @@ while [[ $# > 0 ]]; do
done
if [[ "$ci" == true ]]; then
pipelines_log=true
binary_log=true
node_reuse=false
fi

View File

@ -0,0 +1,11 @@
deb http://deb.debian.org/debian buster main
deb-src http://deb.debian.org/debian buster main
deb http://deb.debian.org/debian-security/ buster/updates main
deb-src http://deb.debian.org/debian-security/ buster/updates main
deb http://deb.debian.org/debian buster-updates main
deb-src http://deb.debian.org/debian buster-updates main
deb http://deb.debian.org/debian buster-backports main contrib non-free
deb-src http://deb.debian.org/debian buster-backports main contrib non-free

View File

@ -0,0 +1,12 @@
deb http://deb.debian.org/debian stretch main
deb-src http://deb.debian.org/debian stretch main
deb http://deb.debian.org/debian-security/ stretch/updates main
deb-src http://deb.debian.org/debian-security/ stretch/updates main
deb http://deb.debian.org/debian stretch-updates main
deb-src http://deb.debian.org/debian stretch-updates main
deb http://deb.debian.org/debian stretch-backports main contrib non-free
deb-src http://deb.debian.org/debian stretch-backports main contrib non-free

View File

@ -2,7 +2,7 @@
usage()
{
echo "Usage: $0 [BuildArch] [LinuxCodeName] [lldbx.y] [--skipunmount] --rootfs <directory>]"
echo "Usage: $0 [BuildArch] [LinuxCodeName] [lldbx.y] [--skipunmount] --rootfsdir <directory>]"
echo "BuildArch can be: arm(default), armel, arm64, x86"
echo "LinuxCodeName - optional, Code name for Linux, can be: trusty, xenial(default), zesty, bionic, alpine. If BuildArch is armel, LinuxCodeName is jessie(default) or tizen."
echo "lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine"
@ -113,12 +113,12 @@ while :; do
__LinuxCodeName=trusty
fi
;;
xenial) # Ubunry 16.04
xenial) # Ubuntu 16.04
if [ "$__LinuxCodeName" != "jessie" ]; then
__LinuxCodeName=xenial
fi
;;
zesty) # Ununtu 17.04
zesty) # Ubuntu 17.04
if [ "$__LinuxCodeName" != "jessie" ]; then
__LinuxCodeName=zesty
fi
@ -132,7 +132,16 @@ while :; do
__LinuxCodeName=jessie
__UbuntuRepo="http://ftp.debian.org/debian/"
;;
# TBD Stretch -> Debian 9, Buster -> Debian 10
stretch) # Debian 9
__LinuxCodeName=stretch
__UbuntuRepo="http://ftp.debian.org/debian/"
__LLDB_Package="liblldb-6.0-dev"
;;
buster) # Debian 10
__LinuxCodeName=buster
__UbuntuRepo="http://ftp.debian.org/debian/"
__LLDB_Package="liblldb-6.0-dev"
;;
tizen)
if [ "$__BuildArch" != "armel" ]; then
echo "Tizen is available only for armel."

View File

@ -1,5 +1,6 @@
param (
$darcVersion = $null
$darcVersion = $null,
$versionEndpoint = "https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc-version?api-version=2019-01-16"
)
$verbosity = "m"
@ -16,13 +17,13 @@ function InstallDarcCli ($darcVersion) {
Invoke-Expression "& `"$dotnet`" tool uninstall $darcCliPackageName -g"
}
# Until we can anonymously query the BAR API for the latest arcade-services
# build applied to the PROD channel, this is hardcoded.
# If the user didn't explicitly specify the darc version,
# query the Maestro API for the correct version of darc to install.
if (-not $darcVersion) {
$darcVersion = '1.1.0-beta.19205.4'
$darcVersion = $(Invoke-WebRequest -Uri $versionEndpoint -UseBasicParsing).Content
}
$arcadeServicesSource = 'https://dotnetfeed.blob.core.windows.net/dotnet-arcade/index.json'
$arcadeServicesSource = 'https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json'
Write-Host "Installing Darc CLI version $darcVersion..."
Write-Host "You may need to restart your command window if this is the first dotnet tool you have installed."

View File

@ -1,7 +1,8 @@
#!/usr/bin/env bash
source="${BASH_SOURCE[0]}"
darcVersion="1.1.0-beta.19205.4"
darcVersion=''
versionEndpoint="https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc-version?api-version=2019-01-16"
while [[ $# > 0 ]]; do
opt="$(echo "$1" | awk '{print tolower($0)}')"
@ -10,6 +11,10 @@ while [[ $# > 0 ]]; do
darcVersion=$2
shift
;;
--versionendpoint)
versionEndpoint=$2
shift
;;
*)
echo "Invalid argument: $1"
usage
@ -33,6 +38,10 @@ verbosity=m
. "$scriptroot/tools.sh"
if [ -z "$darcVersion" ]; then
darcVersion=$(curl -X GET "$versionEndpoint" -H "accept: text/plain")
fi
function InstallDarcCli {
local darc_cli_package_name="microsoft.dotnet.darc"
@ -45,9 +54,9 @@ function InstallDarcCli {
echo $($dotnet_root/dotnet tool uninstall $darc_cli_package_name -g)
fi
local arcadeServicesSource="https://dotnetfeed.blob.core.windows.net/dotnet-arcade/index.json"
local arcadeServicesSource="https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json"
echo "Installing Darc CLI version $toolset_version..."
echo "Installing Darc CLI version $darcVersion..."
echo "You may need to restart your command shell if this is the first dotnet tool you have installed."
echo $($dotnet_root/dotnet tool install $darc_cli_package_name --version $darcVersion --add-source "$arcadeServicesSource" -v $verbosity -g)
}

View File

@ -8,9 +8,14 @@ Param(
. $PSScriptRoot\tools.ps1
$dotnetRoot = Join-Path $RepoRoot ".dotnet"
$installdir = $dotnetRoot
try {
$dotnetRoot = Join-Path $RepoRoot ".dotnet"
InstallDotNet $dotnetRoot $version $architecture $runtime $true
if ($architecture -and $architecture.Trim() -eq "x86") {
$installdir = Join-Path $installdir "x86"
}
InstallDotNet $installdir $version $architecture $runtime $true
}
catch {
Write-Host $_
@ -19,4 +24,4 @@ catch {
ExitWithExitCode 1
}
ExitWithExitCode 0
ExitWithExitCode 0

View File

@ -5,6 +5,7 @@ parameters:
HelixBuild: $(Build.BuildNumber) # required -- the build number Helix will use to identify this -- automatically set to the AzDO build number
HelixTargetQueues: '' # required -- semicolon delimited list of Helix queues to test on; see https://helix.dot.net/ for a list of queues
HelixAccessToken: '' # required -- access token to make Helix API requests; should be provided by the appropriate variable group
HelixConfiguration: '' # optional -- additional property attached to a job
HelixPreCommands: '' # optional -- commands to run before Helix work item execution
HelixPostCommands: '' # optional -- commands to run after Helix work item execution
WorkItemDirectory: '' # optional -- a payload directory to zip up and send to Helix; requires WorkItemCommand; incompatible with XUnitProjects
@ -35,6 +36,7 @@ steps:
HelixSource: ${{ parameters.HelixSource }}
HelixType: ${{ parameters.HelixType }}
HelixBuild: ${{ parameters.HelixBuild }}
HelixConfiguration: ${{ parameters.HelixConfiguration }}
HelixTargetQueues: ${{ parameters.HelixTargetQueues }}
HelixAccessToken: ${{ parameters.HelixAccessToken }}
HelixPreCommands: ${{ parameters.HelixPreCommands }}
@ -64,6 +66,7 @@ steps:
HelixSource: ${{ parameters.HelixSource }}
HelixType: ${{ parameters.HelixType }}
HelixBuild: ${{ parameters.HelixBuild }}
HelixConfiguration: ${{ parameters.HelixConfiguration }}
HelixTargetQueues: ${{ parameters.HelixTargetQueues }}
HelixAccessToken: ${{ parameters.HelixAccessToken }}
HelixPreCommands: ${{ parameters.HelixPreCommands }}

View File

@ -92,6 +92,68 @@ function Exec-Process([string]$command, [string]$commandArgs) {
}
}
function Write-PipelineTaskError {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[string]$Message,
[Parameter(Mandatory = $false)]
[string]$Type = 'error',
[string]$ErrCode,
[string]$SourcePath,
[string]$LineNumber,
[string]$ColumnNumber,
[switch]$AsOutput)
if(!$ci) {
if($Type -eq 'error') {
Write-Error $Message
return
}
elseif ($Type -eq 'warning') {
Write-Warning $Message
return
}
}
if(($Type -ne 'error') -and ($Type -ne 'warning')) {
Write-Host $Message
return
}
if(-not $PSBoundParameters.ContainsKey('Type')) {
$PSBoundParameters.Add('Type', 'error')
}
Write-LogIssue @PSBoundParameters
}
function Write-PipelineSetVariable {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[string]$Name,
[string]$Value,
[switch]$Secret,
[switch]$AsOutput)
if($ci) {
Write-LoggingCommand -Area 'task' -Event 'setvariable' -Data $Value -Properties @{
'variable' = $Name
'issecret' = $Secret
} -AsOutput:$AsOutput
}
}
function Write-PipelinePrependPath {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]$Path,
[switch]$AsOutput)
if($ci) {
Write-LoggingCommand -Area 'task' -Event 'prependpath' -Data $Path -AsOutput:$AsOutput
}
}
function InitializeDotNetCli([bool]$install) {
if (Test-Path variable:global:_DotNetInstallDir) {
return $global:_DotNetInstallDir
@ -134,7 +196,7 @@ function InitializeDotNetCli([bool]$install) {
if ($install) {
InstallDotNetSdk $dotnetRoot $dotnetSdkVersion
} else {
Write-Host "Unable to find dotnet with SDK version '$dotnetSdkVersion'" -ForegroundColor Red
Write-PipelineTaskError "Unable to find dotnet with SDK version '$dotnetSdkVersion'"
ExitWithExitCode 1
}
}
@ -147,12 +209,10 @@ function InitializeDotNetCli([bool]$install) {
# It also ensures that VS msbuild will use the downloaded sdk targets.
$env:PATH = "$dotnetRoot;$env:PATH"
if ($ci) {
# Make Sure that our bootstrapped dotnet cli is avaliable in future steps of the Azure Pipelines build
Write-Host "##vso[task.prependpath]$dotnetRoot"
Write-Host "##vso[task.setvariable variable=DOTNET_MULTILEVEL_LOOKUP]0"
Write-Host "##vso[task.setvariable variable=DOTNET_SKIP_FIRST_TIME_EXPERIENCE]1"
}
# Make Sure that our bootstrapped dotnet cli is avaliable in future steps of the Azure Pipelines build
Write-PipelinePrependPath -Path $dotnetRoot
Write-PipelineSetVariable -Name 'DOTNET_MULTILEVEL_LOOKUP' -Value '0'
Write-PipelineSetVariable -Name 'DOTNET_SKIP_FIRST_TIME_EXPERIENCE' -Value '1'
return $global:_DotNetInstallDir = $dotnetRoot
}
@ -184,7 +244,7 @@ function InstallDotNet([string] $dotnetRoot, [string] $version, [string] $archit
& $installScript @installParameters
if ($lastExitCode -ne 0) {
Write-Host "Failed to install dotnet cli (exit code '$lastExitCode')." -ForegroundColor Red
Write-PipelineTaskError -Message "Failed to install dotnet cli (exit code '$lastExitCode')."
ExitWithExitCode $lastExitCode
}
}
@ -213,7 +273,11 @@ function InitializeVisualStudioMSBuild([bool]$install, [object]$vsRequirements =
if ($env:VSINSTALLDIR -ne $null) {
$msbuildCmd = Get-Command "msbuild.exe" -ErrorAction SilentlyContinue
if ($msbuildCmd -ne $null) {
if ($msbuildCmd.Version -ge $vsMinVersion) {
# Workaround for https://github.com/dotnet/roslyn/issues/35793
# Due to this issue $msbuildCmd.Version returns 0.0.0.0 for msbuild.exe 16.2+
$msbuildVersion = [Version]::new((Get-Item $msbuildCmd.Path).VersionInfo.ProductVersion.Split(@('-', '+'))[0])
if ($msbuildVersion -ge $vsMinVersion) {
return $global:_MSBuildExe = $msbuildCmd.Path
}
@ -354,7 +418,7 @@ function InitializeBuildTool() {
if ($msbuildEngine -eq "dotnet") {
if (!$dotnetRoot) {
Write-Host "/global.json must specify 'tools.dotnet'." -ForegroundColor Red
Write-PipelineTaskError "/global.json must specify 'tools.dotnet'."
ExitWithExitCode 1
}
@ -363,13 +427,13 @@ function InitializeBuildTool() {
try {
$msbuildPath = InitializeVisualStudioMSBuild -install:$restore
} catch {
Write-Host $_ -ForegroundColor Red
Write-PipelineTaskError $_
ExitWithExitCode 1
}
$buildTool = @{ Path = $msbuildPath; Command = ""; Tool = "vs"; Framework = "net472" }
} else {
Write-Host "Unexpected value of -msbuildEngine: '$msbuildEngine'." -ForegroundColor Red
Write-PipelineTaskError "Unexpected value of -msbuildEngine: '$msbuildEngine'."
ExitWithExitCode 1
}
@ -386,7 +450,7 @@ function GetDefaultMSBuildEngine() {
return "dotnet"
}
Write-Host "-msbuildEngine must be specified, or /global.json must specify 'tools.dotnet' or 'tools.vs'." -ForegroundColor Red
Write-PipelineTaskError "-msbuildEngine must be specified, or /global.json must specify 'tools.dotnet' or 'tools.vs'."
ExitWithExitCode 1
}
@ -437,7 +501,7 @@ function InitializeToolset() {
}
if (-not $restore) {
Write-Host "Toolset version $toolsetVersion has not been restored." -ForegroundColor Red
Write-PipelineTaskError "Toolset version $toolsetVersion has not been restored."
ExitWithExitCode 1
}
@ -522,7 +586,7 @@ function MSBuild-Core() {
$exitCode = Exec-Process $buildTool.Path $cmdArgs
if ($exitCode -ne 0) {
Write-Host "Build failed." -ForegroundColor Red
Write-PipelineTaskError "Build failed."
$buildLog = GetMSBuildBinaryLogCommandLineArgument $args
if ($buildLog -ne $null) {
@ -550,6 +614,8 @@ function GetMSBuildBinaryLogCommandLineArgument($arguments) {
return $null
}
. $PSScriptRoot\LoggingCommandFunctions.ps1
$RepoRoot = Resolve-Path (Join-Path $PSScriptRoot "..\..")
$EngRoot = Resolve-Path (Join-Path $PSScriptRoot "..")
$ArtifactsDir = Join-Path $RepoRoot "artifacts"
@ -565,11 +631,8 @@ Create-Directory $ToolsetDir
Create-Directory $TempDir
Create-Directory $LogDir
if ($ci) {
Write-Host "##vso[task.setvariable variable=Artifacts]$ArtifactsDir"
Write-Host "##vso[task.setvariable variable=Artifacts.Toolset]$ToolsetDir"
Write-Host "##vso[task.setvariable variable=Artifacts.Log]$LogDir"
$env:TEMP = $TempDir
$env:TMP = $TempDir
}
Write-PipelineSetVariable -Name 'Artifacts' -Value $ArtifactsDir
Write-PipelineSetVariable -Name 'Artifacts.Toolset' -Value $ToolsetDir
Write-PipelineSetVariable -Name 'Artifacts.Log' -Value $LogDir
Write-PipelineSetVariable -Name 'TEMP' -Value $TempDir
Write-PipelineSetVariable -Name 'TMP' -Value $TempDir

View File

@ -1,8 +1,20 @@
#!/usr/bin/env bash
# Initialize variables if they aren't already defined.
# CI mode - set to true on CI server for PR validation build or official build.
ci=${ci:-false}
# Set to true to use the pipelines logger which will enable Azure logging output.
# https://github.com/Microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md
# This flag is meant as a temporary opt-opt for the feature while validate it across
# our consumers. It will be deleted in the future.
if [[ "$ci" == true ]]; then
pipelines_log=${pipelines_log:-true}
else
pipelines_log=${pipelines_log:-false}
fi
# Build configuration. Common values include 'Debug' and 'Release', but the repository may use other names.
configuration=${configuration:-'Debug'}
@ -40,6 +52,78 @@ else
use_global_nuget_cache=${use_global_nuget_cache:-true}
fi
function EmitError {
if [[ "$ci" != true ]]; then
echo "$@" >&2
return
fi
message_type="error"
sourcepath=''
linenumber=''
columnnumber=''
error_code=''
while [[ $# -gt 0 ]]; do
opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')"
case "$opt" in
-type|-t)
message_type=$2
shift
;;
-sourcepath|-s)
sourcepath=$2
shift
;;
-linenumber|-l)
linenumber=$2
shift
;;
-columnnumber|-col)
columnnumber=$2
shift
;;
-code|-c)
error_code=$2
shift
;;
*)
break
;;
esac
shift
done
message='##vso[task.logissue'
message="$message type=$message_type"
if [ -n "$sourcepath" ]; then
message="$message;sourcepath=$sourcepath"
else
message="$message;sourcepath=${BASH_SOURCE[1]}"
fi
if [ -n "$linenumber" ]; then
message="$message;linenumber=$linenumber"
else
message="$message;linenumber=${BASH_LINENO[0]}"
fi
if [ -n "$columnnumber" ]; then
message="$message;columnnumber=$columnnumber"
fi
if [ -n "$error_code" ]; then
message="$message;code=$error_code"
fi
message="$message]$*"
echo "$message"
}
# Resolve any symlinks in the given path.
function ResolvePath {
local path=$1
@ -65,7 +149,7 @@ function ReadGlobalVersion {
local pattern="\"$key\" *: *\"(.*)\""
if [[ ! $line =~ $pattern ]]; then
echo "Error: Cannot find \"$key\" in $global_json_file" >&2
EmitError "Error: Cannot find \"$key\" in $global_json_file"
ExitWithExitCode 1
fi
@ -126,7 +210,7 @@ function InitializeDotNetCli {
if [[ "$install" == true ]]; then
InstallDotNetSdk "$dotnet_root" "$dotnet_sdk_version"
else
echo "Unable to find dotnet with SDK version '$dotnet_sdk_version'" >&2
EmitError "Unable to find dotnet with SDK version '$dotnet_sdk_version'"
ExitWithExitCode 1
fi
fi
@ -179,7 +263,7 @@ function InstallDotNet {
fi
bash "$install_script" --version $version --install-dir "$root" $archArg $runtimeArg $skipNonVersionedFilesArg || {
local exit_code=$?
echo "Failed to install dotnet SDK (exit code '$exit_code')." >&2
EmitError "Failed to install dotnet SDK (exit code '$exit_code')."
ExitWithExitCode $exit_code
}
}
@ -216,6 +300,7 @@ function InitializeBuildTool {
# return values
_InitializeBuildTool="$_InitializeDotNetCli/dotnet"
_InitializeBuildToolCommand="msbuild"
_InitializeBuildToolFramework="netcoreapp2.1"
}
function GetNuGetPackageCachePath {
@ -264,7 +349,7 @@ function InitializeToolset {
fi
if [[ "$restore" != true ]]; then
echo "Toolset version $toolsetVersion has not been restored." >&2
EmitError "Toolset version $toolsetVersion has not been restored."
ExitWithExitCode 2
fi
@ -276,12 +361,12 @@ function InitializeToolset {
fi
echo '<Project Sdk="Microsoft.DotNet.Arcade.Sdk"/>' > "$proj"
MSBuild "$proj" $bl /t:__WriteToolsetLocation /clp:ErrorsOnly\;NoSummary /p:__ToolsetLocationOutputFile="$toolset_location_file"
MSBuild-Core "$proj" $bl /t:__WriteToolsetLocation /clp:ErrorsOnly\;NoSummary /p:__ToolsetLocationOutputFile="$toolset_location_file"
local toolset_build_proj=`cat "$toolset_location_file"`
if [[ ! -a "$toolset_build_proj" ]]; then
echo "Invalid toolset path: $toolset_build_proj" >&2
EmitError "Invalid toolset path: $toolset_build_proj"
ExitWithExitCode 3
fi
@ -304,14 +389,27 @@ function StopProcesses {
}
function MSBuild {
local args=$@
if [[ "$pipelines_log" == true ]]; then
InitializeBuildTool
InitializeToolset
local toolset_dir="${_InitializeToolset%/*}"
local logger_path="$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.Arcade.Sdk.dll"
args=( "${args[@]}" "-logger:$logger_path" )
fi
MSBuild-Core ${args[@]}
}
function MSBuild-Core {
if [[ "$ci" == true ]]; then
if [[ "$binary_log" != true ]]; then
echo "Binary log must be enabled in CI build." >&2
EmitError "Binary log must be enabled in CI build."
ExitWithExitCode 1
fi
if [[ "$node_reuse" == true ]]; then
echo "Node reuse must be disabled in CI build." >&2
EmitError "Node reuse must be disabled in CI build."
ExitWithExitCode 1
fi
fi
@ -325,7 +423,7 @@ function MSBuild {
"$_InitializeBuildTool" "$_InitializeBuildToolCommand" /m /nologo /clp:Summary /v:$verbosity /nr:$node_reuse $warnaserror_switch /p:TreatWarningsAsErrors=$warn_as_error /p:ContinuousIntegrationBuild=$ci "$@" || {
local exit_code=$?
echo "Build failed (exit code '$exit_code')." >&2
EmitError "Build failed (exit code '$exit_code')."
ExitWithExitCode $exit_code
}
}

View File

@ -0,0 +1,71 @@
<#
.SYNOPSIS
Installs NodeJs from http://nodejs.org/dist on a machine
.DESCRIPTION
This script installs NodeJs from http://nodejs.org/dist on a machine.
.PARAMETER Version
The version of NodeJS to install.
.PARAMETER InstallDir
The directory to install NodeJS to.
.LINK
https://nodejs.org/en/
#>
param(
[Parameter(Mandatory = $true)]
$Version,
[Parameter(Mandatory = $true)]
$InstallDir
)
$ErrorActionPreference = 'Stop'
$ProgressPreference = 'SilentlyContinue' # Workaround PowerShell/PowerShell#2138
Set-StrictMode -Version 1
if (Get-Command "node.exe" -ErrorAction SilentlyContinue)
{
Write-Host "Found node.exe in PATH"
exit
}
if (Test-Path "$output_dir\node.exe")
{
Write-Host "Node.exe found at $output_dir"
exit
}
$nodeFile="node-v$Version-win-x64"
$url="http://nodejs.org/dist/v$Version/$nodeFile.zip"
Write-Host "Starting download of NodeJs ${Version} from $url"
Invoke-WebRequest -UseBasicParsing -Uri "$url" -OutFile "nodejs.zip"
Write-Host "Done downloading NodeJS ${Version}"
$tempPath = [System.IO.Path]::GetTempPath()
$tempDir = Join-Path $tempPath nodejs
New-Item -Path "$tempDir" -ItemType "directory" -Force
Write-Host "Extracting to $tempDir"
if (Get-Command -Name 'Microsoft.PowerShell.Archive\Expand-Archive' -ErrorAction Ignore) {
# Use built-in commands where possible as they are cross-plat compatible
Microsoft.PowerShell.Archive\Expand-Archive -Path "nodejs.zip" -DestinationPath $tempDir
}
else {
# Fallback to old approach for old installations of PowerShell
Add-Type -AssemblyName System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::ExtractToDirectory("nodejs.zip", $tempDir)
}
Write-Host "Expanded NodeJs"
New-Item -Path "$InstallDir" -ItemType "directory" -Force
Write-Host "Copying $tempDir\$nodeFile\node.exe to $InstallDir"
Copy-Item "$tempDir\$nodeFile\node.exe" "$InstallDir\node.exe"
if (Test-Path "$InstallDir\node.exe")
{
Write-Host "Node.exe copied to $InstallDir"
}
else
{
Write-Host "Node.exe not copied to $InstallDir"
}

View File

@ -0,0 +1,29 @@
#!/usr/bin/env bash
# Cause the script to fail if any subcommand fails
set -e
if type -P "node" &>/dev/null; then
echo "node is in \$PATH"
exit
fi
node_version=$1
osname=`uname -s`
echo $osname
if [ "$osname" = "Darwin" ]; then
platformarch='darwin-x64'
else
platformarch='linux-x64'
fi
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
output_dir="$DIR/node"
url="http://nodejs.org/dist/v$node_version/node-v$node_version-$platformarch.tar.gz"
tmp="$(mktemp -d -t install-node.XXXXXX)"
trap "rm -rf $tmp" EXIT
cd "$tmp"
curl -Lsfo $(basename $url) "$url"
echo "Installing node from $(basename $url) $url"
mkdir $output_dir
echo "Unpacking to $output_dir"
tar --strip-components 1 -xzf "node-v$node_version-$platformarch.tar.gz" --no-same-owner --directory "$output_dir"

View File

@ -14,7 +14,7 @@ set DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
set DOTNET_MULTILEVEL_LOOKUP=0
set DOTNET_CLI_HOME=%HELIX_CORRELATION_PAYLOAD%\home
set PATH=%DOTNET_ROOT%;%PATH%
set PATH=%DOTNET_ROOT%;%PATH%;%HELIX_CORRELATION_PAYLOAD%\node\bin
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 x64 -Version %sdkVersion% -InstallDir %DOTNET_ROOT%"
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 x64 -Runtime dotnet -Version %runtimeVersion% -InstallDir %DOTNET_ROOT%"

View File

@ -16,7 +16,7 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
export DOTNET_ROOT="$DIR/.dotnet$RANDOM"
# Ensure dotnet comes first on PATH
export PATH="$DOTNET_ROOT:$PATH"
export PATH="$DOTNET_ROOT:$PATH:$DIR/node/bin"
# Prevent fallback to global .NET locations. This ensures our tests use the shared frameworks we specify and don't rollforward to something else that might be installed on the machine
export DOTNET_MULTILEVEL_LOOKUP=0

View File

@ -17,6 +17,7 @@
<HelixTestName>$(MSBuildProjectName)/$(TargetFramework)</HelixTestName>
<HelixUseArchive>false</HelixUseArchive>
<LoggingTestingDisableFileLogging Condition="'$(IsHelixJob)' == 'true'">true</LoggingTestingDisableFileLogging>
<NodeVersion>10.15.3</NodeVersion>
</PropertyGroup>
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework'">
@ -35,4 +36,12 @@
<HelixPreCommand Include="call RunPowershell.cmd mssql\InstallSqlServerLocalDB.ps1 || exit /b 1" />
</ItemGroup>
<ItemGroup Condition="'$(TestDependsOnNode)' == 'true' AND '$(IsWindowsHelixQueue)' == 'false'">
<HelixPreCommand Include="./installnode.sh $(NodeVersion)" />
</ItemGroup>
<ItemGroup Condition="'$(TestDependsOnNode)' == 'true' AND '$(IsWindowsHelixQueue)' == 'true'">
<HelixPreCommand Include="call RunPowershell.cmd InstallNode.ps1 $(NodeVersion) %25HELIX_CORRELATION_PAYLOAD%25\node\bin || exit /b 1" />
</ItemGroup>
</Project>

View File

@ -53,6 +53,21 @@
<Copy SourceFiles="$(PackageJson)" DestinationFiles="$(_BackupPackageJson)" />
<ReadLinesFromFile File="$(PackageJson)" Condition="@(ReplacePackageContent->Count()) != 0 AND $([MSBuild]::IsOSPlatform('Windows'))">
<Output TaskParameter="Lines" ItemName="PackageJsonContent" />
</ReadLinesFromFile>
<PropertyGroup Condition="@(PackageJsonContent->Count()) > 0">
<_PackageJsonContent>@(PackageJsonContent->'%(Identity)', '%0a')</_PackageJsonContent>
<_PackageJsonContent>$(_PackageJsonContent.Replace('%(ReplacePackageContent.Identity)', '%(ReplacePackageContent.ReplaceWith)'))</_PackageJsonContent>
</PropertyGroup>
<WriteLinesToFile
File="$(PackageJson)"
Lines="$(_PackageJsonContent)"
Condition="@(ReplacePackageContent->Count()) != 0 AND $([MSBuild]::IsOSPlatform('Windows'))"
Overwrite="true" />
<Yarn Command="version --no-git-tag-version --new-version $(PackageVersion)" />
<Yarn Command="pack --filename $(PackageFileName)" />

View File

@ -55,7 +55,7 @@
</ItemGroup>
<PropertyGroup>
<_GenAPICommand Condition="'$(MSBuildRuntimeType)' == 'core'">$(ToolHostCmd) --roll-forward-on-no-candidate-fx 2 "$(_GenAPIPath)"</_GenAPICommand>
<_GenAPICommand Condition="'$(MSBuildRuntimeType)' == 'core'">"$(DotNetTool)" --roll-forward-on-no-candidate-fx 2 "$(_GenAPIPath)"</_GenAPICommand>
<_GenAPICmd>$(_GenAPICommand)</_GenAPICmd>
<_GenAPICmd>$(_GenAPICmd) "$(TargetPath)"</_GenAPICmd>
<_GenAPICmd>$(_GenAPICmd) --lib-path "@(_ReferencePathDirectories)"</_GenAPICmd>

View File

@ -3,10 +3,12 @@
"version": "3.0.100-preview5-011568"
},
"tools": {
"dotnet": "3.0.100-preview5-011568",
"jdk": "11.0.3"
},
"msbuild-sdks": {
"Yarn.MSBuild": "1.15.2",
"Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19270.1"
"Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19302.2",
"Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19302.2"
}
}

View File

@ -9,10 +9,12 @@ namespace Microsoft.AspNetCore.Analyzers.TestFiles.CompilationFeatureDetectorTes
{
public void Configure(IApplicationBuilder app)
{
#pragma warning disable CS0618 // Type or member is obsolete
app.UseSignalR(routes =>
{
});
#pragma warning restore CS0618 // Type or member is obsolete
}
}
}

View File

@ -0,0 +1,89 @@
// 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.Linq;
using Microsoft.CodeAnalysis;
namespace Microsoft.AspNetCore.Components.Analyzers
{
internal static class ComponentFacts
{
public static bool IsAnyParameter(ComponentSymbols symbols, IPropertySymbol property)
{
if (symbols == null)
{
throw new ArgumentNullException(nameof(symbols));
}
if (property == null)
{
throw new ArgumentNullException(nameof(property));
}
return property.GetAttributes().Any(a =>
{
return a.AttributeClass == symbols.ParameterAttribute || a.AttributeClass == symbols.CascadingParameterAttribute;
});
}
public static bool IsParameter(ComponentSymbols symbols, IPropertySymbol property)
{
if (symbols == null)
{
throw new ArgumentNullException(nameof(symbols));
}
if (property == null)
{
throw new ArgumentNullException(nameof(property));
}
return property.GetAttributes().Any(a => a.AttributeClass == symbols.ParameterAttribute);
}
public static bool IsParameterWithCaptureUnmatchedValues(ComponentSymbols symbols, IPropertySymbol property)
{
if (symbols == null)
{
throw new ArgumentNullException(nameof(symbols));
}
if (property == null)
{
throw new ArgumentNullException(nameof(property));
}
var attribute = property.GetAttributes().FirstOrDefault(a => a.AttributeClass == symbols.ParameterAttribute);
if (attribute == null)
{
return false;
}
foreach (var kvp in attribute.NamedArguments)
{
if (string.Equals(kvp.Key, ComponentsApi.ParameterAttribute.CaptureUnmatchedValues, StringComparison.Ordinal))
{
return kvp.Value.Value as bool? ?? false;
}
}
return false;
}
public static bool IsCascadingParameter(ComponentSymbols symbols, IPropertySymbol property)
{
if (symbols == null)
{
throw new ArgumentNullException(nameof(symbols));
}
if (property == null)
{
throw new ArgumentNullException(nameof(property));
}
return property.GetAttributes().Any(a => a.AttributeClass == symbols.CascadingParameterAttribute);
}
}
}

View File

@ -0,0 +1,111 @@
// 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.Collections.Immutable;
using System.Linq;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.Diagnostics;
namespace Microsoft.AspNetCore.Components.Analyzers
{
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public class ComponentParameterAnalyzer : DiagnosticAnalyzer
{
public ComponentParameterAnalyzer()
{
SupportedDiagnostics = ImmutableArray.Create(new[]
{
DiagnosticDescriptors.ComponentParametersShouldNotBePublic,
DiagnosticDescriptors.ComponentParameterCaptureUnmatchedValuesMustBeUnique,
DiagnosticDescriptors.ComponentParameterCaptureUnmatchedValuesHasWrongType,
});
}
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; }
public override void Initialize(AnalysisContext context)
{
context.RegisterCompilationStartAction(context =>
{
if (!ComponentSymbols.TryCreate(context.Compilation, out var symbols))
{
// Types we need are not defined.
return;
}
// This operates per-type because one of the validations we need has to look for duplicates
// defined on the same type.
context.RegisterSymbolStartAction(context =>
{
var properties = new List<IPropertySymbol>();
var type = (INamedTypeSymbol)context.Symbol;
foreach (var member in type.GetMembers())
{
if (member is IPropertySymbol property && ComponentFacts.IsAnyParameter(symbols, property))
{
// Annotated with [Parameter] or [CascadingParameter]
properties.Add(property);
}
}
if (properties.Count == 0)
{
return;
}
context.RegisterSymbolEndAction(context =>
{
var captureUnmatchedValuesParameters = new List<IPropertySymbol>();
// Per-property validations
foreach (var property in properties)
{
if (property.SetMethod?.DeclaredAccessibility == Accessibility.Public)
{
context.ReportDiagnostic(Diagnostic.Create(
DiagnosticDescriptors.ComponentParametersShouldNotBePublic,
property.Locations[0],
property.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat)));
}
if (ComponentFacts.IsParameterWithCaptureUnmatchedValues(symbols, property))
{
captureUnmatchedValuesParameters.Add(property);
// Check the type, we need to be able to assign a Dictionary<string, object>
var conversion = context.Compilation.ClassifyConversion(symbols.ParameterCaptureUnmatchedValuesRuntimeType, property.Type);
if (!conversion.Exists || conversion.IsExplicit)
{
context.ReportDiagnostic(Diagnostic.Create(
DiagnosticDescriptors.ComponentParameterCaptureUnmatchedValuesHasWrongType,
property.Locations[0],
property.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat),
property.Type.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat),
symbols.ParameterCaptureUnmatchedValuesRuntimeType.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat)));
}
}
}
// Check if the type defines multiple CaptureUnmatchedValues parameters. Doing this outside the loop means we place the
// errors on the type.
if (captureUnmatchedValuesParameters.Count > 1)
{
context.ReportDiagnostic(Diagnostic.Create(
DiagnosticDescriptors.ComponentParameterCaptureUnmatchedValuesMustBeUnique,
context.Symbol.Locations[0],
type.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat),
Environment.NewLine,
string.Join(
Environment.NewLine,
captureUnmatchedValuesParameters.Select(p => p.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat)).OrderBy(n => n))));
}
});
}, SymbolKind.NamedType);
});
}
}
}

View File

@ -1,76 +0,0 @@
// 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 Microsoft.AspNetCore.Components.Shared;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Diagnostics;
using System.Collections.Immutable;
using System.Linq;
namespace Microsoft.AspNetCore.Components.Analyzers
{
[DiagnosticAnalyzer(LanguageNames.CSharp)]
public class ComponentParametersShouldNotBePublicAnalyzer : DiagnosticAnalyzer
{
public const string DiagnosticId = "BL9993";
private const string Category = "Encapsulation";
private static readonly LocalizableString Title = new LocalizableResourceString(nameof(Resources.ComponentParametersShouldNotBePublic_Title), Resources.ResourceManager, typeof(Resources));
private static readonly LocalizableString MessageFormat = new LocalizableResourceString(nameof(Resources.ComponentParametersShouldNotBePublic_Format), Resources.ResourceManager, typeof(Resources));
private static readonly LocalizableString Description = new LocalizableResourceString(nameof(Resources.ComponentParametersShouldNotBePublic_Description), Resources.ResourceManager, typeof(Resources));
private static DiagnosticDescriptor Rule = new DiagnosticDescriptor(
DiagnosticId,
Title,
MessageFormat,
Category,
DiagnosticSeverity.Warning,
isEnabledByDefault: true,
description: Description);
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics
=> ImmutableArray.Create(Rule);
public override void Initialize(AnalysisContext context)
{
context.RegisterSyntaxNodeAction(AnalyzeSyntax, SyntaxKind.PropertyDeclaration);
}
private void AnalyzeSyntax(SyntaxNodeAnalysisContext context)
{
var semanticModel = context.SemanticModel;
var declaration = (PropertyDeclarationSyntax)context.Node;
var parameterAttribute = declaration.AttributeLists
.SelectMany(list => list.Attributes)
.Where(attr => semanticModel.GetTypeInfo(attr).Type?.ToDisplayString() == ComponentsApi.ParameterAttribute.FullTypeName)
.FirstOrDefault();
if (parameterAttribute != null && IsPubliclySettable(declaration))
{
var identifierText = declaration.Identifier.Text;
if (!string.IsNullOrEmpty(identifierText))
{
context.ReportDiagnostic(Diagnostic.Create(
Rule,
declaration.GetLocation(),
identifierText));
}
}
}
private static bool IsPubliclySettable(PropertyDeclarationSyntax declaration)
{
// If the property has a setter explicitly marked private/protected/internal, then it's not public
var setter = declaration.AccessorList?.Accessors.SingleOrDefault(x => x.Keyword.IsKind(SyntaxKind.SetKeyword));
if (setter != null && setter.Modifiers.Any(x => x.IsKind(SyntaxKind.PrivateKeyword) || x.IsKind(SyntaxKind.ProtectedKeyword) || x.IsKind(SyntaxKind.InternalKeyword)))
{
return false;
}
// Otherwise fallback to the property declaration modifiers
return declaration.Modifiers.Any(x => x.IsKind(SyntaxKind.PublicKeyword));
}
}
}

View File

@ -1,15 +1,15 @@
// Copyright (c) .NET Foundation. All rights reserved.
// 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.Collections.Immutable;
using System.Composition;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CodeActions;
using Microsoft.CodeAnalysis.CodeFixes;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using System.Collections.Immutable;
using System.Composition;
using System.Linq;
using System.Threading.Tasks;
namespace Microsoft.AspNetCore.Components.Analyzers
{
@ -19,7 +19,7 @@ namespace Microsoft.AspNetCore.Components.Analyzers
private static readonly LocalizableString Title = new LocalizableResourceString(nameof(Resources.ComponentParametersShouldNotBePublic_FixTitle), Resources.ResourceManager, typeof(Resources));
public override ImmutableArray<string> FixableDiagnosticIds
=> ImmutableArray.Create(ComponentParametersShouldNotBePublicAnalyzer.DiagnosticId);
=> ImmutableArray.Create(DiagnosticDescriptors.ComponentParametersShouldNotBePublic.Id);
public sealed override FixAllProvider GetFixAllProvider()
{

View File

@ -0,0 +1,65 @@
// 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 Microsoft.CodeAnalysis;
namespace Microsoft.AspNetCore.Components.Analyzers
{
internal class ComponentSymbols
{
public static bool TryCreate(Compilation compilation, out ComponentSymbols symbols)
{
if (compilation == null)
{
throw new ArgumentNullException(nameof(compilation));
}
var parameterAttribute = compilation.GetTypeByMetadataName(ComponentsApi.ParameterAttribute.MetadataName);
if (parameterAttribute == null)
{
symbols = null;
return false;
}
var cascadingParameterAttribute = compilation.GetTypeByMetadataName(ComponentsApi.CascadingParameterAttribute.MetadataName);
if (cascadingParameterAttribute == null)
{
symbols = null;
return false;
}
var dictionary = compilation.GetTypeByMetadataName("System.Collections.Generic.Dictionary`2");
var @string = compilation.GetSpecialType(SpecialType.System_String);
var @object = compilation.GetSpecialType(SpecialType.System_Object);
if (dictionary == null || @string == null || @object == null)
{
symbols = null;
return false;
}
var parameterCaptureUnmatchedValuesRuntimeType = dictionary.Construct(@string, @object);
symbols = new ComponentSymbols(parameterAttribute, cascadingParameterAttribute, parameterCaptureUnmatchedValuesRuntimeType);
return true;
}
private ComponentSymbols(
INamedTypeSymbol parameterAttribute,
INamedTypeSymbol cascadingParameterAttribute,
INamedTypeSymbol parameterCaptureUnmatchedValuesRuntimeType)
{
ParameterAttribute = parameterAttribute;
CascadingParameterAttribute = cascadingParameterAttribute;
ParameterCaptureUnmatchedValuesRuntimeType = parameterCaptureUnmatchedValuesRuntimeType;
}
public INamedTypeSymbol ParameterAttribute { get; }
// Dictionary<string, object>
public INamedTypeSymbol ParameterCaptureUnmatchedValuesRuntimeType { get; }
public INamedTypeSymbol CascadingParameterAttribute { get; }
}
}

View File

@ -1,7 +1,7 @@
// 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.
namespace Microsoft.AspNetCore.Components.Shared
namespace Microsoft.AspNetCore.Components.Analyzers
{
// Constants for type and method names used in code-generation
// Keep these in sync with the actual definitions
@ -13,6 +13,14 @@ namespace Microsoft.AspNetCore.Components.Shared
{
public static readonly string FullTypeName = "Microsoft.AspNetCore.Components.ParameterAttribute";
public static readonly string MetadataName = FullTypeName;
public static readonly string CaptureUnmatchedValues = "CaptureUnmatchedValues";
}
public static class CascadingParameterAttribute
{
public static readonly string FullTypeName = "Microsoft.AspNetCore.Components.CascadingParameterAttribute";
public static readonly string MetadataName = FullTypeName;
}
}
}

View File

@ -0,0 +1,41 @@
// 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 Microsoft.CodeAnalysis;
namespace Microsoft.AspNetCore.Components.Analyzers
{
internal static class DiagnosticDescriptors
{
// Note: The Razor Compiler (including Components features) use the RZ prefix for diagnostics, so there's currently
// no change of clashing between that and the BL prefix used here.
//
// Tracking https://github.com/aspnet/AspNetCore/issues/10382 to rationalize this
public static readonly DiagnosticDescriptor ComponentParametersShouldNotBePublic = new DiagnosticDescriptor(
"BL0001",
new LocalizableResourceString(nameof(Resources.ComponentParametersShouldNotBePublic_Title), Resources.ResourceManager, typeof(Resources)),
new LocalizableResourceString(nameof(Resources.ComponentParametersShouldNotBePublic_Format), Resources.ResourceManager, typeof(Resources)),
"Encapsulation",
DiagnosticSeverity.Warning,
isEnabledByDefault: true,
description: new LocalizableResourceString(nameof(Resources.ComponentParametersShouldNotBePublic_Description), Resources.ResourceManager, typeof(Resources)));
public static readonly DiagnosticDescriptor ComponentParameterCaptureUnmatchedValuesMustBeUnique = new DiagnosticDescriptor(
"BL0002",
new LocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesMustBeUnique_Title), Resources.ResourceManager, typeof(Resources)),
new LocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesMustBeUnique_Format), Resources.ResourceManager, typeof(Resources)),
"Usage",
DiagnosticSeverity.Warning,
isEnabledByDefault: true,
description: new LocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesMustBeUnique_Description), Resources.ResourceManager, typeof(Resources)));
public static readonly DiagnosticDescriptor ComponentParameterCaptureUnmatchedValuesHasWrongType = new DiagnosticDescriptor(
"BL0003",
new LocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesHasWrongType_Title), Resources.ResourceManager, typeof(Resources)),
new LocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesHasWrongType_Format), Resources.ResourceManager, typeof(Resources)),
"Usage",
DiagnosticSeverity.Warning,
isEnabledByDefault: true,
description: new LocalizableResourceString(nameof(Resources.ComponentParameterCaptureUnmatchedValuesHasWrongType_Description), Resources.ResourceManager, typeof(Resources)));
}
}

View File

@ -0,0 +1,3 @@
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Components.Analyzers.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]

View File

@ -10,7 +10,6 @@
namespace Microsoft.AspNetCore.Components.Analyzers {
using System;
using System.Reflection;
/// <summary>
@ -20,7 +19,7 @@ namespace Microsoft.AspNetCore.Components.Analyzers {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
@ -40,7 +39,7 @@ namespace Microsoft.AspNetCore.Components.Analyzers {
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.AspNetCore.Components.Analyzers.Resources", typeof(Resources).GetTypeInfo().Assembly);
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.AspNetCore.Components.Analyzers.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
@ -61,6 +60,60 @@ namespace Microsoft.AspNetCore.Components.Analyzers {
}
}
/// <summary>
/// Looks up a localized string similar to Component parameters with CaptureUnmatchedValuess must be a correct type..
/// </summary>
internal static string ComponentParameterCaptureUnmatchedValuesHasWrongType_Description {
get {
return ResourceManager.GetString("ComponentParameterCaptureUnmatchedValuesHasWrongType_Description", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Component parameter &apos;{0}&apos; defines CaptureUnmatchedValuess but has an unsupported type &apos;{1}&apos;. Use a type assignable from &apos;{2}&apos;..
/// </summary>
internal static string ComponentParameterCaptureUnmatchedValuesHasWrongType_Format {
get {
return ResourceManager.GetString("ComponentParameterCaptureUnmatchedValuesHasWrongType_Format", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Component parameter with CaptureUnmatchedValues has the wrong type.
/// </summary>
internal static string ComponentParameterCaptureUnmatchedValuesHasWrongType_Title {
get {
return ResourceManager.GetString("ComponentParameterCaptureUnmatchedValuesHasWrongType_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Components may only define a single parameter with CaptureUnmatchedValues..
/// </summary>
internal static string ComponentParameterCaptureUnmatchedValuesMustBeUnique_Description {
get {
return ResourceManager.GetString("ComponentParameterCaptureUnmatchedValuesMustBeUnique_Description", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Component type &apos;{0}&apos; defines properties multiple parameters with CaptureUnmatchedValues. Properties: {1}{2}.
/// </summary>
internal static string ComponentParameterCaptureUnmatchedValuesMustBeUnique_Format {
get {
return ResourceManager.GetString("ComponentParameterCaptureUnmatchedValuesMustBeUnique_Format", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Component has multiple CaptureUnmatchedValues parameters.
/// </summary>
internal static string ComponentParameterCaptureUnmatchedValuesMustBeUnique_Title {
get {
return ResourceManager.GetString("ComponentParameterCaptureUnmatchedValuesMustBeUnique_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Component parameters should not have public setters..
/// </summary>

View File

@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
@ -26,36 +26,36 @@
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
@ -129,4 +129,22 @@
<data name="ComponentParametersShouldNotBePublic_Title" xml:space="preserve">
<value>Component parameter has public setter</value>
</data>
</root>
<data name="ComponentParameterCaptureUnmatchedValuesMustBeUnique_Description" xml:space="preserve">
<value>Components may only define a single parameter with CaptureUnmatchedValues.</value>
</data>
<data name="ComponentParameterCaptureUnmatchedValuesMustBeUnique_Format" xml:space="preserve">
<value>Component type '{0}' defines properties multiple parameters with CaptureUnmatchedValues. Properties: {1}{2}</value>
</data>
<data name="ComponentParameterCaptureUnmatchedValuesMustBeUnique_Title" xml:space="preserve">
<value>Component has multiple CaptureUnmatchedValues parameters</value>
</data>
<data name="ComponentParameterCaptureUnmatchedValuesHasWrongType_Description" xml:space="preserve">
<value>Component parameters with CaptureUnmatchedValues must be a correct type.</value>
</data>
<data name="ComponentParameterCaptureUnmatchedValuesHasWrongType_Format" xml:space="preserve">
<value>Component parameter '{0}' defines CaptureUnmatchedValues but has an unsupported type '{1}'. Use a type assignable from '{2}'.</value>
</data>
<data name="ComponentParameterCaptureUnmatchedValuesHasWrongType_Title" xml:space="preserve">
<value>Component parameter with CaptureUnmatchedValues has the wrong type</value>
</data>
</root>

View File

@ -0,0 +1,80 @@
// 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 Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Diagnostics;
using TestHelper;
using Xunit;
namespace Microsoft.AspNetCore.Components.Analyzers.Test
{
public class ComponentParameterCaptureUnmatchedValuesHasWrongTypeTest : DiagnosticVerifier
{
[Theory]
[InlineData("System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, object>>")]
[InlineData("System.Collections.Generic.Dictionary<string, object>")]
[InlineData("System.Collections.Generic.IDictionary<string, object>")]
[InlineData("System.Collections.Generic.IReadOnlyDictionary<string, object>")]
public void IgnoresPropertiesWithSupportedType(string propertyType)
{
var test = $@"
namespace ConsoleApplication1
{{
using {typeof(ParameterAttribute).Namespace};
class TypeName
{{
[Parameter(CaptureUnmatchedValues = true)] {propertyType} MyProperty {{ get; set; }}
}}
}}" + ComponentsTestDeclarations.Source;
VerifyCSharpDiagnostic(test);
}
[Fact]
public void IgnoresPropertiesWithCaptureUnmatchedValuesFalse()
{
var test = $@"
namespace ConsoleApplication1
{{
using {typeof(ParameterAttribute).Namespace};
class TypeName
{{
[Parameter(CaptureUnmatchedValues = false)] string MyProperty {{ get; set; }}
}}
}}" + ComponentsTestDeclarations.Source;
VerifyCSharpDiagnostic(test);
}
[Fact]
public void AddsDiagnosticForInvalidType()
{
var test = $@"
namespace ConsoleApplication1
{{
using {typeof(ParameterAttribute).Namespace};
class TypeName
{{
[Parameter(CaptureUnmatchedValues = true)] string MyProperty {{ get; set; }}
}}
}}" + ComponentsTestDeclarations.Source;
VerifyCSharpDiagnostic(test,
new DiagnosticResult
{
Id = DiagnosticDescriptors.ComponentParameterCaptureUnmatchedValuesHasWrongType.Id,
Message = "Component parameter 'ConsoleApplication1.TypeName.MyProperty' defines CaptureUnmatchedValues but has an unsupported type 'string'. Use a type assignable from 'System.Collections.Generic.Dictionary<string, object>'.",
Severity = DiagnosticSeverity.Warning,
Locations = new[]
{
new DiagnosticResultLocation("Test0.cs", 7, 63)
}
});
}
protected override DiagnosticAnalyzer GetCSharpDiagnosticAnalyzer()
{
return new ComponentParameterAnalyzer();
}
}
}

View File

@ -0,0 +1,69 @@
// 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 Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Diagnostics;
using TestHelper;
using Xunit;
namespace Microsoft.AspNetCore.Components.Analyzers.Test
{
public class ComponentParameterCaptureUnmatchedValuesMustBeUniqueTest : DiagnosticVerifier
{
[Fact]
public void IgnoresPropertiesWithCaptureUnmatchedValuesFalse()
{
var test = $@"
namespace ConsoleApplication1
{{
using System.Collections.Generic;
using {typeof(ParameterAttribute).Namespace};
class TypeName
{{
[Parameter(CaptureUnmatchedValues = false)] string MyProperty {{ get; set; }}
[Parameter(CaptureUnmatchedValues = true)] Dictionary<string, object> MyOtherProperty {{ get; set; }}
}}
}}" + ComponentsTestDeclarations.Source;
VerifyCSharpDiagnostic(test);
}
[Fact]
public void AddsDiagnosticForMultipleCaptureUnmatchedValuesProperties()
{
var test = $@"
namespace ConsoleApplication1
{{
using System.Collections.Generic;
using {typeof(ParameterAttribute).Namespace};
class TypeName
{{
[Parameter(CaptureUnmatchedValues = true)] Dictionary<string, object> MyProperty {{ get; set; }}
[Parameter(CaptureUnmatchedValues = true)] Dictionary<string, object> MyOtherProperty {{ get; set; }}
}}
}}" + ComponentsTestDeclarations.Source;
var message = @"Component type 'ConsoleApplication1.TypeName' defines properties multiple parameters with CaptureUnmatchedValues. Properties: " + Environment.NewLine +
"ConsoleApplication1.TypeName.MyOtherProperty" + Environment.NewLine +
"ConsoleApplication1.TypeName.MyProperty";
VerifyCSharpDiagnostic(test,
new DiagnosticResult
{
Id = DiagnosticDescriptors.ComponentParameterCaptureUnmatchedValuesMustBeUnique.Id,
Message = message,
Severity = DiagnosticSeverity.Warning,
Locations = new[]
{
new DiagnosticResultLocation("Test0.cs", 6, 15)
}
});
}
protected override DiagnosticAnalyzer GetCSharpDiagnosticAnalyzer()
{
return new ComponentParameterAnalyzer();
}
}
}

View File

@ -1,7 +1,6 @@
// 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 Microsoft.AspNetCore.Components;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CodeFixes;
using Microsoft.CodeAnalysis.Diagnostics;
@ -12,15 +11,6 @@ namespace Microsoft.AspNetCore.Components.Analyzers.Test
{
public class ComponentParametersShouldNotBePublic : CodeFixVerifier
{
static string ParameterSource = $@"
namespace {typeof(ParameterAttribute).Namespace}
{{
public class {typeof(ParameterAttribute).Name} : System.Attribute
{{
}}
}}
";
[Fact]
public void IgnoresPublicPropertiesWithoutParameterAttribute()
{
@ -31,7 +21,7 @@ namespace Microsoft.AspNetCore.Components.Analyzers.Test
{
public string MyProperty { get; set; }
}
}" + ParameterSource;
}" + ComponentsTestDeclarations.Source;
VerifyCSharpDiagnostic(test);
}
@ -48,10 +38,10 @@ namespace Microsoft.AspNetCore.Components.Analyzers.Test
{
[Parameter] string MyPropertyNoModifer { get; set; }
[Parameter] private string MyPropertyPrivate { get; set; }
[Parameter] protected string MyPropertyProtected { get; set; }
[Parameter] internal string MyPropertyInternal { get; set; }
[CascadingParameter] protected string MyPropertyProtected { get; set; }
[CascadingParameter] internal string MyPropertyInternal { get; set; }
}
}" + ParameterSource;
}" + ComponentsTestDeclarations.Source;
VerifyCSharpDiagnostic(test);
}
@ -67,29 +57,29 @@ namespace Microsoft.AspNetCore.Components.Analyzers.Test
class TypeName
{
[Parameter] public string BadProperty1 { get; set; }
[Parameter] public object BadProperty2 { get; set; }
[CascadingParameter] public object BadProperty2 { get; set; }
}
}" + ParameterSource;
}" + ComponentsTestDeclarations.Source;
VerifyCSharpDiagnostic(test,
new DiagnosticResult
{
Id = "BL9993",
Message = "Component parameter 'BadProperty1' has a public setter, but component parameters should not be publicly settable.",
Id = DiagnosticDescriptors.ComponentParametersShouldNotBePublic.Id,
Message = "Component parameter 'ConsoleApplication1.TypeName.BadProperty1' has a public setter, but component parameters should not be publicly settable.",
Severity = DiagnosticSeverity.Warning,
Locations = new[]
{
new DiagnosticResultLocation("Test0.cs", 8, 13)
new DiagnosticResultLocation("Test0.cs", 8, 39)
}
},
new DiagnosticResult
{
Id = "BL9993",
Message = "Component parameter 'BadProperty2' has a public setter, but component parameters should not be publicly settable.",
Id = DiagnosticDescriptors.ComponentParametersShouldNotBePublic.Id,
Message = "Component parameter 'ConsoleApplication1.TypeName.BadProperty2' has a public setter, but component parameters should not be publicly settable.",
Severity = DiagnosticSeverity.Warning,
Locations = new[]
{
new DiagnosticResultLocation("Test0.cs", 9, 13)
new DiagnosticResultLocation("Test0.cs", 9, 48)
}
});
@ -101,9 +91,9 @@ namespace Microsoft.AspNetCore.Components.Analyzers.Test
class TypeName
{
[Parameter] string BadProperty1 { get; set; }
[Parameter] object BadProperty2 { get; set; }
[CascadingParameter] object BadProperty2 { get; set; }
}
}" + ParameterSource);
}" + ComponentsTestDeclarations.Source);
}
[Fact]
@ -120,7 +110,7 @@ namespace Microsoft.AspNetCore.Components.Analyzers.Test
[Parameter] public object MyProperty2 { get; protected set; }
[Parameter] public object MyProperty2 { get; internal set; }
}
}" + ParameterSource;
}" + ComponentsTestDeclarations.Source;
VerifyCSharpDiagnostic(test);
}
@ -132,7 +122,7 @@ namespace Microsoft.AspNetCore.Components.Analyzers.Test
protected override DiagnosticAnalyzer GetCSharpDiagnosticAnalyzer()
{
return new ComponentParametersShouldNotBePublicAnalyzer();
return new ComponentParameterAnalyzer();
}
}
}

View File

@ -0,0 +1,22 @@
// 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.
namespace Microsoft.AspNetCore.Components.Analyzers
{
public static class ComponentsTestDeclarations
{
public static readonly string Source = $@"
namespace {typeof(ParameterAttribute).Namespace}
{{
public class {typeof(ParameterAttribute).Name} : System.Attribute
{{
public bool CaptureUnmatchedValues {{ get; set; }}
}}
public class {typeof(CascadingParameterAttribute).Name} : System.Attribute
{{
}}
}}
";
}
}

View File

@ -8,6 +8,8 @@ using Microsoft.AspNetCore.Blazor.Services;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Routing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Logging;
using Microsoft.JSInterop;
namespace Microsoft.AspNetCore.Blazor.Hosting
@ -92,6 +94,7 @@ namespace Microsoft.AspNetCore.Blazor.Hosting
services.AddSingleton<IComponentContext, WebAssemblyComponentContext>();
services.AddSingleton<IUriHelper>(WebAssemblyUriHelper.Instance);
services.AddSingleton<INavigationInterception>(WebAssemblyNavigationInterception.Instance);
services.AddSingleton<ILoggerFactory, WebAssemblyLoggerFactory>();
services.AddSingleton<HttpClient>(s =>
{
// Creating the URI helper needs to wait until the JS Runtime is initialized, so defer it.
@ -102,6 +105,10 @@ namespace Microsoft.AspNetCore.Blazor.Hosting
};
});
// Needed for authorization
services.AddOptions();
services.TryAdd(ServiceDescriptor.Singleton(typeof(ILogger<>), typeof(WebAssemblyConsoleLogger<>)));
foreach (var configureServicesAction in _configureServicesActions)
{
configureServicesAction(_BrowserHostBuilderContext, services);

View File

@ -6,10 +6,11 @@ using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text.Json.Serialization;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Blazor.Services;
using Microsoft.JSInterop;
using Microsoft.AspNetCore.Components;
namespace Microsoft.AspNetCore.Blazor.Http
{
@ -59,7 +60,7 @@ namespace Microsoft.AspNetCore.Blazor.Http
options.RequestInit = new RequestInit
{
Credentials = GetDefaultCredentialsString(),
Headers = GetHeadersAsStringArray(request),
Headers = GetHeaders(request),
Method = request.Method.Method
};
@ -68,7 +69,7 @@ namespace Microsoft.AspNetCore.Blazor.Http
"Blazor._internal.http.sendAsync",
id,
request.Content == null ? null : await request.Content.ReadAsByteArrayAsync(),
Json.Serialize(options));
JsonSerializer.ToString(options, JsonSerializerOptionsProvider.Options));
return await tcs.Task;
}
@ -99,7 +100,7 @@ namespace Microsoft.AspNetCore.Blazor.Http
}
else
{
var responseDescriptor = Json.Deserialize<ResponseDescriptor>(responseDescriptorJson);
var responseDescriptor = JsonSerializer.Parse<ResponseDescriptor>(responseDescriptorJson, JsonSerializerOptionsProvider.Options);
var responseContent = responseBodyData == null ? null : new ByteArrayContent(responseBodyData);
var responseMessage = responseDescriptor.ToResponseMessage(responseContent);
tcs.SetResult(responseMessage);
@ -114,10 +115,25 @@ namespace Microsoft.AspNetCore.Blazor.Http
private static byte[] AllocateArray(string length) => new byte[int.Parse(length)];
#pragma warning restore IDE0051 // Remove unused private members
private string[][] GetHeadersAsStringArray(HttpRequestMessage request)
=> (from header in request.Headers.Concat(request.Content?.Headers ?? Enumerable.Empty<KeyValuePair<string, IEnumerable<string>>>())
from headerValue in header.Value // There can be more than one value for each name
select new[] { header.Key, headerValue }).ToArray();
private static IReadOnlyList<Header> GetHeaders(HttpRequestMessage request)
{
var requestHeaders = request.Headers.AsEnumerable();
if (request.Content?.Headers != null)
{
requestHeaders = requestHeaders.Concat(request.Content.Headers);
}
var headers = new List<Header>();
foreach (var item in requestHeaders)
{
foreach (var headerValue in item.Value)
{
headers.Add(new Header { Name = item.Key, Value = headerValue });
}
}
return headers;
}
private static string GetDefaultCredentialsString()
{
@ -147,7 +163,7 @@ namespace Microsoft.AspNetCore.Blazor.Http
private class RequestInit
{
public string Credentials { get; set; }
public string[][] Headers { get; set; }
public IReadOnlyList<Header> Headers { get; set; }
public string Method { get; set; }
}
@ -156,7 +172,7 @@ namespace Microsoft.AspNetCore.Blazor.Http
#pragma warning disable 0649
public int StatusCode { get; set; }
public string StatusText { get; set; }
public string[][] Headers { get; set; }
public IReadOnlyList<Header> Headers { get; set; }
#pragma warning restore 0649
public HttpResponseMessage ToResponseMessage(HttpContent content)
@ -168,14 +184,21 @@ namespace Microsoft.AspNetCore.Blazor.Http
var contentHeaders = result.Content?.Headers;
foreach (var pair in Headers)
{
if (!headers.TryAddWithoutValidation(pair[0], pair[1]))
if (!headers.TryAddWithoutValidation(pair.Name, pair.Value))
{
contentHeaders?.TryAddWithoutValidation(pair[0], pair[1]);
contentHeaders?.TryAddWithoutValidation(pair.Name, pair.Value);
}
}
return result;
}
}
private class Header
{
public string Name { get; set; }
public string Value { get; set; }
}
}
}

View File

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>

View File

@ -0,0 +1,34 @@
// 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 Microsoft.Extensions.Logging;
namespace Microsoft.AspNetCore.Blazor.Services
{
internal class WebAssemblyConsoleLogger<T> : ILogger<T>, ILogger
{
public IDisposable BeginScope<TState>(TState state)
{
return NoOpDisposable.Instance;
}
public bool IsEnabled(LogLevel logLevel)
{
return logLevel >= LogLevel.Warning;
}
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{
var formattedMessage = formatter(state, exception);
Console.WriteLine($"[{logLevel}] {formattedMessage}");
}
private class NoOpDisposable : IDisposable
{
public static NoOpDisposable Instance = new NoOpDisposable();
public void Dispose() { }
}
}
}

View File

@ -0,0 +1,23 @@
// 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 Microsoft.Extensions.Logging;
namespace Microsoft.AspNetCore.Blazor.Services
{
internal class WebAssemblyLoggerFactory : ILoggerFactory
{
public void AddProvider(ILoggerProvider provider)
{
// No-op
}
public ILogger CreateLogger(string categoryName)
=> new WebAssemblyConsoleLogger<object>();
public void Dispose()
{
// No-op
}
}
}

View File

@ -12,7 +12,7 @@
<PreviewImage>Content\WebConfiguration.png</PreviewImage>
</Metadata>
<Installation AllUsers="true">
<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[16.0,)" />
<InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[16.2,)" />
</Installation>
<Assets>
<Asset Type="Microsoft.VisualStudio.VsPackage" d:Source="Project" d:ProjectName="%CurrentProject%" Path="|%CurrentProject%;PkgdefProjectOutputGroup|" />

View File

@ -1,12 +1,13 @@
// 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 Microsoft.JSInterop;
using Mono.Cecil;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.Json.Serialization;
using Microsoft.AspNetCore.Components;
using Mono.Cecil;
namespace Microsoft.AspNetCore.Blazor.Build
{
@ -40,7 +41,7 @@ namespace Microsoft.AspNetCore.Blazor.Build
assemblyReferences,
embeddedContent,
linkerEnabled);
return Json.Serialize(data);
return JsonSerializer.ToString(data, JsonSerializerOptionsProvider.Options);
}
private static string GetAssemblyEntryPoint(string assemblyPath)

View File

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
@ -47,4 +47,8 @@
<Reference Include="Mono.Cecil" />
<Reference Include="System.CodeDom" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\..\Components\src\JsonSerializerOptionsProvider.cs" />
</ItemGroup>
</Project>

View File

@ -39,8 +39,8 @@ namespace Test
}"));
var component = CompileToComponent(@"
<MyComponent bind-Value=""ParentValue"" />
@functions {
<MyComponent @bind-Value=""ParentValue"" />
@code {
public int ParentValue { get; set; } = 42;
}");
@ -76,8 +76,8 @@ namespace Test
}"));
var component = CompileToComponent(@"
<MyComponent bind-Value=""ParentValue"" />
@functions {
<MyComponent @bind-Value=""ParentValue"" />
@code {
public int ParentValue { get; set; } = 42;
}");
@ -113,8 +113,8 @@ namespace Test
}"));
var component = CompileToComponent(@"
<MyComponent bind-Value-OnChanged=""ParentValue"" />
@functions {
<MyComponent @bind-Value=""ParentValue"" @bind-Value:event=""OnChanged"" />
@code {
public int ParentValue { get; set; } = 42;
}");
@ -150,8 +150,8 @@ namespace Test
}"));
var component = CompileToComponent(@"
<MyComponent bind-Value-OnChanged=""ParentValue"" />
@functions {
<MyComponent @bind-Value=""ParentValue"" @bind-Value:event=""OnChanged"" />
@code {
public int ParentValue { get; set; } = 42;
}");
@ -183,8 +183,8 @@ namespace Test
}"));
var component = CompileToComponent(@"
<div bind=""@ParentValue"" />
@functions {
<div @bind=""@ParentValue"" />
@code {
public string ParentValue { get; set; } = ""hi"";
}");
@ -216,8 +216,8 @@ namespace Test
}"));
var component = CompileToComponent(@"
<div bind-value=""@ParentValue"" />
@functions {
<div @bind-value=""@ParentValue"" />
@code {
public string ParentValue { get; set; } = ""hi"";
}");
@ -251,8 +251,8 @@ namespace Test
// Act
var result = CompileToCSharp(@"
<div bind-value=""@ParentValue"" />
@functions {
<div @bind-value=""@ParentValue"" />
@code {
public string ParentValue { get; set; } = ""hi"";
}");
@ -260,7 +260,7 @@ namespace Test
var diagnostic = Assert.Single(result.Diagnostics);
Assert.Equal("RZ9989", diagnostic.Id);
Assert.Equal(
"The attribute 'bind-value' was matched by multiple bind attributes. Duplicates:" + Environment.NewLine +
"The attribute '@bind-value' was matched by multiple bind attributes. Duplicates:" + Environment.NewLine +
"Test.BindAttributes" + Environment.NewLine +
"Test.BindAttributes",
diagnostic.GetMessage());
@ -271,8 +271,8 @@ namespace Test
{
// Arrange
var component = CompileToComponent(@"
<input bind=""@ParentValue"" />
@functions {
<input @bind=""@ParentValue"" />
@code {
public int ParentValue { get; set; } = 42;
}");
@ -292,8 +292,8 @@ namespace Test
{
// Arrange
var component = CompileToComponent(@"
<input type=""text"" bind=""@CurrentDate"" format-value=""MM/dd/yyyy""/>
@functions {
<input type=""text"" @bind=""@CurrentDate"" @bind:format=""MM/dd/yyyy""/>
@code {
public DateTime CurrentDate { get; set; } = new DateTime(2018, 1, 1);
}");
@ -314,8 +314,8 @@ namespace Test
{
// Arrange
var component = CompileToComponent(@"
<input type=""text"" bind=""@CurrentDate"" format-value=""@Format""/>
@functions {
<input type=""text"" @bind=""@CurrentDate"" @bind:format=""@Format""/>
@code {
public DateTime CurrentDate { get; set; } = new DateTime(2018, 1, 1);
public string Format { get; set; } = ""MM/dd/yyyy"";
@ -338,8 +338,8 @@ namespace Test
{
// Arrange
var component = CompileToComponent(@"
<input type=""text"" bind=""@ParentValue"" />
@functions {
<input type=""text"" @bind=""@ParentValue"" />
@code {
public int ParentValue { get; set; } = 42;
}");
@ -360,8 +360,8 @@ namespace Test
{
// Arrange
var component = CompileToComponent(@"
<input type=""checkbox"" bind=""@Enabled"" />
@functions {
<input type=""checkbox"" @bind=""@Enabled"" />
@code {
public bool Enabled { get; set; }
}");
@ -381,8 +381,8 @@ namespace Test
{
// Arrange
var component = CompileToComponent(@"
<input type=""text"" bind-value-onchange=""@ParentValue"" />
@functions {
<input type=""text"" @bind-value=""@ParentValue"" @bind-value:event=""onchange"" />
@code {
public int ParentValue { get; set; } = 42;
}");
@ -403,8 +403,8 @@ namespace Test
{
// Arrange
var component = CompileToComponent(@"
<input type=""text"" bind-value-onchange=""@CurrentDate"" format-value=""MM/dd"" />
@functions {
<input type=""text"" @bind-value=""@CurrentDate"" @bind-value:event=""onchange"" @bind-value:format=""MM/dd"" />
@code {
public DateTime CurrentDate { get; set; } = new DateTime(2018, 1, 1);
}");
@ -425,8 +425,8 @@ namespace Test
{
// Arrange
var component = CompileToComponent(@"
<input type=""@(""text"")"" bind-value-onchange=""@ParentValue"" visible />
@functions {
<input type=""@(""text"")"" @bind-value=""@ParentValue"" @bind-value:event=""onchange"" visible />
@code {
public int ParentValue { get; set; } = 42;
}");
@ -448,8 +448,8 @@ namespace Test
{
// Arrange
var component = CompileToComponent(@"
<input bind-value-onchange=""@ParentValue"" type=""text"" visible />
@functions {
<input @bind-value=""@ParentValue"" @bind-value:event=""onchange"" type=""text"" visible />
@code {
public int ParentValue { get; set; } = 42;
}");
@ -474,10 +474,10 @@ namespace Test
{
// Arrange
var component = CompileToComponent(@"
<div bind-value-onchange=""@ParentValue"">
<div @bind-value=""@ParentValue"" @bind-value:event=""onchange"">
<span>@(42.ToString())</span>
</div>
@functions {
@code {
public int ParentValue { get; set; } = 42;
}");
@ -501,8 +501,8 @@ namespace Test
{
// Arrange & Act
var generated = CompileToCSharp(@"
<input type=""text"" bind-first-second-third=""Text"" />
@functions {
<input type=""text"" @bind-first-second-third=""Text"" />
@code {
public string Text { get; set; } = ""text"";
}");
@ -516,8 +516,8 @@ namespace Test
{
// Arrange & Act
var generated = CompileToCSharp(@"
<input type=""text"" bind-first-=""Text"" />
@functions {
<input type=""text"" @bind-first-=""Text"" />
@code {
public string Text { get; set; } = ""text"";
}");

View File

@ -216,7 +216,7 @@ namespace Test
var component = CompileToComponent($@"
<MyComponent OnClick=""{expression}""/>
@functions {{
@code {{
private int counter;
private void Increment(UIMouseEventArgs e) {{
counter++;
@ -261,7 +261,7 @@ namespace Test
var component = CompileToComponent(@"
<MyComponent OnClick=""@Increment""/>
@functions {
@code {
private int counter;
private void Increment(UIEventArgs e) {
counter++;
@ -445,8 +445,8 @@ namespace Test
// Act
var component = CompileToComponent(@"
<p onmouseover=""@OnComponentHover"" style=""background: @ParentBgColor;"" />
@functions {
<p @onmouseover=""@OnComponentHover"" style=""background: @ParentBgColor;"" />
@code {
public string ParentBgColor { get; set; } = ""#FFFFFF"";
public void OnComponentHover(UIMouseEventArgs e)

View File

@ -121,9 +121,9 @@ namespace Test
AdditionalSyntaxTrees.Add(GenericContextComponent);
var component = CompileToComponent(@"
<GenericContext TItem=int Items=""@(new List<int>() { 1, 2, })"" ref=""_my"" />
<GenericContext TItem=int Items=""@(new List<int>() { 1, 2, })"" @ref=""_my"" />
@functions {
@code {
GenericContext<int> _my;
void Foo() { GC.KeepAlive(_my); }
}");
@ -188,9 +188,9 @@ namespace Test
AdditionalSyntaxTrees.Add(GenericContextComponent);
var component = CompileToComponent(@"
<GenericContext Items=""@(new List<int>() { 1, 2, })"" ref=""_my"" />
<GenericContext Items=""@(new List<int>() { 1, 2, })"" @ref=""_my"" />
@functions {
@code {
GenericContext<int> _my;
void Foo() { GC.KeepAlive(_my); }
}");
@ -221,9 +221,9 @@ namespace Test
var assembly = CompileToAssembly("Test.cshtml", @"
@typeparam TItem
<GenericContext Items=""@MyItems"" ref=""_my"" />
<GenericContext Items=""@MyItems"" @ref=""_my"" />
@functions {
@code {
[Parameter] List<TItem> MyItems { get; set; }
GenericContext<TItem> _my;
void Foo() { GC.KeepAlive(_my); }

View File

@ -64,7 +64,7 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
@foreach(var item in items) {
@item
}
@functions {
@code {
string[] items = new[] { ""First"", ""Second"", ""Third"" };
}
");
@ -296,7 +296,7 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
// Arrange/Act
var component = CompileToComponent(
@"<elem attr=@MyHandleEvent />
@functions {
@code {
public bool HandlerWasCalled { get; set; } = false;
void MyHandleEvent(Microsoft.AspNetCore.Components.UIEventArgs eventArgs)
@ -340,8 +340,8 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
{
// Arrange/Act
var component = CompileToComponent(
@"<input bind=""MyValue"" />
@functions {
@"<input @bind=""MyValue"" />
@code {
public string MyValue { get; set; } = ""Initial value"";
}");
var myValueProperty = component.GetType().GetProperty("MyValue");
@ -375,8 +375,8 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
{
// Arrange/Act
var component = CompileToComponent(
@"<textarea bind=""MyValue"" ></textarea>
@functions {
@"<textarea @bind=""MyValue"" ></textarea>
@code {
public string MyValue { get; set; } = ""Initial value"";
}");
var myValueProperty = component.GetType().GetProperty("MyValue");
@ -410,8 +410,8 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
{
// Arrange/Act
var component = CompileToComponent(
@"<input bind=""MyDate"" />
@functions {
@"<input @bind=""MyDate"" />
@code {
public DateTime MyDate { get; set; } = new DateTime(2018, 3, 4, 1, 2, 3);
}");
var myDateProperty = component.GetType().GetProperty("MyDate");
@ -448,8 +448,8 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
// Arrange/Act
var testDateFormat = "ddd yyyy-MM-dd";
var component = CompileToComponent(
$@"<input bind=""@MyDate"" format-value=""{testDateFormat}"" />
@functions {{
$@"<input @bind=""@MyDate"" @bind:format=""{testDateFormat}"" />
@code {{
public DateTime MyDate {{ get; set; }} = new DateTime(2018, 3, 4);
}}");
var myDateProperty = component.GetType().GetProperty("MyDate");
@ -483,7 +483,7 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
{
// Arrange
var component = CompileToComponent(@"
<button onclick=""function(){console.log('hello');};"" />");
<button @onclick=""function(){console.log('hello');};"" />");
// Act
var frames = GetRenderTree(component);
@ -499,8 +499,8 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
{
// Arrange
var component = CompileToComponent(@"
<button onclick=""@(x => Clicked = true)"" />
@functions {
<button @onclick=""@(x => Clicked = true)"" />
@code {
public bool Clicked { get; set; }
}");
@ -531,8 +531,8 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
{
// Arrange
var component = CompileToComponent(@"
<button onclick=""@OnClick"" />
@functions {
<button @onclick=""@OnClick"" />
@code {
public void OnClick(UIMouseEventArgs e) { Clicked = true; }
public bool Clicked { get; set; }
}");
@ -568,8 +568,8 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
{
// Arrange/Act
var component = CompileToComponent(
@"<input bind=""MyValue"" />
@functions {
@"<input @bind=""MyValue"" />
@code {
public bool MyValue { get; set; } = true;
}");
var myValueProperty = component.GetType().GetProperty("MyValue");
@ -604,8 +604,8 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
// Arrange/Act
var myEnumType = FullTypeName<MyEnum>();
var component = CompileToComponent(
$@"<input bind=""MyValue"" />
@functions {{
$@"<input @bind=""MyValue"" />
@code {{
public {myEnumType} MyValue {{ get; set; }} = {myEnumType}.{nameof(MyEnum.FirstValue)};
}}");
var myValueProperty = component.GetType().GetProperty("MyValue");
@ -695,7 +695,7 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
var component = CompileToComponent(@"
@(Repeat(@<div>@(""Hello, World!"".ToLower())</div>, 3))
@functions {
@code {
RenderFragment Repeat(RenderFragment template, int count)
{
return (b) =>
@ -733,7 +733,7 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
var component = CompileToComponent(@"
@(Repeat((context) => @<div>@context.ToLower()</div>, ""Hello, World!"", 3))
@functions {
@code {
RenderFragment Repeat<T>(RenderFragment<T> template, T value, int count)
{
return (b) =>

View File

@ -5,21 +5,14 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.AspNetCore.Testing.xunit;
using Xunit;
using Xunit.Abstractions;
namespace Microsoft.AspNetCore.Blazor.Build.Test
{
public class RuntimeDependenciesResolverTest
{
private readonly ITestOutputHelper _output;
public RuntimeDependenciesResolverTest(ITestOutputHelper output)
{
_output = output;
}
[ConditionalFact]
[SkipOnHelix("https://github.com/aspnet/AspNetCore/issues/10426")]
public void FindsReferenceAssemblyGraph_ForStandaloneApp()
@ -128,14 +121,49 @@ namespace Microsoft.AspNetCore.Blazor.Build.Test
var expected = new HashSet<string>(expectedContents);
var actual = new HashSet<string>(contents);
_output.WriteLine("Expected contents to have:");
_output.WriteLine(string.Join(",", expected.Except(actual)));
_output.WriteLine("Unexpected contents:");
_output.WriteLine(string.Join(",", actual.Except(expected)));
var contentNotFound = expected.Except(actual);
var additionalContentFound = actual.Except(expected);
// Assert
if (contentNotFound.Any() || additionalContentFound.Any())
{
throw new ContentMisMatchException
{
ContentNotFound = contentNotFound,
AdditionalContentFound = additionalContentFound,
};
}
Assert.Equal(expectedContents, contents);
}
private class ContentMisMatchException : Xunit.Sdk.XunitException
{
public IEnumerable<string> ContentNotFound { get; set; }
public IEnumerable<string> AdditionalContentFound { get; set; }
public override string Message
{
get
{
var error = new StringBuilder();
if (ContentNotFound.Any())
{
error.Append($"Expected content not found: ")
.AppendJoin(", ", ContentNotFound);
}
if (AdditionalContentFound.Any())
{
error.Append("Unexpected content found: ")
.AppendJoin(", ", AdditionalContentFound);
}
return error.ToString();
}
}
}
}
}

View File

@ -247,7 +247,6 @@ namespace WsProxy {
}
//step one, figure out where did we hit
//lol no, fuck it, let's use fake data
var res_value = res.Value? ["result"]? ["value"];
if (res_value == null || res_value is JValue) {
//Give up and send the original call stack

View File

@ -71,7 +71,7 @@ namespace WsProxy {
pending.Add (bytes);
if (pending.Count == 1) {
if (current_send != null)
throw new Exception ("WTF, current_send MUST BE NULL IF THERE'S no pending send");
throw new Exception ("UNEXPECTED, current_send MUST BE NULL IF THERE'S no pending send");
//Console.WriteLine ("sending {0} bytes", bytes.Length);
current_send = Ws.SendAsync (new ArraySegment<byte> (bytes), WebSocketMessageType.Text, true, token);
return current_send;
@ -86,7 +86,7 @@ namespace WsProxy {
if (pending.Count > 0) {
if (current_send != null)
throw new Exception ("WTF, current_send MUST BE NULL IF THERE'S no pending send");
throw new Exception ("UNEXPECTED, current_send MUST BE NULL IF THERE'S no pending send");
//Console.WriteLine ("sending more {0} bytes", pending[0].Length);
current_send = Ws.SendAsync (new ArraySegment<byte> (pending [0]), WebSocketMessageType.Text, true, token);
return current_send;

View File

@ -4,9 +4,9 @@
<p>Current count: @currentCount</p>
<button class="btn btn-primary" onclick="@IncrementCount">Click me</button>
<button class="btn btn-primary" @onclick="@IncrementCount">Click me</button>
@functions {
@code {
int currentCount = 0;
void IncrementCount()

View File

@ -35,7 +35,7 @@ else
</table>
}
@functions {
@code {
WeatherForecast[] forecasts;
protected override async Task OnInitAsync()

View File

@ -1,11 +1,11 @@
<div class="top-row pl-4 navbar navbar-dark">
<a class="navbar-brand" href="">BlazorHosted-CSharp</a>
<button class="navbar-toggler" onclick="@ToggleNavMenu">
<button class="navbar-toggler" @onclick="@ToggleNavMenu">
<span class="navbar-toggler-icon"></span>
</button>
</div>
<div class="@NavMenuCssClass" onclick="@ToggleNavMenu">
<div class="@NavMenuCssClass" @onclick="@ToggleNavMenu">
<ul class="nav flex-column">
<li class="nav-item px-3">
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
@ -25,7 +25,7 @@
</ul>
</div>
@functions {
@code {
bool collapseNavMenu = true;
string NavMenuCssClass => collapseNavMenu ? "collapse" : null;

View File

@ -4,12 +4,12 @@
<span class="text-nowrap">
Please take our
<a target="_blank" class="font-weight-bold" href="https://go.microsoft.com/fwlink/?linkid=2086020">brief survey</a>
<a target="_blank" class="font-weight-bold" href="https://go.microsoft.com/fwlink/?linkid=2093904">brief survey</a>
</span>
and tell us what you think.
</div>
@functions {
@code {
// Demonstrates how a parent component can supply parameters
[Parameter] string Title { get; set; }
}

View File

@ -4,9 +4,9 @@
<p>Current count: @currentCount</p>
<button class="btn btn-primary" onclick="@IncrementCount">Click me</button>
<button class="btn btn-primary" @onclick="@IncrementCount">Click me</button>
@functions {
@code {
int currentCount = 0;
void IncrementCount()

View File

@ -34,7 +34,7 @@ else
</table>
}
@functions {
@code {
WeatherForecast[] forecasts;
protected override async Task OnInitAsync()

View File

@ -1,11 +1,11 @@
<div class="top-row pl-4 navbar navbar-dark">
<a class="navbar-brand" href="">BlazorStandalone-CSharp</a>
<button class="navbar-toggler" onclick="@ToggleNavMenu">
<button class="navbar-toggler" @onclick="@ToggleNavMenu">
<span class="navbar-toggler-icon"></span>
</button>
</div>
<div class="@NavMenuCssClass" onclick="@ToggleNavMenu">
<div class="@NavMenuCssClass" @onclick="@ToggleNavMenu">
<ul class="nav flex-column">
<li class="nav-item px-3">
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
@ -25,7 +25,7 @@
</ul>
</div>
@functions {
@code {
bool collapseNavMenu = true;
string NavMenuCssClass => collapseNavMenu ? "collapse" : null;

View File

@ -4,12 +4,12 @@
<span class="text-nowrap">
Please take our
<a target="_blank" class="font-weight-bold" href="https://go.microsoft.com/fwlink/?linkid=2086020">brief survey</a>
<a target="_blank" class="font-weight-bold" href="https://go.microsoft.com/fwlink/?linkid=2093904">brief survey</a>
</span>
and tell us what you think.
</div>
@functions {
@code {
// Demonstrates how a parent component can supply parameters
[Parameter] string Title { get; set; }
}

View File

@ -3,7 +3,7 @@
Hello, world!
@functions {
@code {
protected override void OnAfterRender()
{
BenchmarkEvent.Send(JSRuntime, "Rendered index.cshtml");

View File

@ -1,12 +1,13 @@
@page "/json"
@using System.Text.Json.Serialization
@inject IJSRuntime JSRuntime
<h2>JSON performance</h2>
<p><button id="reset-all" onclick=@Reset>Reset</button></p>
<p><button id="reset-all" @onclick=@Reset>Reset</button></p>
<button id="serialize-small" onclick=@SerializeSmall>Serialize (small)</button>
<button id="serialize-large" onclick=@SerializeLarge>Serialize (large)</button>
<button id="serialize-small" @onclick=@SerializeSmall>Serialize (small)</button>
<button id="serialize-large" @onclick=@SerializeLarge>Serialize (large)</button>
<p><pre style="border: 1px solid black; overflow: scroll;">@serializedValue</pre></p>
@if (serializedValue != null)
@ -14,15 +15,15 @@
<p>Serialized length: <strong id="serialized-length">@serializedValue.Length</strong> chars</p>
}
<button id="deserialize-small" onclick=@DeserializeSmall>Deserialize (small)</button>
<button id="deserialize-large" onclick=@DeserializeLarge>Deserialize (large)</button>
<button id="deserialize-small" @onclick=@DeserializeSmall>Deserialize (small)</button>
<button id="deserialize-large" @onclick=@DeserializeLarge>Deserialize (large)</button>
@if (numPeopleDeserialized > 0)
{
<p>Deserialized <strong id="deserialized-count">@numPeopleDeserialized</strong> people</p>
}
@functions {
@code {
static string[] Clearances = new[] { "Alpha", "Beta", "Gamma", "Delta", "Epsilon" };
Person smallOrgChart = GenerateOrgChart(1, 4);
Person largeOrgChart = GenerateOrgChart(5, 4);
@ -32,8 +33,8 @@
protected override void OnInit()
{
smallOrgChartJson = Microsoft.JSInterop.Json.Serialize(smallOrgChart);
largeOrgChartJson = Microsoft.JSInterop.Json.Serialize(largeOrgChart);
smallOrgChartJson = JsonSerializer.ToString(smallOrgChart);
largeOrgChartJson = JsonSerializer.ToString(largeOrgChart);
}
protected override void OnAfterRender()
@ -50,10 +51,10 @@
}
void SerializeSmall()
=> serializedValue = Microsoft.JSInterop.Json.Serialize(smallOrgChart);
=> serializedValue = JsonSerializer.ToString(smallOrgChart);
void SerializeLarge()
=> serializedValue = Microsoft.JSInterop.Json.Serialize(largeOrgChart);
=> serializedValue = JsonSerializer.ToString(largeOrgChart);
void DeserializeSmall()
=> numPeopleDeserialized = Deserialize(smallOrgChartJson);
@ -80,7 +81,7 @@
static int Deserialize(string json)
{
var ceo = Microsoft.JSInterop.Json.Deserialize<Person>(json);
var ceo = JsonSerializer.Parse<Person>(json);
return CountPeople(ceo);
}

View File

@ -3,9 +3,9 @@
<h2>Render List</h2>
Number of items: <input id="num-items" type="number" bind=@numItems />
<button id="show-list" onclick=@Show>Show</button>
<button id="hide-list" onclick=@Hide>Hide</button>
Number of items: <input id="num-items" type="number" @bind=@numItems />
<button id="show-list" @onclick=@Show>Show</button>
<button id="hide-list" @onclick=@Hide>Hide</button>
@if (show)
{
@ -32,7 +32,7 @@ Number of items: <input id="num-items" type="number" bind=@numItems />
</table>
}
@functions {
@code {
int numItems = 10;
bool show = false;

View File

@ -1,12 +1,12 @@
@page "/counter"
@page "/counter"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" onclick="@IncrementCount">Click me</button>
<button class="btn btn-primary" @onclick="@IncrementCount">Click me</button>
@functions {
@code {
int currentCount = 0;
void IncrementCount()

View File

@ -43,7 +43,7 @@ else
</p>
}
@functions {
@code {
[Parameter] DateTime StartDate { get; set; }
WeatherForecast[] forecasts;

View File

@ -1,11 +1,11 @@
<div class="top-row pl-4 navbar navbar-dark">
<div class="top-row pl-4 navbar navbar-dark">
<a class="navbar-brand" href="">Blazor app</a>
<button class="navbar-toggler" onclick=@ToggleNavMenu>
<button class="navbar-toggler" @onclick=@ToggleNavMenu>
<span class="navbar-toggler-icon"></span>
</button>
</div>
<div class=@(collapseNavMenu ? "collapse" : null) onclick=@ToggleNavMenu>
<div class=@(collapseNavMenu ? "collapse" : null) @onclick=@ToggleNavMenu>
<ul class="nav flex-column">
<li class="nav-item px-3">
<NavLink class="nav-link" href="" Match=NavLinkMatch.All>
@ -25,7 +25,7 @@
</ul>
</div>
@functions {
@code {
bool collapseNavMenu = true;
void ToggleNavMenu()

Binary file not shown.

View File

@ -7,23 +7,11 @@
</PropertyGroup>
<ItemGroup>
<WebpackInputs Include="src\**\*.ts" />
<WebPackOutputs Include="dist\Debug\blazor.webassembly.js" />
<WebPackOutputs Include="dist\Release\blazor.webassembly.js" />
<WebPackOutputs Include="dist\Debug\blazor.server.js" />
<WebPackOutputs Include="dist\Release\blazor.server.js" />
<ProjectReference Include="..\..\SignalR\clients\ts\signalr-protocol-msgpack\signalr-protocol-msgpack.npmproj" />
</ItemGroup>
<Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), Directory.Build.targets))\Directory.Build.targets" />
<!-- Override the default 'Build' target from eng/targets/Npm.Common.targets. -->
<Target Name="Build"
Inputs="@(WebpackInputs)"
Outputs="@(WebPackOutputs)">
<RemoveDir Directories="dist" />
<Yarn Command="run build:debug" />
<Yarn Command="run build:production" />
</Target>
<Target Name="Restore" />
</Project>

View File

@ -0,0 +1,2 @@
*.js -diff -merge
*.js linguist-generated=true

File diff suppressed because it is too large Load Diff

View File

@ -316,17 +316,14 @@ var DotNet;
promise.catch(function (error) { return console.error(error); });
};
DotNetObject.prototype.serializeAsArg = function () {
return "__dotNetObject:" + this._id;
return { __dotNetObject: this._id };
};
return DotNetObject;
}());
var dotNetObjectValueFormat = /^__dotNetObject\:(\d+)$/;
var dotNetObjectRefKey = '__dotNetObject';
attachReviver(function reviveDotNetObject(key, value) {
if (typeof value === 'string') {
var match = value.match(dotNetObjectValueFormat);
if (match) {
return new DotNetObject(parseInt(match[1]));
}
if (value && typeof value === 'object' && value.hasOwnProperty(dotNetObjectRefKey)) {
return new DotNetObject(value.__dotNetObject);
}
// Unrecognized - let another reviver handle it
return value;
@ -880,6 +877,7 @@ function createEmscriptenModuleInstance(loadAssemblyUrls, onReady, onError) {
});
});
module.postRun.push(function () {
MONO.mono_wasm_setenv("MONO_URI_DOTNETRELATIVEORABSOLUTE", "true");
var load_runtime = Module.cwrap('mono_wasm_load_runtime', null, ['string', 'number']);
load_runtime(appBinDirName, MonoDebugger_1.hasDebuggingEnabled() ? 1 : 0);
MONO.mono_wasm_runtime_is_ready = true;
@ -1405,7 +1403,7 @@ function getCaptureIdAttributeName(referenceCaptureId) {
return "_bl_" + referenceCaptureId;
}
// Support receiving ElementRef instances as args in interop calls
var elementRefKey = '_blazorElementRef'; // Keep in sync with ElementRef.cs
var elementRefKey = '__internalId'; // Keep in sync with ElementRef.cs
DotNet.attachReviver(function (key, value) {
if (value && typeof value === 'object' && value.hasOwnProperty(elementRefKey) && typeof value[elementRefKey] === 'string') {
return getElementByCaptureId(value[elementRefKey]);
@ -2338,7 +2336,7 @@ function sendAsync(id, body, jsonFetchArgs) {
switch (_a.label) {
case 0:
fetchOptions = JSON.parse(Environment_1.platform.toJavaScriptString(jsonFetchArgs));
requestInit = Object.assign(fetchOptions.requestInit, fetchOptions.requestInitOverrides);
requestInit = Object.assign(convertToRequestInit(fetchOptions.requestInit), fetchOptions.requestInitOverrides);
if (body) {
requestInit.body = Environment_1.platform.toUint8Array(body);
}
@ -2363,6 +2361,13 @@ function sendAsync(id, body, jsonFetchArgs) {
});
});
}
function convertToRequestInit(blazorRequestInit) {
return {
credentials: blazorRequestInit.credentials,
method: blazorRequestInit.method,
headers: blazorRequestInit.headers.map(function (item) { return [item.name, item.value]; })
};
}
function dispatchSuccessResponse(id, response, responseData) {
var responseDescriptor = {
statusCode: response.status,
@ -2370,7 +2375,7 @@ function dispatchSuccessResponse(id, response, responseData) {
headers: [],
};
response.headers.forEach(function (value, name) {
responseDescriptor.headers.push([name, value]);
responseDescriptor.headers.push({ name: name, value: value });
});
if (!allocateArrayMethod) {
allocateArrayMethod = Environment_1.platform.findMethod(httpClientAssembly, httpClientNamespace, httpClientTypeName, 'AllocateArray');

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -5,15 +5,17 @@
"description": "",
"main": "index.js",
"scripts": {
"preclean": "cd utils && yarn install --mutex network",
"clean": "node utils/node_modules/rimraf/bin.js node_modules",
"prebuild": "yarn run clean && yarn install --mutex network",
"build": "yarn run build:debug && yarn run build:production",
"build:debug": "cd src && webpack --mode development --config ./webpack.config.js",
"build:production": "cd src && webpack --mode production --config ./webpack.config.js",
"test": "jest"
},
"devDependencies": {
"@aspnet/signalr": "^1.0.0",
"@aspnet/signalr-protocol-msgpack": "^1.0.0",
"@dotnet/jsinterop": "^0.1.1",
"@aspnet/signalr-protocol-msgpack": "file:../../SignalR/clients/ts/signalr-protocol-msgpack",
"@dotnet/jsinterop": "3.0.0-preview6.19280.1",
"@types/emscripten": "0.0.31",
"@types/jest": "^24.0.6",
"@types/jsdom": "11.0.6",

View File

@ -262,6 +262,7 @@ function createEmscriptenModuleInstance(loadAssemblyUrls: string[], onReady: ()
});
module.postRun.push(() => {
MONO.mono_wasm_setenv("MONO_URI_DOTNETRELATIVEORABSOLUTE","true");
const load_runtime = Module.cwrap('mono_wasm_load_runtime', null, ['string', 'number']);
load_runtime(appBinDirName, hasDebuggingEnabled() ? 1 : 0);
MONO.mono_wasm_runtime_is_ready = true;

View File

@ -24,4 +24,5 @@ declare namespace Mono {
declare namespace MONO {
var loaded_files: string[];
var mono_wasm_runtime_is_ready: boolean;
function mono_wasm_setenv (name: string, value: string): void;
}

View File

@ -12,7 +12,7 @@ function getCaptureIdAttributeName(referenceCaptureId: string) {
}
// Support receiving ElementRef instances as args in interop calls
const elementRefKey = '_blazorElementRef'; // Keep in sync with ElementRef.cs
const elementRefKey = '__internalId'; // Keep in sync with ElementRef.cs
DotNet.attachReviver((key, value) => {
if (value && typeof value === 'object' && value.hasOwnProperty(elementRefKey) && typeof value[elementRefKey] === 'string') {
return getElementByCaptureId(value[elementRefKey]);

View File

@ -16,7 +16,7 @@ async function sendAsync(id: number, body: System_Array<any>, jsonFetchArgs: Sys
let responseData: ArrayBuffer;
const fetchOptions: FetchOptions = JSON.parse(platform.toJavaScriptString(jsonFetchArgs));
const requestInit: RequestInit = Object.assign(fetchOptions.requestInit, fetchOptions.requestInitOverrides);
const requestInit: RequestInit = Object.assign(convertToRequestInit(fetchOptions.requestInit), fetchOptions.requestInitOverrides);
if (body) {
requestInit.body = platform.toUint8Array(body);
@ -33,6 +33,14 @@ async function sendAsync(id: number, body: System_Array<any>, jsonFetchArgs: Sys
dispatchSuccessResponse(id, response, responseData);
}
function convertToRequestInit(blazorRequestInit: BlazorRequestInit) {
return {
credentials: blazorRequestInit.credentials,
method: blazorRequestInit.method,
headers: blazorRequestInit.headers.map(item => [item.name, item.value])
};
}
function dispatchSuccessResponse(id: number, response: Response, responseData: ArrayBuffer) {
const responseDescriptor: ResponseDescriptor = {
statusCode: response.status,
@ -40,7 +48,7 @@ function dispatchSuccessResponse(id: number, response: Response, responseData: A
headers: [],
};
response.headers.forEach((value, name) => {
responseDescriptor.headers.push([name, value]);
responseDescriptor.headers.push({ name: name, value: value });
});
if (!allocateArrayMethod) {
@ -99,15 +107,26 @@ function dispatchResponse(id: number, responseDescriptor: System_String | null,
// Keep these in sync with the .NET equivalent in WebAssemblyHttpMessageHandler.cs
interface FetchOptions {
requestUri: string;
requestInit: RequestInit;
requestInit: BlazorRequestInit;
requestInitOverrides: RequestInit;
}
interface BlazorRequestInit {
credentials: string;
headers: Header[];
method: string;
}
interface ResponseDescriptor {
// We don't have BodyText in here because if we did, then in the JSON-response case (which
// is the most common case), we'd be double-encoding it, since the entire ResponseDescriptor
// also gets JSON encoded. It would work but is twice the amount of string processing.
statusCode: number;
statusText: string;
headers: string[][];
headers: Header[];
}
interface Header {
name: string;
value: string;
}

View File

@ -0,0 +1,9 @@
{
"name": "common",
"private": true,
"version": "0.0.1",
"description": "Common dependencies used during dev time. DO NOT PUBLISH",
"devDependencies": {
"rimraf": "^2.6.2"
}
}

View File

@ -0,0 +1,82 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
glob@^7.1.3:
version "7.1.4"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.4"
once "^1.3.0"
path-is-absolute "^1.0.0"
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
dependencies:
once "^1.3.0"
wrappy "1"
inherits@2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
dependencies:
brace-expansion "^1.1.7"
once@^1.3.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
dependencies:
wrappy "1"
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
rimraf@^2.6.2:
version "2.6.3"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
dependencies:
glob "^7.1.3"
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=

View File

@ -2,17 +2,13 @@
# yarn lockfile v1
"@aspnet/signalr-protocol-msgpack@^1.0.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@aspnet/signalr-protocol-msgpack/-/signalr-protocol-msgpack-1.1.0.tgz#155038149e8e0eee1f97f4d1319f9f3271ff06fb"
integrity sha512-AQv5AavWvoFz2iLSIDK1DAIXMNhQ1Jt1qRDouXxLKAKP13u8iFq7i3/MwJ30ShOBGBoL5/zn6pBlNjAzTmAsMA==
"@aspnet/signalr-protocol-msgpack@file:../../SignalR/clients/ts/signalr-protocol-msgpack":
version "3.0.0-dev"
dependencies:
msgpack5 "^4.0.2"
"@aspnet/signalr@^1.0.0":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@aspnet/signalr/-/signalr-1.1.2.tgz#eb9cbc758ff5bfe9a2aba6669e05dfc25a6d783d"
integrity sha512-Xu2ndFTWYhyE+TOCK3LkPWGmc5xGLezBKgGEchyOA++alJ6fdWJ8P/Wsb4Mmd1buzcxGLlIyjpLfUP20rrCHIg==
"@aspnet/signalr@file:../../SignalR/clients/ts/signalr":
version "3.0.0-dev"
dependencies:
eventsource "^1.0.7"
request "^2.88.0"
@ -147,10 +143,10 @@
lodash "^4.17.11"
to-fast-properties "^2.0.0"
"@dotnet/jsinterop@^0.1.1":
version "0.1.1"
resolved "https://registry.yarnpkg.com/@dotnet/jsinterop/-/jsinterop-0.1.1.tgz#f54ba865f241596ea3744f28634454a160476399"
integrity sha512-/Y5f3rtzZ85y8ukBds6IHRgnu7zwlAxe/JhaqN8mvj/JPDA4AtfdNqjJBZuZJxLrP0k6+q4owx/DS7LyZWccFQ==
"@dotnet/jsinterop@3.0.0-preview6.19280.1":
version "3.0.0-preview6.19280.1"
resolved "https://dotnet.myget.org/F/aspnetcore-dev/npm/@dotnet/jsinterop/-/@dotnet/jsinterop-3.0.0-preview6.19280.1.tgz#4c991132f33157de93bc3b6db93cffc9e964b241"
integrity sha1-TJkRMvMxV96TvDttuTz/yelkskE=
"@types/emscripten@0.0.31":
version "0.0.31"

View File

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
@ -13,4 +13,8 @@
<Reference Include="Microsoft.Extensions.DependencyInjection" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\Components\src\JsonSerializerOptionsProvider.cs" />
</ItemGroup>
</Project>

View File

@ -2,6 +2,8 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components.Rendering;
using Microsoft.JSInterop;
@ -30,34 +32,61 @@ namespace Microsoft.AspNetCore.Components.Browser
switch (eventArgsType)
{
case "change":
return Json.Deserialize<UIChangeEventArgs>(eventArgsJson);
return DeserializeUIEventChangeArgs(eventArgsJson);
case "clipboard":
return Json.Deserialize<UIClipboardEventArgs>(eventArgsJson);
return Deserialize<UIClipboardEventArgs>(eventArgsJson);
case "drag":
return Json.Deserialize<UIDragEventArgs>(eventArgsJson);
return Deserialize<UIDragEventArgs>(eventArgsJson);
case "error":
return Json.Deserialize<UIErrorEventArgs>(eventArgsJson);
return Deserialize<UIErrorEventArgs>(eventArgsJson);
case "focus":
return Json.Deserialize<UIFocusEventArgs>(eventArgsJson);
return Deserialize<UIFocusEventArgs>(eventArgsJson);
case "keyboard":
return Json.Deserialize<UIKeyboardEventArgs>(eventArgsJson);
return Deserialize<UIKeyboardEventArgs>(eventArgsJson);
case "mouse":
return Json.Deserialize<UIMouseEventArgs>(eventArgsJson);
return Deserialize<UIMouseEventArgs>(eventArgsJson);
case "pointer":
return Json.Deserialize<UIPointerEventArgs>(eventArgsJson);
return Deserialize<UIPointerEventArgs>(eventArgsJson);
case "progress":
return Json.Deserialize<UIProgressEventArgs>(eventArgsJson);
return Deserialize<UIProgressEventArgs>(eventArgsJson);
case "touch":
return Json.Deserialize<UITouchEventArgs>(eventArgsJson);
return Deserialize<UITouchEventArgs>(eventArgsJson);
case "unknown":
return Json.Deserialize<UIEventArgs>(eventArgsJson);
return Deserialize<UIEventArgs>(eventArgsJson);
case "wheel":
return Json.Deserialize<UIWheelEventArgs>(eventArgsJson);
return Deserialize<UIWheelEventArgs>(eventArgsJson);
default:
throw new ArgumentException($"Unsupported value '{eventArgsType}'.", nameof(eventArgsType));
}
}
private static T Deserialize<T>(string eventArgsJson)
{
return JsonSerializer.Parse<T>(eventArgsJson, JsonSerializerOptionsProvider.Options);
}
private static UIChangeEventArgs DeserializeUIEventChangeArgs(string eventArgsJson)
{
var changeArgs = Deserialize<UIChangeEventArgs>(eventArgsJson);
var jsonElement = (JsonElement)changeArgs.Value;
switch (jsonElement.Type)
{
case JsonValueType.Null:
changeArgs.Value = null;
break;
case JsonValueType.String:
changeArgs.Value = jsonElement.GetString();
break;
case JsonValueType.True:
case JsonValueType.False:
changeArgs.Value = jsonElement.GetBoolean();
break;
default:
throw new ArgumentException($"Unsupported {nameof(UIChangeEventArgs)} value {jsonElement}.");
}
return changeArgs;
}
/// <summary>
/// For framework use only.
/// </summary>

View File

@ -179,8 +179,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel", "..\Servers\Kestrel\Kestrel\src\Microsoft.AspNetCore.Server.Kestrel.csproj", "{E01CD19E-B0BE-4480-8B8E-3701DE862E62}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions", "..\Servers\Kestrel\Transport.Abstractions\src\Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.csproj", "{06E9B7E9-3ABA-4766-BAF8-8904942470A9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets", "..\Servers\Kestrel\Transport.Sockets\src\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.csproj", "{AA87CAA1-2456-4108-A02F-E16B9B8A98EE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Connections.Common", "..\SignalR\common\Http.Connections.Common\src\Microsoft.AspNetCore.Http.Connections.Common.csproj", "{DC2F67CC-79DD-4F7C-AFD1-AC0D12B331C9}"
@ -1184,18 +1182,6 @@ Global
{E01CD19E-B0BE-4480-8B8E-3701DE862E62}.Release|x64.Build.0 = Release|Any CPU
{E01CD19E-B0BE-4480-8B8E-3701DE862E62}.Release|x86.ActiveCfg = Release|Any CPU
{E01CD19E-B0BE-4480-8B8E-3701DE862E62}.Release|x86.Build.0 = Release|Any CPU
{06E9B7E9-3ABA-4766-BAF8-8904942470A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{06E9B7E9-3ABA-4766-BAF8-8904942470A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{06E9B7E9-3ABA-4766-BAF8-8904942470A9}.Debug|x64.ActiveCfg = Debug|Any CPU
{06E9B7E9-3ABA-4766-BAF8-8904942470A9}.Debug|x64.Build.0 = Debug|Any CPU
{06E9B7E9-3ABA-4766-BAF8-8904942470A9}.Debug|x86.ActiveCfg = Debug|Any CPU
{06E9B7E9-3ABA-4766-BAF8-8904942470A9}.Debug|x86.Build.0 = Debug|Any CPU
{06E9B7E9-3ABA-4766-BAF8-8904942470A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{06E9B7E9-3ABA-4766-BAF8-8904942470A9}.Release|Any CPU.Build.0 = Release|Any CPU
{06E9B7E9-3ABA-4766-BAF8-8904942470A9}.Release|x64.ActiveCfg = Release|Any CPU
{06E9B7E9-3ABA-4766-BAF8-8904942470A9}.Release|x64.Build.0 = Release|Any CPU
{06E9B7E9-3ABA-4766-BAF8-8904942470A9}.Release|x86.ActiveCfg = Release|Any CPU
{06E9B7E9-3ABA-4766-BAF8-8904942470A9}.Release|x86.Build.0 = Release|Any CPU
{AA87CAA1-2456-4108-A02F-E16B9B8A98EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AA87CAA1-2456-4108-A02F-E16B9B8A98EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AA87CAA1-2456-4108-A02F-E16B9B8A98EE}.Debug|x64.ActiveCfg = Debug|Any CPU
@ -1439,7 +1425,6 @@ Global
{D8C72607-7E3E-4124-A065-A57F23E9F2BA} = {2FC10057-7A0A-4E34-8302-879925BC0102}
{4272499A-C424-41DF-B6B8-DF3C19416BE2} = {2FC10057-7A0A-4E34-8302-879925BC0102}
{E01CD19E-B0BE-4480-8B8E-3701DE862E62} = {2FC10057-7A0A-4E34-8302-879925BC0102}
{06E9B7E9-3ABA-4766-BAF8-8904942470A9} = {2FC10057-7A0A-4E34-8302-879925BC0102}
{AA87CAA1-2456-4108-A02F-E16B9B8A98EE} = {2FC10057-7A0A-4E34-8302-879925BC0102}
{DC2F67CC-79DD-4F7C-AFD1-AC0D12B331C9} = {2FC10057-7A0A-4E34-8302-879925BC0102}
{56DA124E-A37A-44DE-9DED-2764DDF0816C} = {2FC10057-7A0A-4E34-8302-879925BC0102}

Some files were not shown because too many files have changed in this diff Show More