merge
This commit is contained in:
commit
b02309fecf
|
|
@ -28,7 +28,7 @@ jobs:
|
|||
jobName: Helix_quarantined_x64
|
||||
jobDisplayName: 'Tests: Helix'
|
||||
agentOs: Windows
|
||||
timeoutInMinutes: 240
|
||||
timeoutInMinutes: 120
|
||||
steps:
|
||||
# Build the shared framework
|
||||
- script: ./build.cmd -ci -nobl -all -pack -arch x64 /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log
|
||||
|
|
@ -53,7 +53,7 @@ jobs:
|
|||
jobName: Windows_Quarantined_x64
|
||||
jobDisplayName: 'Tests: Windows x64'
|
||||
agentOs: Windows
|
||||
timeoutInMinutes: 240
|
||||
timeoutInMinutes: 90
|
||||
isTestingJob: true
|
||||
steps:
|
||||
- powershell: "& ./build.ps1 -CI -nobl -all -pack -NoBuildJava"
|
||||
|
|
@ -86,7 +86,7 @@ jobs:
|
|||
jobName: MacOS_Quarantined_Test
|
||||
jobDisplayName: "Tests: macOS 10.14"
|
||||
agentOs: macOS
|
||||
timeoutInMinutes: 240
|
||||
timeoutInMinutes: 60
|
||||
isTestingJob: true
|
||||
steps:
|
||||
- bash: ./build.sh --all --pack --ci --nobl --no-build-java
|
||||
|
|
@ -119,7 +119,7 @@ jobs:
|
|||
jobName: Linux_Quarantined_Test
|
||||
jobDisplayName: "Tests: Ubuntu 16.04 x64"
|
||||
agentOs: Linux
|
||||
timeoutInMinutes: 240
|
||||
timeoutInMinutes: 60
|
||||
isTestingJob: true
|
||||
useHostedUbuntu: false
|
||||
steps:
|
||||
|
|
|
|||
234
AspNetCore.sln
234
AspNetCore.sln
|
|
@ -393,10 +393,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HttpOverrides", "HttpOverri
|
|||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HttpOverrides", "src\Middleware\HttpOverrides\src\Microsoft.AspNetCore.HttpOverrides.csproj", "{34F24889-22D2-40A1-A2AB-A43B9061FE0D}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NodeServices", "NodeServices", "{ED90A0D9-867B-4212-846F-3E09D60A5B7E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.NodeServices", "src\Middleware\NodeServices\src\Microsoft.AspNetCore.NodeServices.csproj", "{C68A3531-E47A-4F2F-842E-4A3A7C844CC1}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ResponseCompression", "ResponseCompression", "{512EFCA7-1590-492A-8D06-84744F79DA91}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCompression", "src\Middleware\ResponseCompression\src\Microsoft.AspNetCore.ResponseCompression.csproj", "{CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}"
|
||||
|
|
@ -405,10 +401,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SpaServices.Extensions", "S
|
|||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SpaServices.Extensions", "src\Middleware\SpaServices.Extensions\src\Microsoft.AspNetCore.SpaServices.Extensions.csproj", "{566B6729-63FF-484D-8F47-91561D76F445}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SpaServices", "SpaServices", "{1EBEF6FF-4A0D-4668-A9F3-74587ECAC969}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SpaServices", "src\Middleware\SpaServices\src\Microsoft.AspNetCore.SpaServices.csproj", "{797B9228-5BC9-4C0C-B444-C490A98D057E}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mvc.Analyzers", "Mvc.Analyzers", "{515282B6-6EF9-46E0-8EF1-DBD1CD948D9E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Analyzers", "src\Mvc\Mvc.Analyzers\src\Microsoft.AspNetCore.Mvc.Analyzers.csproj", "{02A85F31-A092-4322-A3D9-91E894D9ECD2}"
|
||||
|
|
@ -493,10 +485,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Authentication.Msal", "Auth
|
|||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Authentication.WebAssembly.Msal", "src\Components\WebAssembly\Authentication.Msal\src\Microsoft.Authentication.WebAssembly.Msal.csproj", "{09F72EF0-2BDE-4B73-B116-A87E38C432FE}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DebugProxy", "DebugProxy", "{F01E5B0D-1277-481D-8879-41A87F3F9524}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.WebAssembly.DebugProxy", "src\Components\WebAssembly\DebugProxy\src\Microsoft.AspNetCore.Components.WebAssembly.DebugProxy.csproj", "{67F51062-6897-4019-AA88-6BDB5E30B015}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "JSInterop", "JSInterop", "{44161B20-CC30-403A-AC94-247592ED7590}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.JSInterop.WebAssembly", "src\Components\WebAssembly\JSInterop\src\Microsoft.JSInterop.WebAssembly.csproj", "{E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}"
|
||||
|
|
@ -839,12 +827,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HttpSys", "HttpSys", "{166E
|
|||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.HttpSys", "src\Servers\HttpSys\src\Microsoft.AspNetCore.Server.HttpSys.csproj", "{AC0CBDEB-B750-4B81-AEC3-F218A384FB16}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{81AF139E-F3BB-46FD-B8DB-93A645E5222C}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NodeServicesExamples", "src\Middleware\NodeServices\samples\NodeServicesExamples\NodeServicesExamples.csproj", "{49EAD781-92BF-4863-9159-08674548D1BE}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.NodeServices.Tests", "src\Middleware\NodeServices\test\Microsoft.AspNetCore.NodeServices.Tests.csproj", "{F7E4CC45-B553-4D58-8B3E-B9F426FAF67F}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HeaderPropagation", "HeaderPropagation", "{5527E368-FD50-4E8C-B8D8-C3D1374BE4F1}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HeaderPropagation", "src\Middleware\HeaderPropagation\src\Microsoft.AspNetCore.HeaderPropagation.csproj", "{EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}"
|
||||
|
|
@ -877,8 +859,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "perf", "perf", "{EE65018D-F
|
|||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebSockets.Microbenchmarks", "src\Middleware\perf\Microbenchmarks\Microsoft.AspNetCore.WebSockets.Microbenchmarks.csproj", "{A8E1962B-688E-44B3-81F3-BBB9891534CE}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SpaServices.Tests", "src\Middleware\SpaServices\test\Microsoft.AspNetCore.SpaServices.Tests.csproj", "{81E8CF5B-F285-40C6-B935-6E5F7AA7A072}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCaching.Microbenchmarks", "src\Middleware\perf\ResponseCaching.Microbenchmarks\Microsoft.AspNetCore.ResponseCaching.Microbenchmarks.csproj", "{8A745E35-8098-4EB4-AC55-587B9F0DC4BE}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MusicStore", "MusicStore", "{884AED21-7931-42A3-B08A-E58F7B0D6E7F}"
|
||||
|
|
@ -1063,7 +1043,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.
|
|||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.AspNetCore.Razor.Tools", "Microsoft.AspNetCore.Razor.Tools", "{B9704650-5360-416C-9393-FAF707766AA8}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Tools", "src\Razor\Microsoft.AspNetCore.Razor.Tools\src\rzc.csproj", "{4C84173F-5C1F-49A1-895A-C0CA11DE84B1}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "rzc", "src\Razor\Microsoft.AspNetCore.Razor.Tools\src\rzc.csproj", "{4C84173F-5C1F-49A1-895A-C0CA11DE84B1}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Tools.Test", "src\Razor\Microsoft.AspNetCore.Razor.Tools\test\Microsoft.AspNetCore.Razor.Tools.Test.csproj", "{FE095F11-4CD2-406D-A2BB-1BE569603BF0}"
|
||||
EndProject
|
||||
|
|
@ -1295,7 +1275,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.ApiDes
|
|||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GetDocumentInsider", "GetDocumentInsider", "{A1B75FC7-A777-4412-A635-D0C9ED8FE7A0}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GetDocumentInsider", "src\Tools\GetDocumentInsider\src\GetDocument.Insider.csproj", "{DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GetDocument.Insider", "src\Tools\GetDocumentInsider\src\GetDocument.Insider.csproj", "{DD63EA3C-929C-48FF-8E8A-8F3CC553E93B}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.ApiDescription.Client.Tests", "src\Tools\Extensions.ApiDescription.Client\test\Microsoft.Extensions.ApiDescription.Client.Tests.csproj", "{34E40892-48C1-4D3D-AB49-FAC3C4C00B42}"
|
||||
EndProject
|
||||
|
|
@ -1415,8 +1395,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Web.Extensions", "Web.Exten
|
|||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Web.Extensions", "src\Components\Web.Extensions\src\Microsoft.AspNetCore.Components.Web.Extensions.csproj", "{8294A74F-7DAA-4B69-BC56-7634D93C9693}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Web.Extensions.Tests", "src\Components\Web.Extensions\test\Microsoft.AspNetCore.Components.Web.Extensions.Tests.csproj", "{157605CB-5170-4C1A-980F-4BAE42DB60DE}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sdk", "Sdk", "{FED4267E-E5E4-49C5-98DB-8B3F203596EE}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NET.Sdk.BlazorWebAssembly", "src\Components\WebAssembly\Sdk\src\Microsoft.NET.Sdk.BlazorWebAssembly.csproj", "{6B2734BF-C61D-4889-ABBF-456A4075D59B}"
|
||||
|
|
@ -1509,6 +1487,25 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Diagno
|
|||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.JSInterop.Tests", "src\JSInterop\Microsoft.JSInterop\test\Microsoft.JSInterop.Tests.csproj", "{DAAB6B35-CBD2-4573-B633-CDD42F583A0E}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ProtectedBrowserStorage", "ProtectedBrowserStorage", "{1B06FD32-3A1D-46A4-B2AF-99159FAD8127}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.ProtectedBrowserStorage", "src\Components\ProtectedBrowserStorage\src\Microsoft.AspNetCore.Components.ProtectedBrowserStorage.csproj", "{9059AC97-7547-4CC1-A076-680CBCCC1F33}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.ProtectedBrowserStorage.Tests", "src\Components\ProtectedBrowserStorage\test\Microsoft.AspNetCore.Components.ProtectedBrowserStorage.Tests.csproj", "{943FD3EC-D330-4277-B3F3-3DFABB57D3B5}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.KeyPerFile", "src\Configuration.KeyPerFile\src\Microsoft.Extensions.Configuration.KeyPerFile.csproj", "{498A4F54-F11A-46C5-A58D-09DE56C6A034}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Configuration.KeyPerFile", "Configuration.KeyPerFile", "{AEB1933E-9369-4305-B20E-F186F888158F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.KeyPerFile.Tests", "src\Configuration.KeyPerFile\test\Microsoft.Extensions.Configuration.KeyPerFile.Tests.csproj", "{B9D37BCF-80D1-489D-9FC6-55191FDBB033}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Manifest.MSBuildTask", "Manifest.MSBuildTask", "{8C15FD04-7F90-43FC-B488-023432FE3CE1}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.FileProviders.Embedded.Manifest.Task", "src\FileProviders\Manifest.MSBuildTask\src\Microsoft.Extensions.FileProviders.Embedded.Manifest.Task.csproj", "{37329855-01B8-4B03-9765-1A941B06E43C}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.FileProviders.Embedded.Manifest.Task.Tests", "src\FileProviders\Manifest.MSBuildTask\test\Microsoft.Extensions.FileProviders.Embedded.Manifest.Task.Tests.csproj", "{D3246226-BC1A-47F1-8E3E-C3380A8F13FB}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.FileProviders.Embedded.Tests", "src\FileProviders\Embedded\test\Microsoft.Extensions.FileProviders.Embedded.Tests.csproj", "{B06ADD57-E855-4D8C-85DC-B323509AE540}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
|
|
@ -2623,18 +2620,6 @@ Global
|
|||
{34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Release|x64.Build.0 = Release|Any CPU
|
||||
{34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{34F24889-22D2-40A1-A2AB-A43B9061FE0D}.Release|x86.Build.0 = Release|Any CPU
|
||||
{C68A3531-E47A-4F2F-842E-4A3A7C844CC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C68A3531-E47A-4F2F-842E-4A3A7C844CC1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C68A3531-E47A-4F2F-842E-4A3A7C844CC1}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{C68A3531-E47A-4F2F-842E-4A3A7C844CC1}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{C68A3531-E47A-4F2F-842E-4A3A7C844CC1}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{C68A3531-E47A-4F2F-842E-4A3A7C844CC1}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{C68A3531-E47A-4F2F-842E-4A3A7C844CC1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C68A3531-E47A-4F2F-842E-4A3A7C844CC1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C68A3531-E47A-4F2F-842E-4A3A7C844CC1}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{C68A3531-E47A-4F2F-842E-4A3A7C844CC1}.Release|x64.Build.0 = Release|Any CPU
|
||||
{C68A3531-E47A-4F2F-842E-4A3A7C844CC1}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{C68A3531-E47A-4F2F-842E-4A3A7C844CC1}.Release|x86.Build.0 = Release|Any CPU
|
||||
{CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
|
|
@ -2659,18 +2644,6 @@ Global
|
|||
{566B6729-63FF-484D-8F47-91561D76F445}.Release|x64.Build.0 = Release|Any CPU
|
||||
{566B6729-63FF-484D-8F47-91561D76F445}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{566B6729-63FF-484D-8F47-91561D76F445}.Release|x86.Build.0 = Release|Any CPU
|
||||
{797B9228-5BC9-4C0C-B444-C490A98D057E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{797B9228-5BC9-4C0C-B444-C490A98D057E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{797B9228-5BC9-4C0C-B444-C490A98D057E}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{797B9228-5BC9-4C0C-B444-C490A98D057E}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{797B9228-5BC9-4C0C-B444-C490A98D057E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{797B9228-5BC9-4C0C-B444-C490A98D057E}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{797B9228-5BC9-4C0C-B444-C490A98D057E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{797B9228-5BC9-4C0C-B444-C490A98D057E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{797B9228-5BC9-4C0C-B444-C490A98D057E}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{797B9228-5BC9-4C0C-B444-C490A98D057E}.Release|x64.Build.0 = Release|Any CPU
|
||||
{797B9228-5BC9-4C0C-B444-C490A98D057E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{797B9228-5BC9-4C0C-B444-C490A98D057E}.Release|x86.Build.0 = Release|Any CPU
|
||||
{02A85F31-A092-4322-A3D9-91E894D9ECD2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{02A85F31-A092-4322-A3D9-91E894D9ECD2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{02A85F31-A092-4322-A3D9-91E894D9ECD2}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
|
|
@ -2935,18 +2908,6 @@ Global
|
|||
{09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Release|x64.Build.0 = Release|Any CPU
|
||||
{09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{09F72EF0-2BDE-4B73-B116-A87E38C432FE}.Release|x86.Build.0 = Release|Any CPU
|
||||
{67F51062-6897-4019-AA88-6BDB5E30B015}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{67F51062-6897-4019-AA88-6BDB5E30B015}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{67F51062-6897-4019-AA88-6BDB5E30B015}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{67F51062-6897-4019-AA88-6BDB5E30B015}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{67F51062-6897-4019-AA88-6BDB5E30B015}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{67F51062-6897-4019-AA88-6BDB5E30B015}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{67F51062-6897-4019-AA88-6BDB5E30B015}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{67F51062-6897-4019-AA88-6BDB5E30B015}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{67F51062-6897-4019-AA88-6BDB5E30B015}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{67F51062-6897-4019-AA88-6BDB5E30B015}.Release|x64.Build.0 = Release|Any CPU
|
||||
{67F51062-6897-4019-AA88-6BDB5E30B015}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{67F51062-6897-4019-AA88-6BDB5E30B015}.Release|x86.Build.0 = Release|Any CPU
|
||||
{E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
|
|
@ -4303,30 +4264,6 @@ Global
|
|||
{AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Release|x64.Build.0 = Release|Any CPU
|
||||
{AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{AC0CBDEB-B750-4B81-AEC3-F218A384FB16}.Release|x86.Build.0 = Release|Any CPU
|
||||
{49EAD781-92BF-4863-9159-08674548D1BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{49EAD781-92BF-4863-9159-08674548D1BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{49EAD781-92BF-4863-9159-08674548D1BE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{49EAD781-92BF-4863-9159-08674548D1BE}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{49EAD781-92BF-4863-9159-08674548D1BE}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{49EAD781-92BF-4863-9159-08674548D1BE}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{49EAD781-92BF-4863-9159-08674548D1BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{49EAD781-92BF-4863-9159-08674548D1BE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{49EAD781-92BF-4863-9159-08674548D1BE}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{49EAD781-92BF-4863-9159-08674548D1BE}.Release|x64.Build.0 = Release|Any CPU
|
||||
{49EAD781-92BF-4863-9159-08674548D1BE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{49EAD781-92BF-4863-9159-08674548D1BE}.Release|x86.Build.0 = Release|Any CPU
|
||||
{F7E4CC45-B553-4D58-8B3E-B9F426FAF67F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F7E4CC45-B553-4D58-8B3E-B9F426FAF67F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F7E4CC45-B553-4D58-8B3E-B9F426FAF67F}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{F7E4CC45-B553-4D58-8B3E-B9F426FAF67F}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{F7E4CC45-B553-4D58-8B3E-B9F426FAF67F}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{F7E4CC45-B553-4D58-8B3E-B9F426FAF67F}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{F7E4CC45-B553-4D58-8B3E-B9F426FAF67F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F7E4CC45-B553-4D58-8B3E-B9F426FAF67F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F7E4CC45-B553-4D58-8B3E-B9F426FAF67F}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{F7E4CC45-B553-4D58-8B3E-B9F426FAF67F}.Release|x64.Build.0 = Release|Any CPU
|
||||
{F7E4CC45-B553-4D58-8B3E-B9F426FAF67F}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{F7E4CC45-B553-4D58-8B3E-B9F426FAF67F}.Release|x86.Build.0 = Release|Any CPU
|
||||
{EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
|
|
@ -4447,18 +4384,6 @@ Global
|
|||
{A8E1962B-688E-44B3-81F3-BBB9891534CE}.Release|x64.Build.0 = Release|Any CPU
|
||||
{A8E1962B-688E-44B3-81F3-BBB9891534CE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{A8E1962B-688E-44B3-81F3-BBB9891534CE}.Release|x86.Build.0 = Release|Any CPU
|
||||
{81E8CF5B-F285-40C6-B935-6E5F7AA7A072}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{81E8CF5B-F285-40C6-B935-6E5F7AA7A072}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{81E8CF5B-F285-40C6-B935-6E5F7AA7A072}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{81E8CF5B-F285-40C6-B935-6E5F7AA7A072}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{81E8CF5B-F285-40C6-B935-6E5F7AA7A072}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{81E8CF5B-F285-40C6-B935-6E5F7AA7A072}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{81E8CF5B-F285-40C6-B935-6E5F7AA7A072}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{81E8CF5B-F285-40C6-B935-6E5F7AA7A072}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{81E8CF5B-F285-40C6-B935-6E5F7AA7A072}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{81E8CF5B-F285-40C6-B935-6E5F7AA7A072}.Release|x64.Build.0 = Release|Any CPU
|
||||
{81E8CF5B-F285-40C6-B935-6E5F7AA7A072}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{81E8CF5B-F285-40C6-B935-6E5F7AA7A072}.Release|x86.Build.0 = Release|Any CPU
|
||||
{8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8A745E35-8098-4EB4-AC55-587B9F0DC4BE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
|
|
@ -6751,18 +6676,6 @@ Global
|
|||
{8294A74F-7DAA-4B69-BC56-7634D93C9693}.Release|x64.Build.0 = Release|Any CPU
|
||||
{8294A74F-7DAA-4B69-BC56-7634D93C9693}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{8294A74F-7DAA-4B69-BC56-7634D93C9693}.Release|x86.Build.0 = Release|Any CPU
|
||||
{157605CB-5170-4C1A-980F-4BAE42DB60DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{157605CB-5170-4C1A-980F-4BAE42DB60DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{157605CB-5170-4C1A-980F-4BAE42DB60DE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{157605CB-5170-4C1A-980F-4BAE42DB60DE}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{157605CB-5170-4C1A-980F-4BAE42DB60DE}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{157605CB-5170-4C1A-980F-4BAE42DB60DE}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{157605CB-5170-4C1A-980F-4BAE42DB60DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{157605CB-5170-4C1A-980F-4BAE42DB60DE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{157605CB-5170-4C1A-980F-4BAE42DB60DE}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{157605CB-5170-4C1A-980F-4BAE42DB60DE}.Release|x64.Build.0 = Release|Any CPU
|
||||
{157605CB-5170-4C1A-980F-4BAE42DB60DE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{157605CB-5170-4C1A-980F-4BAE42DB60DE}.Release|x86.Build.0 = Release|Any CPU
|
||||
{6B2734BF-C61D-4889-ABBF-456A4075D59B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6B2734BF-C61D-4889-ABBF-456A4075D59B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6B2734BF-C61D-4889-ABBF-456A4075D59B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
|
|
@ -7193,6 +7106,90 @@ Global
|
|||
{DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Release|x64.Build.0 = Release|Any CPU
|
||||
{DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{DAAB6B35-CBD2-4573-B633-CDD42F583A0E}.Release|x86.Build.0 = Release|Any CPU
|
||||
{9059AC97-7547-4CC1-A076-680CBCCC1F33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9059AC97-7547-4CC1-A076-680CBCCC1F33}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9059AC97-7547-4CC1-A076-680CBCCC1F33}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{9059AC97-7547-4CC1-A076-680CBCCC1F33}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{9059AC97-7547-4CC1-A076-680CBCCC1F33}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{9059AC97-7547-4CC1-A076-680CBCCC1F33}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{9059AC97-7547-4CC1-A076-680CBCCC1F33}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9059AC97-7547-4CC1-A076-680CBCCC1F33}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9059AC97-7547-4CC1-A076-680CBCCC1F33}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{9059AC97-7547-4CC1-A076-680CBCCC1F33}.Release|x64.Build.0 = Release|Any CPU
|
||||
{9059AC97-7547-4CC1-A076-680CBCCC1F33}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{9059AC97-7547-4CC1-A076-680CBCCC1F33}.Release|x86.Build.0 = Release|Any CPU
|
||||
{943FD3EC-D330-4277-B3F3-3DFABB57D3B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{943FD3EC-D330-4277-B3F3-3DFABB57D3B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{943FD3EC-D330-4277-B3F3-3DFABB57D3B5}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{943FD3EC-D330-4277-B3F3-3DFABB57D3B5}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{943FD3EC-D330-4277-B3F3-3DFABB57D3B5}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{943FD3EC-D330-4277-B3F3-3DFABB57D3B5}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{943FD3EC-D330-4277-B3F3-3DFABB57D3B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{943FD3EC-D330-4277-B3F3-3DFABB57D3B5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{943FD3EC-D330-4277-B3F3-3DFABB57D3B5}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{943FD3EC-D330-4277-B3F3-3DFABB57D3B5}.Release|x64.Build.0 = Release|Any CPU
|
||||
{943FD3EC-D330-4277-B3F3-3DFABB57D3B5}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{943FD3EC-D330-4277-B3F3-3DFABB57D3B5}.Release|x86.Build.0 = Release|Any CPU
|
||||
{498A4F54-F11A-46C5-A58D-09DE56C6A034}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{498A4F54-F11A-46C5-A58D-09DE56C6A034}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{498A4F54-F11A-46C5-A58D-09DE56C6A034}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{498A4F54-F11A-46C5-A58D-09DE56C6A034}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{498A4F54-F11A-46C5-A58D-09DE56C6A034}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{498A4F54-F11A-46C5-A58D-09DE56C6A034}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{498A4F54-F11A-46C5-A58D-09DE56C6A034}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{498A4F54-F11A-46C5-A58D-09DE56C6A034}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{498A4F54-F11A-46C5-A58D-09DE56C6A034}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{498A4F54-F11A-46C5-A58D-09DE56C6A034}.Release|x64.Build.0 = Release|Any CPU
|
||||
{498A4F54-F11A-46C5-A58D-09DE56C6A034}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{498A4F54-F11A-46C5-A58D-09DE56C6A034}.Release|x86.Build.0 = Release|Any CPU
|
||||
{B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Release|x64.Build.0 = Release|Any CPU
|
||||
{B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{B9D37BCF-80D1-489D-9FC6-55191FDBB033}.Release|x86.Build.0 = Release|Any CPU
|
||||
{37329855-01B8-4B03-9765-1A941B06E43C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{37329855-01B8-4B03-9765-1A941B06E43C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{37329855-01B8-4B03-9765-1A941B06E43C}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{37329855-01B8-4B03-9765-1A941B06E43C}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{37329855-01B8-4B03-9765-1A941B06E43C}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{37329855-01B8-4B03-9765-1A941B06E43C}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{37329855-01B8-4B03-9765-1A941B06E43C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{37329855-01B8-4B03-9765-1A941B06E43C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{37329855-01B8-4B03-9765-1A941B06E43C}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{37329855-01B8-4B03-9765-1A941B06E43C}.Release|x64.Build.0 = Release|Any CPU
|
||||
{37329855-01B8-4B03-9765-1A941B06E43C}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{37329855-01B8-4B03-9765-1A941B06E43C}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D3246226-BC1A-47F1-8E3E-C3380A8F13FB}.Release|x86.Build.0 = Release|Any CPU
|
||||
{B06ADD57-E855-4D8C-85DC-B323509AE540}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B06ADD57-E855-4D8C-85DC-B323509AE540}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B06ADD57-E855-4D8C-85DC-B323509AE540}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{B06ADD57-E855-4D8C-85DC-B323509AE540}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{B06ADD57-E855-4D8C-85DC-B323509AE540}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{B06ADD57-E855-4D8C-85DC-B323509AE540}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{B06ADD57-E855-4D8C-85DC-B323509AE540}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B06ADD57-E855-4D8C-85DC-B323509AE540}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B06ADD57-E855-4D8C-85DC-B323509AE540}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{B06ADD57-E855-4D8C-85DC-B323509AE540}.Release|x64.Build.0 = Release|Any CPU
|
||||
{B06ADD57-E855-4D8C-85DC-B323509AE540}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{B06ADD57-E855-4D8C-85DC-B323509AE540}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
|
@ -7391,14 +7388,10 @@ Global
|
|||
{7FC5CFC7-9BFE-4C19-90DE-A84A76A8E03D} = {58915BB2-CEF5-4CA3-8886-A61156564505}
|
||||
{39086512-EBC8-4061-BE34-DCCA5D1BA585} = {E5963C9F-20A6-4385-B364-814D2581FADF}
|
||||
{34F24889-22D2-40A1-A2AB-A43B9061FE0D} = {39086512-EBC8-4061-BE34-DCCA5D1BA585}
|
||||
{ED90A0D9-867B-4212-846F-3E09D60A5B7E} = {E5963C9F-20A6-4385-B364-814D2581FADF}
|
||||
{C68A3531-E47A-4F2F-842E-4A3A7C844CC1} = {ED90A0D9-867B-4212-846F-3E09D60A5B7E}
|
||||
{512EFCA7-1590-492A-8D06-84744F79DA91} = {E5963C9F-20A6-4385-B364-814D2581FADF}
|
||||
{CC783D3A-71CB-4DFD-9769-9EC7EF1ADF1B} = {512EFCA7-1590-492A-8D06-84744F79DA91}
|
||||
{B06D06BD-DE60-46E8-AC05-0C1D39E40638} = {E5963C9F-20A6-4385-B364-814D2581FADF}
|
||||
{566B6729-63FF-484D-8F47-91561D76F445} = {B06D06BD-DE60-46E8-AC05-0C1D39E40638}
|
||||
{1EBEF6FF-4A0D-4668-A9F3-74587ECAC969} = {E5963C9F-20A6-4385-B364-814D2581FADF}
|
||||
{797B9228-5BC9-4C0C-B444-C490A98D057E} = {1EBEF6FF-4A0D-4668-A9F3-74587ECAC969}
|
||||
{515282B6-6EF9-46E0-8EF1-DBD1CD948D9E} = {1A0EFF9F-E699-4303-AE50-BFAF9804EEB6}
|
||||
{02A85F31-A092-4322-A3D9-91E894D9ECD2} = {515282B6-6EF9-46E0-8EF1-DBD1CD948D9E}
|
||||
{33CAD745-5912-47D3-BAF3-5AE580FED275} = {D67E977E-75DF-41EE-8315-6DBF5C2B7357}
|
||||
|
|
@ -7441,8 +7434,6 @@ Global
|
|||
{0C610220-E00C-4752-98A0-44A3D4B96A21} = {13683DEB-FB7E-4F20-ACB2-015381943541}
|
||||
{1FD5F261-6384-4AE1-A6DA-4D08A0BCE1CF} = {562D5067-8CD8-4F19-BCBB-873204932C61}
|
||||
{09F72EF0-2BDE-4B73-B116-A87E38C432FE} = {1FD5F261-6384-4AE1-A6DA-4D08A0BCE1CF}
|
||||
{F01E5B0D-1277-481D-8879-41A87F3F9524} = {562D5067-8CD8-4F19-BCBB-873204932C61}
|
||||
{67F51062-6897-4019-AA88-6BDB5E30B015} = {F01E5B0D-1277-481D-8879-41A87F3F9524}
|
||||
{44161B20-CC30-403A-AC94-247592ED7590} = {562D5067-8CD8-4F19-BCBB-873204932C61}
|
||||
{E0B1F2AA-4EBA-4DC7-92D5-2F081354C8DE} = {44161B20-CC30-403A-AC94-247592ED7590}
|
||||
{E33C36A1-481C-4A93-BCBE-22CCBA53349B} = {562D5067-8CD8-4F19-BCBB-873204932C61}
|
||||
|
|
@ -7614,9 +7605,6 @@ Global
|
|||
{A01B523B-35CA-4C14-B792-3887F8741E99} = {48BEABD3-2446-466C-8694-D34EF0949369}
|
||||
{166E48ED-9738-4E13-8618-0D805F6F0F65} = {0ACCEDA7-339C-4B4D-8DD4-1AC271F31C04}
|
||||
{AC0CBDEB-B750-4B81-AEC3-F218A384FB16} = {166E48ED-9738-4E13-8618-0D805F6F0F65}
|
||||
{81AF139E-F3BB-46FD-B8DB-93A645E5222C} = {ED90A0D9-867B-4212-846F-3E09D60A5B7E}
|
||||
{49EAD781-92BF-4863-9159-08674548D1BE} = {81AF139E-F3BB-46FD-B8DB-93A645E5222C}
|
||||
{F7E4CC45-B553-4D58-8B3E-B9F426FAF67F} = {ED90A0D9-867B-4212-846F-3E09D60A5B7E}
|
||||
{5527E368-FD50-4E8C-B8D8-C3D1374BE4F1} = {E5963C9F-20A6-4385-B364-814D2581FADF}
|
||||
{EC7CA990-BB0E-44AF-81B6-44E0E27FDE9B} = {5527E368-FD50-4E8C-B8D8-C3D1374BE4F1}
|
||||
{399AC9FB-7DCA-4868-B299-2EE4C88D41AD} = {5527E368-FD50-4E8C-B8D8-C3D1374BE4F1}
|
||||
|
|
@ -7633,7 +7621,6 @@ Global
|
|||
{AF964703-404B-4632-9D1F-8EEE646BBA37} = {B06D06BD-DE60-46E8-AC05-0C1D39E40638}
|
||||
{EE65018D-FA12-461D-B2C5-44CA6E385530} = {E5963C9F-20A6-4385-B364-814D2581FADF}
|
||||
{A8E1962B-688E-44B3-81F3-BBB9891534CE} = {EE65018D-FA12-461D-B2C5-44CA6E385530}
|
||||
{81E8CF5B-F285-40C6-B935-6E5F7AA7A072} = {1EBEF6FF-4A0D-4668-A9F3-74587ECAC969}
|
||||
{8A745E35-8098-4EB4-AC55-587B9F0DC4BE} = {EE65018D-FA12-461D-B2C5-44CA6E385530}
|
||||
{884AED21-7931-42A3-B08A-E58F7B0D6E7F} = {017429CC-C5FB-48B4-9C46-034E29EE2F06}
|
||||
{8DA88110-5A13-41A9-9F9D-674D921EB442} = {884AED21-7931-42A3-B08A-E58F7B0D6E7F}
|
||||
|
|
@ -7902,7 +7889,6 @@ Global
|
|||
{1542DC58-1836-4191-A9C5-51D1716D2543} = {05A169C7-4F20-4516-B10A-B13C5649D346}
|
||||
{F71FE795-9923-461B-9809-BB1821A276D0} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF}
|
||||
{8294A74F-7DAA-4B69-BC56-7634D93C9693} = {F71FE795-9923-461B-9809-BB1821A276D0}
|
||||
{157605CB-5170-4C1A-980F-4BAE42DB60DE} = {F71FE795-9923-461B-9809-BB1821A276D0}
|
||||
{FED4267E-E5E4-49C5-98DB-8B3F203596EE} = {562D5067-8CD8-4F19-BCBB-873204932C61}
|
||||
{6B2734BF-C61D-4889-ABBF-456A4075D59B} = {FED4267E-E5E4-49C5-98DB-8B3F203596EE}
|
||||
{83371889-9A3E-4D16-AE77-EB4F83BC6374} = {FED4267E-E5E4-49C5-98DB-8B3F203596EE}
|
||||
|
|
@ -7949,6 +7935,16 @@ Global
|
|||
{55CACC1F-FE96-47C8-8073-91F4CAA55C75} = {2A91479A-4ABE-4BB7-9A5E-CA3B9CCFC69E}
|
||||
{7509AA1E-3093-4BEE-984F-E11579E98A11} = {7CB09412-C9B0-47E8-A8C3-311AA4CFDE04}
|
||||
{DAAB6B35-CBD2-4573-B633-CDD42F583A0E} = {16898702-3E33-41C1-B8D8-4CE3F1D46BD9}
|
||||
{1B06FD32-3A1D-46A4-B2AF-99159FAD8127} = {60D51C98-2CC0-40DF-B338-44154EFEE2FF}
|
||||
{9059AC97-7547-4CC1-A076-680CBCCC1F33} = {1B06FD32-3A1D-46A4-B2AF-99159FAD8127}
|
||||
{943FD3EC-D330-4277-B3F3-3DFABB57D3B5} = {1B06FD32-3A1D-46A4-B2AF-99159FAD8127}
|
||||
{498A4F54-F11A-46C5-A58D-09DE56C6A034} = {AEB1933E-9369-4305-B20E-F186F888158F}
|
||||
{AEB1933E-9369-4305-B20E-F186F888158F} = {017429CC-C5FB-48B4-9C46-034E29EE2F06}
|
||||
{B9D37BCF-80D1-489D-9FC6-55191FDBB033} = {AEB1933E-9369-4305-B20E-F186F888158F}
|
||||
{8C15FD04-7F90-43FC-B488-023432FE3CE1} = {FED63417-432B-49CD-AB4B-44ADA837C2E7}
|
||||
{37329855-01B8-4B03-9765-1A941B06E43C} = {8C15FD04-7F90-43FC-B488-023432FE3CE1}
|
||||
{D3246226-BC1A-47F1-8E3E-C3380A8F13FB} = {8C15FD04-7F90-43FC-B488-023432FE3CE1}
|
||||
{B06ADD57-E855-4D8C-85DC-B323509AE540} = {898F7E0B-1671-42CB-9DFB-689AFF212ED3}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {3E8720B3-DBDD-498C-B383-2CC32A054E8F}
|
||||
|
|
|
|||
|
|
@ -88,8 +88,12 @@
|
|||
|
||||
<IncludeSymbols>true</IncludeSymbols>
|
||||
|
||||
<!-- Also update the DefaultNetCoreTargetFramework defined at src/Razor/test/testassets/Directory.Build.props -->
|
||||
<!--
|
||||
Also update the DefaultNetCoreTargetFramework defined at src/Razor/test/testassets/Directory.Build.props and
|
||||
the packages referenced in Microsoft.AspNetCore.AzureAppServices.SiteExtension.csproj when this changes.
|
||||
-->
|
||||
<DefaultNetCoreTargetFramework>net5.0</DefaultNetCoreTargetFramework>
|
||||
<DefaultNetFxTargetFramework>net461</DefaultNetFxTargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Warnings and errors -->
|
||||
|
|
|
|||
|
|
@ -134,14 +134,20 @@
|
|||
<AssemblyVersion>$(AspNetCoreMajorVersion).$(AspNetCoreMinorVersion).0.0</AssemblyVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<KnownAppHostPackOrFrameworkReferenceTfm>$(DefaultNetCoreTargetFramework)</KnownAppHostPackOrFrameworkReferenceTfm>
|
||||
<KnownAppHostPackOrFrameworkReferenceTfm Condition=" '$(TargetFrameworkIdentifier)' == '$(NETCoreAppFrameworkIdentifier)' AND
|
||||
$([MSBuild]::VersionGreaterThanOrEquals('$(TargetFrameworkVersion)', '5.0')) ">netcoreapp$(TargetFrameworkVersion.TrimStart('vV'))</KnownAppHostPackOrFrameworkReferenceTfm>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<KnownFrameworkReference Update="Microsoft.NETCore.App">
|
||||
<!-- Always update the 'latest version', whether the repo is servicing or not. -->
|
||||
<LatestRuntimeFrameworkVersion Condition="'%(TargetFramework)' == '$(DefaultNetCoreTargetFramework)'">$(MicrosoftNETCoreAppRuntimeVersion)</LatestRuntimeFrameworkVersion>
|
||||
<LatestRuntimeFrameworkVersion Condition="'%(TargetFramework)' == '$(KnownAppHostPackOrFrameworkReferenceTfm)'">$(MicrosoftNETCoreAppRuntimeVersion)</LatestRuntimeFrameworkVersion>
|
||||
<!-- Only update the default runtime version for preview builds. -->
|
||||
<DefaultRuntimeFrameworkVersion Condition="'%(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' and '$(IsServicingBuild)' != 'true'">$(MicrosoftNETCoreAppRuntimeVersion)</DefaultRuntimeFrameworkVersion>
|
||||
<DefaultRuntimeFrameworkVersion Condition="'%(TargetFramework)' == '$(KnownAppHostPackOrFrameworkReferenceTfm)' and '$(IsServicingBuild)' != 'true'">$(MicrosoftNETCoreAppRuntimeVersion)</DefaultRuntimeFrameworkVersion>
|
||||
<!-- Only update the targeting pack version for preview builds. -->
|
||||
<TargetingPackVersion Condition="'%(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' and '$(IsServicingBuild)' != 'true'">$(MicrosoftNETCoreAppRefPackageVersion)</TargetingPackVersion>
|
||||
<TargetingPackVersion Condition="'%(TargetFramework)' == '$(KnownAppHostPackOrFrameworkReferenceTfm)' and '$(IsServicingBuild)' != 'true'">$(MicrosoftNETCoreAppRefPackageVersion)</TargetingPackVersion>
|
||||
</KnownFrameworkReference>
|
||||
|
||||
<KnownFrameworkReference Condition="'$(UseAspNetCoreSharedRuntime)' != 'true'" Remove="Microsoft.AspNetCore.App" />
|
||||
|
|
|
|||
|
|
@ -8,12 +8,10 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x64' ">
|
||||
<BaselinePackageVersion>3.0.3</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x64' AND '$(TargetFramework)' == 'net461' " />
|
||||
<!-- Package: AspNetCoreRuntime.3.0.x86-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x86' ">
|
||||
<BaselinePackageVersion>3.0.3</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'AspNetCoreRuntime.3.0.x86' AND '$(TargetFramework)' == 'net461' " />
|
||||
<!-- Package: dotnet-sql-cache-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'dotnet-sql-cache' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
|
|
@ -29,7 +27,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ApiAuthorization.IdentityServer' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ApiAuthorization.IdentityServer' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ApiAuthorization.IdentityServer' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="[3.1.7, )" />
|
||||
|
|
@ -48,7 +46,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureAD.UI' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureAD.UI' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureAD.UI' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
|
|
@ -56,7 +54,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureADB2C.UI' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureADB2C.UI' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.AzureADB2C.UI' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
|
|
@ -64,53 +62,48 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Certificate' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Certificate' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.Facebook-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Facebook' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Facebook' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.Google-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Google' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Google' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.JwtBearer-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.JwtBearer' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.JwtBearer' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.JwtBearer' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="[5.5.0, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.MicrosoftAccount-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.MicrosoftAccount' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.MicrosoftAccount' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.Negotiate-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Negotiate' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Negotiate' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Negotiate' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.OpenIdConnect-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.OpenIdConnect' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.OpenIdConnect' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.OpenIdConnect' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="[5.5.0, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.Twitter-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Twitter' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.Twitter' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||
<!-- Package: Microsoft.AspNetCore.Authentication.WsFederation-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.WsFederation' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.WsFederation' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authentication.WsFederation' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.IdentityModel.Protocols.WsFederation" Version="[5.5.0, )" />
|
||||
<BaselinePackageReference Include="System.IdentityModel.Tokens.Jwt" Version="[5.5.0, )" />
|
||||
</ItemGroup>
|
||||
|
|
@ -118,7 +111,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authorization' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authorization' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Authorization' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Metadata" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.7, )" />
|
||||
|
|
@ -132,7 +125,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.HostingStartup' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.HostingStartup' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServices.HostingStartup' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.AzureAppServicesIntegration" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
|
|
@ -147,7 +140,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServicesIntegration' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServicesIntegration' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.AzureAppServicesIntegration' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.AzureAppServices" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Components-->
|
||||
|
|
@ -160,7 +153,7 @@
|
|||
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="System.ComponentModel.Annotations" Version="[4.7.0, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Analyzers" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.JSInterop" Version="[3.1.7, )" />
|
||||
|
|
@ -173,7 +166,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Authorization' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Authorization' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Authorization' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Authorization" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
|
|
@ -185,7 +178,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Forms' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Forms' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Forms' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Forms' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
|
|
@ -196,7 +189,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Web' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Web' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.Web' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Components.Forms" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.7, )" />
|
||||
|
|
@ -230,7 +223,6 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.WebAssembly.Server' ">
|
||||
<BaselinePackageVersion>3.2.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.WebAssembly.Server' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||
<!-- Package: Microsoft.AspNetCore.Components.WebAssembly.Authentication-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.WebAssembly.Authentication' ">
|
||||
<BaselinePackageVersion>3.2.1</BaselinePackageVersion>
|
||||
|
|
@ -243,7 +235,6 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.WebAssembly.HttpHandler' ">
|
||||
<BaselinePackageVersion>3.2.1</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Components.WebAssembly.HttpHandler' AND '$(TargetFramework)' == 'netstandard2.1' " />
|
||||
<!-- Package: Microsoft.JSInterop.WebAssembly-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.JSInterop.WebAssembly' ">
|
||||
<BaselinePackageVersion>3.2.1</BaselinePackageVersion>
|
||||
|
|
@ -255,7 +246,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ConcurrencyLimiter' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ConcurrencyLimiter' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.ConcurrencyLimiter' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
|
|
@ -263,7 +254,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Connections.Abstractions' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Http.Features" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.1, )" />
|
||||
</ItemGroup>
|
||||
|
|
@ -280,8 +271,6 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.Internal' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.Internal' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.Internal' AND '$(TargetFramework)' == 'netstandard2.0' " />
|
||||
<!-- Package: Microsoft.AspNetCore.Cryptography.KeyDerivation-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.KeyDerivation' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
|
|
@ -289,7 +278,7 @@
|
|||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.KeyDerivation' AND '$(TargetFramework)' == 'netcoreapp2.0' ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.KeyDerivation' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.KeyDerivation' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Cryptography.KeyDerivation' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
|
|
@ -299,7 +288,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection.Abstractions" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.Internal" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[3.1.7, )" />
|
||||
|
|
@ -324,8 +313,6 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Abstractions' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Abstractions' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Abstractions' AND '$(TargetFramework)' == 'netstandard2.0' " />
|
||||
<!-- Package: Microsoft.AspNetCore.DataProtection.AzureKeyVault-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.AzureKeyVault' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
|
|
@ -356,7 +343,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Extensions' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Extensions' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.DataProtection.Extensions' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.DataProtection" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
|
|
@ -376,14 +363,14 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.HeaderPropagation-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.HeaderPropagation' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.HeaderPropagation' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.HeaderPropagation' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Http" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
|
|
@ -391,7 +378,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Hosting.WindowsServices' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Hosting.WindowsServices' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Hosting.WindowsServices' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="System.ServiceProcess.ServiceController" Version="[4.7.0, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Http.Connections.Client-->
|
||||
|
|
@ -412,7 +399,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Common' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Common' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Common' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Connections.Common' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
|
|
@ -423,7 +410,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Features' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Features' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Http.Features' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Primitives" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.1, )" />
|
||||
</ItemGroup>
|
||||
|
|
@ -435,7 +422,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.EntityFrameworkCore' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.EntityFrameworkCore' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.EntityFrameworkCore' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Stores" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
|
|
@ -447,7 +434,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.Specification.Tests' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.Specification.Tests' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.Specification.Tests' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Configuration" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.7, )" />
|
||||
|
|
@ -458,7 +445,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.UI' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.UI' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Identity.UI' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Stores" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" />
|
||||
|
|
@ -475,20 +462,18 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Metadata' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Metadata' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Metadata' AND '$(TargetFramework)' == 'netstandard2.0' " />
|
||||
<!-- Package: Microsoft.AspNetCore.MiddlewareAnalysis-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.MiddlewareAnalysis' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.MiddlewareAnalysis' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.MiddlewareAnalysis' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.Mvc.NewtonsoftJson-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.NewtonsoftJson' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.NewtonsoftJson' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.NewtonsoftJson' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" />
|
||||
<BaselinePackageReference Include="Newtonsoft.Json.Bson" Version="[1.0.2, )" />
|
||||
|
|
@ -497,7 +482,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.CodeAnalysis.Razor" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyModel" Version="[3.1.3, )" />
|
||||
|
|
@ -506,7 +491,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Testing' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Testing' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Mvc.Testing' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.TestHost" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.DependencyModel" Version="[3.1.3, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Hosting" Version="[3.1.7, )" />
|
||||
|
|
@ -515,7 +500,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.NodeServices' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.NodeServices' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.NodeServices' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Console" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Newtonsoft.Json" Version="[12.0.2, )" />
|
||||
</ItemGroup>
|
||||
|
|
@ -523,12 +508,11 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Owin' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Owin' AND '$(TargetFramework)' == 'netcoreapp3.1' " />
|
||||
<!-- Package: Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Libuv" Version="[1.10.0, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="[3.1.7, )" />
|
||||
|
|
@ -565,7 +549,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Common' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Common' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Common' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
|
|
@ -578,7 +562,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.Json' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.Json' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.Json' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Protocols.Json' AND '$(TargetFramework)' == 'netstandard2.0' ">
|
||||
|
|
@ -604,7 +588,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Specification.Tests' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Specification.Tests' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.Specification.Tests' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.Json" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="[3.1.7, )" />
|
||||
|
|
@ -616,7 +600,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.StackExchangeRedis' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.StackExchangeRedis' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SignalR.StackExchangeRedis' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="MessagePack" Version="[1.7.3.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="StackExchange.Redis" Version="[2.0.593, )" />
|
||||
|
|
@ -625,14 +609,14 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.NodeServices" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.AspNetCore.SpaServices.Extensions-->
|
||||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices.Extensions' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices.Extensions' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.SpaServices.Extensions' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.SpaServices" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.FileProviders.Physical" Version="[3.1.7, )" />
|
||||
</ItemGroup>
|
||||
|
|
@ -640,7 +624,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.TestHost' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.TestHost' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.AspNetCore.TestHost' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="System.IO.Pipelines" Version="[4.7.1, )" />
|
||||
</ItemGroup>
|
||||
<!-- Package: Microsoft.dotnet-openapi-->
|
||||
|
|
@ -684,7 +668,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Core' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Core' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Core' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Options" Version="[3.1.7, )" />
|
||||
|
|
@ -698,7 +682,7 @@
|
|||
<PropertyGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Stores' ">
|
||||
<BaselinePackageVersion>3.1.7</BaselinePackageVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Stores' AND '$(TargetFramework)' == 'netcoreapp3.1' ">
|
||||
<ItemGroup Condition=" '$(PackageId)' == 'Microsoft.Extensions.Identity.Stores' AND ('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR '$(TargetFramework)' == 'netcoreapp3.1') ">
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Identity.Core" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="[3.1.7, )" />
|
||||
<BaselinePackageReference Include="Microsoft.Extensions.Logging" Version="[3.1.7, )" />
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@ and are generated based on the last package release.
|
|||
<LatestPackageReference Include="System.IO.Pipelines" />
|
||||
<LatestPackageReference Include="System.Net.Http" />
|
||||
<LatestPackageReference Include="System.Net.Http.Json" />
|
||||
<LatestPackageReference Include="System.Net.Sockets" />
|
||||
<LatestPackageReference Include="System.Reflection.Metadata" />
|
||||
<LatestPackageReference Include="System.Runtime.CompilerServices.Unsafe" />
|
||||
<LatestPackageReference Include="System.Runtime.InteropServices.RuntimeInformation" />
|
||||
|
|
@ -123,6 +124,7 @@ and are generated based on the last package release.
|
|||
<LatestPackageReference Include="Microsoft.Internal.AspNetCore.H2Spec.All" />
|
||||
<LatestPackageReference Include="Microsoft.Extensions.Internal.Transport" />
|
||||
<LatestPackageReference Include="Microsoft.NETCore.Windows.ApiSets" />
|
||||
<LatestPackageReference Include="Microsoft.NETCore.BrowserDebugHost.Transport" />
|
||||
<LatestPackageReference Include="Microsoft.Owin.Security.Cookies" />
|
||||
<LatestPackageReference Include="Microsoft.Owin.Testing" />
|
||||
<LatestPackageReference Include="Microsoft.Web.Administration" />
|
||||
|
|
@ -166,7 +168,6 @@ and are generated based on the last package release.
|
|||
<LatestPackageReference Include="MessagePackAnalyzer" />
|
||||
<LatestPackageReference Include="Microsoft.Data.SqlClient" />
|
||||
<LatestPackageReference Include="Microsoft.Identity.Web.UI" />
|
||||
<LatestPackageReference Include="Microsoft.Graph" />
|
||||
<LatestPackageReference Include="Mono.Cecil" />
|
||||
<LatestPackageReference Include="Moq" />
|
||||
<LatestPackageReference Include="Newtonsoft.Json.Bson" />
|
||||
|
|
|
|||
|
|
@ -86,14 +86,12 @@
|
|||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Localization.Routing" ProjectPath="$(RepoRoot)src\Middleware\Localization.Routing\src\Microsoft.AspNetCore.Localization.Routing.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Localization" ProjectPath="$(RepoRoot)src\Middleware\Localization\src\Microsoft.AspNetCore.Localization.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.MiddlewareAnalysis" ProjectPath="$(RepoRoot)src\Middleware\MiddlewareAnalysis\src\Microsoft.AspNetCore.MiddlewareAnalysis.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.NodeServices" ProjectPath="$(RepoRoot)src\Middleware\NodeServices\src\Microsoft.AspNetCore.NodeServices.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.ResponseCaching.Abstractions" ProjectPath="$(RepoRoot)src\Middleware\ResponseCaching.Abstractions\src\Microsoft.AspNetCore.ResponseCaching.Abstractions.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.ResponseCaching" ProjectPath="$(RepoRoot)src\Middleware\ResponseCaching\src\Microsoft.AspNetCore.ResponseCaching.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.ResponseCompression" ProjectPath="$(RepoRoot)src\Middleware\ResponseCompression\src\Microsoft.AspNetCore.ResponseCompression.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Rewrite" ProjectPath="$(RepoRoot)src\Middleware\Rewrite\src\Microsoft.AspNetCore.Rewrite.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Session" ProjectPath="$(RepoRoot)src\Middleware\Session\src\Microsoft.AspNetCore.Session.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SpaServices.Extensions" ProjectPath="$(RepoRoot)src\Middleware\SpaServices.Extensions\src\Microsoft.AspNetCore.SpaServices.Extensions.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.SpaServices" ProjectPath="$(RepoRoot)src\Middleware\SpaServices\src\Microsoft.AspNetCore.SpaServices.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.StaticFiles" ProjectPath="$(RepoRoot)src\Middleware\StaticFiles\src\Microsoft.AspNetCore.StaticFiles.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.WebSockets" ProjectPath="$(RepoRoot)src\Middleware\WebSockets\src\Microsoft.AspNetCore.WebSockets.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X" ProjectPath="$(RepoRoot)src\Razor\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X\src\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X.csproj" />
|
||||
|
|
@ -142,6 +140,7 @@
|
|||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Components" ProjectPath="$(RepoRoot)src\Components\Components\src\Microsoft.AspNetCore.Components.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Components.Forms" ProjectPath="$(RepoRoot)src\Components\Forms\src\Microsoft.AspNetCore.Components.Forms.csproj" />
|
||||
<ProjectReferenceProvider Include="Ignitor" ProjectPath="$(RepoRoot)src\Components\Ignitor\src\Ignitor.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Components.ProtectedBrowserStorage" ProjectPath="$(RepoRoot)src\Components\ProtectedBrowserStorage\src\Microsoft.AspNetCore.Components.ProtectedBrowserStorage.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Components.Server" ProjectPath="$(RepoRoot)src\Components\Server\src\Microsoft.AspNetCore.Components.Server.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.AspNetCore.Components.Web.Extensions" ProjectPath="$(RepoRoot)src\Components\Web.Extensions\src\Microsoft.AspNetCore.Components.Web.Extensions.csproj" />
|
||||
<ProjectReferenceProvider Include="Microsoft.Authentication.WebAssembly.Msal" ProjectPath="$(RepoRoot)src\Components\WebAssembly\Authentication.Msal\src\Microsoft.Authentication.WebAssembly.Msal.csproj" />
|
||||
|
|
|
|||
|
|
@ -13,313 +13,321 @@
|
|||
<Uri>https://github.com/dotnet/blazor</Uri>
|
||||
<Sha>cc449601d638ffaab58ae9487f0fd010bb178a12</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="dotnet-ef" Version="5.0.0-rc.1.20425.4">
|
||||
<Dependency Name="dotnet-ef" Version="5.0.0-rc.1.20451.1">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>9638c0cda4bfb2eb8b70a047baefc982ffa7dade</Sha>
|
||||
<Sha>a87a862e78a4eb37a9662e86074531b86b36a277</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="5.0.0-rc.1.20425.4">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.InMemory" Version="5.0.0-rc.1.20451.1">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>9638c0cda4bfb2eb8b70a047baefc982ffa7dade</Sha>
|
||||
<Sha>a87a862e78a4eb37a9662e86074531b86b36a277</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="5.0.0-rc.1.20425.4">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Relational" Version="5.0.0-rc.1.20451.1">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>9638c0cda4bfb2eb8b70a047baefc982ffa7dade</Sha>
|
||||
<Sha>a87a862e78a4eb37a9662e86074531b86b36a277</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.0-rc.1.20425.4">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.0-rc.1.20451.1">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>9638c0cda4bfb2eb8b70a047baefc982ffa7dade</Sha>
|
||||
<Sha>a87a862e78a4eb37a9662e86074531b86b36a277</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0-rc.1.20425.4">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0-rc.1.20451.1">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>9638c0cda4bfb2eb8b70a047baefc982ffa7dade</Sha>
|
||||
<Sha>a87a862e78a4eb37a9662e86074531b86b36a277</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0-rc.1.20425.4">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0-rc.1.20451.1">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>9638c0cda4bfb2eb8b70a047baefc982ffa7dade</Sha>
|
||||
<Sha>a87a862e78a4eb37a9662e86074531b86b36a277</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore" Version="5.0.0-rc.1.20425.4">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore" Version="5.0.0-rc.1.20451.1">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>9638c0cda4bfb2eb8b70a047baefc982ffa7dade</Sha>
|
||||
<Sha>a87a862e78a4eb37a9662e86074531b86b36a277</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Design" Version="5.0.0-rc.1.20425.4">
|
||||
<Dependency Name="Microsoft.EntityFrameworkCore.Design" Version="5.0.0-rc.1.20451.1">
|
||||
<Uri>https://github.com/dotnet/efcore</Uri>
|
||||
<Sha>9638c0cda4bfb2eb8b70a047baefc982ffa7dade</Sha>
|
||||
<Sha>a87a862e78a4eb37a9662e86074531b86b36a277</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Caching.Memory" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Binder" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.CommandLine" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.FileExtensions" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Ini" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Json" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.UserSecrets" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration.Xml" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Configuration" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Configuration" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.DependencyInjection" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Abstractions" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Composite" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.FileProviders.Physical" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.FileSystemGlobbing" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.HostFactoryResolver.Sources" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Hosting.Abstractions" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Hosting" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Hosting" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Http" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Http" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Configuration" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Console" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.Debug" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventSource" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.EventLog" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Logging.TraceSource" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Logging" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Logging" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Options.ConfigurationExtensions" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Options.DataAnnotations" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Options" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Options" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Primitives" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Primitives" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.Internal.Transport" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.Internal.Transport" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Win32.Registry" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Win32.Registry" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Win32.SystemEvents" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Win32.SystemEvents" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.ComponentModel.Annotations" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.ComponentModel.Annotations" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Diagnostics.DiagnosticSource" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Diagnostics.DiagnosticSource" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Diagnostics.EventLog" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Diagnostics.EventLog" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.DirectoryServices.Protocols" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.DirectoryServices.Protocols" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Drawing.Common" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Drawing.Common" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.IO.Pipelines" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.IO.Pipelines" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Net.Http.Json" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Net.Http.Json" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Net.Http.WinHttpHandler" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Net.Http.WinHttpHandler" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Net.WebSockets.WebSocketProtocol" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Reflection.Metadata" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Reflection.Metadata" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Resources.Extensions" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Resources.Extensions" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Runtime.CompilerServices.Unsafe" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<!-- System.Security.AccessControl should only be referenced in Dependencies.props and RTMVersions.csproj. -->
|
||||
<Dependency Name="System.Security.AccessControl" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Security.AccessControl" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Cryptography.Cng" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Security.Cryptography.Cng" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Cryptography.Pkcs" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Security.Cryptography.Pkcs" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Cryptography.Xml" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Security.Cryptography.Xml" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Permissions" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Security.Permissions" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Security.Principal.Windows" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Security.Principal.Windows" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.ServiceProcess.ServiceController" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.ServiceProcess.ServiceController" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Text.Encodings.Web" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Text.Encodings.Web" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Text.Json" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Text.Json" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Threading.Channels" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Threading.Channels" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="System.Windows.Extensions" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="System.Windows.Extensions" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.Extensions.DependencyModel" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.NETCore.App.Ref" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.NETCore.App.Ref" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<!--
|
||||
Win-x64 is used here because we have picked an arbitrary runtime identifier to flow the version of the latest NETCore.App runtime.
|
||||
All Runtime.$rid packages should have the same version.
|
||||
-->
|
||||
<Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.NETCore.App.Runtime.win-x64" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.NETCore.App.Internal" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.NETCore.App.Internal" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.NETCore.BrowserDebugHost.Transport" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
</ProductDependencies>
|
||||
<ToolsetDependencies>
|
||||
<!-- Listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
||||
<Dependency Name="Microsoft.NETCore.Platforms" Version="5.0.0-rc.1.20425.1">
|
||||
<Dependency Name="Microsoft.NETCore.Platforms" Version="5.0.0-rc.1.20451.2">
|
||||
<Uri>https://github.com/dotnet/runtime</Uri>
|
||||
<Sha>f4e99f4afa445b519abcd7c5c87cbf54771614db</Sha>
|
||||
<Sha>54e597d3a5c2b6c0e9dc556a79bba08fb0c67eb9</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="5.0.0-beta.20419.21">
|
||||
<Dependency Name="Microsoft.DotNet.Arcade.Sdk" Version="5.0.0-beta.20431.1">
|
||||
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||
<Sha>56a95cc477558c1ccdf16d7abe962849ea970ba4</Sha>
|
||||
<Sha>4be47e467013f8a07a1ed7b6e49e39c8150bde54</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="5.0.0-beta.20419.21">
|
||||
<Dependency Name="Microsoft.DotNet.Build.Tasks.Installers" Version="5.0.0-beta.20431.1">
|
||||
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||
<Sha>56a95cc477558c1ccdf16d7abe962849ea970ba4</Sha>
|
||||
<Sha>4be47e467013f8a07a1ed7b6e49e39c8150bde54</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="5.0.0-beta.20431.1">
|
||||
<Uri>https://github.com/dotnet/arcade</Uri>
|
||||
<Sha>4be47e467013f8a07a1ed7b6e49e39c8150bde54</Sha>
|
||||
</Dependency>
|
||||
<Dependency Name="Microsoft.Net.Compilers.Toolset" Version="3.8.0-2.20407.3">
|
||||
<Uri>https://github.com/dotnet/roslyn</Uri>
|
||||
|
|
|
|||
|
|
@ -64,84 +64,87 @@
|
|||
<!-- Packages from dotnet/roslyn -->
|
||||
<MicrosoftNetCompilersToolsetPackageVersion>3.8.0-2.20407.3</MicrosoftNetCompilersToolsetPackageVersion>
|
||||
<!-- Packages from dotnet/runtime -->
|
||||
<MicrosoftExtensionsDependencyModelPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsDependencyModelPackageVersion>
|
||||
<MicrosoftNETCoreAppInternalPackageVersion>5.0.0-rc.1.20425.1</MicrosoftNETCoreAppInternalPackageVersion>
|
||||
<MicrosoftNETCoreAppRefPackageVersion>5.0.0-rc.1.20425.1</MicrosoftNETCoreAppRefPackageVersion>
|
||||
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>5.0.0-rc.1.20425.1</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
|
||||
<MicrosoftWin32RegistryPackageVersion>5.0.0-rc.1.20425.1</MicrosoftWin32RegistryPackageVersion>
|
||||
<MicrosoftWin32SystemEventsPackageVersion>5.0.0-rc.1.20425.1</MicrosoftWin32SystemEventsPackageVersion>
|
||||
<MicrosoftExtensionsCachingAbstractionsPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsCachingMemoryPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsCachingMemoryPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationBinderPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationIniPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsConfigurationIniPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationXmlPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersCompositePackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
||||
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
||||
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
|
||||
<MicrosoftExtensionsHostingAbstractionsPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsHostingPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsHostingPackageVersion>
|
||||
<MicrosoftExtensionsHttpPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsHttpPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConfigurationPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConsolePackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||
<MicrosoftExtensionsLoggingDebugPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventSourcePackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventLogPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsLoggingEventLogPackageVersion>
|
||||
<MicrosoftExtensionsLoggingPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsLoggingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
||||
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsOptionsPackageVersion>
|
||||
<MicrosoftExtensionsPrimitivesPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsPrimitivesPackageVersion>
|
||||
<MicrosoftExtensionsInternalTransportPackageVersion>5.0.0-rc.1.20425.1</MicrosoftExtensionsInternalTransportPackageVersion>
|
||||
<SystemComponentModelAnnotationsPackageVersion>5.0.0-rc.1.20425.1</SystemComponentModelAnnotationsPackageVersion>
|
||||
<SystemDiagnosticsDiagnosticSourcePackageVersion>5.0.0-rc.1.20425.1</SystemDiagnosticsDiagnosticSourcePackageVersion>
|
||||
<SystemDiagnosticsEventLogPackageVersion>5.0.0-rc.1.20425.1</SystemDiagnosticsEventLogPackageVersion>
|
||||
<SystemDirectoryServicesProtocolsPackageVersion>5.0.0-rc.1.20425.1</SystemDirectoryServicesProtocolsPackageVersion>
|
||||
<SystemDrawingCommonPackageVersion>5.0.0-rc.1.20425.1</SystemDrawingCommonPackageVersion>
|
||||
<SystemIOPipelinesPackageVersion>5.0.0-rc.1.20425.1</SystemIOPipelinesPackageVersion>
|
||||
<SystemNetHttpJsonPackageVersion>5.0.0-rc.1.20425.1</SystemNetHttpJsonPackageVersion>
|
||||
<SystemNetHttpWinHttpHandlerPackageVersion>5.0.0-rc.1.20425.1</SystemNetHttpWinHttpHandlerPackageVersion>
|
||||
<SystemNetWebSocketsWebSocketProtocolPackageVersion>5.0.0-rc.1.20425.1</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
||||
<SystemReflectionMetadataPackageVersion>5.0.0-rc.1.20425.1</SystemReflectionMetadataPackageVersion>
|
||||
<SystemResourcesExtensionsPackageVersion>5.0.0-rc.1.20425.1</SystemResourcesExtensionsPackageVersion>
|
||||
<SystemRuntimeCompilerServicesUnsafePackageVersion>5.0.0-rc.1.20425.1</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
||||
<MicrosoftExtensionsDependencyModelPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsDependencyModelPackageVersion>
|
||||
<MicrosoftNETCoreAppInternalPackageVersion>5.0.0-rc.1.20451.2</MicrosoftNETCoreAppInternalPackageVersion>
|
||||
<MicrosoftNETCoreAppRefPackageVersion>5.0.0-rc.1.20451.2</MicrosoftNETCoreAppRefPackageVersion>
|
||||
<MicrosoftNETCoreAppRuntimewinx64PackageVersion>5.0.0-rc.1.20451.2</MicrosoftNETCoreAppRuntimewinx64PackageVersion>
|
||||
<MicrosoftNETCoreBrowserDebugHostTransportPackageVersion>5.0.0-rc.1.20451.2</MicrosoftNETCoreBrowserDebugHostTransportPackageVersion>
|
||||
<MicrosoftWin32RegistryPackageVersion>5.0.0-rc.1.20451.2</MicrosoftWin32RegistryPackageVersion>
|
||||
<MicrosoftWin32SystemEventsPackageVersion>5.0.0-rc.1.20451.2</MicrosoftWin32SystemEventsPackageVersion>
|
||||
<MicrosoftExtensionsCachingAbstractionsPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsCachingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsCachingMemoryPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsCachingMemoryPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationAbstractionsPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsConfigurationAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationBinderPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsConfigurationBinderPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
|
||||
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationIniPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsConfigurationIniPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationJsonPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsConfigurationJsonPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
|
||||
<MicrosoftExtensionsConfigurationXmlPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsConfigurationXmlPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsDependencyInjectionAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsDependencyInjectionPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsDependencyInjectionPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsFileProvidersAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersCompositePackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsFileProvidersCompositePackageVersion>
|
||||
<MicrosoftExtensionsFileProvidersPhysicalPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
|
||||
<MicrosoftExtensionsFileSystemGlobbingPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsFileSystemGlobbingPackageVersion>
|
||||
<MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsHostFactoryResolverSourcesPackageVersion>
|
||||
<MicrosoftExtensionsHostingAbstractionsPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsHostingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsHostingPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsHostingPackageVersion>
|
||||
<MicrosoftExtensionsHttpPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsHttpPackageVersion>
|
||||
<MicrosoftExtensionsLoggingAbstractionsPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsLoggingAbstractionsPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConfigurationPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsLoggingConfigurationPackageVersion>
|
||||
<MicrosoftExtensionsLoggingConsolePackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsLoggingConsolePackageVersion>
|
||||
<MicrosoftExtensionsLoggingDebugPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsLoggingDebugPackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventSourcePackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsLoggingEventSourcePackageVersion>
|
||||
<MicrosoftExtensionsLoggingEventLogPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsLoggingEventLogPackageVersion>
|
||||
<MicrosoftExtensionsLoggingPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsLoggingPackageVersion>
|
||||
<MicrosoftExtensionsLoggingTraceSourcePackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsLoggingTraceSourcePackageVersion>
|
||||
<MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsOptionsConfigurationExtensionsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsOptionsDataAnnotationsPackageVersion>
|
||||
<MicrosoftExtensionsOptionsPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsOptionsPackageVersion>
|
||||
<MicrosoftExtensionsPrimitivesPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsPrimitivesPackageVersion>
|
||||
<MicrosoftExtensionsInternalTransportPackageVersion>5.0.0-rc.1.20451.2</MicrosoftExtensionsInternalTransportPackageVersion>
|
||||
<SystemComponentModelAnnotationsPackageVersion>5.0.0-rc.1.20451.2</SystemComponentModelAnnotationsPackageVersion>
|
||||
<SystemDiagnosticsDiagnosticSourcePackageVersion>5.0.0-rc.1.20451.2</SystemDiagnosticsDiagnosticSourcePackageVersion>
|
||||
<SystemDiagnosticsEventLogPackageVersion>5.0.0-rc.1.20451.2</SystemDiagnosticsEventLogPackageVersion>
|
||||
<SystemDirectoryServicesProtocolsPackageVersion>5.0.0-rc.1.20451.2</SystemDirectoryServicesProtocolsPackageVersion>
|
||||
<SystemDrawingCommonPackageVersion>5.0.0-rc.1.20451.2</SystemDrawingCommonPackageVersion>
|
||||
<SystemIOPipelinesPackageVersion>5.0.0-rc.1.20451.2</SystemIOPipelinesPackageVersion>
|
||||
<SystemNetHttpJsonPackageVersion>5.0.0-rc.1.20451.2</SystemNetHttpJsonPackageVersion>
|
||||
<SystemNetHttpWinHttpHandlerPackageVersion>5.0.0-rc.1.20451.2</SystemNetHttpWinHttpHandlerPackageVersion>
|
||||
<SystemNetWebSocketsWebSocketProtocolPackageVersion>5.0.0-rc.1.20451.2</SystemNetWebSocketsWebSocketProtocolPackageVersion>
|
||||
<SystemReflectionMetadataPackageVersion>5.0.0-rc.1.20451.2</SystemReflectionMetadataPackageVersion>
|
||||
<SystemResourcesExtensionsPackageVersion>5.0.0-rc.1.20451.2</SystemResourcesExtensionsPackageVersion>
|
||||
<SystemRuntimeCompilerServicesUnsafePackageVersion>5.0.0-rc.1.20451.2</SystemRuntimeCompilerServicesUnsafePackageVersion>
|
||||
<!-- System.Security.AccessControl should only be referenced in Dependencies.props and RTMVersions.csproj. -->
|
||||
<SystemSecurityAccessControlPackageVersion>5.0.0-rc.1.20425.1</SystemSecurityAccessControlPackageVersion>
|
||||
<SystemSecurityCryptographyCngPackageVersion>5.0.0-rc.1.20425.1</SystemSecurityCryptographyCngPackageVersion>
|
||||
<SystemSecurityCryptographyPkcsPackageVersion>5.0.0-rc.1.20425.1</SystemSecurityCryptographyPkcsPackageVersion>
|
||||
<SystemSecurityCryptographyXmlPackageVersion>5.0.0-rc.1.20425.1</SystemSecurityCryptographyXmlPackageVersion>
|
||||
<SystemSecurityPermissionsPackageVersion>5.0.0-rc.1.20425.1</SystemSecurityPermissionsPackageVersion>
|
||||
<SystemSecurityPrincipalWindowsPackageVersion>5.0.0-rc.1.20425.1</SystemSecurityPrincipalWindowsPackageVersion>
|
||||
<SystemServiceProcessServiceControllerPackageVersion>5.0.0-rc.1.20425.1</SystemServiceProcessServiceControllerPackageVersion>
|
||||
<SystemTextEncodingsWebPackageVersion>5.0.0-rc.1.20425.1</SystemTextEncodingsWebPackageVersion>
|
||||
<SystemTextJsonPackageVersion>5.0.0-rc.1.20425.1</SystemTextJsonPackageVersion>
|
||||
<SystemThreadingChannelsPackageVersion>5.0.0-rc.1.20425.1</SystemThreadingChannelsPackageVersion>
|
||||
<SystemWindowsExtensionsPackageVersion>5.0.0-rc.1.20425.1</SystemWindowsExtensionsPackageVersion>
|
||||
<SystemSecurityAccessControlPackageVersion>5.0.0-rc.1.20451.2</SystemSecurityAccessControlPackageVersion>
|
||||
<SystemSecurityCryptographyCngPackageVersion>5.0.0-rc.1.20451.2</SystemSecurityCryptographyCngPackageVersion>
|
||||
<SystemSecurityCryptographyPkcsPackageVersion>5.0.0-rc.1.20451.2</SystemSecurityCryptographyPkcsPackageVersion>
|
||||
<SystemSecurityCryptographyXmlPackageVersion>5.0.0-rc.1.20451.2</SystemSecurityCryptographyXmlPackageVersion>
|
||||
<SystemSecurityPermissionsPackageVersion>5.0.0-rc.1.20451.2</SystemSecurityPermissionsPackageVersion>
|
||||
<SystemSecurityPrincipalWindowsPackageVersion>5.0.0-rc.1.20451.2</SystemSecurityPrincipalWindowsPackageVersion>
|
||||
<SystemServiceProcessServiceControllerPackageVersion>5.0.0-rc.1.20451.2</SystemServiceProcessServiceControllerPackageVersion>
|
||||
<SystemTextEncodingsWebPackageVersion>5.0.0-rc.1.20451.2</SystemTextEncodingsWebPackageVersion>
|
||||
<SystemTextJsonPackageVersion>5.0.0-rc.1.20451.2</SystemTextJsonPackageVersion>
|
||||
<SystemThreadingChannelsPackageVersion>5.0.0-rc.1.20451.2</SystemThreadingChannelsPackageVersion>
|
||||
<SystemWindowsExtensionsPackageVersion>5.0.0-rc.1.20451.2</SystemWindowsExtensionsPackageVersion>
|
||||
<!-- Only listed explicitly to workaround https://github.com/dotnet/cli/issues/10528 -->
|
||||
<MicrosoftNETCorePlatformsPackageVersion>5.0.0-rc.1.20425.1</MicrosoftNETCorePlatformsPackageVersion>
|
||||
<MicrosoftNETCorePlatformsPackageVersion>5.0.0-rc.1.20451.2</MicrosoftNETCorePlatformsPackageVersion>
|
||||
<!-- Packages from dotnet/blazor -->
|
||||
<MicrosoftAspNetCoreComponentsWebAssemblyRuntimePackageVersion>3.2.0</MicrosoftAspNetCoreComponentsWebAssemblyRuntimePackageVersion>
|
||||
<!-- Packages from dotnet/efcore -->
|
||||
<dotnetefPackageVersion>5.0.0-rc.1.20425.4</dotnetefPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>5.0.0-rc.1.20425.4</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>5.0.0-rc.1.20425.4</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>5.0.0-rc.1.20425.4</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>5.0.0-rc.1.20425.4</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreToolsPackageVersion>5.0.0-rc.1.20425.4</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
||||
<MicrosoftEntityFrameworkCorePackageVersion>5.0.0-rc.1.20425.4</MicrosoftEntityFrameworkCorePackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreDesignPackageVersion>5.0.0-rc.1.20425.4</MicrosoftEntityFrameworkCoreDesignPackageVersion>
|
||||
<dotnetefPackageVersion>5.0.0-rc.1.20451.1</dotnetefPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreInMemoryPackageVersion>5.0.0-rc.1.20451.1</MicrosoftEntityFrameworkCoreInMemoryPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreRelationalPackageVersion>5.0.0-rc.1.20451.1</MicrosoftEntityFrameworkCoreRelationalPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlitePackageVersion>5.0.0-rc.1.20451.1</MicrosoftEntityFrameworkCoreSqlitePackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreSqlServerPackageVersion>5.0.0-rc.1.20451.1</MicrosoftEntityFrameworkCoreSqlServerPackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreToolsPackageVersion>5.0.0-rc.1.20451.1</MicrosoftEntityFrameworkCoreToolsPackageVersion>
|
||||
<MicrosoftEntityFrameworkCorePackageVersion>5.0.0-rc.1.20451.1</MicrosoftEntityFrameworkCorePackageVersion>
|
||||
<MicrosoftEntityFrameworkCoreDesignPackageVersion>5.0.0-rc.1.20451.1</MicrosoftEntityFrameworkCoreDesignPackageVersion>
|
||||
<!-- Packages from dotnet/arcade -->
|
||||
<MicrosoftDotNetBuildTasksInstallersPackageVersion>5.0.0-beta.20431.1</MicrosoftDotNetBuildTasksInstallersPackageVersion>
|
||||
</PropertyGroup>
|
||||
<!--
|
||||
|
||||
|
|
@ -203,7 +206,8 @@
|
|||
<SystemCodeDomPackageVersion>4.4.0</SystemCodeDomPackageVersion>
|
||||
<SystemCommandlineExperimentalPackageVersion>0.3.0-alpha.19317.1</SystemCommandlineExperimentalPackageVersion>
|
||||
<SystemComponentModelPackageVersion>4.3.0</SystemComponentModelPackageVersion>
|
||||
<SystemNetHttpPackageVersion>4.3.2</SystemNetHttpPackageVersion>
|
||||
<SystemNetHttpPackageVersion>4.3.4</SystemNetHttpPackageVersion>
|
||||
<SystemNetSocketsPackageVersion>4.3.0</SystemNetSocketsPackageVersion>
|
||||
<SystemRuntimeInteropServicesRuntimeInformationPackageVersion>4.3.0</SystemRuntimeInteropServicesRuntimeInformationPackageVersion>
|
||||
<SystemThreadingTasksExtensionsPackageVersion>4.5.3</SystemThreadingTasksExtensionsPackageVersion>
|
||||
<SystemValueTuplePackageVersion>4.5.0</SystemValueTuplePackageVersion>
|
||||
|
|
@ -218,9 +222,9 @@
|
|||
<MicrosoftBuildFrameworkPackageVersion>15.8.166</MicrosoftBuildFrameworkPackageVersion>
|
||||
<MicrosoftBuildLocatorPackageVersion>1.2.6</MicrosoftBuildLocatorPackageVersion>
|
||||
<MicrosoftBuildUtilitiesCorePackageVersion>15.8.166</MicrosoftBuildUtilitiesCorePackageVersion>
|
||||
<MicrosoftCodeAnalysisCommonPackageVersion>3.7.0-4.20351.7</MicrosoftCodeAnalysisCommonPackageVersion>
|
||||
<MicrosoftCodeAnalysisCSharpPackageVersion>3.7.0-4.20351.7</MicrosoftCodeAnalysisCSharpPackageVersion>
|
||||
<MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>3.7.0-4.20351.7</MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>
|
||||
<MicrosoftCodeAnalysisCommonPackageVersion>3.7.0</MicrosoftCodeAnalysisCommonPackageVersion>
|
||||
<MicrosoftCodeAnalysisCSharpPackageVersion>3.7.0</MicrosoftCodeAnalysisCSharpPackageVersion>
|
||||
<MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>3.7.0</MicrosoftCodeAnalysisCSharpWorkspacesPackageVersion>
|
||||
<MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion>3.3.0-beta2.final</MicrosoftCodeAnalysisPublicApiAnalyzersPackageVersion>
|
||||
<MicrosoftCodeAnalysisFxCopAnalyzersPackageVersion>3.0.0</MicrosoftCodeAnalysisFxCopAnalyzersPackageVersion>
|
||||
<MicrosoftCssParserPackageVersion>1.0.0-20200708.1</MicrosoftCssParserPackageVersion>
|
||||
|
|
@ -235,10 +239,10 @@
|
|||
<MicrosoftWebAdministrationPackageVersion>11.1.0</MicrosoftWebAdministrationPackageVersion>
|
||||
<MicrosoftWebXdtPackageVersion>1.4.0</MicrosoftWebXdtPackageVersion>
|
||||
<SystemIdentityModelTokensJwtPackageVersion>6.7.1</SystemIdentityModelTokensJwtPackageVersion>
|
||||
<!-- Packages from 2.1/2.2 branches used for site extension build -->
|
||||
<!-- Packages from 2.1, 2.2, and 3.1 branches used for site extension build. -->
|
||||
<MicrosoftAspNetCoreAzureAppServicesSiteExtension21PackageVersion>2.1.1</MicrosoftAspNetCoreAzureAppServicesSiteExtension21PackageVersion>
|
||||
<MicrosoftAspNetCoreAzureAppServicesSiteExtension22PackageVersion>2.2.0</MicrosoftAspNetCoreAzureAppServicesSiteExtension22PackageVersion>
|
||||
<MicrosoftAspNetCoreAzureAppServicesSiteExtension31PackageVersion>3.1.3-servicing-20163-14</MicrosoftAspNetCoreAzureAppServicesSiteExtension31PackageVersion>
|
||||
<MicrosoftAspNetCoreAzureAppServicesSiteExtension31PackageVersion>3.1.7-servicing-20372-13</MicrosoftAspNetCoreAzureAppServicesSiteExtension31PackageVersion>
|
||||
<MicrosoftAspNetCoreAzureAppServicesSiteExtension31x64PackageVersion>$(MicrosoftAspNetCoreAzureAppServicesSiteExtension31PackageVersion)</MicrosoftAspNetCoreAzureAppServicesSiteExtension31x64PackageVersion>
|
||||
<MicrosoftAspNetCoreAzureAppServicesSiteExtension31x86PackageVersion>$(MicrosoftAspNetCoreAzureAppServicesSiteExtension31PackageVersion)</MicrosoftAspNetCoreAzureAppServicesSiteExtension31x86PackageVersion>
|
||||
<!-- 3rd party dependencies -->
|
||||
|
|
@ -258,9 +262,8 @@
|
|||
<IdentityServer4StoragePackageVersion>4.0.4</IdentityServer4StoragePackageVersion>
|
||||
<IdentityServer4EntityFrameworkStoragePackageVersion>4.0.4</IdentityServer4EntityFrameworkStoragePackageVersion>
|
||||
<MessagePackPackageVersion>2.1.90</MessagePackPackageVersion>
|
||||
<MicrosoftIdentityWebPackageVersion>0.2.1-preview</MicrosoftIdentityWebPackageVersion>
|
||||
<MicrosoftIdentityWebUIPackageVersion>0.2.1-preview</MicrosoftIdentityWebUIPackageVersion>
|
||||
<MicrosoftGraphPackageVersion>3.8.0</MicrosoftGraphPackageVersion>
|
||||
<MicrosoftIdentityWebPackageVersion>0.3.1-preview</MicrosoftIdentityWebPackageVersion>
|
||||
<MicrosoftIdentityWebUIPackageVersion>0.3.1-preview</MicrosoftIdentityWebUIPackageVersion>
|
||||
<MessagePackAnalyzerPackageVersion>$(MessagePackPackageVersion)</MessagePackAnalyzerPackageVersion>
|
||||
<MoqPackageVersion>4.10.0</MoqPackageVersion>
|
||||
<MonoCecilPackageVersion>0.11.2</MonoCecilPackageVersion>
|
||||
|
|
|
|||
|
|
@ -22,7 +22,9 @@
|
|||
<ItemGroup>
|
||||
<FrameworkReference Remove="Microsoft.AspNetCore.App" Condition="'$(DoNotApplyWorkaroundsToMicrosoftAspNetCoreApp)' != 'true'" />
|
||||
<!-- Required because the Razor SDK will generate attributes -->
|
||||
<Reference Include="Microsoft.AspNetCore.Mvc" Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true' AND '$(TargetFrameworkIdentifier)' == '.NETCoreApp' AND '$(GenerateRazorAssemblyInfo)' == 'true'" />
|
||||
<Reference Include="Microsoft.AspNetCore.Mvc" Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true' AND
|
||||
'$(TargetFrameworkIdentifier)' == '$(NETCoreAppFrameworkIdentifier)' AND
|
||||
'$(GenerateRazorAssemblyInfo)' == 'true'" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Workaround https://github.com/dotnet/aspnetcore/issues/7503. This chains GenerateSourceLinkFile before razor component targets run. -->
|
||||
|
|
@ -40,11 +42,6 @@
|
|||
<PackageReference Include="Internal.AspNetCore.BuildTasks" PrivateAssets="All" Version="$(InternalAspNetCoreBuildTasksPackageVersion)" IsImplicitlyDefined="true" />
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<KnownAppHostPackOrFrameworkReferenceTfm>$(DefaultNetCoreTargetFramework)</KnownAppHostPackOrFrameworkReferenceTfm>
|
||||
<KnownAppHostPackOrFrameworkReferenceTfm Condition="'$(KnownAppHostPackOrFrameworkReferenceTfm)' == 'net5.0'">netcoreapp5.0</KnownAppHostPackOrFrameworkReferenceTfm>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<!-- Workaround when there is no vNext SDK available, copy known apphost/framework reference info from 3.1 -->
|
||||
<KnownAppHostPack
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ Param(
|
|||
[string] $msbuildEngine = $null,
|
||||
[bool] $warnAsError = $true,
|
||||
[bool] $nodeReuse = $true,
|
||||
[bool] $useDefaultDotnetInstall = $false,
|
||||
[switch][Alias('r')]$restore,
|
||||
[switch] $deployDeps,
|
||||
[switch][Alias('b')]$build,
|
||||
|
|
@ -23,6 +24,8 @@ Param(
|
|||
[switch][Alias('nobl')]$excludeCIBinarylog,
|
||||
[switch] $ci,
|
||||
[switch] $prepareMachine,
|
||||
[string] $runtimeSourceFeed = '',
|
||||
[string] $runtimeSourceFeedKey = '',
|
||||
[switch] $help,
|
||||
[Parameter(ValueFromRemainingArguments=$true)][String[]]$properties
|
||||
)
|
||||
|
|
@ -63,6 +66,7 @@ function Print-Usage() {
|
|||
Write-Host " -prepareMachine Prepare machine for CI run, clean up processes after build"
|
||||
Write-Host " -warnAsError <value> Sets warnaserror msbuild parameter ('true' or 'false')"
|
||||
Write-Host " -msbuildEngine <value> Msbuild engine to use to run build ('dotnet', 'vs', or unspecified)."
|
||||
Write-Host " -useDefaultDotnetInstall <value> Use dotnet-install.* scripts from public location as opposed to from eng common folder"
|
||||
Write-Host ""
|
||||
|
||||
Write-Host "Command line arguments not listed above are passed thru to msbuild."
|
||||
|
|
|
|||
|
|
@ -36,6 +36,8 @@ usage()
|
|||
echo " --prepareMachine Prepare machine for CI run, clean up processes after build"
|
||||
echo " --nodeReuse <value> Sets nodereuse msbuild parameter ('true' or 'false')"
|
||||
echo " --warnAsError <value> Sets warnaserror msbuild parameter ('true' or 'false')"
|
||||
echo " --useDefaultDotnetInstall <value> Use dotnet-install.* scripts from public location as opposed to from eng common folder"
|
||||
|
||||
echo ""
|
||||
echo "Command line arguments not listed above are passed thru to msbuild."
|
||||
echo "Arguments can also be passed in with a single hyphen."
|
||||
|
|
@ -76,9 +78,11 @@ projects=''
|
|||
configuration='Debug'
|
||||
prepare_machine=false
|
||||
verbosity='minimal'
|
||||
runtime_source_feed=''
|
||||
runtime_source_feed_key=''
|
||||
use_default_dotnet_install=false
|
||||
|
||||
properties=''
|
||||
|
||||
while [[ $# > 0 ]]; do
|
||||
opt="$(echo "${1/#--/-}" | awk '{print tolower($0)}')"
|
||||
case "$opt" in
|
||||
|
|
@ -151,6 +155,18 @@ while [[ $# > 0 ]]; do
|
|||
node_reuse=$2
|
||||
shift
|
||||
;;
|
||||
-runtimesourcefeed)
|
||||
runtime_source_feed=$2
|
||||
shift
|
||||
;;
|
||||
-runtimesourcefeedkey)
|
||||
runtime_source_feed_key=$2
|
||||
shift
|
||||
;;
|
||||
-usedefaultdotnetinstall)
|
||||
use_default_dotnet_install=$2
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
properties="$properties $1"
|
||||
;;
|
||||
|
|
|
|||
|
|
@ -30,8 +30,6 @@ rm -rf $TIZEN_TMP_DIR
|
|||
|
||||
# Configure Tizen rootfs
|
||||
echo ">>Start configuring Tizen rootfs"
|
||||
rm ./usr/lib/libunwind.so
|
||||
ln -s libunwind.so.8 ./usr/lib/libunwind.so
|
||||
ln -sfn asm-arm ./usr/include/asm
|
||||
patch -p1 < $__TIZEN_CROSSDIR/tizen.patch
|
||||
echo "<<Finish configuring Tizen rootfs"
|
||||
|
|
|
|||
|
|
@ -7,12 +7,3 @@ diff -u -r a/usr/lib/libc.so b/usr/lib/libc.so
|
|||
OUTPUT_FORMAT(elf32-littlearm)
|
||||
-GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a AS_NEEDED ( /lib/ld-linux.so.3 ) )
|
||||
+GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux.so.3 ) )
|
||||
diff -u -r a/usr/lib/libpthread.so b/usr/lib/libpthread.so
|
||||
--- a/usr/lib/libpthread.so 2016-12-30 23:00:19.408951841 +0900
|
||||
+++ b/usr/lib/libpthread.so 2016-12-30 23:00:39.068951801 +0900
|
||||
@@ -2,4 +2,4 @@
|
||||
Use the shared library, but some functions are only in
|
||||
the static library, so try that secondarily. */
|
||||
OUTPUT_FORMAT(elf32-littlearm)
|
||||
-GROUP ( /lib/libpthread.so.0 /usr/lib/libpthread_nonshared.a )
|
||||
+GROUP ( libpthread.so.0 libpthread_nonshared.a )
|
||||
|
|
|
|||
|
|
@ -0,0 +1,774 @@
|
|||
#
|
||||
# Copyright (c) .NET Foundation and contributors. All rights reserved.
|
||||
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||
#
|
||||
|
||||
# Copied from https://dot.net/v1/dotnet-install.ps1 on 8/26/2020
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Installs dotnet cli
|
||||
.DESCRIPTION
|
||||
Installs dotnet cli. If dotnet installation already exists in the given directory
|
||||
it will update it only if the requested version differs from the one already installed.
|
||||
.PARAMETER Channel
|
||||
Default: LTS
|
||||
Download from the Channel specified. Possible values:
|
||||
- Current - most current release
|
||||
- LTS - most current supported release
|
||||
- 2-part version in a format A.B - represents a specific release
|
||||
examples: 2.0, 1.0
|
||||
- Branch name
|
||||
examples: release/2.0.0, Master
|
||||
Note: The version parameter overrides the channel parameter.
|
||||
.PARAMETER Version
|
||||
Default: latest
|
||||
Represents a build version on specific channel. Possible values:
|
||||
- latest - most latest build on specific channel
|
||||
- coherent - most latest coherent build on specific channel
|
||||
coherent applies only to SDK downloads
|
||||
- 3-part version in a format A.B.C - represents specific version of build
|
||||
examples: 2.0.0-preview2-006120, 1.1.0
|
||||
.PARAMETER InstallDir
|
||||
Default: %LocalAppData%\Microsoft\dotnet
|
||||
Path to where to install dotnet. Note that binaries will be placed directly in a given directory.
|
||||
.PARAMETER Architecture
|
||||
Default: <auto> - this value represents currently running OS architecture
|
||||
Architecture of dotnet binaries to be installed.
|
||||
Possible values are: <auto>, amd64, x64, x86, arm64, arm
|
||||
.PARAMETER SharedRuntime
|
||||
This parameter is obsolete and may be removed in a future version of this script.
|
||||
The recommended alternative is '-Runtime dotnet'.
|
||||
Installs just the shared runtime bits, not the entire SDK.
|
||||
.PARAMETER Runtime
|
||||
Installs just a shared runtime, not the entire SDK.
|
||||
Possible values:
|
||||
- dotnet - the Microsoft.NETCore.App shared runtime
|
||||
- aspnetcore - the Microsoft.AspNetCore.App shared runtime
|
||||
- windowsdesktop - the Microsoft.WindowsDesktop.App shared runtime
|
||||
.PARAMETER DryRun
|
||||
If set it will not perform installation but instead display what command line to use to consistently install
|
||||
currently requested version of dotnet cli. In example if you specify version 'latest' it will display a link
|
||||
with specific version so that this command can be used deterministicly in a build script.
|
||||
It also displays binaries location if you prefer to install or download it yourself.
|
||||
.PARAMETER NoPath
|
||||
By default this script will set environment variable PATH for the current process to the binaries folder inside installation folder.
|
||||
If set it will display binaries location but not set any environment variable.
|
||||
.PARAMETER Verbose
|
||||
Displays diagnostics information.
|
||||
.PARAMETER AzureFeed
|
||||
Default: https://dotnetcli.azureedge.net/dotnet
|
||||
This parameter typically is not changed by the user.
|
||||
It allows changing the URL for the Azure feed used by this installer.
|
||||
.PARAMETER UncachedFeed
|
||||
This parameter typically is not changed by the user.
|
||||
It allows changing the URL for the Uncached feed used by this installer.
|
||||
.PARAMETER FeedCredential
|
||||
Used as a query string to append to the Azure feed.
|
||||
It allows changing the URL to use non-public blob storage accounts.
|
||||
.PARAMETER ProxyAddress
|
||||
If set, the installer will use the proxy when making web requests
|
||||
.PARAMETER ProxyUseDefaultCredentials
|
||||
Default: false
|
||||
Use default credentials, when using proxy address.
|
||||
.PARAMETER ProxyBypassList
|
||||
If set with ProxyAddress, will provide the list of comma separated urls that will bypass the proxy
|
||||
.PARAMETER SkipNonVersionedFiles
|
||||
Default: false
|
||||
Skips installing non-versioned files if they already exist, such as dotnet.exe.
|
||||
.PARAMETER NoCdn
|
||||
Disable downloading from the Azure CDN, and use the uncached feed directly.
|
||||
.PARAMETER JSonFile
|
||||
Determines the SDK version from a user specified global.json file
|
||||
Note: global.json must have a value for 'SDK:Version'
|
||||
#>
|
||||
[cmdletbinding()]
|
||||
param(
|
||||
[string]$Channel="LTS",
|
||||
[string]$Version="Latest",
|
||||
[string]$JSonFile,
|
||||
[string]$InstallDir="<auto>",
|
||||
[string]$Architecture="<auto>",
|
||||
[ValidateSet("dotnet", "aspnetcore", "windowsdesktop", IgnoreCase = $false)]
|
||||
[string]$Runtime,
|
||||
[Obsolete("This parameter may be removed in a future version of this script. The recommended alternative is '-Runtime dotnet'.")]
|
||||
[switch]$SharedRuntime,
|
||||
[switch]$DryRun,
|
||||
[switch]$NoPath,
|
||||
[string]$AzureFeed="https://dotnetcli.azureedge.net/dotnet",
|
||||
[string]$UncachedFeed="https://dotnetcli.blob.core.windows.net/dotnet",
|
||||
[string]$FeedCredential,
|
||||
[string]$ProxyAddress,
|
||||
[switch]$ProxyUseDefaultCredentials,
|
||||
[string[]]$ProxyBypassList=@(),
|
||||
[switch]$SkipNonVersionedFiles,
|
||||
[switch]$NoCdn
|
||||
)
|
||||
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference="Stop"
|
||||
$ProgressPreference="SilentlyContinue"
|
||||
|
||||
if ($NoCdn) {
|
||||
$AzureFeed = $UncachedFeed
|
||||
}
|
||||
|
||||
$BinFolderRelativePath=""
|
||||
|
||||
if ($SharedRuntime -and (-not $Runtime)) {
|
||||
$Runtime = "dotnet"
|
||||
}
|
||||
|
||||
# example path with regex: shared/1.0.0-beta-12345/somepath
|
||||
$VersionRegEx="/\d+\.\d+[^/]+/"
|
||||
$OverrideNonVersionedFiles = !$SkipNonVersionedFiles
|
||||
|
||||
function Say($str) {
|
||||
try
|
||||
{
|
||||
Write-Host "dotnet-install: $str"
|
||||
}
|
||||
catch
|
||||
{
|
||||
# Some platforms cannot utilize Write-Host (Azure Functions, for instance). Fall back to Write-Output
|
||||
Write-Output "dotnet-install: $str"
|
||||
}
|
||||
}
|
||||
|
||||
function Say-Verbose($str) {
|
||||
try
|
||||
{
|
||||
Write-Verbose "dotnet-install: $str"
|
||||
}
|
||||
catch
|
||||
{
|
||||
# Some platforms cannot utilize Write-Verbose (Azure Functions, for instance). Fall back to Write-Output
|
||||
Write-Output "dotnet-install: $str"
|
||||
}
|
||||
}
|
||||
|
||||
function Say-Invocation($Invocation) {
|
||||
$command = $Invocation.MyCommand;
|
||||
$args = (($Invocation.BoundParameters.Keys | foreach { "-$_ `"$($Invocation.BoundParameters[$_])`"" }) -join " ")
|
||||
Say-Verbose "$command $args"
|
||||
}
|
||||
|
||||
function Invoke-With-Retry([ScriptBlock]$ScriptBlock, [int]$MaxAttempts = 3, [int]$SecondsBetweenAttempts = 1) {
|
||||
$Attempts = 0
|
||||
|
||||
while ($true) {
|
||||
try {
|
||||
return $ScriptBlock.Invoke()
|
||||
}
|
||||
catch {
|
||||
$Attempts++
|
||||
if ($Attempts -lt $MaxAttempts) {
|
||||
Start-Sleep $SecondsBetweenAttempts
|
||||
}
|
||||
else {
|
||||
throw
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Get-Machine-Architecture() {
|
||||
Say-Invocation $MyInvocation
|
||||
|
||||
# On PS x86, PROCESSOR_ARCHITECTURE reports x86 even on x64 systems.
|
||||
# To get the correct architecture, we need to use PROCESSOR_ARCHITEW6432.
|
||||
# PS x64 doesn't define this, so we fall back to PROCESSOR_ARCHITECTURE.
|
||||
# Possible values: amd64, x64, x86, arm64, arm
|
||||
|
||||
if( $ENV:PROCESSOR_ARCHITEW6432 -ne $null )
|
||||
{
|
||||
return $ENV:PROCESSOR_ARCHITEW6432
|
||||
}
|
||||
|
||||
return $ENV:PROCESSOR_ARCHITECTURE
|
||||
}
|
||||
|
||||
function Get-CLIArchitecture-From-Architecture([string]$Architecture) {
|
||||
Say-Invocation $MyInvocation
|
||||
|
||||
switch ($Architecture.ToLower()) {
|
||||
{ $_ -eq "<auto>" } { return Get-CLIArchitecture-From-Architecture $(Get-Machine-Architecture) }
|
||||
{ ($_ -eq "amd64") -or ($_ -eq "x64") } { return "x64" }
|
||||
{ $_ -eq "x86" } { return "x86" }
|
||||
{ $_ -eq "arm" } { return "arm" }
|
||||
{ $_ -eq "arm64" } { return "arm64" }
|
||||
default { throw "Architecture not supported. If you think this is a bug, report it at https://github.com/dotnet/sdk/issues" }
|
||||
}
|
||||
}
|
||||
|
||||
# The version text returned from the feeds is a 1-line or 2-line string:
|
||||
# For the SDK and the dotnet runtime (2 lines):
|
||||
# Line 1: # commit_hash
|
||||
# Line 2: # 4-part version
|
||||
# For the aspnetcore runtime (1 line):
|
||||
# Line 1: # 4-part version
|
||||
function Get-Version-Info-From-Version-Text([string]$VersionText) {
|
||||
Say-Invocation $MyInvocation
|
||||
|
||||
$Data = -split $VersionText
|
||||
|
||||
$VersionInfo = @{
|
||||
CommitHash = $(if ($Data.Count -gt 1) { $Data[0] })
|
||||
Version = $Data[-1] # last line is always the version number.
|
||||
}
|
||||
return $VersionInfo
|
||||
}
|
||||
|
||||
function Load-Assembly([string] $Assembly) {
|
||||
try {
|
||||
Add-Type -Assembly $Assembly | Out-Null
|
||||
}
|
||||
catch {
|
||||
# On Nano Server, Powershell Core Edition is used. Add-Type is unable to resolve base class assemblies because they are not GAC'd.
|
||||
# Loading the base class assemblies is not unnecessary as the types will automatically get resolved.
|
||||
}
|
||||
}
|
||||
|
||||
function GetHTTPResponse([Uri] $Uri)
|
||||
{
|
||||
Invoke-With-Retry(
|
||||
{
|
||||
|
||||
$HttpClient = $null
|
||||
|
||||
try {
|
||||
# HttpClient is used vs Invoke-WebRequest in order to support Nano Server which doesn't support the Invoke-WebRequest cmdlet.
|
||||
Load-Assembly -Assembly System.Net.Http
|
||||
|
||||
if(-not $ProxyAddress) {
|
||||
try {
|
||||
# Despite no proxy being explicitly specified, we may still be behind a default proxy
|
||||
$DefaultProxy = [System.Net.WebRequest]::DefaultWebProxy;
|
||||
if($DefaultProxy -and (-not $DefaultProxy.IsBypassed($Uri))) {
|
||||
$ProxyAddress = $DefaultProxy.GetProxy($Uri).OriginalString
|
||||
$ProxyUseDefaultCredentials = $true
|
||||
}
|
||||
} catch {
|
||||
# Eat the exception and move forward as the above code is an attempt
|
||||
# at resolving the DefaultProxy that may not have been a problem.
|
||||
$ProxyAddress = $null
|
||||
Say-Verbose("Exception ignored: $_.Exception.Message - moving forward...")
|
||||
}
|
||||
}
|
||||
|
||||
if($ProxyAddress) {
|
||||
$HttpClientHandler = New-Object System.Net.Http.HttpClientHandler
|
||||
$HttpClientHandler.Proxy = New-Object System.Net.WebProxy -Property @{
|
||||
Address=$ProxyAddress;
|
||||
UseDefaultCredentials=$ProxyUseDefaultCredentials;
|
||||
BypassList = $ProxyBypassList;
|
||||
}
|
||||
$HttpClient = New-Object System.Net.Http.HttpClient -ArgumentList $HttpClientHandler
|
||||
}
|
||||
else {
|
||||
|
||||
$HttpClient = New-Object System.Net.Http.HttpClient
|
||||
}
|
||||
# Default timeout for HttpClient is 100s. For a 50 MB download this assumes 500 KB/s average, any less will time out
|
||||
# 20 minutes allows it to work over much slower connections.
|
||||
$HttpClient.Timeout = New-TimeSpan -Minutes 20
|
||||
$Response = $HttpClient.GetAsync("${Uri}${FeedCredential}").Result
|
||||
if (($Response -eq $null) -or (-not ($Response.IsSuccessStatusCode))) {
|
||||
# The feed credential is potentially sensitive info. Do not log FeedCredential to console output.
|
||||
$ErrorMsg = "Failed to download $Uri."
|
||||
if ($Response -ne $null) {
|
||||
$ErrorMsg += " $Response"
|
||||
}
|
||||
|
||||
throw $ErrorMsg
|
||||
}
|
||||
|
||||
return $Response
|
||||
}
|
||||
finally {
|
||||
if ($HttpClient -ne $null) {
|
||||
$HttpClient.Dispose()
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function Get-Latest-Version-Info([string]$AzureFeed, [string]$Channel, [bool]$Coherent) {
|
||||
Say-Invocation $MyInvocation
|
||||
|
||||
$VersionFileUrl = $null
|
||||
if ($Runtime -eq "dotnet") {
|
||||
$VersionFileUrl = "$UncachedFeed/Runtime/$Channel/latest.version"
|
||||
}
|
||||
elseif ($Runtime -eq "aspnetcore") {
|
||||
$VersionFileUrl = "$UncachedFeed/aspnetcore/Runtime/$Channel/latest.version"
|
||||
}
|
||||
# Currently, the WindowsDesktop runtime is manufactured with the .Net core runtime
|
||||
elseif ($Runtime -eq "windowsdesktop") {
|
||||
$VersionFileUrl = "$UncachedFeed/Runtime/$Channel/latest.version"
|
||||
}
|
||||
elseif (-not $Runtime) {
|
||||
if ($Coherent) {
|
||||
$VersionFileUrl = "$UncachedFeed/Sdk/$Channel/latest.coherent.version"
|
||||
}
|
||||
else {
|
||||
$VersionFileUrl = "$UncachedFeed/Sdk/$Channel/latest.version"
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw "Invalid value for `$Runtime"
|
||||
}
|
||||
try {
|
||||
$Response = GetHTTPResponse -Uri $VersionFileUrl
|
||||
}
|
||||
catch {
|
||||
throw "Could not resolve version information."
|
||||
}
|
||||
$StringContent = $Response.Content.ReadAsStringAsync().Result
|
||||
|
||||
switch ($Response.Content.Headers.ContentType) {
|
||||
{ ($_ -eq "application/octet-stream") } { $VersionText = $StringContent }
|
||||
{ ($_ -eq "text/plain") } { $VersionText = $StringContent }
|
||||
{ ($_ -eq "text/plain; charset=UTF-8") } { $VersionText = $StringContent }
|
||||
default { throw "``$Response.Content.Headers.ContentType`` is an unknown .version file content type." }
|
||||
}
|
||||
|
||||
$VersionInfo = Get-Version-Info-From-Version-Text $VersionText
|
||||
|
||||
return $VersionInfo
|
||||
}
|
||||
|
||||
function Parse-Jsonfile-For-Version([string]$JSonFile) {
|
||||
Say-Invocation $MyInvocation
|
||||
|
||||
If (-Not (Test-Path $JSonFile)) {
|
||||
throw "Unable to find '$JSonFile'"
|
||||
}
|
||||
try {
|
||||
$JSonContent = Get-Content($JSonFile) -Raw | ConvertFrom-Json | Select-Object -expand "sdk" -ErrorAction SilentlyContinue
|
||||
}
|
||||
catch {
|
||||
throw "Json file unreadable: '$JSonFile'"
|
||||
}
|
||||
if ($JSonContent) {
|
||||
try {
|
||||
$JSonContent.PSObject.Properties | ForEach-Object {
|
||||
$PropertyName = $_.Name
|
||||
if ($PropertyName -eq "version") {
|
||||
$Version = $_.Value
|
||||
Say-Verbose "Version = $Version"
|
||||
}
|
||||
}
|
||||
}
|
||||
catch {
|
||||
throw "Unable to parse the SDK node in '$JSonFile'"
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw "Unable to find the SDK node in '$JSonFile'"
|
||||
}
|
||||
If ($Version -eq $null) {
|
||||
throw "Unable to find the SDK:version node in '$JSonFile'"
|
||||
}
|
||||
return $Version
|
||||
}
|
||||
|
||||
function Get-Specific-Version-From-Version([string]$AzureFeed, [string]$Channel, [string]$Version, [string]$JSonFile) {
|
||||
Say-Invocation $MyInvocation
|
||||
|
||||
if (-not $JSonFile) {
|
||||
switch ($Version.ToLower()) {
|
||||
{ $_ -eq "latest" } {
|
||||
$LatestVersionInfo = Get-Latest-Version-Info -AzureFeed $AzureFeed -Channel $Channel -Coherent $False
|
||||
return $LatestVersionInfo.Version
|
||||
}
|
||||
{ $_ -eq "coherent" } {
|
||||
$LatestVersionInfo = Get-Latest-Version-Info -AzureFeed $AzureFeed -Channel $Channel -Coherent $True
|
||||
return $LatestVersionInfo.Version
|
||||
}
|
||||
default { return $Version }
|
||||
}
|
||||
}
|
||||
else {
|
||||
return Parse-Jsonfile-For-Version $JSonFile
|
||||
}
|
||||
}
|
||||
|
||||
function Get-Download-Link([string]$AzureFeed, [string]$SpecificVersion, [string]$CLIArchitecture) {
|
||||
Say-Invocation $MyInvocation
|
||||
|
||||
# If anything fails in this lookup it will default to $SpecificVersion
|
||||
$SpecificProductVersion = Get-Product-Version -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion
|
||||
|
||||
if ($Runtime -eq "dotnet") {
|
||||
$PayloadURL = "$AzureFeed/Runtime/$SpecificVersion/dotnet-runtime-$SpecificProductVersion-win-$CLIArchitecture.zip"
|
||||
}
|
||||
elseif ($Runtime -eq "aspnetcore") {
|
||||
$PayloadURL = "$AzureFeed/aspnetcore/Runtime/$SpecificVersion/aspnetcore-runtime-$SpecificProductVersion-win-$CLIArchitecture.zip"
|
||||
}
|
||||
elseif ($Runtime -eq "windowsdesktop") {
|
||||
$PayloadURL = "$AzureFeed/Runtime/$SpecificVersion/windowsdesktop-runtime-$SpecificProductVersion-win-$CLIArchitecture.zip"
|
||||
}
|
||||
elseif (-not $Runtime) {
|
||||
$PayloadURL = "$AzureFeed/Sdk/$SpecificVersion/dotnet-sdk-$SpecificProductVersion-win-$CLIArchitecture.zip"
|
||||
}
|
||||
else {
|
||||
throw "Invalid value for `$Runtime"
|
||||
}
|
||||
|
||||
Say-Verbose "Constructed primary named payload URL: $PayloadURL"
|
||||
|
||||
return $PayloadURL, $SpecificProductVersion
|
||||
}
|
||||
|
||||
function Get-LegacyDownload-Link([string]$AzureFeed, [string]$SpecificVersion, [string]$CLIArchitecture) {
|
||||
Say-Invocation $MyInvocation
|
||||
|
||||
if (-not $Runtime) {
|
||||
$PayloadURL = "$AzureFeed/Sdk/$SpecificVersion/dotnet-dev-win-$CLIArchitecture.$SpecificVersion.zip"
|
||||
}
|
||||
elseif ($Runtime -eq "dotnet") {
|
||||
$PayloadURL = "$AzureFeed/Runtime/$SpecificVersion/dotnet-win-$CLIArchitecture.$SpecificVersion.zip"
|
||||
}
|
||||
else {
|
||||
return $null
|
||||
}
|
||||
|
||||
Say-Verbose "Constructed legacy named payload URL: $PayloadURL"
|
||||
|
||||
return $PayloadURL
|
||||
}
|
||||
|
||||
function Get-Product-Version([string]$AzureFeed, [string]$SpecificVersion) {
|
||||
Say-Invocation $MyInvocation
|
||||
|
||||
if ($Runtime -eq "dotnet") {
|
||||
$ProductVersionTxtURL = "$AzureFeed/Runtime/$SpecificVersion/productVersion.txt"
|
||||
}
|
||||
elseif ($Runtime -eq "aspnetcore") {
|
||||
$ProductVersionTxtURL = "$AzureFeed/aspnetcore/Runtime/$SpecificVersion/productVersion.txt"
|
||||
}
|
||||
elseif ($Runtime -eq "windowsdesktop") {
|
||||
$ProductVersionTxtURL = "$AzureFeed/Runtime/$SpecificVersion/productVersion.txt"
|
||||
}
|
||||
elseif (-not $Runtime) {
|
||||
$ProductVersionTxtURL = "$AzureFeed/Sdk/$SpecificVersion/productVersion.txt"
|
||||
}
|
||||
else {
|
||||
throw "Invalid value specified for `$Runtime"
|
||||
}
|
||||
|
||||
Say-Verbose "Checking for existence of $ProductVersionTxtURL"
|
||||
|
||||
try {
|
||||
$productVersionResponse = GetHTTPResponse($productVersionTxtUrl)
|
||||
|
||||
if ($productVersionResponse.StatusCode -eq 200) {
|
||||
$productVersion = $productVersionResponse.Content.ReadAsStringAsync().Result.Trim()
|
||||
if ($productVersion -ne $SpecificVersion)
|
||||
{
|
||||
Say "Using alternate version $productVersion found in $ProductVersionTxtURL"
|
||||
}
|
||||
|
||||
return $productVersion
|
||||
}
|
||||
else {
|
||||
Say-Verbose "Got StatusCode $($productVersionResponse.StatusCode) trying to get productVersion.txt at $productVersionTxtUrl, so using default value of $SpecificVersion"
|
||||
$productVersion = $SpecificVersion
|
||||
}
|
||||
} catch {
|
||||
Say-Verbose "Could not read productVersion.txt at $productVersionTxtUrl, so using default value of $SpecificVersion"
|
||||
$productVersion = $SpecificVersion
|
||||
}
|
||||
|
||||
return $productVersion
|
||||
}
|
||||
|
||||
function Get-User-Share-Path() {
|
||||
Say-Invocation $MyInvocation
|
||||
|
||||
$InstallRoot = $env:DOTNET_INSTALL_DIR
|
||||
if (!$InstallRoot) {
|
||||
$InstallRoot = "$env:LocalAppData\Microsoft\dotnet"
|
||||
}
|
||||
return $InstallRoot
|
||||
}
|
||||
|
||||
function Resolve-Installation-Path([string]$InstallDir) {
|
||||
Say-Invocation $MyInvocation
|
||||
|
||||
if ($InstallDir -eq "<auto>") {
|
||||
return Get-User-Share-Path
|
||||
}
|
||||
return $InstallDir
|
||||
}
|
||||
|
||||
function Is-Dotnet-Package-Installed([string]$InstallRoot, [string]$RelativePathToPackage, [string]$SpecificVersion) {
|
||||
Say-Invocation $MyInvocation
|
||||
|
||||
$DotnetPackagePath = Join-Path -Path $InstallRoot -ChildPath $RelativePathToPackage | Join-Path -ChildPath $SpecificVersion
|
||||
Say-Verbose "Is-Dotnet-Package-Installed: DotnetPackagePath=$DotnetPackagePath"
|
||||
return Test-Path $DotnetPackagePath -PathType Container
|
||||
}
|
||||
|
||||
function Get-Absolute-Path([string]$RelativeOrAbsolutePath) {
|
||||
# Too much spam
|
||||
# Say-Invocation $MyInvocation
|
||||
|
||||
return $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($RelativeOrAbsolutePath)
|
||||
}
|
||||
|
||||
function Get-Path-Prefix-With-Version($path) {
|
||||
$match = [regex]::match($path, $VersionRegEx)
|
||||
if ($match.Success) {
|
||||
return $entry.FullName.Substring(0, $match.Index + $match.Length)
|
||||
}
|
||||
|
||||
return $null
|
||||
}
|
||||
|
||||
function Get-List-Of-Directories-And-Versions-To-Unpack-From-Dotnet-Package([System.IO.Compression.ZipArchive]$Zip, [string]$OutPath) {
|
||||
Say-Invocation $MyInvocation
|
||||
|
||||
$ret = @()
|
||||
foreach ($entry in $Zip.Entries) {
|
||||
$dir = Get-Path-Prefix-With-Version $entry.FullName
|
||||
if ($dir -ne $null) {
|
||||
$path = Get-Absolute-Path $(Join-Path -Path $OutPath -ChildPath $dir)
|
||||
if (-Not (Test-Path $path -PathType Container)) {
|
||||
$ret += $dir
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$ret = $ret | Sort-Object | Get-Unique
|
||||
|
||||
$values = ($ret | foreach { "$_" }) -join ";"
|
||||
Say-Verbose "Directories to unpack: $values"
|
||||
|
||||
return $ret
|
||||
}
|
||||
|
||||
# Example zip content and extraction algorithm:
|
||||
# Rule: files if extracted are always being extracted to the same relative path locally
|
||||
# .\
|
||||
# a.exe # file does not exist locally, extract
|
||||
# b.dll # file exists locally, override only if $OverrideFiles set
|
||||
# aaa\ # same rules as for files
|
||||
# ...
|
||||
# abc\1.0.0\ # directory contains version and exists locally
|
||||
# ... # do not extract content under versioned part
|
||||
# abc\asd\ # same rules as for files
|
||||
# ...
|
||||
# def\ghi\1.0.1\ # directory contains version and does not exist locally
|
||||
# ... # extract content
|
||||
function Extract-Dotnet-Package([string]$ZipPath, [string]$OutPath) {
|
||||
Say-Invocation $MyInvocation
|
||||
|
||||
Load-Assembly -Assembly System.IO.Compression.FileSystem
|
||||
Set-Variable -Name Zip
|
||||
try {
|
||||
$Zip = [System.IO.Compression.ZipFile]::OpenRead($ZipPath)
|
||||
|
||||
$DirectoriesToUnpack = Get-List-Of-Directories-And-Versions-To-Unpack-From-Dotnet-Package -Zip $Zip -OutPath $OutPath
|
||||
|
||||
foreach ($entry in $Zip.Entries) {
|
||||
$PathWithVersion = Get-Path-Prefix-With-Version $entry.FullName
|
||||
if (($PathWithVersion -eq $null) -Or ($DirectoriesToUnpack -contains $PathWithVersion)) {
|
||||
$DestinationPath = Get-Absolute-Path $(Join-Path -Path $OutPath -ChildPath $entry.FullName)
|
||||
$DestinationDir = Split-Path -Parent $DestinationPath
|
||||
$OverrideFiles=$OverrideNonVersionedFiles -Or (-Not (Test-Path $DestinationPath))
|
||||
if ((-Not $DestinationPath.EndsWith("\")) -And $OverrideFiles) {
|
||||
New-Item -ItemType Directory -Force -Path $DestinationDir | Out-Null
|
||||
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $DestinationPath, $OverrideNonVersionedFiles)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
finally {
|
||||
if ($Zip -ne $null) {
|
||||
$Zip.Dispose()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function DownloadFile($Source, [string]$OutPath) {
|
||||
if ($Source -notlike "http*") {
|
||||
# Using System.IO.Path.GetFullPath to get the current directory
|
||||
# does not work in this context - $pwd gives the current directory
|
||||
if (![System.IO.Path]::IsPathRooted($Source)) {
|
||||
$Source = $(Join-Path -Path $pwd -ChildPath $Source)
|
||||
}
|
||||
$Source = Get-Absolute-Path $Source
|
||||
Say "Copying file from $Source to $OutPath"
|
||||
Copy-Item $Source $OutPath
|
||||
return
|
||||
}
|
||||
|
||||
$Stream = $null
|
||||
|
||||
try {
|
||||
$Response = GetHTTPResponse -Uri $Source
|
||||
$Stream = $Response.Content.ReadAsStreamAsync().Result
|
||||
$File = [System.IO.File]::Create($OutPath)
|
||||
$Stream.CopyTo($File)
|
||||
$File.Close()
|
||||
}
|
||||
finally {
|
||||
if ($Stream -ne $null) {
|
||||
$Stream.Dispose()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Prepend-Sdk-InstallRoot-To-Path([string]$InstallRoot, [string]$BinFolderRelativePath) {
|
||||
$BinPath = Get-Absolute-Path $(Join-Path -Path $InstallRoot -ChildPath $BinFolderRelativePath)
|
||||
if (-Not $NoPath) {
|
||||
$SuffixedBinPath = "$BinPath;"
|
||||
if (-Not $env:path.Contains($SuffixedBinPath)) {
|
||||
Say "Adding to current process PATH: `"$BinPath`". Note: This change will not be visible if PowerShell was run as a child process."
|
||||
$env:path = $SuffixedBinPath + $env:path
|
||||
} else {
|
||||
Say-Verbose "Current process PATH already contains `"$BinPath`""
|
||||
}
|
||||
}
|
||||
else {
|
||||
Say "Binaries of dotnet can be found in $BinPath"
|
||||
}
|
||||
}
|
||||
|
||||
$CLIArchitecture = Get-CLIArchitecture-From-Architecture $Architecture
|
||||
$SpecificVersion = Get-Specific-Version-From-Version -AzureFeed $AzureFeed -Channel $Channel -Version $Version -JSonFile $JSonFile
|
||||
$DownloadLink, $EffectiveVersion = Get-Download-Link -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
|
||||
$LegacyDownloadLink = Get-LegacyDownload-Link -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
|
||||
|
||||
$InstallRoot = Resolve-Installation-Path $InstallDir
|
||||
Say-Verbose "InstallRoot: $InstallRoot"
|
||||
$ScriptName = $MyInvocation.MyCommand.Name
|
||||
|
||||
if ($DryRun) {
|
||||
Say "Payload URLs:"
|
||||
Say "Primary named payload URL: $DownloadLink"
|
||||
if ($LegacyDownloadLink) {
|
||||
Say "Legacy named payload URL: $LegacyDownloadLink"
|
||||
}
|
||||
$RepeatableCommand = ".\$ScriptName -Version `"$SpecificVersion`" -InstallDir `"$InstallRoot`" -Architecture `"$CLIArchitecture`""
|
||||
if ($Runtime -eq "dotnet") {
|
||||
$RepeatableCommand+=" -Runtime `"dotnet`""
|
||||
}
|
||||
elseif ($Runtime -eq "aspnetcore") {
|
||||
$RepeatableCommand+=" -Runtime `"aspnetcore`""
|
||||
}
|
||||
foreach ($key in $MyInvocation.BoundParameters.Keys) {
|
||||
if (-not (@("Architecture","Channel","DryRun","InstallDir","Runtime","SharedRuntime","Version") -contains $key)) {
|
||||
$RepeatableCommand+=" -$key `"$($MyInvocation.BoundParameters[$key])`""
|
||||
}
|
||||
}
|
||||
Say "Repeatable invocation: $RepeatableCommand"
|
||||
exit 0
|
||||
}
|
||||
|
||||
if ($Runtime -eq "dotnet") {
|
||||
$assetName = ".NET Core Runtime"
|
||||
$dotnetPackageRelativePath = "shared\Microsoft.NETCore.App"
|
||||
}
|
||||
elseif ($Runtime -eq "aspnetcore") {
|
||||
$assetName = "ASP.NET Core Runtime"
|
||||
$dotnetPackageRelativePath = "shared\Microsoft.AspNetCore.App"
|
||||
}
|
||||
elseif ($Runtime -eq "windowsdesktop") {
|
||||
$assetName = ".NET Core Windows Desktop Runtime"
|
||||
$dotnetPackageRelativePath = "shared\Microsoft.WindowsDesktop.App"
|
||||
}
|
||||
elseif (-not $Runtime) {
|
||||
$assetName = ".NET Core SDK"
|
||||
$dotnetPackageRelativePath = "sdk"
|
||||
}
|
||||
else {
|
||||
throw "Invalid value for `$Runtime"
|
||||
}
|
||||
|
||||
if ($SpecificVersion -ne $EffectiveVersion)
|
||||
{
|
||||
Say "Performing installation checks for effective version: $EffectiveVersion"
|
||||
$SpecificVersion = $EffectiveVersion
|
||||
}
|
||||
|
||||
# Check if the SDK version is already installed.
|
||||
$isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $SpecificVersion
|
||||
if ($isAssetInstalled) {
|
||||
Say "$assetName version $SpecificVersion is already installed."
|
||||
Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot -BinFolderRelativePath $BinFolderRelativePath
|
||||
exit 0
|
||||
}
|
||||
|
||||
New-Item -ItemType Directory -Force -Path $InstallRoot | Out-Null
|
||||
|
||||
$installDrive = $((Get-Item $InstallRoot).PSDrive.Name);
|
||||
$diskInfo = Get-PSDrive -Name $installDrive
|
||||
if ($diskInfo.Free / 1MB -le 100) {
|
||||
Say "There is not enough disk space on drive ${installDrive}:"
|
||||
exit 0
|
||||
}
|
||||
|
||||
$ZipPath = [System.IO.Path]::combine([System.IO.Path]::GetTempPath(), [System.IO.Path]::GetRandomFileName())
|
||||
Say-Verbose "Zip path: $ZipPath"
|
||||
|
||||
$DownloadFailed = $false
|
||||
Say "Downloading link: $DownloadLink"
|
||||
try {
|
||||
DownloadFile -Source $DownloadLink -OutPath $ZipPath
|
||||
}
|
||||
catch {
|
||||
Say "Cannot download: $DownloadLink"
|
||||
if ($LegacyDownloadLink) {
|
||||
$DownloadLink = $LegacyDownloadLink
|
||||
$ZipPath = [System.IO.Path]::combine([System.IO.Path]::GetTempPath(), [System.IO.Path]::GetRandomFileName())
|
||||
Say-Verbose "Legacy zip path: $ZipPath"
|
||||
Say "Downloading legacy link: $DownloadLink"
|
||||
try {
|
||||
DownloadFile -Source $DownloadLink -OutPath $ZipPath
|
||||
}
|
||||
catch {
|
||||
Say "Cannot download: $DownloadLink"
|
||||
$DownloadFailed = $true
|
||||
}
|
||||
}
|
||||
else {
|
||||
$DownloadFailed = $true
|
||||
}
|
||||
}
|
||||
|
||||
if ($DownloadFailed) {
|
||||
throw "Could not find/download: `"$assetName`" with version = $SpecificVersion`nRefer to: https://aka.ms/dotnet-os-lifecycle for information on .NET Core support"
|
||||
}
|
||||
|
||||
Say "Extracting zip from $DownloadLink"
|
||||
Extract-Dotnet-Package -ZipPath $ZipPath -OutPath $InstallRoot
|
||||
|
||||
# Check if the SDK version is installed; if not, fail the installation.
|
||||
$isAssetInstalled = $false
|
||||
|
||||
# if the version contains "RTM" or "servicing"; check if a 'release-type' SDK version is installed.
|
||||
if ($SpecificVersion -Match "rtm" -or $SpecificVersion -Match "servicing") {
|
||||
$ReleaseVersion = $SpecificVersion.Split("-")[0]
|
||||
Say-Verbose "Checking installation: version = $ReleaseVersion"
|
||||
$isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $ReleaseVersion
|
||||
}
|
||||
|
||||
# Check if the SDK version is installed.
|
||||
if (!$isAssetInstalled) {
|
||||
Say-Verbose "Checking installation: version = $SpecificVersion"
|
||||
$isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $SpecificVersion
|
||||
}
|
||||
|
||||
if (!$isAssetInstalled) {
|
||||
throw "`"$assetName`" with version = $SpecificVersion failed to install with an unknown error."
|
||||
}
|
||||
|
||||
Remove-Item $ZipPath
|
||||
|
||||
Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot -BinFolderRelativePath $BinFolderRelativePath
|
||||
|
||||
Say "Installation finished"
|
||||
exit 0
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,30 @@
|
|||
<Project Sdk="Microsoft.DotNet.Helix.Sdk" DefaultTargets="Test">
|
||||
<PropertyGroup Condition="'$(AGENT_OS)' != 'Windows_NT'">
|
||||
<Python>python3</Python>
|
||||
<HelixPreCommands>$(HelixPreCommands);chmod +x $HELIX_WORKITEM_PAYLOAD/SOD/SizeOnDisk</HelixPreCommands>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<HelixCorrelationPayload Include="$(CorrelationPayloadDirectory)">
|
||||
<PayloadDirectory>%(Identity)</PayloadDirectory>
|
||||
</HelixCorrelationPayload>
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(AGENT_OS)' == 'Windows_NT'">
|
||||
<ScenarioDirectory>%HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\</ScenarioDirectory>
|
||||
<BlazorDirectory>$(ScenarioDirectory)blazor\</BlazorDirectory>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(AGENT_OS)' != 'Windows_NT'">
|
||||
<ScenarioDirectory>$HELIX_CORRELATION_PAYLOAD/performance/src/scenarios/</ScenarioDirectory>
|
||||
<BlazorDirectory>$(ScenarioDirectory)blazor/</BlazorDirectory>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<HelixWorkItem Include="SOD - New Blazor Template - Publish">
|
||||
<PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
|
||||
<PreCommands>cd $(BlazorDirectory);$(Python) pre.py publish --msbuild %27/p:_TrimmerDumpDependencies=true%27 --msbuild-static AdditionalMonoLinkerOptions=%27"%24(AdditionalMonoLinkerOptions) --dump-dependencies"%27 --binlog %27./traces/blazor_publish.binlog%27</PreCommands>
|
||||
<Command>$(Python) test.py sod --scenario-name "%(Identity)"</Command>
|
||||
<PostCommands>$(Python) post.py</PostCommands>
|
||||
</HelixWorkItem>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -1,80 +1,68 @@
|
|||
<Project Sdk="Microsoft.DotNet.Helix.Sdk" DefaultTargets="Test">
|
||||
|
||||
<PropertyGroup Condition="'$(AGENT_OS)' == 'Windows_NT'">
|
||||
<Python>py -3</Python>
|
||||
<HelixPreCommands>$(HelixPreCommands);call %HELIX_CORRELATION_PAYLOAD%\performance\tools\machine-setup.cmd;set PYTHONPATH=%HELIX_WORKITEM_PAYLOAD%\scripts%3B%HELIX_WORKITEM_PAYLOAD%</HelixPreCommands>
|
||||
<ArtifactsDirectory>%HELIX_CORRELATION_PAYLOAD%\artifacts\BenchmarkDotNet.Artifacts</ArtifactsDirectory>
|
||||
<BaseDirectory>$HELIX_CORRELATION_PAYLOAD</BaseDirectory>
|
||||
<PerformanceDirectory>$(BaseDirectory)/performance</PerformanceDirectory>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(AGENT_OS)' != 'Windows_NT'">
|
||||
<WorkItemCommand>$(PerformanceDirectory)/scripts/benchmarks_ci.py --csproj $(PerformanceDirectory)/$(TargetCsproj)</WorkItemCommand>
|
||||
<CliArguments>--dotnet-versions $DOTNET_VERSION --cli-source-info args --cli-branch $PERFLAB_BRANCH --cli-commit-sha $PERFLAB_HASH --cli-repository https://github.com/$PERFLAB_REPO --cli-source-timestamp $PERFLAB_BUILDTIMESTAMP</CliArguments>
|
||||
<Python>python3</Python>
|
||||
<CoreRun>$(BaseDirectory)/Core_Root/corerun</CoreRun>
|
||||
<HelixPreCommands>$(HelixPreCommands);chmod +x $(PerformanceDirectory)/tools/machine-setup.sh;. $(PerformanceDirectory)/tools/machine-setup.sh</HelixPreCommands>
|
||||
<ArtifactsDirectory>$(BaseDirectory)/artifacts/BenchmarkDotNet.Artifacts</ArtifactsDirectory>
|
||||
<BaselineArtifactsDirectory>$(BaseDirectory)/artifacts/BenchmarkDotNet.Artifacts_Baseline</BaselineArtifactsDirectory>
|
||||
<ResultsComparer>$(PerformanceDirectory)/src/tools/ResultsComparer/ResultsComparer.csproj</ResultsComparer>
|
||||
<DotnetExe>$(PerformanceDirectory)/tools/dotnet/$(Architecture)/dotnet</DotnetExe>
|
||||
<Percent>%25</Percent>
|
||||
<XMLResults>$HELIX_WORKITEM_ROOT/testResults.xml</XMLResults>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<HelixCorrelationPayload Include="$(CorrelationPayloadDirectory)">
|
||||
<PayloadDirectory>%(Identity)</PayloadDirectory>
|
||||
</HelixCorrelationPayload>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(AGENT_OS)' == 'Windows_NT'">
|
||||
<HelixWorkItem Include="Crossgen System.Private.Xml.dll">
|
||||
<PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
|
||||
<Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name System.Private.Xml.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
|
||||
</HelixWorkItem>
|
||||
<HelixWorkItem Include="Crossgen System.Linq.Expressions.dll">
|
||||
<PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
|
||||
<Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name System.Linq.Expressions.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
|
||||
</HelixWorkItem>
|
||||
<HelixWorkItem Include="Crossgen Microsoft.CodeAnalysis.VisualBasic.dll">
|
||||
<PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
|
||||
<Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name Microsoft.CodeAnalysis.VisualBasic.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
|
||||
</HelixWorkItem>
|
||||
<HelixWorkItem Include="Crossgen Microsoft.CodeAnalysis.CSharp.dll">
|
||||
<PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
|
||||
<Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name Microsoft.CodeAnalysis.CSharp.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
|
||||
</HelixWorkItem>
|
||||
<HelixWorkItem Include="Crossgen System.Private.CoreLib.dll">
|
||||
<PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
|
||||
<Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen\test.py crossgen --test-name System.Private.CoreLib.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
|
||||
</HelixWorkItem>
|
||||
<!--
|
||||
Crossgen and Crossgen2 Scenario WorkItems
|
||||
-->
|
||||
<PropertyGroup Condition="'$(AGENT_OS)' == 'Windows_NT'">
|
||||
<Python>py -3</Python>
|
||||
<HelixPreCommands>$(HelixPreCommands)</HelixPreCommands>
|
||||
<CoreRoot>%HELIX_CORRELATION_PAYLOAD%\Core_Root</CoreRoot>
|
||||
<ScenarioDirectory>%HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\</ScenarioDirectory>
|
||||
<CrossgenDirectory>$(ScenarioDirectory)crossgen\</CrossgenDirectory>
|
||||
<Crossgen2Directory>$(ScenarioDirectory)crossgen2\</Crossgen2Directory>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(AGENT_OS)' != 'Windows_NT'">
|
||||
<Python>python3</Python>
|
||||
<HelixPreCommands>$(HelixPreCommands);chmod +x $HELIX_WORKITEM_PAYLOAD/startup/Startup;chmod +x $HELIX_WORKITEM_PAYLOAD/startup/perfcollect;sudo apt update</HelixPreCommands>
|
||||
<CoreRoot>$HELIX_CORRELATION_PAYLOAD/Core_Root</CoreRoot>
|
||||
<ScenarioDirectory>$HELIX_CORRELATION_PAYLOAD/performance/src/scenarios/</ScenarioDirectory>
|
||||
<CrossgenDirectory>$(ScenarioDirectory)crossgen/</CrossgenDirectory>
|
||||
<Crossgen2Directory>$(ScenarioDirectory)crossgen2/</Crossgen2Directory>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<SingleAssembly Include="System.Private.Xml.dll"/>
|
||||
<SingleAssembly Include="System.Linq.Expressions.dll"/>
|
||||
<SingleAssembly Include="Microsoft.CodeAnalysis.VisualBasic.dll"/>
|
||||
<SingleAssembly Include="Microsoft.CodeAnalysis.CSharp.dll"/>
|
||||
<SingleAssembly Include="System.Private.CoreLib.dll"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Composite Include="framework-r2r.dll.rsp"/>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(AGENT_OS)' == 'Windows_NT' and '$(Architecture)' == 'x64'">
|
||||
<HelixWorkItem Include="Crossgen2 System.Private.Xml.dll">
|
||||
<PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
|
||||
<Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\test.py crossgen2 --single System.Private.Xml.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
|
||||
<ItemGroup>
|
||||
<CrossgenWorkItem Include="@(SingleAssembly)">
|
||||
<PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
|
||||
<Command>$(Python) $(CrossgenDirectory)test.py crossgen --core-root $(CoreRoot) --test-name %(Identity)</Command>
|
||||
</CrossgenWorkItem>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Crossgen2WorkItem Include="@(SingleAssembly)">
|
||||
<PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
|
||||
<Command>$(Python) $(Crossgen2Directory)test.py crossgen2 --core-root $(CoreRoot) --single %(Identity)</Command>
|
||||
</Crossgen2WorkItem>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<!-- Enable crossgen tests on Windows x64 and Windows x86 -->
|
||||
<HelixWorkItem Include="@(CrossgenWorkItem -> 'Crossgen %(Identity)')" Condition="'$(AGENT_OS)' == 'Windows_NT'">
|
||||
<Timeout>4:00</Timeout>
|
||||
</HelixWorkItem>
|
||||
<HelixWorkItem Include="Crossgen2 System.Linq.Expressions.dll">
|
||||
<PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
|
||||
<Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\test.py crossgen2 --single System.Linq.Expressions.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
|
||||
<!-- Enable crossgen2 tests on Windows x64 and Linux x64 -->
|
||||
<HelixWorkItem Include="@(Crossgen2WorkItem -> 'Crossgen2 %(Identity)')" Condition="'$(Architecture)' == 'x64'">
|
||||
<Timeout>4:00</Timeout>
|
||||
</HelixWorkItem>
|
||||
<HelixWorkItem Include="Crossgen2 Microsoft.CodeAnalysis.VisualBasic.dll">
|
||||
<PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
|
||||
<Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\test.py crossgen2 --single Microsoft.CodeAnalysis.VisualBasic.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
|
||||
</HelixWorkItem>
|
||||
<HelixWorkItem Include="Crossgen2 Microsoft.CodeAnalysis.CSharp.dll">
|
||||
<PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
|
||||
<Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\test.py crossgen2 --single Microsoft.CodeAnalysis.CSharp.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
|
||||
</HelixWorkItem>
|
||||
<HelixWorkItem Include="Crossgen2 System.Private.CoreLib.dll">
|
||||
<PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
|
||||
<Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\test.py crossgen2 --single System.Private.CoreLib.dll --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
|
||||
</HelixWorkItem>
|
||||
<HelixWorkItem Include="Crossgen2 Composite Framework R2R">
|
||||
<PayloadDirectory>$(WorkItemDirectory)\ScenarioCorrelation</PayloadDirectory>
|
||||
<Command>$(Python) %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\test.py crossgen2 --composite %HELIX_CORRELATION_PAYLOAD%\performance\src\scenarios\crossgen2\framework-r2r.dll.rsp --core-root %HELIX_CORRELATION_PAYLOAD%\Core_Root</Command>
|
||||
<HelixWorkItem Include="Crossgen2 Composite Framework R2R" Condition="'$(Architecture)' == 'x64'">
|
||||
<PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
|
||||
<Command>$(Python) $(Crossgen2Directory)test.py crossgen2 --core-root $(CoreRoot) --composite $(Crossgen2Directory)framework-r2r.dll.rsp</Command>
|
||||
<Timeout>1:00</Timeout>
|
||||
</HelixWorkItem>
|
||||
</ItemGroup>
|
||||
|
|
|
|||
|
|
@ -46,10 +46,10 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(MonoDotnet)' == 'true' and '$(AGENT_OS)' == 'Windows_NT'">
|
||||
<CoreRunArgument>--corerun %HELIX_CORRELATION_PAYLOAD%\dotnet-mono\shared\Microsoft.NETCore.App\5.0.0\corerun.exe</CoreRunArgument>
|
||||
<CoreRunArgument>--corerun %HELIX_CORRELATION_PAYLOAD%\dotnet-mono\shared\Microsoft.NETCore.App\6.0.0\corerun.exe</CoreRunArgument>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(MonoDotnet)' == 'true' and '$(AGENT_OS)' != 'Windows_NT'">
|
||||
<CoreRunArgument>--corerun $(BaseDirectory)/dotnet-mono/shared/Microsoft.NETCore.App/5.0.0/corerun</CoreRunArgument>
|
||||
<CoreRunArgument>--corerun $(BaseDirectory)/dotnet-mono/shared/Microsoft.NETCore.App/6.0.0/corerun</CoreRunArgument>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(UseCoreRun)' == 'true'">
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ use_baseline_core_run=true
|
|||
using_mono=false
|
||||
wasm_runtime_loc=
|
||||
using_wasm=false
|
||||
use_latest_dotnet=false
|
||||
|
||||
while (($# > 0)); do
|
||||
lowerI="$(echo $1 | awk '{print tolower($0)}')"
|
||||
|
|
@ -115,7 +116,11 @@ while (($# > 0)); do
|
|||
configurations=$2
|
||||
shift 2
|
||||
;;
|
||||
--help)
|
||||
--latestdotnet)
|
||||
use_latest_dotnet=true
|
||||
shift 1
|
||||
;;
|
||||
*)
|
||||
echo "Common settings:"
|
||||
echo " --corerootdirectory <value> Directory where Core_Root exists, if running perf testing with --corerun"
|
||||
echo " --architecture <value> Architecture of the testing being run"
|
||||
|
|
@ -137,6 +142,7 @@ while (($# > 0)); do
|
|||
echo " --internal If the benchmarks are running as an official job."
|
||||
echo " --monodotnet Pass the path to the mono dotnet for mono performance testing."
|
||||
echo " --wasm Path to the unpacked wasm runtime pack."
|
||||
echo " --latestdotnet --dotnet-versions will not be specified. --dotnet-versions defaults to LKG version in global.json "
|
||||
echo ""
|
||||
exit 0
|
||||
;;
|
||||
|
|
@ -194,28 +200,30 @@ if [[ "$internal" == true ]]; then
|
|||
fi
|
||||
fi
|
||||
|
||||
if [[ "$mono_dotnet" != "" ]]; then
|
||||
if [[ "$mono_dotnet" != "" ]] && [[ "$monointerpreter" == "false" ]]; then
|
||||
configurations="$configurations LLVM=$llvm MonoInterpreter=$monointerpreter MonoAOT=$monoaot"
|
||||
extra_benchmark_dotnet_arguments="$extra_benchmark_dotnet_arguments --category-exclusion-filter NoMono"
|
||||
fi
|
||||
|
||||
if [[ "$wasm_runtime_loc" != "" ]]; then
|
||||
configurations="CompilationMode=wasm RunKind=micro"
|
||||
extra_benchmark_dotnet_arguments="$extra_benchmark_dotnet_arguments --category-exclusion-filter NoInterpreter NoWASM"
|
||||
configurations="CompilationMode=wasm RunKind=$kind"
|
||||
extra_benchmark_dotnet_arguments="$extra_benchmark_dotnet_arguments --category-exclusion-filter NoInterpreter NoWASM NoMono"
|
||||
fi
|
||||
|
||||
if [[ "$monointerpreter" == "true" ]]; then
|
||||
extra_benchmark_dotnet_arguments="$extra_benchmark_dotnet_arguments --category-exclusion-filter NoInterpreter"
|
||||
if [[ "$mono_dotnet" != "" ]] && [[ "$monointerpreter" == "true" ]]; then
|
||||
extra_benchmark_dotnet_arguments="$extra_benchmark_dotnet_arguments --category-exclusion-filter NoInterpreter NoMono"
|
||||
fi
|
||||
|
||||
common_setup_arguments="--channel master --queue $queue --build-number $build_number --build-configs $configurations --architecture $architecture"
|
||||
setup_arguments="--repository https://github.com/$repository --branch $branch --get-perf-hash --commit-sha $commit_sha $common_setup_arguments"
|
||||
|
||||
|
||||
# Get the tools section from the global.json.
|
||||
# This grabs the LKG version number of dotnet and passes it to our scripts
|
||||
dotnet_version=`cat global.json | python3 -c 'import json,sys;obj=json.load(sys.stdin);print(obj["tools"]["dotnet"])'`
|
||||
setup_arguments="--dotnet-versions $dotnet_version $setup_arguments"
|
||||
|
||||
if [[ "$use_latest_dotnet" = false ]]; then
|
||||
# Get the tools section from the global.json.
|
||||
# This grabs the LKG version number of dotnet and passes it to our scripts
|
||||
dotnet_version=`cat global.json | python3 -c 'import json,sys;obj=json.load(sys.stdin);print(obj["tools"]["dotnet"])'`
|
||||
setup_arguments="--dotnet-versions $dotnet_version $setup_arguments"
|
||||
fi
|
||||
|
||||
if [[ "$run_from_perf_repo" = true ]]; then
|
||||
payload_directory=
|
||||
|
|
@ -266,7 +274,7 @@ Write-PipelineSetVariable -name "PerformanceDirectory" -value "$performance_dire
|
|||
Write-PipelineSetVariable -name "WorkItemDirectory" -value "$workitem_directory" -is_multi_job_variable false
|
||||
Write-PipelineSetVariable -name "Queue" -value "$queue" -is_multi_job_variable false
|
||||
Write-PipelineSetVariable -name "SetupArguments" -value "$setup_arguments" -is_multi_job_variable false
|
||||
Write-PipelineSetVariable -name "Python" -value "$python3" -is_multi_job_variable false
|
||||
Write-PipelineSetVariable -name "Python" -value "python3" -is_multi_job_variable false
|
||||
Write-PipelineSetVariable -name "PerfLabArguments" -value "$perflab_arguments" -is_multi_job_variable false
|
||||
Write-PipelineSetVariable -name "ExtraBenchmarkDotNetArguments" -value "$extra_benchmark_dotnet_arguments" -is_multi_job_variable false
|
||||
Write-PipelineSetVariable -name "BDNCategories" -value "$run_categories" -is_multi_job_variable false
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@ jobs:
|
|||
/p:MaestroApiEndpoint=https://maestro-prod.westus2.cloudapp.azure.com
|
||||
/p:PublishUsingPipelines=${{ parameters.publishUsingPipelines }}
|
||||
/p:Configuration=$(_BuildConfig)
|
||||
/p:OfficialBuildId=$(Build.BuildNumber)
|
||||
condition: ${{ parameters.condition }}
|
||||
continueOnError: ${{ parameters.continueOnError }}
|
||||
|
||||
|
|
@ -87,11 +88,6 @@ jobs:
|
|||
ArtifactName: ReleaseConfigs
|
||||
|
||||
- ${{ if eq(parameters.enablePublishBuildArtifacts, 'true') }}:
|
||||
- task: PublishBuildArtifacts@1
|
||||
displayName: Publish Logs to VSTS
|
||||
inputs:
|
||||
PathtoPublish: '$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)'
|
||||
PublishLocation: Container
|
||||
ArtifactName: $(Agent.Os)_PublishBuildAssets
|
||||
continueOnError: true
|
||||
condition: always()
|
||||
- template: /eng/common/templates/steps/publish-logs.yml
|
||||
parameters:
|
||||
JobLabel: 'Publish_Artifacts_Logs'
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ parameters:
|
|||
NetEngServicesProdChannelId: 679
|
||||
Net5Preview8ChannelId: 1155
|
||||
Net5RC1ChannelId: 1157
|
||||
Net5RC2ChannelId: 1329
|
||||
NetCoreSDK313xxChannelId: 759
|
||||
NetCoreSDK313xxInternalChannelId: 760
|
||||
NetCoreSDK314xxChannelId: 921
|
||||
|
|
@ -91,7 +92,7 @@ stages:
|
|||
inputs:
|
||||
filePath: $(Build.SourcesDirectory)/eng/common/post-build/check-channel-consistency.ps1
|
||||
arguments: -PromoteToChannels "$(TargetChannels)"
|
||||
-AvailableChannelIds ${{parameters.NetEngLatestChannelId}},${{parameters.NetEngValidationChannelId}},${{parameters.NetDev5ChannelId}},${{parameters.NetDev6ChannelId}},${{parameters.GeneralTestingChannelId}},${{parameters.NETCoreToolingDevChannelId}},${{parameters.NETCoreToolingReleaseChannelId}},${{parameters.NETInternalToolingChannelId}},${{parameters.NETCoreExperimentalChannelId}},${{parameters.NetEngServicesIntChannelId}},${{parameters.NetEngServicesProdChannelId}},${{parameters.Net5Preview8ChannelId}},${{parameters.Net5RC1ChannelId}},${{parameters.NetCoreSDK313xxChannelId}},${{parameters.NetCoreSDK313xxInternalChannelId}},${{parameters.NetCoreSDK314xxChannelId}},${{parameters.NetCoreSDK314xxInternalChannelId}},${{parameters.VS166ChannelId}},${{parameters.VS167ChannelId}},${{parameters.VS168ChannelId}},${{parameters.VSMasterChannelId}}
|
||||
-AvailableChannelIds ${{parameters.NetEngLatestChannelId}},${{parameters.NetEngValidationChannelId}},${{parameters.NetDev5ChannelId}},${{parameters.NetDev6ChannelId}},${{parameters.GeneralTestingChannelId}},${{parameters.NETCoreToolingDevChannelId}},${{parameters.NETCoreToolingReleaseChannelId}},${{parameters.NETInternalToolingChannelId}},${{parameters.NETCoreExperimentalChannelId}},${{parameters.NetEngServicesIntChannelId}},${{parameters.NetEngServicesProdChannelId}},${{parameters.Net5Preview8ChannelId}},${{parameters.Net5RC1ChannelId}},${{parameters.Net5RC2ChannelId}},${{parameters.NetCoreSDK313xxChannelId}},${{parameters.NetCoreSDK313xxInternalChannelId}},${{parameters.NetCoreSDK314xxChannelId}},${{parameters.NetCoreSDK314xxInternalChannelId}},${{parameters.VS166ChannelId}},${{parameters.VS167ChannelId}},${{parameters.VS168ChannelId}},${{parameters.VSMasterChannelId}}
|
||||
|
||||
- job:
|
||||
displayName: NuGet Validation
|
||||
|
|
@ -329,6 +330,22 @@ stages:
|
|||
shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json'
|
||||
symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-symbols/nuget/v3/index.json'
|
||||
|
||||
- template: \eng\common\templates\post-build\channels\generic-public-channel.yml
|
||||
parameters:
|
||||
BARBuildId: ${{ parameters.BARBuildId }}
|
||||
PromoteToChannelIds: ${{ parameters.PromoteToChannelIds }}
|
||||
artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }}
|
||||
dependsOn: ${{ parameters.publishDependsOn }}
|
||||
publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }}
|
||||
symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }}
|
||||
stageName: 'Net5_RC2_Publish'
|
||||
channelName: '.NET 5 RC 2'
|
||||
akaMSChannelName: 'net5/rc2'
|
||||
channelId: ${{ parameters.Net5RC2ChannelId }}
|
||||
transportFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-transport/nuget/v3/index.json'
|
||||
shippingFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json'
|
||||
symbolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-symbols/nuget/v3/index.json'
|
||||
|
||||
- template: \eng\common\templates\post-build\channels\generic-public-channel.yml
|
||||
parameters:
|
||||
BARBuildId: ${{ parameters.BARBuildId }}
|
||||
|
|
|
|||
|
|
@ -3,21 +3,20 @@ parameters:
|
|||
JobLabel: ''
|
||||
|
||||
steps:
|
||||
- task: Powershell@2
|
||||
displayName: Prepare Binlogs to Upload
|
||||
- task: CopyFiles@2
|
||||
displayName: Copy Logs to $(Build.StagingDirectory)\BuildLogs
|
||||
inputs:
|
||||
targetType: inline
|
||||
script: |
|
||||
New-Item -ItemType Directory $(Build.SourcesDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/
|
||||
Move-Item -Path $(Build.SourcesDirectory)/artifacts/log/Debug/* $(Build.SourcesDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/
|
||||
SourceFolder: $(Build.SourcesDirectory)\artifacts
|
||||
Contents: |
|
||||
**/*.log
|
||||
**/*.binlog
|
||||
TargetFolder: '$(Build.StagingDirectory)\BuildLogs'
|
||||
continueOnError: true
|
||||
condition: always()
|
||||
|
||||
- task: PublishBuildArtifacts@1
|
||||
displayName: Publish Logs
|
||||
condition: succeededOrFailed()
|
||||
|
||||
- task: PublishPipelineArtifact@1
|
||||
displayName: Publish BuildLogs
|
||||
inputs:
|
||||
PathtoPublish: '$(Build.SourcesDirectory)/PostBuildLogs'
|
||||
PublishLocation: Container
|
||||
ArtifactName: PostBuildLogs
|
||||
continueOnError: true
|
||||
condition: always()
|
||||
targetPath: '$(Build.StagingDirectory)\BuildLogs'
|
||||
artifactName: ${{ parameters.JobLabel }}
|
||||
condition: succeededOrFailed()
|
||||
|
|
|
|||
|
|
@ -57,6 +57,15 @@ set-strictmode -version 2.0
|
|||
$ErrorActionPreference = 'Stop'
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||
|
||||
# If specified, provides an alternate path for getting .NET Core SDKs and Runtimes. This script will still try public sources first.
|
||||
[string]$runtimeSourceFeed = if (Test-Path variable:runtimeSourceFeed) { $runtimeSourceFeed } else { $null }
|
||||
# Base-64 encoded SAS token that has permission to storage container described by $runtimeSourceFeed
|
||||
[string]$runtimeSourceFeedKey = if (Test-Path variable:runtimeSourceFeedKey) { $runtimeSourceFeedKey } else { $null }
|
||||
|
||||
# If false, use copy of dotnet-install from /eng/common/dotnet-install-scripts (for custom behaviors).
|
||||
# otherwise will fetch from public location.
|
||||
[bool]$useDefaultDotnetInstall = if (Test-Path variable:useDefaultDotnetInstall) { $useDefaultDotnetInstall } else { $false }
|
||||
|
||||
function Create-Directory ([string[]] $path) {
|
||||
New-Item -Path $path -Force -ItemType 'Directory' | Out-Null
|
||||
}
|
||||
|
|
@ -188,37 +197,46 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) {
|
|||
function GetDotNetInstallScript([string] $dotnetRoot) {
|
||||
$installScript = Join-Path $dotnetRoot 'dotnet-install.ps1'
|
||||
if (!(Test-Path $installScript)) {
|
||||
Create-Directory $dotnetRoot
|
||||
$ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit
|
||||
create-directory $dotnetroot
|
||||
|
||||
$maxRetries = 5
|
||||
$retries = 1
|
||||
if ($useDefaultDotnetInstall)
|
||||
{
|
||||
$progresspreference = 'silentlycontinue' # don't display the console progress ui - it's a huge perf hit
|
||||
|
||||
$uri = "https://dot.net/$dotnetInstallScriptVersion/dotnet-install.ps1"
|
||||
$maxretries = 5
|
||||
$retries = 1
|
||||
|
||||
while($true) {
|
||||
try {
|
||||
Write-Host "GET $uri"
|
||||
Invoke-WebRequest $uri -OutFile $installScript
|
||||
break
|
||||
$uri = "https://dot.net/$dotnetinstallscriptversion/dotnet-install.ps1"
|
||||
|
||||
while($true) {
|
||||
try {
|
||||
write-host "get $uri"
|
||||
invoke-webrequest $uri -outfile $installscript
|
||||
break
|
||||
}
|
||||
catch {
|
||||
write-host "failed to download '$uri'"
|
||||
write-error $_.exception.message -erroraction continue
|
||||
}
|
||||
|
||||
if (++$retries -le $maxretries) {
|
||||
$delayinseconds = [math]::pow(2, $retries) - 1 # exponential backoff
|
||||
write-host "retrying. waiting for $delayinseconds seconds before next attempt ($retries of $maxretries)."
|
||||
start-sleep -seconds $delayinseconds
|
||||
}
|
||||
else {
|
||||
throw "unable to download file in $maxretries attempts."
|
||||
}
|
||||
}
|
||||
catch {
|
||||
Write-Host "Failed to download '$uri'"
|
||||
Write-Error $_.Exception.Message -ErrorAction Continue
|
||||
}
|
||||
|
||||
if (++$retries -le $maxRetries) {
|
||||
$delayInSeconds = [math]::Pow(2, $retries) - 1 # Exponential backoff
|
||||
Write-Host "Retrying. Waiting for $delayInSeconds seconds before next attempt ($retries of $maxRetries)."
|
||||
Start-Sleep -Seconds $delayInSeconds
|
||||
}
|
||||
else {
|
||||
throw "Unable to download file in $maxRetries attempts."
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
# Use a special version of the script from eng/common that understands the existence of a "productVersion.txt" in a dotnet path.
|
||||
# See https://github.com/dotnet/arcade/issues/6047 for details
|
||||
$engCommonCopy = Resolve-Path (Join-Path $PSScriptRoot 'dotnet-install-scripts\dotnet-install.ps1')
|
||||
Copy-Item $engCommonCopy -Destination $installScript -Force
|
||||
}
|
||||
}
|
||||
|
||||
return $installScript
|
||||
}
|
||||
|
||||
|
|
@ -250,10 +268,8 @@ function InstallDotNet([string] $dotnetRoot,
|
|||
& $installScript @installParameters
|
||||
}
|
||||
catch {
|
||||
Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Failed to install dotnet runtime '$runtime' from public location."
|
||||
|
||||
# Only the runtime can be installed from a custom [private] location.
|
||||
if ($runtime -and ($runtimeSourceFeed -or $runtimeSourceFeedKey)) {
|
||||
if ($runtimeSourceFeed -or $runtimeSourceFeedKey) {
|
||||
Write-Host "Failed to install dotnet from public location. Trying from '$runtimeSourceFeed'"
|
||||
if ($runtimeSourceFeed) { $installParameters.AzureFeed = $runtimeSourceFeed }
|
||||
|
||||
if ($runtimeSourceFeedKey) {
|
||||
|
|
@ -266,10 +282,11 @@ function InstallDotNet([string] $dotnetRoot,
|
|||
& $installScript @installParameters
|
||||
}
|
||||
catch {
|
||||
Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Failed to install dotnet runtime '$runtime' from custom location '$runtimeSourceFeed'."
|
||||
Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Failed to install dotnet from custom location '$runtimeSourceFeed'."
|
||||
ExitWithExitCode 1
|
||||
}
|
||||
} else {
|
||||
Write-PipelineTelemetryError -Category 'InitializeToolset' -Message "Failed to install dotnet from public location."
|
||||
ExitWithExitCode 1
|
||||
}
|
||||
}
|
||||
|
|
@ -604,11 +621,7 @@ function MSBuild() {
|
|||
if ($pipelinesLog) {
|
||||
$buildTool = InitializeBuildTool
|
||||
|
||||
# Work around issues with Azure Artifacts credential provider
|
||||
# https://github.com/dotnet/arcade/issues/3932
|
||||
if ($ci -and $buildTool.Tool -eq 'dotnet') {
|
||||
dotnet nuget locals http-cache -c
|
||||
|
||||
$env:NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS = 20
|
||||
$env:NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS = 20
|
||||
Write-PipelineSetVariable -Name 'NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS' -Value '20'
|
||||
|
|
|
|||
|
|
@ -64,6 +64,14 @@ else
|
|||
use_global_nuget_cache=${use_global_nuget_cache:-true}
|
||||
fi
|
||||
|
||||
# Used when restoring .NET SDK from alternative feeds
|
||||
runtime_source_feed=${runtime_source_feed:-''}
|
||||
runtime_source_feed_key=${runtime_source_feed_key:-''}
|
||||
|
||||
# Determines if dotnet-install.sh comes from the eng/common folder or the internet
|
||||
# (default = public version)
|
||||
use_default_dotnet_install=${use_default_dotnet_install:-false}
|
||||
|
||||
# Resolve any symlinks in the given path.
|
||||
function ResolvePath {
|
||||
local path=$1
|
||||
|
|
@ -170,11 +178,11 @@ function InitializeDotNetCli {
|
|||
function InstallDotNetSdk {
|
||||
local root=$1
|
||||
local version=$2
|
||||
local architecture=""
|
||||
if [[ $# == 3 ]]; then
|
||||
local architecture="unset"
|
||||
if [[ $# -ge 3 ]]; then
|
||||
architecture=$3
|
||||
fi
|
||||
InstallDotNet "$root" "$version" $architecture
|
||||
InstallDotNet "$root" "$version" $architecture 'sdk' 'false' $runtime_source_feed $runtime_source_feed_key
|
||||
}
|
||||
|
||||
function InstallDotNet {
|
||||
|
|
@ -185,50 +193,50 @@ function InstallDotNet {
|
|||
local install_script=$_GetDotNetInstallScript
|
||||
|
||||
local archArg=''
|
||||
if [[ -n "${3:-}" ]]; then
|
||||
if [[ -n "${3:-}" ]] && [ "$3" != 'unset' ]; then
|
||||
archArg="--architecture $3"
|
||||
fi
|
||||
local runtimeArg=''
|
||||
if [[ -n "${4:-}" ]]; then
|
||||
if [[ -n "${4:-}" ]] && [ "$4" != 'sdk' ]; then
|
||||
runtimeArg="--runtime $4"
|
||||
fi
|
||||
|
||||
local skipNonVersionedFilesArg=""
|
||||
if [[ "$#" -ge "5" ]]; then
|
||||
if [[ "$#" -ge "5" ]] && [[ "$5" != 'false' ]]; then
|
||||
skipNonVersionedFilesArg="--skip-non-versioned-files"
|
||||
fi
|
||||
bash "$install_script" --version $version --install-dir "$root" $archArg $runtimeArg $skipNonVersionedFilesArg || {
|
||||
local exit_code=$?
|
||||
Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to install dotnet SDK from public location (exit code '$exit_code')."
|
||||
echo "Failed to install dotnet SDK from public location (exit code '$exit_code')."
|
||||
|
||||
if [[ -n "$runtimeArg" ]]; then
|
||||
local runtimeSourceFeed=''
|
||||
if [[ -n "${6:-}" ]]; then
|
||||
runtimeSourceFeed="--azure-feed $6"
|
||||
local runtimeSourceFeed=''
|
||||
if [[ -n "${6:-}" ]]; then
|
||||
runtimeSourceFeed="--azure-feed $6"
|
||||
fi
|
||||
|
||||
local runtimeSourceFeedKey=''
|
||||
if [[ -n "${7:-}" ]]; then
|
||||
# The 'base64' binary on alpine uses '-d' and doesn't support '--decode'
|
||||
# '-d'. To work around this, do a simple detection and switch the parameter
|
||||
# accordingly.
|
||||
decodeArg="--decode"
|
||||
if base64 --help 2>&1 | grep -q "BusyBox"; then
|
||||
decodeArg="-d"
|
||||
fi
|
||||
decodedFeedKey=`echo $7 | base64 $decodeArg`
|
||||
runtimeSourceFeedKey="--feed-credential $decodedFeedKey"
|
||||
fi
|
||||
|
||||
local runtimeSourceFeedKey=''
|
||||
if [[ -n "${7:-}" ]]; then
|
||||
# The 'base64' binary on alpine uses '-d' and doesn't support '--decode'
|
||||
# '-d'. To work around this, do a simple detection and switch the parameter
|
||||
# accordingly.
|
||||
decodeArg="--decode"
|
||||
if base64 --help 2>&1 | grep -q "BusyBox"; then
|
||||
decodeArg="-d"
|
||||
fi
|
||||
decodedFeedKey=`echo $7 | base64 $decodeArg`
|
||||
runtimeSourceFeedKey="--feed-credential $decodedFeedKey"
|
||||
fi
|
||||
|
||||
if [[ -n "$runtimeSourceFeed" || -n "$runtimeSourceFeedKey" ]]; then
|
||||
bash "$install_script" --version $version --install-dir "$root" $archArg $runtimeArg $skipNonVersionedFilesArg $runtimeSourceFeed $runtimeSourceFeedKey || {
|
||||
local exit_code=$?
|
||||
Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to install dotnet SDK from custom location '$runtimeSourceFeed' (exit code '$exit_code')."
|
||||
ExitWithExitCode $exit_code
|
||||
}
|
||||
else
|
||||
if [[ -n "$runtimeSourceFeed" || -n "$runtimeSourceFeedKey" ]]; then
|
||||
bash "$install_script" --version $version --install-dir "$root" $archArg $runtimeArg $skipNonVersionedFilesArg $runtimeSourceFeed $runtimeSourceFeedKey || {
|
||||
local exit_code=$?
|
||||
Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to install dotnet SDK from custom location '$runtimeSourceFeed' (exit code '$exit_code')."
|
||||
ExitWithExitCode $exit_code
|
||||
}
|
||||
else
|
||||
if [[ $exit_code != 0 ]]; then
|
||||
Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to install dotnet SDK from public location (exit code '$exit_code')."
|
||||
fi
|
||||
ExitWithExitCode $exit_code
|
||||
fi
|
||||
}
|
||||
}
|
||||
|
|
@ -263,23 +271,30 @@ function GetDotNetInstallScript {
|
|||
if [[ ! -a "$install_script" ]]; then
|
||||
mkdir -p "$root"
|
||||
|
||||
echo "Downloading '$install_script_url'"
|
||||
if [[ "$use_default_dotnet_install" == true ]]; then
|
||||
echo "Downloading '$install_script_url'"
|
||||
|
||||
# Use curl if available, otherwise use wget
|
||||
if command -v curl > /dev/null; then
|
||||
with_retries curl "$install_script_url" -sSL --retry 10 --create-dirs -o "$install_script" || {
|
||||
local exit_code=$?
|
||||
Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')."
|
||||
ExitWithExitCode $exit_code
|
||||
}
|
||||
# Use curl if available, otherwise use wget
|
||||
if command -v curl > /dev/null; then
|
||||
with_retries curl "$install_script_url" -sSL --retry 10 --create-dirs -o "$install_script" || {
|
||||
local exit_code=$?
|
||||
Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')."
|
||||
ExitWithExitCode $exit_code
|
||||
}
|
||||
else
|
||||
with_retries wget -v -O "$install_script" "$install_script_url" || {
|
||||
local exit_code=$?
|
||||
Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')."
|
||||
ExitWithExitCode $exit_code
|
||||
}
|
||||
fi
|
||||
else
|
||||
with_retries wget -v -O "$install_script" "$install_script_url" || {
|
||||
local exit_code=$?
|
||||
Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')."
|
||||
ExitWithExitCode $exit_code
|
||||
}
|
||||
# Use a special version of the script from eng/common that understands the existence of a "productVersion.txt" in a dotnet path.
|
||||
# See https://github.com/dotnet/arcade/issues/6047 for details
|
||||
cp $repo_root/eng/common/dotnet-install-scripts/dotnet-install.sh $install_script
|
||||
fi
|
||||
fi
|
||||
|
||||
# return value
|
||||
_GetDotNetInstallScript="$install_script"
|
||||
}
|
||||
|
|
@ -391,11 +406,7 @@ function MSBuild {
|
|||
InitializeBuildTool
|
||||
InitializeToolset
|
||||
|
||||
# Work around issues with Azure Artifacts credential provider
|
||||
# https://github.com/dotnet/arcade/issues/3932
|
||||
if [[ "$ci" == true ]]; then
|
||||
"$_InitializeBuildTool" nuget locals http-cache -c
|
||||
|
||||
export NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS=20
|
||||
export NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS=20
|
||||
Write-PipelineSetVariable -name "NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS" -value "20"
|
||||
|
|
|
|||
|
|
@ -21,14 +21,9 @@ namespace RunTests
|
|||
description: "The test dll to run")
|
||||
{ Argument = new Argument<string>(), Required = true },
|
||||
|
||||
new Option(
|
||||
aliases: new string[] { "--sdk" },
|
||||
description: "The version of the sdk being used")
|
||||
{ Argument = new Argument<string>(), Required = true },
|
||||
|
||||
new Option(
|
||||
aliases: new string[] { "--runtime" },
|
||||
description: "The version of the runtime being used")
|
||||
description: "The version of the ASP.NET runtime being installed and used")
|
||||
{ Argument = new Argument<string>(), Required = true },
|
||||
|
||||
new Option(
|
||||
|
|
@ -70,7 +65,6 @@ namespace RunTests
|
|||
var parseResult = command.Parse(args);
|
||||
var options = new RunTestsOptions();
|
||||
options.Target = parseResult.ValueForOption<string>("--target");
|
||||
options.SdkVersion = parseResult.ValueForOption<string>("--sdk");
|
||||
options.RuntimeVersion = parseResult.ValueForOption<string>("--runtime");
|
||||
options.HelixQueue = parseResult.ValueForOption<string>("--queue");
|
||||
options.Architecture = parseResult.ValueForOption<string>("--arch");
|
||||
|
|
|
|||
|
|
@ -6,14 +6,16 @@ REM Use '$' as a variable name prefix to avoid MSBuild variable collisions with
|
|||
set $target=%1
|
||||
set $sdkVersion=%2
|
||||
set $runtimeVersion=%3
|
||||
set $queue=%4
|
||||
set $arch=%5
|
||||
set $quarantined=%6
|
||||
set $ef=%7
|
||||
set $aspnetruntime=%8
|
||||
set $aspnetref=%9
|
||||
set $aspRuntimeVersion=%4
|
||||
set $queue=%5
|
||||
set $arch=%6
|
||||
set $quarantined=%7
|
||||
set $ef=%8
|
||||
set $aspnetruntime=%9
|
||||
REM Batch only supports up to 9 arguments using the %# syntax, need to shift to get more
|
||||
shift
|
||||
set $aspnetref=%9
|
||||
shift
|
||||
set $helixTimeout=%9
|
||||
shift
|
||||
set $feedCred=%9
|
||||
|
|
@ -39,8 +41,8 @@ set exit_code=0
|
|||
echo "Restore: dotnet restore RunTests\RunTests.csproj --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json --source https://api.nuget.org/v3/index.json --ignore-failed-sources..."
|
||||
dotnet restore RunTests\RunTests.csproj --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json --source https://api.nuget.org/v3/index.json --ignore-failed-sources
|
||||
|
||||
echo "Running tests: dotnet run --project RunTests\RunTests.csproj -- --target %$target% --sdk %$sdkVersion% --runtime %$runtimeVersion% --queue %$queue% --arch %$arch% --quarantined %$quarantined% --ef %$ef% --aspnetruntime %$aspnetruntime% --aspnetref %$aspnetref% --helixTimeout %$helixTimeout%..."
|
||||
dotnet run --project RunTests\RunTests.csproj -- --target %$target% --sdk %$sdkVersion% --runtime %$runtimeVersion% --queue %$queue% --arch %$arch% --quarantined %$quarantined% --ef %$ef% --aspnetruntime %$aspnetruntime% --aspnetref %$aspnetref% --helixTimeout %$helixTimeout%
|
||||
echo "Running tests: dotnet run --project RunTests\RunTests.csproj -- --target %$target% --runtime %$aspRuntimeVersion% --queue %$queue% --arch %$arch% --quarantined %$quarantined% --ef %$ef% --aspnetruntime %$aspnetruntime% --aspnetref %$aspnetref% --helixTimeout %$helixTimeout%..."
|
||||
dotnet run --project RunTests\RunTests.csproj -- --target %$target% --runtime %$aspRuntimeVersion% --queue %$queue% --arch %$arch% --quarantined %$quarantined% --ef %$ef% --aspnetruntime %$aspnetruntime% --aspnetref %$aspnetref% --helixTimeout %$helixTimeout%
|
||||
if errorlevel neq 0 (
|
||||
set exit_code=%errorlevel%
|
||||
)
|
||||
|
|
|
|||
|
|
@ -63,8 +63,8 @@ sync
|
|||
exit_code=0
|
||||
echo "Restore: $DOTNET_ROOT/dotnet restore RunTests/RunTests.csproj --source https://api.nuget.org/v3/index.json --ignore-failed-sources..."
|
||||
$DOTNET_ROOT/dotnet restore RunTests/RunTests.csproj --source https://api.nuget.org/v3/index.json --ignore-failed-sources
|
||||
echo "Running tests: $DOTNET_ROOT/dotnet run --project RunTests/RunTests.csproj -- --target $1 --sdk $2 --runtime $3 --queue $4 --arch $5 --quarantined $6 --ef $7 --aspnetruntime $8 --aspnetref $9 --helixTimeout ${10}..."
|
||||
$DOTNET_ROOT/dotnet run --project RunTests/RunTests.csproj -- --target $1 --sdk $2 --runtime $3 --queue $4 --arch $5 --quarantined $6 --ef $7 --aspnetruntime $8 --aspnetref $9 --helixTimeout ${10}
|
||||
echo "Running tests: $DOTNET_ROOT/dotnet run --project RunTests/RunTests.csproj -- --target $1 --runtime $4 --queue $5 --arch $6 --quarantined $7 --ef $8 --aspnetruntime $9 --aspnetref ${10} --helixTimeout ${11}"
|
||||
$DOTNET_ROOT/dotnet run --project RunTests/RunTests.csproj -- --target $1 --runtime $4 --queue $5 --arch $6 --quarantined $7 --ef $8 --aspnetruntime $9 --aspnetref ${10} --helixTimeout ${11}
|
||||
exit_code=$?
|
||||
echo "Finished tests...exit_code=$exit_code"
|
||||
|
||||
|
|
|
|||
|
|
@ -111,14 +111,13 @@ if (Test-path $InstallPath) {
|
|||
$arguments += `
|
||||
'--productId', $productId, `
|
||||
'--installPath', "`"$InstallPath`"", `
|
||||
'--in', "`"$responseFile`"", `
|
||||
'--norestart'
|
||||
'--in', "`"$responseFile`""
|
||||
|
||||
if ($Passive) {
|
||||
$arguments += '--passive'
|
||||
$arguments += '--passive', '--norestart'
|
||||
}
|
||||
if ($Quiet) {
|
||||
$arguments += '--quiet', '--wait'
|
||||
$arguments += '--quiet', '--wait', '--norestart'
|
||||
}
|
||||
|
||||
Write-Host
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<!-- For 'legacy' .csproj files, set map TargetFrameworkVersion back to TargetFramework -->
|
||||
<PropertyGroup Condition=" '$(TargetFramework)' == '' AND '$(TargetFrameworks)' == '' ">
|
||||
<TargetFramework>net$(TargetFrameworkVersion.Substring(1).Replace('.',''))</TargetFramework>
|
||||
<TargetFramework>net$(TargetFrameworkVersion.TrimStart('vV').Replace('.',''))</TargetFramework>
|
||||
<TargetFrameworkIdentifier>.NETFramework</TargetFrameworkIdentifier>
|
||||
</PropertyGroup>
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@
|
|||
<HelixUseArchive>false</HelixUseArchive>
|
||||
<LoggingTestingDisableFileLogging Condition="'$(IsHelixJob)' == 'true'">false</LoggingTestingDisableFileLogging>
|
||||
<NodeVersion>10.15.3</NodeVersion>
|
||||
<AppRuntimeVersion>5.0.0-ci</AppRuntimeVersion>
|
||||
<TestDependsOnAspNetRuntime>false</TestDependsOnAspNetRuntime>
|
||||
</PropertyGroup>
|
||||
|
||||
|
|
|
|||
|
|
@ -16,10 +16,6 @@
|
|||
<HelixPreCommand Include="call RunPowershell.cmd InstallNode.ps1 $(NodeVersion) %25HELIX_CORRELATION_PAYLOAD%25\node\bin || exit /b 1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(IsHelixJob)' == 'true' AND '$(TestDependsOnAspNetRef)' == 'true' AND '$(IsTargetingPackBuilding)' == 'true'">
|
||||
<HelixContent Include="$(RepoRoot)artifacts\packages\Release\Shipping\Microsoft.AspNetCore.App.Ref.$(AppRuntimeVersion).nupkg" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(IsHelixJob)' == 'true' AND '$(TestDependsOnAspNetRuntime)' == 'true'">
|
||||
<HelixContent Include="$(RepoRoot)artifacts\packages\Release\Shipping\*-ci.nupkg" />
|
||||
</ItemGroup>
|
||||
|
|
@ -100,11 +96,23 @@ Usage: dotnet msbuild /t:Helix src/MyTestProject.csproj
|
|||
</Target>
|
||||
|
||||
<Target Name="_CreateHelixWorkItem" Condition="$(BuildHelixPayload)">
|
||||
|
||||
<ItemGroup>
|
||||
<HelixContent Include="$(OutputPath)/Microsoft.VisualStudio.TestPlatform.Extension.Xunit.Xml.TestAdapter.dll" />
|
||||
<HelixContent Include="$(OutputPath)/Microsoft.VisualStudio.TestPlatform.Extension.Xunit.Xml.TestLogger.dll" />
|
||||
<HelixContent Condition="'$(TestDependsOnAspNetRuntime)' == 'true'" Include="$(RepoRoot)artifacts\packages\Release\Shipping\Microsoft.AspNetCore.App.Runtime.win-x64.$(AppRuntimeVersion).nupkg" />
|
||||
</ItemGroup>
|
||||
|
||||
<!--
|
||||
Could use _GetPackageVersionInfo target (defined in eng/targets/Packaging.targets and included in every C#
|
||||
and F# project) instead of the $(SharedFxVersion) property but the property works everywhere except in site
|
||||
extensions projects. Could also use $(TargetingPackVersion) but that has slightly more complicated semantics
|
||||
and doesn't keep up when in servicing.
|
||||
-->
|
||||
<ItemGroup Condition=" '$(TestDependsOnAspNetRef)' == 'true' AND '$(IsTargetingPackBuilding)' == 'true' ">
|
||||
<HelixContent Include="$(RepoRoot)artifacts\packages\Release\Shipping\Microsoft.AspNetCore.App.Ref.$(SharedFxVersion).nupkg" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition=" '$(TestDependsOnAspNetRuntime)' == 'true' ">
|
||||
<HelixContent Include="$(RepoRoot)artifacts\packages\Release\Shipping\Microsoft.AspNetCore.App.Runtime.win-x64.$(SharedFxVersion).nupkg" />
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
|
|
@ -126,8 +134,8 @@ Usage: dotnet msbuild /t:Helix src/MyTestProject.csproj
|
|||
<TestAssembly>$(TargetFileName)</TestAssembly>
|
||||
<PreCommands>@(HelixPreCommand)</PreCommands>
|
||||
<PostCommands>@(HelixPostCommand)</PostCommands>
|
||||
<Command Condition="$(IsWindowsHelixQueue)">call runtests.cmd $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests) $(DotnetEfPackageVersion) Microsoft.AspNetCore.App.Runtime.win-x64.$(AppRuntimeVersion).nupkg Microsoft.AspNetCore.App.Ref.$(AppRuntimeVersion).nupkg $(HelixTimeout) $(DotNetRuntimeSourceFeedKey)</Command>
|
||||
<Command Condition="!$(IsWindowsHelixQueue)">./runtests.sh $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests) $(DotnetEfPackageVersion) Microsoft.AspNetCore.App.Runtime.win-x64.$(AppRuntimeVersion).nupkg Microsoft.AspNetCore.App.Ref.$(AppRuntimeVersion).nupkg $(HelixTimeout) $(DotNetRuntimeSourceFeedKey)</Command>
|
||||
<Command Condition="$(IsWindowsHelixQueue)">call runtests.cmd $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(SharedFxVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests) $(DotnetEfPackageVersion) Microsoft.AspNetCore.App.Runtime.win-x64.$(SharedFxVersion).nupkg Microsoft.AspNetCore.App.Ref.$(SharedFxVersion).nupkg $(HelixTimeout)</Command>
|
||||
<Command Condition="!$(IsWindowsHelixQueue)">./runtests.sh $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(SharedFxVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests) $(DotnetEfPackageVersion) Microsoft.AspNetCore.App.Runtime.win-x64.$(SharedFxVersion).nupkg Microsoft.AspNetCore.App.Ref.$(SharedFxVersion).nupkg $(HelixTimeout)</Command>
|
||||
<Command Condition="$(HelixCommand) != ''">$(HelixCommand)</Command>
|
||||
<Timeout>$(HelixTimeout)</Timeout>
|
||||
</HelixWorkItem>
|
||||
|
|
|
|||
|
|
@ -175,9 +175,15 @@
|
|||
|
||||
<!-- Identify if any references were present in the last release of this package, but have been removed. -->
|
||||
<UnusedBaselinePackageReference Include="@(BaselinePackageReference)"
|
||||
Exclude="@(Reference);@(_ProjectReferenceByAssemblyName);@(PackageReference)" />
|
||||
<!-- Only allow suppressing baseline changes in non-servicing builds. -->
|
||||
<UnusedBaselinePackageReference Remove="@(SuppressBaselineReference)" Condition="'$(IsServicingBuild)' != 'true'"/>
|
||||
Exclude="@(Reference);@(PackageReference);@(ProjectReference->'%(Filename)')" />
|
||||
|
||||
<!-- Handle suppressions needed because above Exclude is not aware of references added in .nuspec files. -->
|
||||
<UnusedBaselinePackageReference Remove="@(SuppressBaselineReference->WithMetadataValue('InNuspecFile', 'true'))"
|
||||
Condition=" '$(IsServicingBuild)' == 'true' " />
|
||||
|
||||
<!-- Allow suppressions of any baseline changes in non-servicing builds. -->
|
||||
<UnusedBaselinePackageReference Remove="@(SuppressBaselineReference)"
|
||||
Condition=" '$(IsServicingBuild)' != 'true' " />
|
||||
</ItemGroup>
|
||||
|
||||
<JoinItems Left="@(Reference)" Right="@(LatestPackageReference)" LeftMetadata="*" RightMetadata="Version"
|
||||
|
|
@ -231,6 +237,16 @@
|
|||
<_ExplicitPackageReference Remove="@(_ExplicitPackageReference)" />
|
||||
</ItemGroup>
|
||||
|
||||
<Warning
|
||||
Condition=" '$(IsServicingBuild)' != 'true' AND '%(UnusedBaselinePackageReference.Identity)' != '' "
|
||||
Code="BUILD001"
|
||||
Text="Reference to '%(UnusedBaselinePackageReference.Identity)' was removed since the last stable release of this package. This could be a breaking change. See docs/ReferenceResolution.md for instructions on how to update changes to references or suppress this warning if the error was intentional." />
|
||||
|
||||
<Error
|
||||
Condition=" '$(IsServicingBuild)' == 'true' AND @(UnusedBaselinePackageReference->Count()) != 0 "
|
||||
Code="BUILD002"
|
||||
Text="Package references changed since the last release. This could be a breaking change and is not allowed in a servicing update. References removed:%0A - @(UnusedBaselinePackageReference, '%0A - ')" />
|
||||
|
||||
<Error
|
||||
Condition="'$(TargetFrameworkIdentifier)' != '.NETFramework' AND '%(Reference.Identity)' != '' AND ! Exists('%(Reference.Identity)') AND '$(DisablePackageReferenceRestrictions)' != 'true'"
|
||||
Code="MSB3245"
|
||||
|
|
|
|||
|
|
@ -36,7 +36,10 @@ namespace PackageBaselineGenerator
|
|||
|
||||
public Program()
|
||||
{
|
||||
_source = Option("-s|--package-source <SOURCE>", "The NuGet source of packages to fetch", CommandOptionType.SingleValue);
|
||||
_source = Option(
|
||||
"-s|--package-source <SOURCE>",
|
||||
"The NuGet source of packages to fetch",
|
||||
CommandOptionType.SingleValue);
|
||||
_output = Option("-o|--output <OUT>", "The generated file output path", CommandOptionType.SingleValue);
|
||||
_update = Option("-u|--update", "Regenerate the input (Baseline.xml) file.", CommandOptionType.NoValue);
|
||||
|
||||
|
|
@ -45,9 +48,6 @@ namespace PackageBaselineGenerator
|
|||
|
||||
private async Task<int> Run()
|
||||
{
|
||||
var source = _source.HasValue()
|
||||
? _source.Value().TrimEnd('/')
|
||||
: "https://api.nuget.org/v3/index.json";
|
||||
if (_output.HasValue() && _update.HasValue())
|
||||
{
|
||||
await Error.WriteLineAsync("'--output' and '--update' options must not be used together.");
|
||||
|
|
@ -56,6 +56,7 @@ namespace PackageBaselineGenerator
|
|||
|
||||
var inputPath = Path.Combine(Directory.GetCurrentDirectory(), "Baseline.xml");
|
||||
var input = XDocument.Load(inputPath);
|
||||
var source = _source.HasValue() ? _source.Value().TrimEnd('/') : "https://api.nuget.org/v3/index.json";
|
||||
var packageSource = new PackageSource(source);
|
||||
var providers = Repository.Provider.GetCoreV3(); // Get v2 and v3 API support
|
||||
var sourceRepository = new SourceRepository(packageSource, providers);
|
||||
|
|
@ -89,6 +90,11 @@ namespace PackageBaselineGenerator
|
|||
|
||||
var baselineVersion = input.Root.Attribute("Version").Value;
|
||||
|
||||
// Baseline and .NET Core versions always align in non-preview releases.
|
||||
var parsedVersion = Version.Parse(baselineVersion);
|
||||
var defaultTarget = ((parsedVersion.Major < 5) ? "netcoreapp" : "net") +
|
||||
$"{parsedVersion.Major}.{parsedVersion.Minor}";
|
||||
|
||||
var doc = new XDocument(
|
||||
new XComment(" Auto generated. Do not edit manually, use eng/tools/BaselineGenerator/ to recreate. "),
|
||||
new XElement("Project",
|
||||
|
|
@ -136,12 +142,34 @@ namespace PackageBaselineGenerator
|
|||
|
||||
foreach (var group in reader.NuspecReader.GetDependencyGroups())
|
||||
{
|
||||
var itemGroup = new XElement("ItemGroup", new XAttribute("Condition", $" '$(PackageId)' == '{id}' AND '$(TargetFramework)' == '{group.TargetFramework.GetShortFolderName()}' "));
|
||||
// Don't bother generating empty ItemGroup elements.
|
||||
if (group.Packages.Count() == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Handle changes to $(DefaultNetCoreTargetFramework) even if some projects are held back.
|
||||
var targetCondition = $"'$(TargetFramework)' == '{group.TargetFramework.GetShortFolderName()}'";
|
||||
if (string.Equals(
|
||||
group.TargetFramework.GetShortFolderName(),
|
||||
defaultTarget,
|
||||
StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
targetCondition =
|
||||
$"('$(TargetFramework)' == '$(DefaultNetCoreTargetFramework)' OR {targetCondition})";
|
||||
}
|
||||
|
||||
var itemGroup = new XElement(
|
||||
"ItemGroup",
|
||||
new XAttribute("Condition", $" '$(PackageId)' == '{id}' AND {targetCondition} "));
|
||||
doc.Root.Add(itemGroup);
|
||||
|
||||
foreach (var dependency in group.Packages)
|
||||
{
|
||||
itemGroup.Add(new XElement("BaselinePackageReference", new XAttribute("Include", dependency.Id), new XAttribute("Version", dependency.VersionRange.ToString())));
|
||||
itemGroup.Add(
|
||||
new XElement("BaselinePackageReference",
|
||||
new XAttribute("Include", dependency.Id),
|
||||
new XAttribute("Version", dependency.VersionRange.ToString())));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
},
|
||||
"msbuild-sdks": {
|
||||
"Yarn.MSBuild": "1.15.2",
|
||||
"Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20419.21",
|
||||
"Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.20419.21"
|
||||
"Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20431.1",
|
||||
"Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.20431.1"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
#nullable enable
|
||||
|
|
@ -0,0 +1 @@
|
|||
#nullable enable
|
||||
|
|
@ -0,0 +1 @@
|
|||
#nullable enable
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
#nullable enable
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.AntiforgeryOptions() -> void
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.Cookie.get -> Microsoft.AspNetCore.Http.CookieBuilder!
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.Cookie.set -> void
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.FormFieldName.get -> string!
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.FormFieldName.set -> void
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.HeaderName.get -> string?
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.HeaderName.set -> void
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.SuppressXFrameOptionsHeader.get -> bool
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.SuppressXFrameOptionsHeader.set -> void
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet.AntiforgeryTokenSet(string? requestToken, string? cookieToken, string! formFieldName, string? headerName) -> void
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet.CookieToken.get -> string?
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet.FormFieldName.get -> string!
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet.HeaderName.get -> string?
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet.RequestToken.get -> string?
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException.AntiforgeryValidationException(string! message) -> void
|
||||
Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException.AntiforgeryValidationException(string! message, System.Exception? innerException) -> void
|
||||
Microsoft.AspNetCore.Antiforgery.IAntiforgery
|
||||
Microsoft.AspNetCore.Antiforgery.IAntiforgery.GetAndStoreTokens(Microsoft.AspNetCore.Http.HttpContext! httpContext) -> Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet!
|
||||
Microsoft.AspNetCore.Antiforgery.IAntiforgery.GetTokens(Microsoft.AspNetCore.Http.HttpContext! httpContext) -> Microsoft.AspNetCore.Antiforgery.AntiforgeryTokenSet!
|
||||
Microsoft.AspNetCore.Antiforgery.IAntiforgery.IsRequestValidAsync(Microsoft.AspNetCore.Http.HttpContext! httpContext) -> System.Threading.Tasks.Task<bool>!
|
||||
Microsoft.AspNetCore.Antiforgery.IAntiforgery.SetCookieTokenAndHeader(Microsoft.AspNetCore.Http.HttpContext! httpContext) -> void
|
||||
Microsoft.AspNetCore.Antiforgery.IAntiforgery.ValidateRequestAsync(Microsoft.AspNetCore.Http.HttpContext! httpContext) -> System.Threading.Tasks.Task!
|
||||
Microsoft.AspNetCore.Antiforgery.IAntiforgeryAdditionalDataProvider
|
||||
Microsoft.AspNetCore.Antiforgery.IAntiforgeryAdditionalDataProvider.GetAdditionalData(Microsoft.AspNetCore.Http.HttpContext! context) -> string!
|
||||
Microsoft.AspNetCore.Antiforgery.IAntiforgeryAdditionalDataProvider.ValidateAdditionalData(Microsoft.AspNetCore.Http.HttpContext! context, string! additionalData) -> bool
|
||||
Microsoft.Extensions.DependencyInjection.AntiforgeryServiceCollectionExtensions
|
||||
static Microsoft.Extensions.DependencyInjection.AntiforgeryServiceCollectionExtensions.AddAntiforgery(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
|
||||
static Microsoft.Extensions.DependencyInjection.AntiforgeryServiceCollectionExtensions.AddAntiforgery(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action<Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions!>! setupAction) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
|
||||
static readonly Microsoft.AspNetCore.Antiforgery.AntiforgeryOptions.DefaultCookiePrefix -> string!
|
||||
|
|
@ -0,0 +1 @@
|
|||
#nullable enable
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
#nullable enable
|
||||
Microsoft.AspNetCore.AzureAppServices.HostingStartup.AzureAppServicesHostingStartup
|
||||
Microsoft.AspNetCore.AzureAppServices.HostingStartup.AzureAppServicesHostingStartup.AzureAppServicesHostingStartup() -> void
|
||||
~Microsoft.AspNetCore.AzureAppServices.HostingStartup.AzureAppServicesHostingStartup.Configure(Microsoft.AspNetCore.Hosting.IWebHostBuilder builder) -> void
|
||||
|
|
@ -0,0 +1 @@
|
|||
#nullable enable
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
#nullable enable
|
||||
Microsoft.AspNetCore.Hosting.AppServicesWebHostBuilderExtensions
|
||||
~static Microsoft.AspNetCore.Hosting.AppServicesWebHostBuilderExtensions.UseAzureAppServices(this Microsoft.AspNetCore.Hosting.IWebHostBuilder hostBuilder) -> Microsoft.AspNetCore.Hosting.IWebHostBuilder
|
||||
|
|
@ -101,10 +101,8 @@
|
|||
"src\\Components\\benchmarkapps\\Wasm.Performance\\Driver\\Wasm.Performance.Driver.csproj",
|
||||
"src\\Components\\benchmarkapps\\Wasm.Performance\\TestApp\\Wasm.Performance.TestApp.csproj",
|
||||
"src\\Components\\Web.Extensions\\src\\Microsoft.AspNetCore.Components.Web.Extensions.csproj",
|
||||
"src\\Components\\Web.Extensions\\test\\Microsoft.AspNetCore.Components.Web.Extensions.Tests.csproj",
|
||||
"src\\Components\\WebAssembly\\Server\\test\\Microsoft.AspNetCore.Components.WebAssembly.Server.Tests.csproj",
|
||||
"src\\Components\\WebAssembly\\Authentication.Msal\\src\\Microsoft.Authentication.WebAssembly.Msal.csproj",
|
||||
"src\\Components\\WebAssembly\\DebugProxy\\src\\Microsoft.AspNetCore.Components.WebAssembly.DebugProxy.csproj",
|
||||
"src\\Components\\WebAssembly\\JSInterop\\src\\Microsoft.JSInterop.WebAssembly.csproj",
|
||||
"src\\Components\\WebAssembly\\WebAssembly.Authentication\\src\\Microsoft.AspNetCore.Components.WebAssembly.Authentication.csproj",
|
||||
"src\\Components\\WebAssembly\\WebAssembly.Authentication\\test\\Microsoft.AspNetCore.Components.WebAssembly.Authentication.Tests.csproj",
|
||||
|
|
@ -113,7 +111,9 @@
|
|||
"src\\Components\\WebAssembly\\Sdk\\src\\Microsoft.NET.Sdk.BlazorWebAssembly.csproj",
|
||||
"src\\Components\\WebAssembly\\Sdk\\test\\Microsoft.NET.Sdk.BlazorWebAssembly.Tests.csproj",
|
||||
"src\\Components\\WebAssembly\\Sdk\\integrationtests\\Microsoft.NET.Sdk.BlazorWebAssembly.IntegrationTests.csproj",
|
||||
"src\\JSInterop\\Microsoft.JSInterop\\src\\Microsoft.JSInterop.csproj"
|
||||
"src\\JSInterop\\Microsoft.JSInterop\\src\\Microsoft.JSInterop.csproj",
|
||||
"src\\Components\\ProtectedBrowserStorage\\src\\Microsoft.AspNetCore.Components.ProtectedBrowserStorage.csproj",
|
||||
"src\\Components\\ProtectedBrowserStorage\\test\\Microsoft.AspNetCore.Components.ProtectedBrowserStorage.Tests.csproj"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,11 +17,17 @@
|
|||
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- These references were removed in 3.0 -->
|
||||
<!--
|
||||
These references exist only in the .nuspec files and baseline checks are not aware of them. Keep suppressions
|
||||
in sync with the two .nuspec files:
|
||||
- Anytime a reference is added to this project file, remove its suppression.
|
||||
- Remove InNuspecFile attributes of references removed from the .nuspec files. Make suppression conditional on
|
||||
Major.Minor during previews. After RTM (and baseline updates), remove suppressions entirely.
|
||||
-->
|
||||
<ItemGroup>
|
||||
<SuppressBaselineReference Include="Microsoft.AspNetCore.Components.Analyzers" />
|
||||
<SuppressBaselineReference Include="Microsoft.AspNetCore.Authorization" />
|
||||
<SuppressBaselineReference Include="System.ComponentModel.Annotations" />
|
||||
<SuppressBaselineReference Include="Microsoft.AspNetCore.Components.Analyzers" InNuspecFile="true" />
|
||||
<SuppressBaselineReference Include="Microsoft.AspNetCore.Authorization" InNuspecFile="true" />
|
||||
<SuppressBaselineReference Include="Microsoft.JSInterop" Condition=" '$(AspNetCoreMajorMinorVersion)' == '5.0' " />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="_GetNuspecDependencyPackageVersions">
|
||||
|
|
|
|||
|
|
@ -7,6 +7,6 @@ using System.Runtime.CompilerServices;
|
|||
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Components.Server.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Components.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Components.Web.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Components.Web.Extensions.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Components.ProtectedBrowserStorage.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||
|
||||
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
|
||||
|
|
|
|||
|
|
@ -17,9 +17,7 @@
|
|||
"src\\Components\\Server\\src\\Microsoft.AspNetCore.Components.Server.csproj",
|
||||
"src\\Components\\Server\\test\\Microsoft.AspNetCore.Components.Server.Tests.csproj",
|
||||
"src\\Components\\Web.Extensions\\src\\Microsoft.AspNetCore.Components.Web.Extensions.csproj",
|
||||
"src\\Components\\Web.Extensions\\test\\Microsoft.AspNetCore.Components.Web.Extensions.Tests.csproj",
|
||||
"src\\Components\\WebAssembly\\Authentication.Msal\\src\\Microsoft.Authentication.WebAssembly.Msal.csproj",
|
||||
"src\\Components\\WebAssembly\\DebugProxy\\src\\Microsoft.AspNetCore.Components.WebAssembly.DebugProxy.csproj",
|
||||
"src\\Components\\WebAssembly\\DevServer\\src\\Microsoft.AspNetCore.Components.WebAssembly.DevServer.csproj",
|
||||
"src\\Components\\WebAssembly\\JSInterop\\src\\Microsoft.JSInterop.WebAssembly.csproj",
|
||||
"src\\Components\\WebAssembly\\Sdk\\integrationtests\\Microsoft.NET.Sdk.BlazorWebAssembly.IntegrationTests.csproj",
|
||||
|
|
@ -47,7 +45,9 @@
|
|||
"src\\Components\\test\\testassets\\BasicTestApp\\BasicTestApp.csproj",
|
||||
"src\\Components\\test\\testassets\\ComponentsApp.Server\\ComponentsApp.Server.csproj",
|
||||
"src\\Components\\test\\testassets\\TestContentPackage\\TestContentPackage.csproj",
|
||||
"src\\Components\\test\\testassets\\TestServer\\Components.TestServer.csproj"
|
||||
"src\\Components\\test\\testassets\\TestServer\\Components.TestServer.csproj",
|
||||
"src\\Components\\ProtectedBrowserStorage\\src\\Microsoft.AspNetCore.Components.ProtectedBrowserStorage.csproj",
|
||||
"src\\Components\\ProtectedBrowserStorage\\test\\Microsoft.AspNetCore.Components.ProtectedBrowserStorage.Tests.csproj"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -353,7 +353,7 @@ namespace Ignitor
|
|||
_hubConnection = builder.Build();
|
||||
|
||||
HubConnection.On<int, string>("JS.AttachComponent", OnAttachComponent);
|
||||
HubConnection.On<int, string, string>("JS.BeginInvokeJS", OnBeginInvokeJS);
|
||||
HubConnection.On<int, string, string, int, long>("JS.BeginInvokeJS", OnBeginInvokeJS);
|
||||
HubConnection.On<string>("JS.EndInvokeDotNet", OnEndInvokeDotNet);
|
||||
HubConnection.On<int, byte[]>("JS.RenderBatch", OnRenderBatch);
|
||||
HubConnection.On<string>("JS.Error", OnError);
|
||||
|
|
@ -401,9 +401,9 @@ namespace Ignitor
|
|||
NextAttachComponentReceived?.Completion?.TrySetResult(call);
|
||||
}
|
||||
|
||||
private void OnBeginInvokeJS(int asyncHandle, string identifier, string argsJson)
|
||||
private void OnBeginInvokeJS(int asyncHandle, string identifier, string argsJson, int resultType, long targetInstanceId)
|
||||
{
|
||||
var call = new CapturedJSInteropCall(asyncHandle, identifier, argsJson);
|
||||
var call = new CapturedJSInteropCall(asyncHandle, identifier, argsJson, resultType, targetInstanceId);
|
||||
Operations?.JSInteropCalls.Enqueue(call);
|
||||
JSInterop?.Invoke(call);
|
||||
|
||||
|
|
|
|||
|
|
@ -5,15 +5,19 @@ namespace Ignitor
|
|||
{
|
||||
public class CapturedJSInteropCall
|
||||
{
|
||||
public CapturedJSInteropCall(int asyncHandle, string identifier, string argsJson)
|
||||
public CapturedJSInteropCall(int asyncHandle, string identifier, string argsJson, int resultType, long targetInstanceId)
|
||||
{
|
||||
AsyncHandle = asyncHandle;
|
||||
Identifier = identifier;
|
||||
ArgsJson = argsJson;
|
||||
ResultType = resultType;
|
||||
TargetInstanceId = targetInstanceId;
|
||||
}
|
||||
|
||||
public int AsyncHandle { get; }
|
||||
public string Identifier { get; }
|
||||
public string ArgsJson { get; }
|
||||
public int ResultType { get; }
|
||||
public long TargetInstanceId { get; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Razor">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
|
||||
<Description>Provides functionality for storing protected data using the browser's localStorage and sessionStorage APIs.</Description>
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.AspNetCore.Components" />
|
||||
<Reference Include="Microsoft.AspNetCore.DataProtection" />
|
||||
<Reference Include="Microsoft.JSInterop" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="..\..\Shared\src\JsonSerializerOptionsProvider.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.Versioning;
|
||||
|
||||
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Components.ProtectedBrowserStorage.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
|
||||
|
|
@ -10,7 +10,7 @@ using System.Threading.Tasks;
|
|||
using Microsoft.AspNetCore.DataProtection;
|
||||
using Microsoft.JSInterop;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Web.Extensions
|
||||
namespace Microsoft.AspNetCore.Components.ProtectedBrowserStorage
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -1,6 +1,9 @@
|
|||
// 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.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Web.Extensions
|
||||
namespace Microsoft.AspNetCore.Components.ProtectedBrowserStorage
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains the result of a protected browser storage operation.
|
||||
|
|
@ -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.
|
||||
|
||||
using Microsoft.AspNetCore.Components.Web.Extensions;
|
||||
using Microsoft.AspNetCore.Components.ProtectedBrowserStorage;
|
||||
|
||||
namespace Microsoft.Extensions.DependencyInjection
|
||||
{
|
||||
|
|
@ -5,7 +5,7 @@ using System.Runtime.Versioning;
|
|||
using Microsoft.AspNetCore.DataProtection;
|
||||
using Microsoft.JSInterop;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Web.Extensions
|
||||
namespace Microsoft.AspNetCore.Components.ProtectedBrowserStorage
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides mechanisms for storing and retrieving data in the browser's
|
||||
|
|
@ -5,7 +5,7 @@ using System.Runtime.Versioning;
|
|||
using Microsoft.AspNetCore.DataProtection;
|
||||
using Microsoft.JSInterop;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Web.Extensions
|
||||
namespace Microsoft.AspNetCore.Components.ProtectedBrowserStorage
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides mechanisms for storing and retrieving data in the browser's
|
||||
|
|
@ -2,12 +2,11 @@
|
|||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
|
||||
<RootNamespace>Microsoft.AspNetCore.Components</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.AspNetCore.Components" />
|
||||
<Reference Include="Microsoft.AspNetCore.Components.Web.Extensions" />
|
||||
<Reference Include="Microsoft.AspNetCore.Components.ProtectedBrowserStorage" />
|
||||
<Reference Include="Microsoft.AspNetCore.WebUtilities" />
|
||||
<Reference Include="Microsoft.Extensions.DependencyInjection" />
|
||||
</ItemGroup>
|
||||
|
|
@ -14,7 +14,7 @@ using Microsoft.AspNetCore.WebUtilities;
|
|||
using Microsoft.JSInterop;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Web.Extensions
|
||||
namespace Microsoft.AspNetCore.Components.ProtectedBrowserStorage
|
||||
{
|
||||
public class ProtectedBrowserStorageTest
|
||||
{
|
||||
|
|
@ -48,7 +48,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
return new CircuitId(Base64UrlTextEncoder.Encode(secret), Base64UrlTextEncoder.Encode(id));
|
||||
}
|
||||
|
||||
public bool TryParseCircuitId(string text, out CircuitId circuitId)
|
||||
public bool TryParseCircuitId(string? text, out CircuitId circuitId)
|
||||
{
|
||||
if (text is null)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
/// <summary>
|
||||
/// Notifies when a rendering exception occurred.
|
||||
/// </summary>
|
||||
public event EventHandler<Exception> UnhandledException;
|
||||
public event EventHandler<Exception>? UnhandledException;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new <see cref="RemoteRenderer"/>.
|
||||
|
|
@ -171,7 +171,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
pendingRender = new UnacknowledgedRenderBatch(
|
||||
renderId,
|
||||
arrayBuilder,
|
||||
new TaskCompletionSource<object>(),
|
||||
new TaskCompletionSource(),
|
||||
ValueStopwatch.StartNew());
|
||||
|
||||
// Buffer the rendered batches no matter what. We'll send it down immediately when the client
|
||||
|
|
@ -234,7 +234,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
// disposed.
|
||||
}
|
||||
|
||||
public Task OnRenderCompletedAsync(long incomingBatchId, string errorMessageOrNull)
|
||||
public Task OnRenderCompletedAsync(long incomingBatchId, string? errorMessageOrNull)
|
||||
{
|
||||
if (_disposing)
|
||||
{
|
||||
|
|
@ -308,7 +308,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
}
|
||||
}
|
||||
|
||||
private void ProcessPendingBatch(string errorMessageOrNull, UnacknowledgedRenderBatch entry)
|
||||
private void ProcessPendingBatch(string? errorMessageOrNull, UnacknowledgedRenderBatch entry)
|
||||
{
|
||||
var elapsedTime = entry.ValueStopwatch.GetElapsedTime();
|
||||
if (errorMessageOrNull == null)
|
||||
|
|
@ -324,11 +324,11 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
CompleteRender(entry.CompletionSource, errorMessageOrNull);
|
||||
}
|
||||
|
||||
private void CompleteRender(TaskCompletionSource<object> pendingRenderInfo, string errorMessageOrNull)
|
||||
private void CompleteRender(TaskCompletionSource pendingRenderInfo, string? errorMessageOrNull)
|
||||
{
|
||||
if (errorMessageOrNull == null)
|
||||
{
|
||||
pendingRenderInfo.TrySetResult(null);
|
||||
pendingRenderInfo.TrySetResult();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -338,7 +338,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
|
||||
internal readonly struct UnacknowledgedRenderBatch
|
||||
{
|
||||
public UnacknowledgedRenderBatch(long batchId, ArrayBuilder<byte> data, TaskCompletionSource<object> completionSource, ValueStopwatch valueStopwatch)
|
||||
public UnacknowledgedRenderBatch(long batchId, ArrayBuilder<byte> data, TaskCompletionSource completionSource, ValueStopwatch valueStopwatch)
|
||||
{
|
||||
BatchId = batchId;
|
||||
Data = data;
|
||||
|
|
@ -348,7 +348,7 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
|
||||
public long BatchId { get; }
|
||||
public ArrayBuilder<byte> Data { get; }
|
||||
public TaskCompletionSource<object> CompletionSource { get; }
|
||||
public TaskCompletionSource CompletionSource { get; }
|
||||
public ValueStopwatch ValueStopwatch { get; }
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ namespace Microsoft.AspNetCore.Components.RenderTree
|
|||
{
|
||||
/// <summary>
|
||||
/// Implements a list that uses an array of objects to store the elements.
|
||||
///
|
||||
///
|
||||
/// This differs from a <see cref="System.Collections.Generic.List{T}"/> in that
|
||||
/// it not only grows as required but also shrinks if cleared with significant
|
||||
/// excess capacity. This makes it useful for component rendering, because
|
||||
|
|
|
|||
|
|
@ -1,33 +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 System;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Web.Extensions
|
||||
{
|
||||
internal class BrowserFile : IBrowserFile
|
||||
{
|
||||
internal InputFile Owner { get; set; } = default!;
|
||||
|
||||
public int Id { get; set; }
|
||||
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
public DateTime LastModified { get; set; }
|
||||
|
||||
public long Size { get; set; }
|
||||
|
||||
public string Type { get; set; } = string.Empty;
|
||||
|
||||
public string? RelativePath { get; set; }
|
||||
|
||||
public Stream OpenReadStream(CancellationToken cancellationToken = default)
|
||||
=> Owner.OpenReadStream(this, cancellationToken);
|
||||
|
||||
public Task<IBrowserFile> ToImageFileAsync(string format, int maxWidth, int maxHeight)
|
||||
=> Owner.ConvertToImageFileAsync(this, format, maxWidth, maxHeight);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,54 +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 System;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Web.Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents the data of a file selected from an <see cref="InputFile"/> component.
|
||||
/// </summary>
|
||||
public interface IBrowserFile
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the name of the file.
|
||||
/// </summary>
|
||||
string Name { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the last modified date.
|
||||
/// </summary>
|
||||
DateTime LastModified { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the size of the file in bytes.
|
||||
/// </summary>
|
||||
long Size { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the MIME type of the file.
|
||||
/// </summary>
|
||||
string Type { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Opens the stream for reading the uploaded file.
|
||||
/// </summary>
|
||||
/// <param name="cancellationToken">A cancellation token to signal the cancellation of streaming file data.</param>
|
||||
Stream OpenReadStream(CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary>
|
||||
/// Converts the current image file to a new one of the specified file type and maximum file dimensions.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The image will be scaled to fit the specified dimensions while preserving the original aspect ratio.
|
||||
/// </remarks>
|
||||
/// <param name="format">The new image format.</param>
|
||||
/// <param name="maxWith">The maximum image width.</param>
|
||||
/// <param name="maxHeight">The maximum image height</param>
|
||||
/// <returns>A <see cref="Task"/> representing the completion of the operation.</returns>
|
||||
Task<IBrowserFile> ToImageFileAsync(string format, int maxWith, int maxHeight);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,28 +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 System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Web.Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Supplies information about an <see cref="InputFile.OnChange"/> event being raised.
|
||||
/// </summary>
|
||||
public class InputFileChangeEventArgs : EventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// The updated file entries list.
|
||||
/// </summary>
|
||||
public IReadOnlyList<IBrowserFile> Files { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Constructs a new <see cref="InputFileChangeEventArgs"/> instance.
|
||||
/// </summary>
|
||||
/// <param name="files">The updated file entries list.</param>
|
||||
public InputFileChangeEventArgs(IReadOnlyList<IBrowserFile> files)
|
||||
{
|
||||
Files = files;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -6,11 +6,11 @@
|
|||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
<RootNamespace>Microsoft.AspNetCore.Components</RootNamespace>
|
||||
<Nullable>enable</Nullable>
|
||||
<IsShipping>false</IsShipping>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.AspNetCore.Components" />
|
||||
<Reference Include="Microsoft.AspNetCore.DataProtection" />
|
||||
<Reference Include="Microsoft.JSInterop" />
|
||||
</ItemGroup>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,142 +0,0 @@
|
|||
(function () {
|
||||
|
||||
// Exported functions
|
||||
|
||||
function init(callbackWrapper, elem) {
|
||||
elem._blazorInputFileNextFileId = 0;
|
||||
|
||||
elem.addEventListener('click', function () {
|
||||
// Permits replacing an existing file with a new one of the same file name.
|
||||
elem.value = '';
|
||||
});
|
||||
|
||||
elem.addEventListener('change', function () {
|
||||
// Reduce to purely serializable data, plus an index by ID.
|
||||
elem._blazorFilesById = {};
|
||||
|
||||
const fileList = Array.prototype.map.call(elem.files, function (file) {
|
||||
const result = {
|
||||
id: ++elem._blazorInputFileNextFileId,
|
||||
lastModified: new Date(file.lastModified).toISOString(),
|
||||
name: file.name,
|
||||
size: file.size,
|
||||
type: file.type,
|
||||
};
|
||||
|
||||
elem._blazorFilesById[result.id] = result;
|
||||
|
||||
// Attach the blob data itself as a non-enumerable property so it doesn't appear in the JSON.
|
||||
Object.defineProperty(result, 'blob', { value: file });
|
||||
|
||||
return result;
|
||||
});
|
||||
|
||||
callbackWrapper.invokeMethodAsync('NotifyChange', fileList);
|
||||
});
|
||||
}
|
||||
|
||||
function toImageFile(elem, fileId, format, maxWidth, maxHeight) {
|
||||
var originalFile = getFileById(elem, fileId);
|
||||
|
||||
return new Promise(function (resolve) {
|
||||
var originalFileImage = new Image();
|
||||
originalFileImage.onload = function () { resolve(originalFileImage); };
|
||||
originalFileImage.src = URL.createObjectURL(originalFile.blob);
|
||||
}).then(function (loadedImage) {
|
||||
return new Promise(function (resolve) {
|
||||
var desiredWidthRatio = Math.min(1, maxWidth / loadedImage.width);
|
||||
var desiredHeightRatio = Math.min(1, maxHeight / loadedImage.height);
|
||||
var chosenSizeRatio = Math.min(desiredWidthRatio, desiredHeightRatio);
|
||||
|
||||
var canvas = document.createElement('canvas');
|
||||
canvas.width = Math.round(loadedImage.width * chosenSizeRatio);
|
||||
canvas.height = Math.round(loadedImage.height * chosenSizeRatio);
|
||||
canvas.getContext('2d').drawImage(loadedImage, 0, 0, canvas.width, canvas.height);
|
||||
canvas.toBlob(resolve, format);
|
||||
});
|
||||
}).then(function (resizedImageBlob) {
|
||||
var result = {
|
||||
id: ++elem._blazorInputFileNextFileId,
|
||||
lastModified: originalFile.lastModified,
|
||||
name: originalFile.name, // Note: we're not changing the file extension.
|
||||
size: resizedImageBlob.size,
|
||||
type: format,
|
||||
relativePath: originalFile.relativePath
|
||||
};
|
||||
|
||||
elem._blazorFilesById[result.id] = result;
|
||||
|
||||
// Attach the blob data itself as a non-enumerable property so it doesn't appear in the JSON.
|
||||
Object.defineProperty(result, 'blob', { value: resizedImageBlob });
|
||||
|
||||
return result;
|
||||
});
|
||||
}
|
||||
|
||||
function ensureArrayBufferReadyForSharedMemoryInterop(elem, fileId) {
|
||||
return getArrayBufferFromFileAsync(elem, fileId).then(function (arrayBuffer) {
|
||||
getFileById(elem, fileId).arrayBuffer = arrayBuffer;
|
||||
});
|
||||
}
|
||||
|
||||
function readFileData(elem, fileId, startOffset, count) {
|
||||
return getArrayBufferFromFileAsync(elem, fileId).then(function (arrayBuffer) {
|
||||
return btoa(String.fromCharCode.apply(null, new Uint8Array(arrayBuffer, startOffset, count)));
|
||||
});
|
||||
}
|
||||
|
||||
function readFileDataSharedMemory(readRequest) {
|
||||
const inputFileElementReferenceId = Blazor.platform.readStringField(readRequest, 0);
|
||||
const inputFileElement = document.querySelector(`[_bl_${inputFileElementReferenceId}]`);
|
||||
const fileId = Blazor.platform.readInt32Field(readRequest, 4);
|
||||
const sourceOffset = Blazor.platform.readUint64Field(readRequest, 8);
|
||||
const destination = Blazor.platform.readInt32Field(readRequest, 16);
|
||||
const destinationOffset = Blazor.platform.readInt32Field(readRequest, 20);
|
||||
const maxBytes = Blazor.platform.readInt32Field(readRequest, 24);
|
||||
|
||||
const sourceArrayBuffer = getFileById(inputFileElement, fileId).arrayBuffer;
|
||||
const bytesToRead = Math.min(maxBytes, sourceArrayBuffer.byteLength - sourceOffset);
|
||||
const sourceUint8Array = new Uint8Array(sourceArrayBuffer, sourceOffset, bytesToRead);
|
||||
|
||||
const destinationUint8Array = Blazor.platform.toUint8Array(destination);
|
||||
destinationUint8Array.set(sourceUint8Array, destinationOffset);
|
||||
|
||||
return bytesToRead;
|
||||
}
|
||||
|
||||
// Local helpers
|
||||
|
||||
function getFileById(elem, fileId) {
|
||||
const file = elem._blazorFilesById[fileId];
|
||||
|
||||
if (!file) {
|
||||
throw new Error(`There is no file with ID ${fileId}. The file list may have changed.`);
|
||||
}
|
||||
|
||||
return file;
|
||||
}
|
||||
|
||||
function getArrayBufferFromFileAsync(elem, fileId) {
|
||||
const file = getFileById(elem, fileId);
|
||||
|
||||
// On the first read, convert the FileReader into a Promise<ArrayBuffer>.
|
||||
if (!file.readPromise) {
|
||||
file.readPromise = new Promise(function (resolve, reject) {
|
||||
const reader = new FileReader();
|
||||
reader.onload = function () { resolve(reader.result); };
|
||||
reader.onerror = function (err) { reject(err); };
|
||||
reader.readAsArrayBuffer(file.blob);
|
||||
});
|
||||
}
|
||||
|
||||
return file.readPromise;
|
||||
}
|
||||
|
||||
window._blazorInputFile = {
|
||||
init,
|
||||
toImageFile,
|
||||
ensureArrayBufferReadyForSharedMemoryInterop,
|
||||
readFileData,
|
||||
readFileDataSharedMemory,
|
||||
};
|
||||
})();
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -2,6 +2,7 @@ import { navigateTo, internalFunctions as navigationManagerInternalFunctions } f
|
|||
import { attachRootComponentToElement } from './Rendering/Renderer';
|
||||
import { domFunctions } from './DomWrapper';
|
||||
import { Virtualize } from './Virtualize';
|
||||
import { InputFile } from './InputFile';
|
||||
|
||||
// Make the following APIs available in global scope for invocation from JS
|
||||
window['Blazor'] = {
|
||||
|
|
@ -11,5 +12,6 @@ window['Blazor'] = {
|
|||
navigationManager: navigationManagerInternalFunctions,
|
||||
domWrapper: domFunctions,
|
||||
Virtualize,
|
||||
InputFile,
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -0,0 +1,159 @@
|
|||
import { monoPlatform } from './Platform/Mono/MonoPlatform';
|
||||
import { System_Array } from './Platform/Platform';
|
||||
|
||||
export const InputFile = {
|
||||
init,
|
||||
toImageFile,
|
||||
ensureArrayBufferReadyForSharedMemoryInterop,
|
||||
readFileData,
|
||||
readFileDataSharedMemory,
|
||||
};
|
||||
|
||||
interface BrowserFile {
|
||||
id: number;
|
||||
lastModified: string;
|
||||
name: string;
|
||||
size: number;
|
||||
type: string;
|
||||
readPromise: Promise<ArrayBuffer> | undefined;
|
||||
arrayBuffer: ArrayBuffer | undefined;
|
||||
}
|
||||
|
||||
interface InputElement extends HTMLInputElement {
|
||||
_blazorInputFileNextFileId: number;
|
||||
_blazorFilesById: { [id: number]: BrowserFile };
|
||||
}
|
||||
|
||||
function init(callbackWrapper: any, elem: InputElement): void {
|
||||
elem._blazorInputFileNextFileId = 0;
|
||||
|
||||
elem.addEventListener('click', function(): void {
|
||||
// Permits replacing an existing file with a new one of the same file name.
|
||||
elem.value = '';
|
||||
});
|
||||
|
||||
elem.addEventListener('change', function(): void {
|
||||
// Reduce to purely serializable data, plus an index by ID.
|
||||
elem._blazorFilesById = {};
|
||||
|
||||
const fileList = Array.prototype.map.call(elem.files, function(file): BrowserFile {
|
||||
const result = {
|
||||
id: ++elem._blazorInputFileNextFileId,
|
||||
lastModified: new Date(file.lastModified).toISOString(),
|
||||
name: file.name,
|
||||
size: file.size,
|
||||
type: file.type,
|
||||
readPromise: undefined,
|
||||
arrayBuffer: undefined,
|
||||
};
|
||||
|
||||
elem._blazorFilesById[result.id] = result;
|
||||
|
||||
// Attach the blob data itself as a non-enumerable property so it doesn't appear in the JSON.
|
||||
Object.defineProperty(result, 'blob', { value: file });
|
||||
|
||||
return result;
|
||||
});
|
||||
|
||||
callbackWrapper.invokeMethodAsync('NotifyChange', fileList);
|
||||
});
|
||||
}
|
||||
|
||||
async function toImageFile(elem: InputElement, fileId: number, format: string, maxWidth: number, maxHeight: number): Promise<BrowserFile> {
|
||||
const originalFile = getFileById(elem, fileId);
|
||||
|
||||
const loadedImage = await new Promise(function(resolve: (loadedImage: HTMLImageElement) => void): void {
|
||||
const originalFileImage = new Image();
|
||||
originalFileImage.onload = function(): void {
|
||||
resolve(originalFileImage);
|
||||
};
|
||||
originalFileImage.src = URL.createObjectURL(originalFile['blob']);
|
||||
});
|
||||
|
||||
const resizedImageBlob = await new Promise(function(resolve: BlobCallback): void {
|
||||
const desiredWidthRatio = Math.min(1, maxWidth / loadedImage.width);
|
||||
const desiredHeightRatio = Math.min(1, maxHeight / loadedImage.height);
|
||||
const chosenSizeRatio = Math.min(desiredWidthRatio, desiredHeightRatio);
|
||||
|
||||
const canvas = document.createElement('canvas');
|
||||
canvas.width = Math.round(loadedImage.width * chosenSizeRatio);
|
||||
canvas.height = Math.round(loadedImage.height * chosenSizeRatio);
|
||||
canvas.getContext('2d')?.drawImage(loadedImage, 0, 0, canvas.width, canvas.height);
|
||||
canvas.toBlob(resolve, format);
|
||||
});
|
||||
const result: BrowserFile = {
|
||||
id: ++elem._blazorInputFileNextFileId,
|
||||
lastModified: originalFile.lastModified,
|
||||
name: originalFile.name,
|
||||
size: resizedImageBlob?.size || 0,
|
||||
type: format,
|
||||
readPromise: undefined,
|
||||
arrayBuffer: undefined,
|
||||
};
|
||||
|
||||
elem._blazorFilesById[result.id] = result;
|
||||
|
||||
// Attach the blob data itself as a non-enumerable property so it doesn't appear in the JSON.
|
||||
Object.defineProperty(result, 'blob', { value: resizedImageBlob });
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
async function ensureArrayBufferReadyForSharedMemoryInterop(elem: InputElement, fileId: number): Promise<void> {
|
||||
const arrayBuffer = await getArrayBufferFromFileAsync(elem, fileId);
|
||||
getFileById(elem, fileId).arrayBuffer = arrayBuffer;
|
||||
}
|
||||
|
||||
async function readFileData(elem: InputElement, fileId: number, startOffset: number, count: number): Promise<string> {
|
||||
const arrayBuffer = await getArrayBufferFromFileAsync(elem, fileId);
|
||||
return btoa(String.fromCharCode.apply(null, new Uint8Array(arrayBuffer, startOffset, count) as unknown as number[]));
|
||||
}
|
||||
|
||||
function readFileDataSharedMemory(readRequest: any): number {
|
||||
const inputFileElementReferenceId = monoPlatform.readStringField(readRequest, 0);
|
||||
const inputFileElement = document.querySelector(`[_bl_${inputFileElementReferenceId}]`);
|
||||
const fileId = monoPlatform.readInt32Field(readRequest, 4);
|
||||
const sourceOffset = monoPlatform.readUint64Field(readRequest, 8);
|
||||
const destination = monoPlatform.readInt32Field(readRequest, 16) as unknown as System_Array<number>;
|
||||
const destinationOffset = monoPlatform.readInt32Field(readRequest, 20);
|
||||
const maxBytes = monoPlatform.readInt32Field(readRequest, 24);
|
||||
|
||||
const sourceArrayBuffer = getFileById(inputFileElement as InputElement, fileId).arrayBuffer as ArrayBuffer;
|
||||
const bytesToRead = Math.min(maxBytes, sourceArrayBuffer.byteLength - sourceOffset);
|
||||
const sourceUint8Array = new Uint8Array(sourceArrayBuffer, sourceOffset, bytesToRead);
|
||||
|
||||
const destinationUint8Array = monoPlatform.toUint8Array(destination);
|
||||
destinationUint8Array.set(sourceUint8Array, destinationOffset);
|
||||
|
||||
return bytesToRead;
|
||||
}
|
||||
|
||||
function getFileById(elem: InputElement, fileId: number): BrowserFile {
|
||||
const file = elem._blazorFilesById[fileId];
|
||||
|
||||
if (!file) {
|
||||
throw new Error(`There is no file with ID ${fileId}. The file list may have changed.`);
|
||||
}
|
||||
|
||||
return file;
|
||||
}
|
||||
|
||||
function getArrayBufferFromFileAsync(elem: InputElement, fileId: number): Promise<ArrayBuffer> {
|
||||
const file = getFileById(elem, fileId);
|
||||
|
||||
// On the first read, convert the FileReader into a Promise<ArrayBuffer>.
|
||||
if (!file.readPromise) {
|
||||
file.readPromise = new Promise(function(resolve: (buffer: ArrayBuffer) => void, reject): void {
|
||||
const reader = new FileReader();
|
||||
reader.onload = function(): void {
|
||||
resolve(reader.result as ArrayBuffer);
|
||||
};
|
||||
reader.onerror = function(err): void {
|
||||
reject(err);
|
||||
};
|
||||
reader.readAsArrayBuffer(file['blob']);
|
||||
});
|
||||
}
|
||||
|
||||
return file.readPromise;
|
||||
}
|
||||
|
|
@ -3,17 +3,11 @@ import { WebAssemblyResourceLoader } from '../WebAssemblyResourceLoader';
|
|||
const currentBrowserIsChrome = (window as any).chrome
|
||||
&& navigator.userAgent.indexOf('Edge') < 0; // Edge pretends to be Chrome
|
||||
|
||||
let isDebugging = true;
|
||||
|
||||
window.addEventListener('load', () => {
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
isDebugging = params.get('_blazor_debug') === 'true';
|
||||
})
|
||||
|
||||
let hasReferencedPdbs = false;
|
||||
|
||||
export function hasDebuggingEnabled() {
|
||||
return isDebugging && hasReferencedPdbs && currentBrowserIsChrome;
|
||||
return hasReferencedPdbs && currentBrowserIsChrome;
|
||||
}
|
||||
|
||||
export function attachDebuggerHotkey(resourceLoader: WebAssemblyResourceLoader) {
|
||||
|
|
@ -33,8 +27,6 @@ export function attachDebuggerHotkey(resourceLoader: WebAssemblyResourceLoader)
|
|||
console.error('Cannot start debugging, because the application was not compiled with debugging enabled.');
|
||||
} else if (!currentBrowserIsChrome) {
|
||||
console.error('Currently, only Microsoft Edge (80+), or Google Chrome, are supported for debugging.');
|
||||
} else if (!isDebugging) {
|
||||
console.error(`_blazor_debug query parameter must be set to enable debugging. To enable debugging, go to ${location.href}?_blazor_debug=true.`);
|
||||
} else {
|
||||
launchDebugger();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,10 +10,10 @@ using Microsoft.AspNetCore.Components.Rendering;
|
|||
using Microsoft.Extensions.Options;
|
||||
using Microsoft.JSInterop;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Web.Extensions
|
||||
namespace Microsoft.AspNetCore.Components.Forms
|
||||
{
|
||||
/// <summary>
|
||||
/// A component that wraps the HTML file input element and exposes a <see cref="Stream"/> for each file's contents.
|
||||
/// A component that wraps the HTML file input element and supplies a <see cref="Stream"/> for each file's contents.
|
||||
/// </summary>
|
||||
public class InputFile : ComponentBase, IInputFileJsCallbacks, IDisposable
|
||||
{
|
||||
|
|
@ -69,7 +69,7 @@ namespace Microsoft.AspNetCore.Components.Web.Extensions
|
|||
(Stream)new SharedBrowserFileStream(JSRuntime, _jsUnmarshalledRuntime, _inputFileElement, file) :
|
||||
new RemoteBrowserFileStream(JSRuntime, _inputFileElement, file, Options.Value, cancellationToken);
|
||||
|
||||
internal async Task<IBrowserFile> ConvertToImageFileAsync(BrowserFile file, string format, int maxWidth, int maxHeight)
|
||||
internal async ValueTask<IBrowserFile> ConvertToImageFileAsync(BrowserFile file, string format, int maxWidth, int maxHeight)
|
||||
{
|
||||
var imageFile = await JSRuntime.InvokeAsync<BrowserFile>(InputFileInterop.ToImageFile, _inputFileElement, file.Id, format, maxWidth, maxHeight);
|
||||
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
// 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.IO;
|
||||
using System.Threading;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Forms
|
||||
{
|
||||
internal sealed class BrowserFile : IBrowserFile
|
||||
{
|
||||
private long _size;
|
||||
|
||||
internal InputFile Owner { get; set; } = default!;
|
||||
|
||||
public int Id { get; set; }
|
||||
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
public DateTimeOffset LastModified { get; set; }
|
||||
|
||||
public long Size
|
||||
{
|
||||
get => _size;
|
||||
set
|
||||
{
|
||||
if (value < 0)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(Size), $"Size must be a non-negative value. Value provided: {value}.");
|
||||
}
|
||||
|
||||
_size = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string ContentType { get; set; } = string.Empty;
|
||||
|
||||
public string? RelativePath { get; set; }
|
||||
|
||||
public Stream OpenReadStream(long maxAllowedSize = 512000, CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (Size > maxAllowedSize)
|
||||
{
|
||||
throw new IOException($"Supplied file with size {Size} bytes exceeds the maximum of {maxAllowedSize} bytes.");
|
||||
}
|
||||
|
||||
return Owner.OpenReadStream(this, cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
// 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.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Forms
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains helper methods for <see cref="IBrowserFile"/>.
|
||||
/// </summary>
|
||||
public static class BrowserFileExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Attempts to convert the current image file to a new one of the specified file type and maximum file dimensions.
|
||||
/// <para>
|
||||
/// Caution: there is no guarantee that the file will be converted, or will even be a valid image file at all, either
|
||||
/// before or after conversion. The conversion is requested within the browser before it is transferred to .NET
|
||||
/// code, so the resulting data should be treated as untrusted.
|
||||
/// </para>
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The image will be scaled to fit the specified dimensions while preserving the original aspect ratio.
|
||||
/// </remarks>
|
||||
/// <param name="browserFile">The <see cref="IBrowserFile"/> to convert to a new image file.</param>
|
||||
/// <param name="format">The new image format.</param>
|
||||
/// <param name="maxWith">The maximum image width.</param>
|
||||
/// <param name="maxHeight">The maximum image height</param>
|
||||
/// <returns>A <see cref="ValueTask"/> representing the completion of the operation.</returns>
|
||||
public static ValueTask<IBrowserFile> RequestImageFileAsync(this IBrowserFile browserFile, string format, int maxWith, int maxHeight)
|
||||
{
|
||||
if (browserFile is BrowserFile browserFileInternal)
|
||||
{
|
||||
return browserFileInternal.Owner.ConvertToImageFileAsync(browserFileInternal, format, maxWith, maxHeight);
|
||||
}
|
||||
|
||||
throw new InvalidOperationException($"Cannot perform this operation on custom {typeof(IBrowserFile)} implementations.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -6,7 +6,7 @@ using System.IO;
|
|||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Web.Extensions
|
||||
namespace Microsoft.AspNetCore.Components.Forms
|
||||
{
|
||||
internal abstract class BrowserFileStream : Stream
|
||||
{
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
// 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.IO;
|
||||
using System.Threading;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Forms
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents the data of a file selected from an <see cref="InputFile"/> component.
|
||||
/// <para>
|
||||
/// Note: Metadata is provided by the client and is untrusted.
|
||||
/// </para>
|
||||
/// </summary>
|
||||
public interface IBrowserFile
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the name of the file as specified by the browser.
|
||||
/// </summary>
|
||||
string Name { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the last modified date as specified by the browser.
|
||||
/// </summary>
|
||||
DateTimeOffset LastModified { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the size of the file in bytes as specified by the browser.
|
||||
/// </summary>
|
||||
long Size { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the MIME type of the file as specified by the browser.
|
||||
/// </summary>
|
||||
string ContentType { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Opens the stream for reading the uploaded file.
|
||||
/// </summary>
|
||||
/// <param name="maxAllowedSize">
|
||||
/// The maximum number of bytes that can be supplied by the Stream. Defaults to 500 KB.
|
||||
/// <para>
|
||||
/// Calling <see cref="OpenReadStream(long, CancellationToken)"/>
|
||||
/// will throw if the file's size, as specified by <see cref="Size"/> is larger than
|
||||
/// <paramref name="maxAllowedSize"/>. By default, if the user supplies a file larger than 500 KB, this method will throw an exception.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// It is valuable to choose a size limit that corresponds to your use case. If you allow excessively large files, this
|
||||
/// may result in excessive consumption of memory or disk/database space, depending on what your code does
|
||||
/// with the supplied <see cref="Stream"/>.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// For Blazor Server in particular, beware of reading the entire stream into a memory buffer unless you have
|
||||
/// passed a suitably low size limit, since you will be consuming that memory on the server.
|
||||
/// </para>
|
||||
/// </param>
|
||||
/// <param name="cancellationToken">A cancellation token to signal the cancellation of streaming file data.</param>
|
||||
/// <exception cref="IOException">Thrown if the file's length exceeds the <paramref name="maxAllowedSize"/> value.</exception>
|
||||
Stream OpenReadStream(long maxAllowedSize = 500 * 1024, CancellationToken cancellationToken = default);
|
||||
}
|
||||
}
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Web.Extensions
|
||||
namespace Microsoft.AspNetCore.Components.Forms
|
||||
{
|
||||
internal interface IInputFileJsCallbacks
|
||||
{
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
// 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;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Forms
|
||||
{
|
||||
/// <summary>
|
||||
/// Supplies information about an <see cref="InputFile.OnChange"/> event being raised.
|
||||
/// </summary>
|
||||
public sealed class InputFileChangeEventArgs : EventArgs
|
||||
{
|
||||
private readonly IReadOnlyList<IBrowserFile> _files;
|
||||
|
||||
/// <summary>
|
||||
/// Constructs a new <see cref="InputFileChangeEventArgs"/> instance.
|
||||
/// </summary>
|
||||
/// <param name="files">The list of <see cref="IBrowserFile"/>.</param>
|
||||
public InputFileChangeEventArgs(IReadOnlyList<IBrowserFile> files)
|
||||
{
|
||||
_files = files ?? throw new ArgumentNullException(nameof(files));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of supplied files.
|
||||
/// </summary>
|
||||
public int FileCount => _files.Count;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the supplied file. Note that if the input accepts multiple files, then instead of
|
||||
/// reading this property, you should call <see cref="GetMultipleFiles(int)"/>.
|
||||
/// </summary>
|
||||
public IBrowserFile File => _files.Count switch
|
||||
{
|
||||
0 => throw new InvalidOperationException("No file was supplied."),
|
||||
1 => _files[0],
|
||||
_ => throw new InvalidOperationException($"More than one file was supplied. Call {nameof(GetMultipleFiles)} to receive multiple files."),
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Gets the file entries list. This method should be used for inputs that accept multiple
|
||||
/// files. If the input accepts only a single file, then use the <see cref="File"/> property
|
||||
/// instead.
|
||||
/// </summary>
|
||||
/// <param name="maximumFileCount">The maximum number of files to accept. If the number of files exceeds this value, this method will throw an exception.</param>
|
||||
public IReadOnlyList<IBrowserFile> GetMultipleFiles(int maximumFileCount = 10)
|
||||
{
|
||||
if (_files.Count > maximumFileCount)
|
||||
{
|
||||
throw new InvalidOperationException($"The maximum number of files accepted is {maximumFileCount}, but {_files.Count} were supplied.");
|
||||
}
|
||||
|
||||
return _files;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
// 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.Web.Extensions
|
||||
namespace Microsoft.AspNetCore.Components.Forms
|
||||
{
|
||||
internal static class InputFileInterop
|
||||
{
|
||||
private const string JsFunctionsPrefix = "_blazorInputFile.";
|
||||
private const string JsFunctionsPrefix = "Blazor._internal.InputFile.";
|
||||
|
||||
public const string Init = JsFunctionsPrefix + "init";
|
||||
|
||||
|
|
@ -5,7 +5,7 @@ using System;
|
|||
using System.Threading.Tasks;
|
||||
using Microsoft.JSInterop;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Web.Extensions
|
||||
namespace Microsoft.AspNetCore.Components.Forms
|
||||
{
|
||||
internal class InputFileJsCallbacksRelay : IDisposable
|
||||
{
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Web.Extensions
|
||||
namespace Microsoft.AspNetCore.Components.Forms
|
||||
{
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
internal struct ReadRequest
|
||||
|
|
@ -8,7 +8,7 @@ using System.Threading;
|
|||
using System.Threading.Tasks;
|
||||
using Microsoft.JSInterop;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Web.Extensions
|
||||
namespace Microsoft.AspNetCore.Components.Forms
|
||||
{
|
||||
internal class RemoteBrowserFileStream : BrowserFileStream
|
||||
{
|
||||
|
|
@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Components.Web.Extensions
|
|||
{
|
||||
_jsRuntime = jsRuntime;
|
||||
_inputFileElement = inputFileElement;
|
||||
_maxSegmentSize = options.SegmentSize;
|
||||
_maxSegmentSize = options.MaxSegmentSize;
|
||||
_segmentFetchTimeout = options.SegmentFetchTimeout;
|
||||
|
||||
var pipe = new Pipe(new PipeOptions(pauseWriterThreshold: options.MaxBufferSize, resumeWriterThreshold: options.MaxBufferSize));
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
using System;
|
||||
using System.Runtime.Versioning;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Web.Extensions
|
||||
namespace Microsoft.AspNetCore.Components.Forms
|
||||
{
|
||||
/// <summary>
|
||||
/// Repesents configurable options for <see cref="RemoteBrowserFileStream"/>.
|
||||
|
|
@ -19,7 +19,7 @@ namespace Microsoft.AspNetCore.Components.Web.Extensions
|
|||
/// This only has an effect when using Blazor Server.
|
||||
/// </para>
|
||||
/// </summary>
|
||||
public int SegmentSize { get; set; } = 20 * 1024; // SignalR limit is 32K.
|
||||
public int MaxSegmentSize { get; set; } = 20 * 1024; // SignalR limit is 32K.
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the maximum internal buffer size for unread data sent over a SignalR circuit.
|
||||
|
|
@ -35,6 +35,6 @@ namespace Microsoft.AspNetCore.Components.Web.Extensions
|
|||
/// This only has an effect when using Blazor Server.
|
||||
/// </para>
|
||||
/// </summary>
|
||||
public TimeSpan SegmentFetchTimeout { get; set; } = TimeSpan.FromSeconds(3);
|
||||
public TimeSpan SegmentFetchTimeout { get; set; } = TimeSpan.FromMinutes(1);
|
||||
}
|
||||
}
|
||||
|
|
@ -7,7 +7,7 @@ using System.Threading;
|
|||
using System.Threading.Tasks;
|
||||
using Microsoft.JSInterop;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Web.Extensions
|
||||
namespace Microsoft.AspNetCore.Components.Forms
|
||||
{
|
||||
internal class SharedBrowserFileStream : BrowserFileStream
|
||||
{
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
// 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.IO;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Forms
|
||||
{
|
||||
public class BrowserFileTest
|
||||
{
|
||||
[Fact]
|
||||
public void SetSize_ThrowsIfSizeIsNegative()
|
||||
{
|
||||
// Arrange
|
||||
var file = new BrowserFile();
|
||||
|
||||
// Act & Assert
|
||||
var ex = Assert.Throws<ArgumentOutOfRangeException>(() => file.Size = -7);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void OpenReadStream_ThrowsIfFileSizeIsLargerThanAllowedSize()
|
||||
{
|
||||
// Arrange
|
||||
var file = new BrowserFile { Size = 100 };
|
||||
|
||||
// Act & Assert
|
||||
var ex = Assert.Throws<IOException>(() => file.OpenReadStream(80));
|
||||
Assert.Equal("Supplied file with size 100 bytes exceeds the maximum of 80 bytes.", ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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 Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.Forms
|
||||
{
|
||||
public class InputFileChangeEventArgsTest
|
||||
{
|
||||
[Fact]
|
||||
public void SuppliesNumberOfFiles()
|
||||
{
|
||||
var emptySet = new InputFileChangeEventArgs(Array.Empty<IBrowserFile>());
|
||||
Assert.Equal(0, emptySet.FileCount);
|
||||
|
||||
var twoItemSet = new InputFileChangeEventArgs(new[] { new BrowserFile(), new BrowserFile() });
|
||||
Assert.Equal(2, twoItemSet.FileCount);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void File_CanSupplySingle()
|
||||
{
|
||||
var file = new BrowserFile();
|
||||
var instance = new InputFileChangeEventArgs(new[] { file });
|
||||
Assert.Same(file, instance.File);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void File_ThrowsIfZeroFiles()
|
||||
{
|
||||
var instance = new InputFileChangeEventArgs(Array.Empty<IBrowserFile>());
|
||||
var ex = Assert.Throws<InvalidOperationException>(() => instance.File);
|
||||
Assert.StartsWith("No file was supplied", ex.Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void File_ThrowsIfMultipleFiles()
|
||||
{
|
||||
var instance = new InputFileChangeEventArgs(new[] { new BrowserFile(), new BrowserFile() });
|
||||
var ex = Assert.Throws<InvalidOperationException>(() => instance.File);
|
||||
Assert.StartsWith("More than one file was supplied", ex.Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetMultipleFiles_CanSupplyEmpty()
|
||||
{
|
||||
var instance = new InputFileChangeEventArgs(Array.Empty<IBrowserFile>());
|
||||
Assert.Empty(instance.GetMultipleFiles());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetMultipleFiles_CanSupplyFiles()
|
||||
{
|
||||
var files = new[] { new BrowserFile(), new BrowserFile() };
|
||||
var instance = new InputFileChangeEventArgs(files);
|
||||
Assert.Same(files, instance.GetMultipleFiles());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetMultipleFiles_ThrowsIfTooManyFiles()
|
||||
{
|
||||
var files = new[] { new BrowserFile(), new BrowserFile() };
|
||||
var instance = new InputFileChangeEventArgs(files);
|
||||
var ex = Assert.Throws<InvalidOperationException>(() => instance.GetMultipleFiles(1));
|
||||
Assert.Equal($"The maximum number of files accepted is 1, but 2 were supplied.", ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,10 +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.
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.WebAssembly.DebugProxy
|
||||
{
|
||||
public class DebugProxyOptions
|
||||
{
|
||||
public string BrowserHost { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
@ -1,65 +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 System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.WebAssembly.DebugProxy.Hosting
|
||||
{
|
||||
public static class DebugProxyHost
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a custom HostBuilder for the DebugProxyLauncher so that we can inject
|
||||
/// only the needed configurations.
|
||||
/// </summary>
|
||||
/// <param name="args">Command line arguments passed in</param>
|
||||
/// <param name="browserHost">Host where browser is listening for debug connections</param>
|
||||
/// <returns><see cref="IHostBuilder" /></returns>
|
||||
public static IHostBuilder CreateDefaultBuilder(string[] args, string browserHost)
|
||||
{
|
||||
var builder = new HostBuilder();
|
||||
|
||||
builder.ConfigureAppConfiguration((hostingContext, config) =>
|
||||
{
|
||||
if (args != null)
|
||||
{
|
||||
config.AddCommandLine(args);
|
||||
}
|
||||
config.SetBasePath(Directory.GetCurrentDirectory());
|
||||
config.AddJsonFile("blazor-debugproxysettings.json", optional: true, reloadOnChange: true);
|
||||
})
|
||||
.ConfigureLogging((hostingContext, logging) =>
|
||||
{
|
||||
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
|
||||
logging.AddConsole();
|
||||
logging.AddDebug();
|
||||
logging.AddEventSourceLogger();
|
||||
})
|
||||
.ConfigureWebHostDefaults(webBuilder =>
|
||||
{
|
||||
webBuilder.UseStartup<Startup>();
|
||||
|
||||
// By default we bind to a dyamic port
|
||||
// This can be overridden using an option like "--urls http://localhost:9500"
|
||||
webBuilder.UseUrls("http://127.0.0.1:0");
|
||||
})
|
||||
.ConfigureServices(serviceCollection =>
|
||||
{
|
||||
serviceCollection.AddSingleton(new DebugProxyOptions
|
||||
{
|
||||
BrowserHost = browserHost
|
||||
});
|
||||
});
|
||||
|
||||
return builder;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework>
|
||||
<OutputType>Exe</OutputType>
|
||||
<PackageId>Microsoft.AspNetCore.Components.WebAssembly.DebugProxy</PackageId>
|
||||
<IsShippingPackage>true</IsShippingPackage>
|
||||
<Description>Debug proxy for use when building Blazor applications.</Description>
|
||||
<!-- Set this to false because assemblies should not reference this assembly directly, (except for tests, of course). -->
|
||||
<IsProjectReferenceProvider>false</IsProjectReferenceProvider>
|
||||
<NoWarn>$(NoWarn);CS0649</NoWarn>
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Include="$(SharedSourceRoot)CommandLineUtils\**\*.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.AspNetCore" />
|
||||
<Reference Include="Microsoft.AspNetCore.WebSockets" />
|
||||
<Reference Include="Microsoft.Extensions.Hosting" />
|
||||
|
||||
<!-- Dependencies of ws-proxy sources -->
|
||||
<Reference Include="Newtonsoft.Json" />
|
||||
<Reference Include="Mono.Cecil" />
|
||||
<Reference Include="Microsoft.CodeAnalysis.CSharp" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -1,843 +0,0 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using Mono.Cecil;
|
||||
using Mono.Cecil.Cil;
|
||||
using System.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.Net.Http;
|
||||
using Mono.Cecil.Pdb;
|
||||
using Newtonsoft.Json;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.Threading;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace WebAssembly.Net.Debugging {
|
||||
internal class BreakpointRequest {
|
||||
public string Id { get; private set; }
|
||||
public string Assembly { get; private set; }
|
||||
public string File { get; private set; }
|
||||
public int Line { get; private set; }
|
||||
public int Column { get; private set; }
|
||||
public MethodInfo Method { get; private set; }
|
||||
|
||||
JObject request;
|
||||
|
||||
public bool IsResolved => Assembly != null;
|
||||
public List<Breakpoint> Locations { get; } = new List<Breakpoint> ();
|
||||
|
||||
public override string ToString ()
|
||||
=> $"BreakpointRequest Assembly: {Assembly} File: {File} Line: {Line} Column: {Column}";
|
||||
|
||||
public object AsSetBreakpointByUrlResponse (IEnumerable<object> jsloc)
|
||||
=> new { breakpointId = Id, locations = Locations.Select(l => l.Location.AsLocation ()).Concat (jsloc) };
|
||||
|
||||
public BreakpointRequest () {
|
||||
}
|
||||
|
||||
public BreakpointRequest (string id, MethodInfo method) {
|
||||
Id = id;
|
||||
Method = method;
|
||||
}
|
||||
|
||||
public BreakpointRequest (string id, JObject request) {
|
||||
Id = id;
|
||||
this.request = request;
|
||||
}
|
||||
|
||||
public static BreakpointRequest Parse (string id, JObject args)
|
||||
{
|
||||
return new BreakpointRequest (id, args);
|
||||
}
|
||||
|
||||
public BreakpointRequest Clone ()
|
||||
=> new BreakpointRequest { Id = Id, request = request };
|
||||
|
||||
public bool IsMatch (SourceFile sourceFile)
|
||||
{
|
||||
var url = request? ["url"]?.Value<string> ();
|
||||
if (url == null) {
|
||||
var urlRegex = request?["urlRegex"].Value<string>();
|
||||
var regex = new Regex (urlRegex);
|
||||
return regex.IsMatch (sourceFile.Url.ToString ()) || regex.IsMatch (sourceFile.DocUrl);
|
||||
}
|
||||
|
||||
return sourceFile.Url.ToString () == url || sourceFile.DotNetUrl == url;
|
||||
}
|
||||
|
||||
public bool TryResolve (SourceFile sourceFile)
|
||||
{
|
||||
if (!IsMatch (sourceFile))
|
||||
return false;
|
||||
|
||||
var line = request? ["lineNumber"]?.Value<int> ();
|
||||
var column = request? ["columnNumber"]?.Value<int> ();
|
||||
|
||||
if (line == null || column == null)
|
||||
return false;
|
||||
|
||||
Assembly = sourceFile.AssemblyName;
|
||||
File = sourceFile.DebuggerFileName;
|
||||
Line = line.Value;
|
||||
Column = column.Value;
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool TryResolve (DebugStore store)
|
||||
{
|
||||
if (request == null || store == null)
|
||||
return false;
|
||||
|
||||
return store.AllSources().FirstOrDefault (source => TryResolve (source)) != null;
|
||||
}
|
||||
}
|
||||
|
||||
internal class VarInfo {
|
||||
public VarInfo (VariableDebugInformation v)
|
||||
{
|
||||
this.Name = v.Name;
|
||||
this.Index = v.Index;
|
||||
}
|
||||
|
||||
public VarInfo (ParameterDefinition p)
|
||||
{
|
||||
this.Name = p.Name;
|
||||
this.Index = (p.Index + 1) * -1;
|
||||
}
|
||||
|
||||
public string Name { get; }
|
||||
public int Index { get; }
|
||||
|
||||
public override string ToString ()
|
||||
=> $"(var-info [{Index}] '{Name}')";
|
||||
}
|
||||
|
||||
internal class CliLocation {
|
||||
public CliLocation (MethodInfo method, int offset)
|
||||
{
|
||||
Method = method;
|
||||
Offset = offset;
|
||||
}
|
||||
|
||||
public MethodInfo Method { get; }
|
||||
public int Offset { get; }
|
||||
}
|
||||
|
||||
internal class SourceLocation {
|
||||
SourceId id;
|
||||
int line;
|
||||
int column;
|
||||
CliLocation cliLoc;
|
||||
|
||||
public SourceLocation (SourceId id, int line, int column)
|
||||
{
|
||||
this.id = id;
|
||||
this.line = line;
|
||||
this.column = column;
|
||||
}
|
||||
|
||||
public SourceLocation (MethodInfo mi, SequencePoint sp)
|
||||
{
|
||||
this.id = mi.SourceId;
|
||||
this.line = sp.StartLine - 1;
|
||||
this.column = sp.StartColumn - 1;
|
||||
this.cliLoc = new CliLocation (mi, sp.Offset);
|
||||
}
|
||||
|
||||
public SourceId Id { get => id; }
|
||||
public int Line { get => line; }
|
||||
public int Column { get => column; }
|
||||
public CliLocation CliLocation => this.cliLoc;
|
||||
|
||||
public override string ToString ()
|
||||
=> $"{id}:{Line}:{Column}";
|
||||
|
||||
public static SourceLocation Parse (JObject obj)
|
||||
{
|
||||
if (obj == null)
|
||||
return null;
|
||||
|
||||
if (!SourceId.TryParse (obj ["scriptId"]?.Value<string> (), out var id))
|
||||
return null;
|
||||
|
||||
var line = obj ["lineNumber"]?.Value<int> ();
|
||||
var column = obj ["columnNumber"]?.Value<int> ();
|
||||
if (id == null || line == null || column == null)
|
||||
return null;
|
||||
|
||||
return new SourceLocation (id, line.Value, column.Value);
|
||||
}
|
||||
|
||||
|
||||
internal class LocationComparer : EqualityComparer<SourceLocation>
|
||||
{
|
||||
public override bool Equals (SourceLocation l1, SourceLocation l2)
|
||||
{
|
||||
if (l1 == null && l2 == null)
|
||||
return true;
|
||||
else if (l1 == null || l2 == null)
|
||||
return false;
|
||||
|
||||
return (l1.Line == l2.Line &&
|
||||
l1.Column == l2.Column &&
|
||||
l1.Id == l2.Id);
|
||||
}
|
||||
|
||||
public override int GetHashCode (SourceLocation loc)
|
||||
{
|
||||
int hCode = loc.Line ^ loc.Column;
|
||||
return loc.Id.GetHashCode () ^ hCode.GetHashCode ();
|
||||
}
|
||||
}
|
||||
|
||||
internal object AsLocation ()
|
||||
=> new {
|
||||
scriptId = id.ToString (),
|
||||
lineNumber = line,
|
||||
columnNumber = column
|
||||
};
|
||||
}
|
||||
|
||||
internal class SourceId {
|
||||
const string Scheme = "dotnet://";
|
||||
|
||||
readonly int assembly, document;
|
||||
|
||||
public int Assembly => assembly;
|
||||
public int Document => document;
|
||||
|
||||
internal SourceId (int assembly, int document)
|
||||
{
|
||||
this.assembly = assembly;
|
||||
this.document = document;
|
||||
}
|
||||
|
||||
public SourceId (string id)
|
||||
{
|
||||
if (!TryParse (id, out assembly, out document))
|
||||
throw new ArgumentException ("invalid source identifier", nameof (id));
|
||||
}
|
||||
|
||||
public static bool TryParse (string id, out SourceId source)
|
||||
{
|
||||
source = null;
|
||||
if (!TryParse (id, out var assembly, out var document))
|
||||
return false;
|
||||
|
||||
source = new SourceId (assembly, document);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool TryParse (string id, out int assembly, out int document)
|
||||
{
|
||||
assembly = document = 0;
|
||||
if (id == null || !id.StartsWith (Scheme, StringComparison.Ordinal))
|
||||
return false;
|
||||
|
||||
var sp = id.Substring (Scheme.Length).Split ('_');
|
||||
if (sp.Length != 2)
|
||||
return false;
|
||||
|
||||
if (!int.TryParse (sp [0], out assembly))
|
||||
return false;
|
||||
|
||||
if (!int.TryParse (sp [1], out document))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override string ToString ()
|
||||
=> $"{Scheme}{assembly}_{document}";
|
||||
|
||||
public override bool Equals (object obj)
|
||||
{
|
||||
if (obj == null)
|
||||
return false;
|
||||
SourceId that = obj as SourceId;
|
||||
return that.assembly == this.assembly && that.document == this.document;
|
||||
}
|
||||
|
||||
public override int GetHashCode ()
|
||||
=> assembly.GetHashCode () ^ document.GetHashCode ();
|
||||
|
||||
public static bool operator == (SourceId a, SourceId b)
|
||||
=> ((object)a == null) ? (object)b == null : a.Equals (b);
|
||||
|
||||
public static bool operator != (SourceId a, SourceId b)
|
||||
=> !a.Equals (b);
|
||||
}
|
||||
|
||||
internal class MethodInfo {
|
||||
MethodDefinition methodDef;
|
||||
SourceFile source;
|
||||
|
||||
public SourceId SourceId => source.SourceId;
|
||||
|
||||
public string Name => methodDef.Name;
|
||||
public MethodDebugInformation DebugInformation => methodDef.DebugInformation;
|
||||
|
||||
public SourceLocation StartLocation { get; }
|
||||
public SourceLocation EndLocation { get; }
|
||||
public AssemblyInfo Assembly { get; }
|
||||
public uint Token => methodDef.MetadataToken.RID;
|
||||
|
||||
public MethodInfo (AssemblyInfo assembly, MethodDefinition methodDef, SourceFile source)
|
||||
{
|
||||
this.Assembly = assembly;
|
||||
this.methodDef = methodDef;
|
||||
this.source = source;
|
||||
|
||||
var sps = DebugInformation.SequencePoints;
|
||||
if (sps == null || sps.Count() < 1)
|
||||
return;
|
||||
|
||||
SequencePoint start = sps [0];
|
||||
SequencePoint end = sps [0];
|
||||
|
||||
foreach (var sp in sps) {
|
||||
if (sp.StartLine < start.StartLine)
|
||||
start = sp;
|
||||
else if (sp.StartLine == start.StartLine && sp.StartColumn < start.StartColumn)
|
||||
start = sp;
|
||||
|
||||
if (sp.EndLine > end.EndLine)
|
||||
end = sp;
|
||||
else if (sp.EndLine == end.EndLine && sp.EndColumn > end.EndColumn)
|
||||
end = sp;
|
||||
}
|
||||
|
||||
StartLocation = new SourceLocation (this, start);
|
||||
EndLocation = new SourceLocation (this, end);
|
||||
}
|
||||
|
||||
public SourceLocation GetLocationByIl (int pos)
|
||||
{
|
||||
SequencePoint prev = null;
|
||||
foreach (var sp in DebugInformation.SequencePoints) {
|
||||
if (sp.Offset > pos)
|
||||
break;
|
||||
prev = sp;
|
||||
}
|
||||
|
||||
if (prev != null)
|
||||
return new SourceLocation (this, prev);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public VarInfo [] GetLiveVarsAt (int offset)
|
||||
{
|
||||
var res = new List<VarInfo> ();
|
||||
|
||||
res.AddRange (methodDef.Parameters.Select (p => new VarInfo (p)));
|
||||
res.AddRange (methodDef.DebugInformation.GetScopes ()
|
||||
.Where (s => s.Start.Offset <= offset && (s.End.IsEndOfMethod || s.End.Offset > offset))
|
||||
.SelectMany (s => s.Variables)
|
||||
.Where (v => !v.IsDebuggerHidden)
|
||||
.Select (v => new VarInfo (v)));
|
||||
|
||||
return res.ToArray ();
|
||||
}
|
||||
|
||||
public override string ToString () => "MethodInfo(" + methodDef.FullName + ")";
|
||||
}
|
||||
|
||||
internal class TypeInfo {
|
||||
AssemblyInfo assembly;
|
||||
TypeDefinition type;
|
||||
List<MethodInfo> methods;
|
||||
|
||||
public TypeInfo (AssemblyInfo assembly, TypeDefinition type) {
|
||||
this.assembly = assembly;
|
||||
this.type = type;
|
||||
methods = new List<MethodInfo> ();
|
||||
}
|
||||
|
||||
public string Name => type.Name;
|
||||
public string FullName => type.FullName;
|
||||
public List<MethodInfo> Methods => methods;
|
||||
|
||||
public override string ToString () => "TypeInfo('" + FullName + "')";
|
||||
}
|
||||
|
||||
class AssemblyInfo {
|
||||
static int next_id;
|
||||
ModuleDefinition image;
|
||||
readonly int id;
|
||||
readonly ILogger logger;
|
||||
Dictionary<uint, MethodInfo> methods = new Dictionary<uint, MethodInfo> ();
|
||||
Dictionary<string, string> sourceLinkMappings = new Dictionary<string, string>();
|
||||
Dictionary<string, TypeInfo> typesByName = new Dictionary<string, TypeInfo> ();
|
||||
readonly List<SourceFile> sources = new List<SourceFile>();
|
||||
internal string Url { get; }
|
||||
|
||||
public AssemblyInfo (string url, byte[] assembly, byte[] pdb)
|
||||
{
|
||||
this.id = Interlocked.Increment (ref next_id);
|
||||
|
||||
try {
|
||||
Url = url;
|
||||
ReaderParameters rp = new ReaderParameters (/*ReadingMode.Immediate*/);
|
||||
|
||||
// set ReadSymbols = true unconditionally in case there
|
||||
// is an embedded pdb then handle ArgumentException
|
||||
// and assume that if pdb == null that is the cause
|
||||
rp.ReadSymbols = true;
|
||||
rp.SymbolReaderProvider = new PdbReaderProvider ();
|
||||
if (pdb != null)
|
||||
rp.SymbolStream = new MemoryStream (pdb);
|
||||
rp.ReadingMode = ReadingMode.Immediate;
|
||||
rp.InMemory = true;
|
||||
|
||||
this.image = ModuleDefinition.ReadModule (new MemoryStream (assembly), rp);
|
||||
} catch (BadImageFormatException ex) {
|
||||
logger.LogWarning ($"Failed to read assembly as portable PDB: {ex.Message}");
|
||||
} catch (ArgumentException) {
|
||||
// if pdb == null this is expected and we
|
||||
// read the assembly without symbols below
|
||||
if (pdb != null)
|
||||
throw;
|
||||
}
|
||||
|
||||
if (this.image == null) {
|
||||
ReaderParameters rp = new ReaderParameters (/*ReadingMode.Immediate*/);
|
||||
if (pdb != null) {
|
||||
rp.ReadSymbols = true;
|
||||
rp.SymbolReaderProvider = new PdbReaderProvider ();
|
||||
rp.SymbolStream = new MemoryStream (pdb);
|
||||
}
|
||||
|
||||
rp.ReadingMode = ReadingMode.Immediate;
|
||||
rp.InMemory = true;
|
||||
|
||||
this.image = ModuleDefinition.ReadModule (new MemoryStream (assembly), rp);
|
||||
}
|
||||
|
||||
Populate ();
|
||||
}
|
||||
|
||||
public AssemblyInfo (ILogger logger)
|
||||
{
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
void Populate ()
|
||||
{
|
||||
ProcessSourceLink();
|
||||
|
||||
var d2s = new Dictionary<Document, SourceFile> ();
|
||||
|
||||
SourceFile FindSource (Document doc)
|
||||
{
|
||||
if (doc == null)
|
||||
return null;
|
||||
|
||||
if (d2s.TryGetValue (doc, out var source))
|
||||
return source;
|
||||
|
||||
var src = new SourceFile (this, sources.Count, doc, GetSourceLinkUrl (doc.Url));
|
||||
sources.Add (src);
|
||||
d2s [doc] = src;
|
||||
return src;
|
||||
};
|
||||
|
||||
foreach (var type in image.GetTypes()) {
|
||||
var typeInfo = new TypeInfo (this, type);
|
||||
typesByName [type.FullName] = typeInfo;
|
||||
|
||||
foreach (var method in type.Methods) {
|
||||
foreach (var sp in method.DebugInformation.SequencePoints) {
|
||||
var source = FindSource (sp.Document);
|
||||
var methodInfo = new MethodInfo (this, method, source);
|
||||
methods [method.MetadataToken.RID] = methodInfo;
|
||||
if (source != null)
|
||||
source.AddMethod (methodInfo);
|
||||
|
||||
typeInfo.Methods.Add (methodInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ProcessSourceLink ()
|
||||
{
|
||||
var sourceLinkDebugInfo = image.CustomDebugInformations.FirstOrDefault (i => i.Kind == CustomDebugInformationKind.SourceLink);
|
||||
|
||||
if (sourceLinkDebugInfo != null) {
|
||||
var sourceLinkContent = ((SourceLinkDebugInformation)sourceLinkDebugInfo).Content;
|
||||
|
||||
if (sourceLinkContent != null) {
|
||||
var jObject = JObject.Parse (sourceLinkContent) ["documents"];
|
||||
sourceLinkMappings = JsonConvert.DeserializeObject<Dictionary<string, string>> (jObject.ToString ());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Uri GetSourceLinkUrl (string document)
|
||||
{
|
||||
if (sourceLinkMappings.TryGetValue (document, out string url))
|
||||
return new Uri (url);
|
||||
|
||||
foreach (var sourceLinkDocument in sourceLinkMappings) {
|
||||
string key = sourceLinkDocument.Key;
|
||||
|
||||
if (Path.GetFileName (key) != "*") {
|
||||
continue;
|
||||
}
|
||||
|
||||
var keyTrim = key.TrimEnd ('*');
|
||||
|
||||
if (document.StartsWith(keyTrim, StringComparison.OrdinalIgnoreCase)) {
|
||||
var docUrlPart = document.Replace (keyTrim, "");
|
||||
return new Uri (sourceLinkDocument.Value.TrimEnd ('*') + docUrlPart);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static string GetRelativePath (string relativeTo, string path)
|
||||
{
|
||||
var uri = new Uri (relativeTo, UriKind.RelativeOrAbsolute);
|
||||
var rel = Uri.UnescapeDataString (uri.MakeRelativeUri (new Uri (path, UriKind.RelativeOrAbsolute)).ToString ()).Replace (Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);
|
||||
if (rel.Contains (Path.DirectorySeparatorChar.ToString ()) == false) {
|
||||
rel = $".{ Path.DirectorySeparatorChar }{ rel }";
|
||||
}
|
||||
return rel;
|
||||
}
|
||||
|
||||
public IEnumerable<SourceFile> Sources
|
||||
=> this.sources;
|
||||
|
||||
public int Id => id;
|
||||
public string Name => image.Name;
|
||||
|
||||
public SourceFile GetDocById (int document)
|
||||
{
|
||||
return sources.FirstOrDefault (s => s.SourceId.Document == document);
|
||||
}
|
||||
|
||||
public MethodInfo GetMethodByToken (uint token)
|
||||
{
|
||||
methods.TryGetValue (token, out var value);
|
||||
return value;
|
||||
}
|
||||
|
||||
public TypeInfo GetTypeByName (string name) {
|
||||
typesByName.TryGetValue (name, out var res);
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
internal class SourceFile {
|
||||
Dictionary<uint, MethodInfo> methods;
|
||||
AssemblyInfo assembly;
|
||||
int id;
|
||||
Document doc;
|
||||
|
||||
internal SourceFile (AssemblyInfo assembly, int id, Document doc, Uri sourceLinkUri)
|
||||
{
|
||||
this.methods = new Dictionary<uint, MethodInfo> ();
|
||||
this.SourceLinkUri = sourceLinkUri;
|
||||
this.assembly = assembly;
|
||||
this.id = id;
|
||||
this.doc = doc;
|
||||
this.DebuggerFileName = doc.Url.Replace ("\\", "/").Replace (":", "");
|
||||
|
||||
this.SourceUri = new Uri ((Path.IsPathRooted (doc.Url) ? "file://" : "") + doc.Url, UriKind.RelativeOrAbsolute);
|
||||
if (SourceUri.IsFile && File.Exists (SourceUri.LocalPath)) {
|
||||
this.Url = this.SourceUri.ToString ();
|
||||
} else {
|
||||
this.Url = DotNetUrl;
|
||||
}
|
||||
}
|
||||
|
||||
internal void AddMethod (MethodInfo mi)
|
||||
{
|
||||
if (!this.methods.ContainsKey (mi.Token))
|
||||
this.methods [mi.Token] = mi;
|
||||
}
|
||||
|
||||
public string DebuggerFileName { get; }
|
||||
public string Url { get; }
|
||||
public string AssemblyName => assembly.Name;
|
||||
public string DotNetUrl => $"dotnet://{assembly.Name}/{DebuggerFileName}";
|
||||
|
||||
public SourceId SourceId => new SourceId (assembly.Id, this.id);
|
||||
public Uri SourceLinkUri { get; }
|
||||
public Uri SourceUri { get; }
|
||||
|
||||
public IEnumerable<MethodInfo> Methods => this.methods.Values;
|
||||
|
||||
public string DocUrl => doc.Url;
|
||||
|
||||
public (int startLine, int startColumn, int endLine, int endColumn) GetExtents ()
|
||||
{
|
||||
var start = Methods.OrderBy (m => m.StartLocation.Line).ThenBy (m => m.StartLocation.Column).First ();
|
||||
var end = Methods.OrderByDescending (m => m.EndLocation.Line).ThenByDescending (m => m.EndLocation.Column).First ();
|
||||
return (start.StartLocation.Line, start.StartLocation.Column, end.EndLocation.Line, end.EndLocation.Column);
|
||||
}
|
||||
|
||||
async Task<MemoryStream> GetDataAsync (Uri uri, CancellationToken token)
|
||||
{
|
||||
var mem = new MemoryStream ();
|
||||
try {
|
||||
if (uri.IsFile && File.Exists (uri.LocalPath)) {
|
||||
using (var file = File.Open (SourceUri.LocalPath, FileMode.Open)) {
|
||||
await file.CopyToAsync (mem, token);
|
||||
mem.Position = 0;
|
||||
}
|
||||
} else if (uri.Scheme == "http" || uri.Scheme == "https") {
|
||||
var client = new HttpClient ();
|
||||
using (var stream = await client.GetStreamAsync (uri)) {
|
||||
await stream.CopyToAsync (mem, token);
|
||||
mem.Position = 0;
|
||||
}
|
||||
}
|
||||
} catch (Exception) {
|
||||
return null;
|
||||
}
|
||||
return mem;
|
||||
}
|
||||
|
||||
static HashAlgorithm GetHashAlgorithm (DocumentHashAlgorithm algorithm)
|
||||
{
|
||||
switch (algorithm) {
|
||||
case DocumentHashAlgorithm.SHA1: return SHA1.Create ();
|
||||
case DocumentHashAlgorithm.SHA256: return SHA256.Create ();
|
||||
case DocumentHashAlgorithm.MD5: return MD5.Create ();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
bool CheckPdbHash (byte [] computedHash)
|
||||
{
|
||||
if (computedHash.Length != doc.Hash.Length)
|
||||
return false;
|
||||
|
||||
for (var i = 0; i < computedHash.Length; i++)
|
||||
if (computedHash[i] != doc.Hash[i])
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
byte[] ComputePdbHash (Stream sourceStream)
|
||||
{
|
||||
var algorithm = GetHashAlgorithm (doc.HashAlgorithm);
|
||||
if (algorithm != null)
|
||||
using (algorithm)
|
||||
return algorithm.ComputeHash (sourceStream);
|
||||
|
||||
return Array.Empty<byte> ();
|
||||
}
|
||||
|
||||
public async Task<Stream> GetSourceAsync (bool checkHash, CancellationToken token = default(CancellationToken))
|
||||
{
|
||||
if (doc.EmbeddedSource.Length > 0)
|
||||
return new MemoryStream (doc.EmbeddedSource, false);
|
||||
|
||||
MemoryStream mem;
|
||||
|
||||
mem = await GetDataAsync (SourceUri, token);
|
||||
if (mem != null && (!checkHash || CheckPdbHash (ComputePdbHash (mem)))) {
|
||||
mem.Position = 0;
|
||||
return mem;
|
||||
}
|
||||
|
||||
mem = await GetDataAsync (SourceLinkUri, token);
|
||||
if (mem != null && (!checkHash || CheckPdbHash (ComputePdbHash (mem)))) {
|
||||
mem.Position = 0;
|
||||
return mem;
|
||||
}
|
||||
|
||||
return MemoryStream.Null;
|
||||
}
|
||||
|
||||
public object ToScriptSource (int executionContextId, object executionContextAuxData)
|
||||
{
|
||||
return new {
|
||||
scriptId = SourceId.ToString (),
|
||||
url = Url,
|
||||
executionContextId,
|
||||
executionContextAuxData,
|
||||
//hash: should be the v8 hash algo, managed implementation is pending
|
||||
dotNetUrl = DotNetUrl,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
internal class DebugStore {
|
||||
List<AssemblyInfo> assemblies = new List<AssemblyInfo> ();
|
||||
readonly HttpClient client;
|
||||
readonly ILogger logger;
|
||||
|
||||
public DebugStore (ILogger logger, HttpClient client) {
|
||||
this.client = client;
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
public DebugStore (ILogger logger) : this (logger, new HttpClient ())
|
||||
{
|
||||
}
|
||||
|
||||
class DebugItem {
|
||||
public string Url { get; set; }
|
||||
public Task<byte[][]> Data { get; set; }
|
||||
}
|
||||
|
||||
public async IAsyncEnumerable<SourceFile> Load (SessionId sessionId, string [] loaded_files, [EnumeratorCancellation] CancellationToken token)
|
||||
{
|
||||
static bool MatchPdb (string asm, string pdb)
|
||||
=> Path.ChangeExtension (asm, "pdb") == pdb;
|
||||
|
||||
var asm_files = new List<string> ();
|
||||
var pdb_files = new List<string> ();
|
||||
foreach (var file_name in loaded_files) {
|
||||
if (file_name.EndsWith (".pdb", StringComparison.OrdinalIgnoreCase))
|
||||
pdb_files.Add (file_name);
|
||||
else
|
||||
asm_files.Add (file_name);
|
||||
}
|
||||
|
||||
List<DebugItem> steps = new List<DebugItem> ();
|
||||
foreach (var url in asm_files) {
|
||||
try {
|
||||
var pdb = pdb_files.FirstOrDefault (n => MatchPdb (url, n));
|
||||
steps.Add (
|
||||
new DebugItem {
|
||||
Url = url,
|
||||
Data = Task.WhenAll (client.GetByteArrayAsync (url), pdb != null ? client.GetByteArrayAsync (pdb) : Task.FromResult<byte []> (null))
|
||||
});
|
||||
} catch (Exception e) {
|
||||
logger.LogDebug ($"Failed to read {url} ({e.Message})");
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var step in steps) {
|
||||
AssemblyInfo assembly = null;
|
||||
try {
|
||||
var bytes = await step.Data;
|
||||
assembly = new AssemblyInfo (step.Url, bytes [0], bytes [1]);
|
||||
} catch (Exception e) {
|
||||
logger.LogDebug ($"Failed to load {step.Url} ({e.Message})");
|
||||
}
|
||||
if (assembly == null)
|
||||
continue;
|
||||
|
||||
assemblies.Add (assembly);
|
||||
foreach (var source in assembly.Sources)
|
||||
yield return source;
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<SourceFile> AllSources ()
|
||||
=> assemblies.SelectMany (a => a.Sources);
|
||||
|
||||
public SourceFile GetFileById (SourceId id)
|
||||
=> AllSources ().SingleOrDefault (f => f.SourceId.Equals (id));
|
||||
|
||||
public AssemblyInfo GetAssemblyByName (string name)
|
||||
=> assemblies.FirstOrDefault (a => a.Name.Equals (name, StringComparison.InvariantCultureIgnoreCase));
|
||||
|
||||
/*
|
||||
V8 uses zero based indexing for both line and column.
|
||||
PPDBs uses one based indexing for both line and column.
|
||||
*/
|
||||
static bool Match (SequencePoint sp, SourceLocation start, SourceLocation end)
|
||||
{
|
||||
var spStart = (Line: sp.StartLine - 1, Column: sp.StartColumn - 1);
|
||||
var spEnd = (Line: sp.EndLine - 1, Column: sp.EndColumn - 1);
|
||||
|
||||
if (start.Line > spEnd.Line)
|
||||
return false;
|
||||
|
||||
if (start.Column > spEnd.Column && start.Line == spEnd.Line)
|
||||
return false;
|
||||
|
||||
if (end.Line < spStart.Line)
|
||||
return false;
|
||||
|
||||
if (end.Column < spStart.Column && end.Line == spStart.Line)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public List<SourceLocation> FindPossibleBreakpoints (SourceLocation start, SourceLocation end)
|
||||
{
|
||||
//XXX FIXME no idea what todo with locations on different files
|
||||
if (start.Id != end.Id) {
|
||||
logger.LogDebug ($"FindPossibleBreakpoints: documents differ (start: {start.Id}) (end {end.Id}");
|
||||
return null;
|
||||
}
|
||||
|
||||
var sourceId = start.Id;
|
||||
|
||||
var doc = GetFileById (sourceId);
|
||||
|
||||
var res = new List<SourceLocation> ();
|
||||
if (doc == null) {
|
||||
logger.LogDebug ($"Could not find document {sourceId}");
|
||||
return res;
|
||||
}
|
||||
|
||||
foreach (var method in doc.Methods) {
|
||||
foreach (var sequencePoint in method.DebugInformation.SequencePoints) {
|
||||
if (!sequencePoint.IsHidden && Match (sequencePoint, start, end))
|
||||
res.Add (new SourceLocation (method, sequencePoint));
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/*
|
||||
V8 uses zero based indexing for both line and column.
|
||||
PPDBs uses one based indexing for both line and column.
|
||||
*/
|
||||
static bool Match (SequencePoint sp, int line, int column)
|
||||
{
|
||||
var bp = (line: line + 1, column: column + 1);
|
||||
|
||||
if (sp.StartLine > bp.line || sp.EndLine < bp.line)
|
||||
return false;
|
||||
|
||||
//Chrome sends a zero column even if getPossibleBreakpoints say something else
|
||||
if (column == 0)
|
||||
return true;
|
||||
|
||||
if (sp.StartColumn > bp.column && sp.StartLine == bp.line)
|
||||
return false;
|
||||
|
||||
if (sp.EndColumn < bp.column && sp.EndLine == bp.line)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public IEnumerable<SourceLocation> FindBreakpointLocations (BreakpointRequest request)
|
||||
{
|
||||
request.TryResolve (this);
|
||||
|
||||
var asm = assemblies.FirstOrDefault (a => a.Name.Equals (request.Assembly, StringComparison.OrdinalIgnoreCase));
|
||||
var sourceFile = asm?.Sources?.SingleOrDefault (s => s.DebuggerFileName.Equals (request.File, StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
if (sourceFile == null)
|
||||
yield break;
|
||||
|
||||
foreach (var method in sourceFile.Methods) {
|
||||
foreach (var sequencePoint in method.DebugInformation.SequencePoints) {
|
||||
if (!sequencePoint.IsHidden && Match (sequencePoint, request.Line, request.Column))
|
||||
yield return new SourceLocation (method, sequencePoint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string ToUrl (SourceLocation location)
|
||||
=> location != null ? GetFileById (location.Id).Url : "";
|
||||
}
|
||||
}
|
||||
|
|
@ -1,298 +0,0 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
using System.Threading;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace WebAssembly.Net.Debugging {
|
||||
|
||||
internal struct SessionId {
|
||||
public readonly string sessionId;
|
||||
|
||||
public SessionId (string sessionId)
|
||||
{
|
||||
this.sessionId = sessionId;
|
||||
}
|
||||
|
||||
// hashset treats 0 as unset
|
||||
public override int GetHashCode ()
|
||||
=> sessionId?.GetHashCode () ?? -1;
|
||||
|
||||
public override bool Equals (object obj)
|
||||
=> (obj is SessionId) ? ((SessionId) obj).sessionId == sessionId : false;
|
||||
|
||||
public static bool operator == (SessionId a, SessionId b)
|
||||
=> a.sessionId == b.sessionId;
|
||||
|
||||
public static bool operator != (SessionId a, SessionId b)
|
||||
=> a.sessionId != b.sessionId;
|
||||
|
||||
public static SessionId Null { get; } = new SessionId ();
|
||||
|
||||
public override string ToString ()
|
||||
=> $"session-{sessionId}";
|
||||
}
|
||||
|
||||
internal struct MessageId {
|
||||
public readonly string sessionId;
|
||||
public readonly int id;
|
||||
|
||||
public MessageId (string sessionId, int id)
|
||||
{
|
||||
this.sessionId = sessionId;
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public static implicit operator SessionId (MessageId id)
|
||||
=> new SessionId (id.sessionId);
|
||||
|
||||
public override string ToString ()
|
||||
=> $"msg-{sessionId}:::{id}";
|
||||
|
||||
public override int GetHashCode ()
|
||||
=> (sessionId?.GetHashCode () ?? 0) ^ id.GetHashCode ();
|
||||
|
||||
public override bool Equals (object obj)
|
||||
=> (obj is MessageId) ? ((MessageId) obj).sessionId == sessionId && ((MessageId) obj).id == id : false;
|
||||
}
|
||||
|
||||
internal class DotnetObjectId {
|
||||
public string Scheme { get; }
|
||||
public string Value { get; }
|
||||
|
||||
public static bool TryParse (JToken jToken, out DotnetObjectId objectId)
|
||||
=> TryParse (jToken?.Value<string>(), out objectId);
|
||||
|
||||
public static bool TryParse (string id, out DotnetObjectId objectId)
|
||||
{
|
||||
objectId = null;
|
||||
if (id == null)
|
||||
return false;
|
||||
|
||||
if (!id.StartsWith ("dotnet:"))
|
||||
return false;
|
||||
|
||||
var parts = id.Split (":", 3);
|
||||
|
||||
if (parts.Length < 3)
|
||||
return false;
|
||||
|
||||
objectId = new DotnetObjectId (parts[1], parts[2]);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public DotnetObjectId (string scheme, string value)
|
||||
{
|
||||
Scheme = scheme;
|
||||
Value = value;
|
||||
}
|
||||
|
||||
public override string ToString ()
|
||||
=> $"dotnet:{Scheme}:{Value}";
|
||||
}
|
||||
|
||||
internal struct Result {
|
||||
public JObject Value { get; private set; }
|
||||
public JObject Error { get; private set; }
|
||||
|
||||
public bool IsOk => Value != null;
|
||||
public bool IsErr => Error != null;
|
||||
|
||||
Result (JObject result, JObject error)
|
||||
{
|
||||
if (result != null && error != null)
|
||||
throw new ArgumentException ($"Both {nameof(result)} and {nameof(error)} arguments cannot be non-null.");
|
||||
|
||||
bool resultHasError = String.Compare ((result? ["result"] as JObject)? ["subtype"]?. Value<string> (), "error") == 0;
|
||||
if (result != null && resultHasError) {
|
||||
this.Value = null;
|
||||
this.Error = result;
|
||||
} else {
|
||||
this.Value = result;
|
||||
this.Error = error;
|
||||
}
|
||||
}
|
||||
|
||||
public static Result FromJson (JObject obj)
|
||||
{
|
||||
//Log ("protocol", $"from result: {obj}");
|
||||
return new Result (obj ["result"] as JObject, obj ["error"] as JObject);
|
||||
}
|
||||
|
||||
public static Result Ok (JObject ok)
|
||||
=> new Result (ok, null);
|
||||
|
||||
public static Result OkFromObject (object ok)
|
||||
=> Ok (JObject.FromObject(ok));
|
||||
|
||||
public static Result Err (JObject err)
|
||||
=> new Result (null, err);
|
||||
|
||||
public static Result Err (string msg)
|
||||
=> new Result (null, JObject.FromObject (new { message = msg }));
|
||||
|
||||
public static Result Exception (Exception e)
|
||||
=> new Result (null, JObject.FromObject (new { message = e.Message }));
|
||||
|
||||
public JObject ToJObject (MessageId target) {
|
||||
if (IsOk) {
|
||||
return JObject.FromObject (new {
|
||||
target.id,
|
||||
target.sessionId,
|
||||
result = Value
|
||||
});
|
||||
} else {
|
||||
return JObject.FromObject (new {
|
||||
target.id,
|
||||
target.sessionId,
|
||||
error = Error
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString ()
|
||||
{
|
||||
return $"[Result: IsOk: {IsOk}, IsErr: {IsErr}, Value: {Value?.ToString ()}, Error: {Error?.ToString ()} ]";
|
||||
}
|
||||
}
|
||||
|
||||
internal class MonoCommands {
|
||||
public string expression { get; set; }
|
||||
public string objectGroup { get; set; } = "mono-debugger";
|
||||
public bool includeCommandLineAPI { get; set; } = false;
|
||||
public bool silent { get; set; } = false;
|
||||
public bool returnByValue { get; set; } = true;
|
||||
|
||||
public MonoCommands (string expression)
|
||||
=> this.expression = expression;
|
||||
|
||||
public static MonoCommands GetCallStack ()
|
||||
=> new MonoCommands ("MONO.mono_wasm_get_call_stack()");
|
||||
|
||||
public static MonoCommands IsRuntimeReady ()
|
||||
=> new MonoCommands ("MONO.mono_wasm_runtime_is_ready");
|
||||
|
||||
public static MonoCommands StartSingleStepping (StepKind kind)
|
||||
=> new MonoCommands ($"MONO.mono_wasm_start_single_stepping ({(int)kind})");
|
||||
|
||||
public static MonoCommands GetLoadedFiles ()
|
||||
=> new MonoCommands ("MONO.mono_wasm_get_loaded_files()");
|
||||
|
||||
public static MonoCommands ClearAllBreakpoints ()
|
||||
=> new MonoCommands ("MONO.mono_wasm_clear_all_breakpoints()");
|
||||
|
||||
public static MonoCommands GetDetails (DotnetObjectId objectId, JToken args = null)
|
||||
=> new MonoCommands ($"MONO.mono_wasm_get_details ('{objectId}', {(args ?? "{}")})");
|
||||
|
||||
public static MonoCommands GetScopeVariables (int scopeId, params int[] vars)
|
||||
=> new MonoCommands ($"MONO.mono_wasm_get_variables({scopeId}, [ {string.Join (",", vars)} ])");
|
||||
|
||||
public static MonoCommands SetBreakpoint (string assemblyName, uint methodToken, int ilOffset)
|
||||
=> new MonoCommands ($"MONO.mono_wasm_set_breakpoint (\"{assemblyName}\", {methodToken}, {ilOffset})");
|
||||
|
||||
public static MonoCommands RemoveBreakpoint (int breakpointId)
|
||||
=> new MonoCommands ($"MONO.mono_wasm_remove_breakpoint({breakpointId})");
|
||||
|
||||
public static MonoCommands ReleaseObject (DotnetObjectId objectId)
|
||||
=> new MonoCommands ($"MONO.mono_wasm_release_object('{objectId}')");
|
||||
|
||||
public static MonoCommands CallFunctionOn (JToken args)
|
||||
=> new MonoCommands ($"MONO.mono_wasm_call_function_on ({args.ToString ()})");
|
||||
}
|
||||
|
||||
internal enum MonoErrorCodes {
|
||||
BpNotFound = 100000,
|
||||
}
|
||||
|
||||
internal class MonoConstants {
|
||||
public const string RUNTIME_IS_READY = "mono_wasm_runtime_ready";
|
||||
}
|
||||
|
||||
class Frame {
|
||||
public Frame (MethodInfo method, SourceLocation location, int id)
|
||||
{
|
||||
this.Method = method;
|
||||
this.Location = location;
|
||||
this.Id = id;
|
||||
}
|
||||
|
||||
public MethodInfo Method { get; private set; }
|
||||
public SourceLocation Location { get; private set; }
|
||||
public int Id { get; private set; }
|
||||
}
|
||||
|
||||
class Breakpoint {
|
||||
public SourceLocation Location { get; private set; }
|
||||
public int RemoteId { get; set; }
|
||||
public BreakpointState State { get; set; }
|
||||
public string StackId { get; private set; }
|
||||
|
||||
public static bool TryParseId (string stackId, out int id)
|
||||
{
|
||||
id = -1;
|
||||
if (stackId?.StartsWith ("dotnet:", StringComparison.Ordinal) != true)
|
||||
return false;
|
||||
|
||||
return int.TryParse (stackId.Substring ("dotnet:".Length), out id);
|
||||
}
|
||||
|
||||
public Breakpoint (string stackId, SourceLocation loc, BreakpointState state)
|
||||
{
|
||||
this.StackId = stackId;
|
||||
this.Location = loc;
|
||||
this.State = state;
|
||||
}
|
||||
}
|
||||
|
||||
enum BreakpointState {
|
||||
Active,
|
||||
Disabled,
|
||||
Pending
|
||||
}
|
||||
|
||||
enum StepKind {
|
||||
Into,
|
||||
Out,
|
||||
Over
|
||||
}
|
||||
|
||||
internal class ExecutionContext {
|
||||
public string DebuggerId { get; set; }
|
||||
public Dictionary<string,BreakpointRequest> BreakpointRequests { get; } = new Dictionary<string,BreakpointRequest> ();
|
||||
|
||||
public TaskCompletionSource<DebugStore> ready = null;
|
||||
public bool IsRuntimeReady => ready != null && ready.Task.IsCompleted;
|
||||
|
||||
public int Id { get; set; }
|
||||
public object AuxData { get; set; }
|
||||
|
||||
public List<Frame> CallStack { get; set; }
|
||||
|
||||
internal DebugStore store;
|
||||
public TaskCompletionSource<DebugStore> Source { get; } = new TaskCompletionSource<DebugStore> ();
|
||||
|
||||
public Dictionary<string, JToken> LocalsCache = new Dictionary<string, JToken> ();
|
||||
|
||||
public DebugStore Store {
|
||||
get {
|
||||
if (store == null || !Source.Task.IsCompleted)
|
||||
return null;
|
||||
|
||||
return store;
|
||||
}
|
||||
}
|
||||
|
||||
public void ClearState ()
|
||||
{
|
||||
CallStack = null;
|
||||
LocalsCache.Clear ();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,337 +0,0 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
using System.Net.WebSockets;
|
||||
using System.Threading;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace WebAssembly.Net.Debugging {
|
||||
|
||||
class DevToolsQueue {
|
||||
Task current_send;
|
||||
List<byte []> pending;
|
||||
|
||||
public WebSocket Ws { get; private set; }
|
||||
public Task CurrentSend { get { return current_send; } }
|
||||
public DevToolsQueue (WebSocket sock)
|
||||
{
|
||||
this.Ws = sock;
|
||||
pending = new List<byte []> ();
|
||||
}
|
||||
|
||||
public Task Send (byte [] bytes, CancellationToken token)
|
||||
{
|
||||
pending.Add (bytes);
|
||||
if (pending.Count == 1) {
|
||||
if (current_send != null)
|
||||
throw new Exception ("current_send MUST BE NULL IF THERE'S no pending send");
|
||||
//logger.LogTrace ("sending {0} bytes", bytes.Length);
|
||||
current_send = Ws.SendAsync (new ArraySegment<byte> (bytes), WebSocketMessageType.Text, true, token);
|
||||
return current_send;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Task Pump (CancellationToken token)
|
||||
{
|
||||
current_send = null;
|
||||
pending.RemoveAt (0);
|
||||
|
||||
if (pending.Count > 0) {
|
||||
if (current_send != null)
|
||||
throw new Exception ("current_send MUST BE NULL IF THERE'S no pending send");
|
||||
|
||||
current_send = Ws.SendAsync (new ArraySegment<byte> (pending [0]), WebSocketMessageType.Text, true, token);
|
||||
return current_send;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
internal class DevToolsProxy {
|
||||
TaskCompletionSource<bool> side_exception = new TaskCompletionSource<bool> ();
|
||||
TaskCompletionSource<bool> client_initiated_close = new TaskCompletionSource<bool> ();
|
||||
Dictionary<MessageId, TaskCompletionSource<Result>> pending_cmds = new Dictionary<MessageId, TaskCompletionSource<Result>> ();
|
||||
ClientWebSocket browser;
|
||||
WebSocket ide;
|
||||
int next_cmd_id;
|
||||
List<Task> pending_ops = new List<Task> ();
|
||||
List<DevToolsQueue> queues = new List<DevToolsQueue> ();
|
||||
|
||||
protected readonly ILogger logger;
|
||||
|
||||
public DevToolsProxy (ILoggerFactory loggerFactory)
|
||||
{
|
||||
logger = loggerFactory.CreateLogger<DevToolsProxy>();
|
||||
}
|
||||
|
||||
protected virtual Task<bool> AcceptEvent (SessionId sessionId, string method, JObject args, CancellationToken token)
|
||||
{
|
||||
return Task.FromResult (false);
|
||||
}
|
||||
|
||||
protected virtual Task<bool> AcceptCommand (MessageId id, string method, JObject args, CancellationToken token)
|
||||
{
|
||||
return Task.FromResult (false);
|
||||
}
|
||||
|
||||
async Task<string> ReadOne (WebSocket socket, CancellationToken token)
|
||||
{
|
||||
byte [] buff = new byte [4000];
|
||||
var mem = new MemoryStream ();
|
||||
while (true) {
|
||||
|
||||
if (socket.State != WebSocketState.Open) {
|
||||
Log ("error", $"DevToolsProxy: Socket is no longer open.");
|
||||
client_initiated_close.TrySetResult (true);
|
||||
return null;
|
||||
}
|
||||
|
||||
var result = await socket.ReceiveAsync (new ArraySegment<byte> (buff), token);
|
||||
if (result.MessageType == WebSocketMessageType.Close) {
|
||||
client_initiated_close.TrySetResult (true);
|
||||
return null;
|
||||
}
|
||||
|
||||
mem.Write (buff, 0, result.Count);
|
||||
|
||||
if (result.EndOfMessage)
|
||||
return Encoding.UTF8.GetString (mem.GetBuffer (), 0, (int)mem.Length);
|
||||
}
|
||||
}
|
||||
|
||||
DevToolsQueue GetQueueForSocket (WebSocket ws)
|
||||
{
|
||||
return queues.FirstOrDefault (q => q.Ws == ws);
|
||||
}
|
||||
|
||||
DevToolsQueue GetQueueForTask (Task task)
|
||||
{
|
||||
return queues.FirstOrDefault (q => q.CurrentSend == task);
|
||||
}
|
||||
|
||||
void Send (WebSocket to, JObject o, CancellationToken token)
|
||||
{
|
||||
var sender = browser == to ? "Send-browser" : "Send-ide";
|
||||
|
||||
var method = o ["method"]?.ToString ();
|
||||
//if (method != "Debugger.scriptParsed" && method != "Runtime.consoleAPICalled")
|
||||
Log ("protocol", $"{sender}: " + JsonConvert.SerializeObject (o));
|
||||
var bytes = Encoding.UTF8.GetBytes (o.ToString ());
|
||||
|
||||
var queue = GetQueueForSocket (to);
|
||||
|
||||
var task = queue.Send (bytes, token);
|
||||
if (task != null)
|
||||
pending_ops.Add (task);
|
||||
}
|
||||
|
||||
async Task OnEvent (SessionId sessionId, string method, JObject args, CancellationToken token)
|
||||
{
|
||||
try {
|
||||
if (!await AcceptEvent (sessionId, method, args, token)) {
|
||||
//logger.LogDebug ("proxy browser: {0}::{1}",method, args);
|
||||
SendEventInternal (sessionId, method, args, token);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
side_exception.TrySetException (e);
|
||||
}
|
||||
}
|
||||
|
||||
async Task OnCommand (MessageId id, string method, JObject args, CancellationToken token)
|
||||
{
|
||||
try {
|
||||
if (!await AcceptCommand (id, method, args, token)) {
|
||||
var res = await SendCommandInternal (id, method, args, token);
|
||||
SendResponseInternal (id, res, token);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
side_exception.TrySetException (e);
|
||||
}
|
||||
}
|
||||
|
||||
void OnResponse (MessageId id, Result result)
|
||||
{
|
||||
//logger.LogTrace ("got id {0} res {1}", id, result);
|
||||
// Fixme
|
||||
if (pending_cmds.Remove (id, out var task)) {
|
||||
task.SetResult (result);
|
||||
return;
|
||||
}
|
||||
logger.LogError ("Cannot respond to command: {id} with result: {result} - command is not pending", id, result);
|
||||
}
|
||||
|
||||
void ProcessBrowserMessage (string msg, CancellationToken token)
|
||||
{
|
||||
var res = JObject.Parse (msg);
|
||||
|
||||
var method = res ["method"]?.ToString ();
|
||||
//if (method != "Debugger.scriptParsed" && method != "Runtime.consoleAPICalled")
|
||||
Log ("protocol", $"browser: {msg}");
|
||||
|
||||
if (res ["id"] == null)
|
||||
pending_ops.Add (OnEvent (new SessionId (res ["sessionId"]?.Value<string> ()), res ["method"].Value<string> (), res ["params"] as JObject, token));
|
||||
else
|
||||
OnResponse (new MessageId (res ["sessionId"]?.Value<string> (), res ["id"].Value<int> ()), Result.FromJson (res));
|
||||
}
|
||||
|
||||
void ProcessIdeMessage (string msg, CancellationToken token)
|
||||
{
|
||||
Log ("protocol", $"ide: {msg}");
|
||||
if (!string.IsNullOrEmpty (msg)) {
|
||||
var res = JObject.Parse (msg);
|
||||
pending_ops.Add (OnCommand (
|
||||
new MessageId (res ["sessionId"]?.Value<string> (), res ["id"].Value<int> ()),
|
||||
res ["method"].Value<string> (),
|
||||
res ["params"] as JObject, token));
|
||||
}
|
||||
}
|
||||
|
||||
internal async Task<Result> SendCommand (SessionId id, string method, JObject args, CancellationToken token) {
|
||||
//Log ("verbose", $"sending command {method}: {args}");
|
||||
return await SendCommandInternal (id, method, args, token);
|
||||
}
|
||||
|
||||
Task<Result> SendCommandInternal (SessionId sessionId, string method, JObject args, CancellationToken token)
|
||||
{
|
||||
int id = Interlocked.Increment (ref next_cmd_id);
|
||||
|
||||
var o = JObject.FromObject (new {
|
||||
id,
|
||||
method,
|
||||
@params = args
|
||||
});
|
||||
if (sessionId.sessionId != null)
|
||||
o["sessionId"] = sessionId.sessionId;
|
||||
var tcs = new TaskCompletionSource<Result> ();
|
||||
|
||||
var msgId = new MessageId (sessionId.sessionId, id);
|
||||
//Log ("verbose", $"add cmd id {sessionId}-{id}");
|
||||
pending_cmds[msgId] = tcs;
|
||||
|
||||
Send (this.browser, o, token);
|
||||
return tcs.Task;
|
||||
}
|
||||
|
||||
public void SendEvent (SessionId sessionId, string method, JObject args, CancellationToken token)
|
||||
{
|
||||
//Log ("verbose", $"sending event {method}: {args}");
|
||||
SendEventInternal (sessionId, method, args, token);
|
||||
}
|
||||
|
||||
void SendEventInternal (SessionId sessionId, string method, JObject args, CancellationToken token)
|
||||
{
|
||||
var o = JObject.FromObject (new {
|
||||
method,
|
||||
@params = args
|
||||
});
|
||||
if (sessionId.sessionId != null)
|
||||
o["sessionId"] = sessionId.sessionId;
|
||||
|
||||
Send (this.ide, o, token);
|
||||
}
|
||||
|
||||
internal void SendResponse (MessageId id, Result result, CancellationToken token)
|
||||
{
|
||||
SendResponseInternal (id, result, token);
|
||||
}
|
||||
|
||||
void SendResponseInternal (MessageId id, Result result, CancellationToken token)
|
||||
{
|
||||
JObject o = result.ToJObject (id);
|
||||
if (result.IsErr)
|
||||
logger.LogError ($"sending error response for id: {id} -> {result}");
|
||||
|
||||
Send (this.ide, o, token);
|
||||
}
|
||||
|
||||
// , HttpContext context)
|
||||
public async Task Run (Uri browserUri, WebSocket ideSocket)
|
||||
{
|
||||
Log ("info", $"DevToolsProxy: Starting on {browserUri}");
|
||||
using (this.ide = ideSocket) {
|
||||
Log ("verbose", $"DevToolsProxy: IDE waiting for connection on {browserUri}");
|
||||
queues.Add (new DevToolsQueue (this.ide));
|
||||
using (this.browser = new ClientWebSocket ()) {
|
||||
this.browser.Options.KeepAliveInterval = Timeout.InfiniteTimeSpan;
|
||||
await this.browser.ConnectAsync (browserUri, CancellationToken.None);
|
||||
queues.Add (new DevToolsQueue (this.browser));
|
||||
|
||||
Log ("verbose", $"DevToolsProxy: Client connected on {browserUri}");
|
||||
var x = new CancellationTokenSource ();
|
||||
|
||||
pending_ops.Add (ReadOne (browser, x.Token));
|
||||
pending_ops.Add (ReadOne (ide, x.Token));
|
||||
pending_ops.Add (side_exception.Task);
|
||||
pending_ops.Add (client_initiated_close.Task);
|
||||
|
||||
try {
|
||||
while (!x.IsCancellationRequested) {
|
||||
var task = await Task.WhenAny (pending_ops.ToArray ());
|
||||
//logger.LogTrace ("pump {0} {1}", task, pending_ops.IndexOf (task));
|
||||
if (task == pending_ops [0]) {
|
||||
var msg = ((Task<string>)task).Result;
|
||||
if (msg != null) {
|
||||
pending_ops [0] = ReadOne (browser, x.Token); //queue next read
|
||||
ProcessBrowserMessage (msg, x.Token);
|
||||
}
|
||||
} else if (task == pending_ops [1]) {
|
||||
var msg = ((Task<string>)task).Result;
|
||||
if (msg != null) {
|
||||
pending_ops [1] = ReadOne (ide, x.Token); //queue next read
|
||||
ProcessIdeMessage (msg, x.Token);
|
||||
}
|
||||
} else if (task == pending_ops [2]) {
|
||||
var res = ((Task<bool>)task).Result;
|
||||
throw new Exception ("side task must always complete with an exception, what's going on???");
|
||||
} else if (task == pending_ops [3]) {
|
||||
var res = ((Task<bool>)task).Result;
|
||||
Log ("verbose", $"DevToolsProxy: Client initiated close from {browserUri}");
|
||||
x.Cancel ();
|
||||
} else {
|
||||
//must be a background task
|
||||
pending_ops.Remove (task);
|
||||
var queue = GetQueueForTask (task);
|
||||
if (queue != null) {
|
||||
var tsk = queue.Pump (x.Token);
|
||||
if (tsk != null)
|
||||
pending_ops.Add (tsk);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log ("error", $"DevToolsProxy::Run: Exception {e}");
|
||||
//throw;
|
||||
} finally {
|
||||
if (!x.IsCancellationRequested)
|
||||
x.Cancel ();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void Log (string priority, string msg)
|
||||
{
|
||||
switch (priority) {
|
||||
case "protocol":
|
||||
logger.LogTrace (msg);
|
||||
break;
|
||||
case "verbose":
|
||||
logger.LogDebug (msg);
|
||||
break;
|
||||
case "info":
|
||||
case "warning":
|
||||
case "error":
|
||||
default:
|
||||
logger.LogDebug (msg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,182 +0,0 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
using System.Threading;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CSharp;
|
||||
using Microsoft.CodeAnalysis.Emit;
|
||||
using System.Reflection;
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
|
||||
namespace WebAssembly.Net.Debugging {
|
||||
|
||||
internal class EvaluateExpression {
|
||||
|
||||
class FindThisExpression : CSharpSyntaxWalker {
|
||||
public List<string> thisExpressions = new List<string> ();
|
||||
public SyntaxTree syntaxTree;
|
||||
public FindThisExpression (SyntaxTree syntax)
|
||||
{
|
||||
syntaxTree = syntax;
|
||||
}
|
||||
public override void Visit (SyntaxNode node)
|
||||
{
|
||||
if (node is ThisExpressionSyntax) {
|
||||
if (node.Parent is MemberAccessExpressionSyntax thisParent && thisParent.Name is IdentifierNameSyntax) {
|
||||
IdentifierNameSyntax var = thisParent.Name as IdentifierNameSyntax;
|
||||
thisExpressions.Add(var.Identifier.Text);
|
||||
var newRoot = syntaxTree.GetRoot ().ReplaceNode (node.Parent, thisParent.Name);
|
||||
syntaxTree = syntaxTree.WithRootAndOptions (newRoot, syntaxTree.Options);
|
||||
this.Visit (GetExpressionFromSyntaxTree(syntaxTree));
|
||||
}
|
||||
}
|
||||
else
|
||||
base.Visit (node);
|
||||
}
|
||||
|
||||
public async Task CheckIfIsProperty (MonoProxy proxy, MessageId msg_id, int scope_id, CancellationToken token)
|
||||
{
|
||||
foreach (var var in thisExpressions) {
|
||||
JToken value = await proxy.TryGetVariableValue (msg_id, scope_id, var, true, token);
|
||||
if (value == null)
|
||||
throw new Exception ($"The property {var} does not exist in the current context");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class FindVariableNMethodCall : CSharpSyntaxWalker {
|
||||
public List<IdentifierNameSyntax> variables = new List<IdentifierNameSyntax> ();
|
||||
public List<ThisExpressionSyntax> thisList = new List<ThisExpressionSyntax> ();
|
||||
public List<InvocationExpressionSyntax> methodCall = new List<InvocationExpressionSyntax> ();
|
||||
public List<object> values = new List<Object> ();
|
||||
|
||||
public override void Visit (SyntaxNode node)
|
||||
{
|
||||
if (node is IdentifierNameSyntax identifier && !variables.Any (x => x.Identifier.Text == identifier.Identifier.Text))
|
||||
variables.Add (identifier);
|
||||
if (node is InvocationExpressionSyntax) {
|
||||
methodCall.Add (node as InvocationExpressionSyntax);
|
||||
throw new Exception ("Method Call is not implemented yet");
|
||||
}
|
||||
if (node is AssignmentExpressionSyntax)
|
||||
throw new Exception ("Assignment is not implemented yet");
|
||||
base.Visit (node);
|
||||
}
|
||||
public async Task<SyntaxTree> ReplaceVars (SyntaxTree syntaxTree, MonoProxy proxy, MessageId msg_id, int scope_id, CancellationToken token)
|
||||
{
|
||||
CompilationUnitSyntax root = syntaxTree.GetCompilationUnitRoot ();
|
||||
foreach (var var in variables) {
|
||||
ClassDeclarationSyntax classDeclaration = root.Members.ElementAt (0) as ClassDeclarationSyntax;
|
||||
MethodDeclarationSyntax method = classDeclaration.Members.ElementAt (0) as MethodDeclarationSyntax;
|
||||
|
||||
JToken value = await proxy.TryGetVariableValue (msg_id, scope_id, var.Identifier.Text, false, token);
|
||||
|
||||
if (value == null)
|
||||
throw new Exception ($"The name {var.Identifier.Text} does not exist in the current context");
|
||||
|
||||
values.Add (ConvertJSToCSharpType (value ["value"] ["value"].ToString (), value ["value"] ["type"].ToString ()));
|
||||
|
||||
var updatedMethod = method.AddParameterListParameters (
|
||||
SyntaxFactory.Parameter (
|
||||
SyntaxFactory.Identifier (var.Identifier.Text))
|
||||
.WithType (SyntaxFactory.ParseTypeName (GetTypeFullName(value["value"]["type"].ToString()))));
|
||||
root = root.ReplaceNode (method, updatedMethod);
|
||||
}
|
||||
syntaxTree = syntaxTree.WithRootAndOptions (root, syntaxTree.Options);
|
||||
return syntaxTree;
|
||||
}
|
||||
|
||||
private object ConvertJSToCSharpType (string v, string type)
|
||||
{
|
||||
switch (type) {
|
||||
case "number":
|
||||
return Convert.ChangeType (v, typeof (int));
|
||||
case "string":
|
||||
return v;
|
||||
}
|
||||
|
||||
throw new Exception ($"Evaluate of this datatype {type} not implemented yet");
|
||||
}
|
||||
|
||||
private string GetTypeFullName (string type)
|
||||
{
|
||||
switch (type) {
|
||||
case "number":
|
||||
return typeof (int).FullName;
|
||||
case "string":
|
||||
return typeof (string).FullName;
|
||||
}
|
||||
|
||||
throw new Exception ($"Evaluate of this datatype {type} not implemented yet");
|
||||
}
|
||||
}
|
||||
static SyntaxNode GetExpressionFromSyntaxTree (SyntaxTree syntaxTree)
|
||||
{
|
||||
CompilationUnitSyntax root = syntaxTree.GetCompilationUnitRoot ();
|
||||
ClassDeclarationSyntax classDeclaration = root.Members.ElementAt (0) as ClassDeclarationSyntax;
|
||||
MethodDeclarationSyntax methodDeclaration = classDeclaration.Members.ElementAt (0) as MethodDeclarationSyntax;
|
||||
BlockSyntax blockValue = methodDeclaration.Body;
|
||||
ReturnStatementSyntax returnValue = blockValue.Statements.ElementAt (0) as ReturnStatementSyntax;
|
||||
InvocationExpressionSyntax expressionInvocation = returnValue.Expression as InvocationExpressionSyntax;
|
||||
MemberAccessExpressionSyntax expressionMember = expressionInvocation.Expression as MemberAccessExpressionSyntax;
|
||||
ParenthesizedExpressionSyntax expressionParenthesized = expressionMember.Expression as ParenthesizedExpressionSyntax;
|
||||
return expressionParenthesized.Expression;
|
||||
}
|
||||
internal static async Task<string> CompileAndRunTheExpression (MonoProxy proxy, MessageId msg_id, int scope_id, string expression, CancellationToken token)
|
||||
{
|
||||
FindVariableNMethodCall findVarNMethodCall = new FindVariableNMethodCall ();
|
||||
string retString;
|
||||
SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText (@"
|
||||
using System;
|
||||
public class CompileAndRunTheExpression
|
||||
{
|
||||
public string Evaluate()
|
||||
{
|
||||
return (" + expression + @").ToString();
|
||||
}
|
||||
}");
|
||||
|
||||
FindThisExpression findThisExpression = new FindThisExpression (syntaxTree);
|
||||
var expressionTree = GetExpressionFromSyntaxTree(syntaxTree);
|
||||
findThisExpression.Visit (expressionTree);
|
||||
await findThisExpression.CheckIfIsProperty (proxy, msg_id, scope_id, token);
|
||||
syntaxTree = findThisExpression.syntaxTree;
|
||||
|
||||
expressionTree = GetExpressionFromSyntaxTree (syntaxTree);
|
||||
findVarNMethodCall.Visit (expressionTree);
|
||||
|
||||
syntaxTree = await findVarNMethodCall.ReplaceVars (syntaxTree, proxy, msg_id, scope_id, token);
|
||||
|
||||
MetadataReference [] references = new MetadataReference []
|
||||
{
|
||||
MetadataReference.CreateFromFile(typeof(object).Assembly.Location),
|
||||
MetadataReference.CreateFromFile(typeof(Enumerable).Assembly.Location)
|
||||
};
|
||||
|
||||
CSharpCompilation compilation = CSharpCompilation.Create (
|
||||
"compileAndRunTheExpression",
|
||||
syntaxTrees: new [] { syntaxTree },
|
||||
references: references,
|
||||
options: new CSharpCompilationOptions (OutputKind.DynamicallyLinkedLibrary));
|
||||
using (var ms = new MemoryStream ()) {
|
||||
EmitResult result = compilation.Emit (ms);
|
||||
ms.Seek (0, SeekOrigin.Begin);
|
||||
Assembly assembly = Assembly.Load (ms.ToArray ());
|
||||
Type type = assembly.GetType ("CompileAndRunTheExpression");
|
||||
object obj = Activator.CreateInstance (type);
|
||||
var ret = type.InvokeMember ("Evaluate",
|
||||
BindingFlags.Default | BindingFlags.InvokeMethod,
|
||||
null,
|
||||
obj,
|
||||
//new object [] { 10 }
|
||||
findVarNMethodCall.values.ToArray ());
|
||||
retString = ret.ToString ();
|
||||
}
|
||||
return retString;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,885 +0,0 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
using System.Threading;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.CodeAnalysis;
|
||||
|
||||
|
||||
namespace WebAssembly.Net.Debugging {
|
||||
|
||||
internal class MonoProxy : DevToolsProxy {
|
||||
HashSet<SessionId> sessions = new HashSet<SessionId> ();
|
||||
Dictionary<SessionId, ExecutionContext> contexts = new Dictionary<SessionId, ExecutionContext> ();
|
||||
|
||||
public MonoProxy (ILoggerFactory loggerFactory, bool hideWebDriver = true) : base(loggerFactory) { this.hideWebDriver = hideWebDriver; }
|
||||
|
||||
readonly bool hideWebDriver;
|
||||
|
||||
internal ExecutionContext GetContext (SessionId sessionId)
|
||||
{
|
||||
if (contexts.TryGetValue (sessionId, out var context))
|
||||
return context;
|
||||
|
||||
throw new ArgumentException ($"Invalid Session: \"{sessionId}\"", nameof (sessionId));
|
||||
}
|
||||
|
||||
bool UpdateContext (SessionId sessionId, ExecutionContext executionContext, out ExecutionContext previousExecutionContext)
|
||||
{
|
||||
var previous = contexts.TryGetValue (sessionId, out previousExecutionContext);
|
||||
contexts[sessionId] = executionContext;
|
||||
return previous;
|
||||
}
|
||||
|
||||
internal Task<Result> SendMonoCommand (SessionId id, MonoCommands cmd, CancellationToken token)
|
||||
=> SendCommand (id, "Runtime.evaluate", JObject.FromObject (cmd), token);
|
||||
|
||||
protected override async Task<bool> AcceptEvent (SessionId sessionId, string method, JObject args, CancellationToken token)
|
||||
{
|
||||
switch (method) {
|
||||
case "Runtime.consoleAPICalled": {
|
||||
var type = args["type"]?.ToString ();
|
||||
if (type == "debug") {
|
||||
if (args["args"]?[0]?["value"]?.ToString () == MonoConstants.RUNTIME_IS_READY && args["args"]?[1]?["value"]?.ToString () == "fe00e07a-5519-4dfe-b35a-f867dbaf2e28")
|
||||
await RuntimeReady (sessionId, token);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case "Runtime.executionContextCreated": {
|
||||
SendEvent (sessionId, method, args, token);
|
||||
var ctx = args? ["context"];
|
||||
var aux_data = ctx? ["auxData"] as JObject;
|
||||
var id = ctx ["id"].Value<int> ();
|
||||
if (aux_data != null) {
|
||||
var is_default = aux_data ["isDefault"]?.Value<bool> ();
|
||||
if (is_default == true) {
|
||||
await OnDefaultContext (sessionId, new ExecutionContext { Id = id, AuxData = aux_data }, token);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
case "Debugger.paused": {
|
||||
//TODO figure out how to stich out more frames and, in particular what happens when real wasm is on the stack
|
||||
var top_func = args? ["callFrames"]? [0]? ["functionName"]?.Value<string> ();
|
||||
|
||||
if (top_func == "mono_wasm_fire_bp" || top_func == "_mono_wasm_fire_bp") {
|
||||
return await OnBreakpointHit (sessionId, args, token);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case "Debugger.breakpointResolved": {
|
||||
break;
|
||||
}
|
||||
|
||||
case "Debugger.scriptParsed": {
|
||||
var url = args? ["url"]?.Value<string> () ?? "";
|
||||
|
||||
switch (url) {
|
||||
case var _ when url == "":
|
||||
case var _ when url.StartsWith ("wasm://", StringComparison.Ordinal): {
|
||||
Log ("verbose", $"ignoring wasm: Debugger.scriptParsed {url}");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Log ("verbose", $"proxying Debugger.scriptParsed ({sessionId.sessionId}) {url} {args}");
|
||||
break;
|
||||
}
|
||||
|
||||
case "Target.attachedToTarget": {
|
||||
if (args["targetInfo"]["type"]?.ToString() == "page")
|
||||
await DeleteWebDriver (new SessionId (args["sessionId"]?.ToString ()), token);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
async Task<bool> IsRuntimeAlreadyReadyAlready (SessionId sessionId, CancellationToken token)
|
||||
{
|
||||
var res = await SendMonoCommand (sessionId, MonoCommands.IsRuntimeReady (), token);
|
||||
return res.Value? ["result"]? ["value"]?.Value<bool> () ?? false;
|
||||
}
|
||||
|
||||
static int bpIdGenerator;
|
||||
|
||||
protected override async Task<bool> AcceptCommand (MessageId id, string method, JObject args, CancellationToken token)
|
||||
{
|
||||
// Inspector doesn't use the Target domain or sessions
|
||||
// so we try to init immediately
|
||||
if (hideWebDriver && id == SessionId.Null)
|
||||
await DeleteWebDriver (id, token);
|
||||
|
||||
if (!contexts.TryGetValue (id, out var context))
|
||||
return false;
|
||||
|
||||
switch (method) {
|
||||
case "Target.attachToTarget": {
|
||||
var resp = await SendCommand (id, method, args, token);
|
||||
await DeleteWebDriver (new SessionId (resp.Value ["sessionId"]?.ToString ()), token);
|
||||
break;
|
||||
}
|
||||
|
||||
case "Debugger.enable": {
|
||||
var resp = await SendCommand (id, method, args, token);
|
||||
|
||||
context.DebuggerId = resp.Value ["debuggerId"]?.ToString ();
|
||||
|
||||
if (await IsRuntimeAlreadyReadyAlready (id, token))
|
||||
await RuntimeReady (id, token);
|
||||
|
||||
SendResponse (id,resp,token);
|
||||
return true;
|
||||
}
|
||||
|
||||
case "Debugger.getScriptSource": {
|
||||
var script = args? ["scriptId"]?.Value<string> ();
|
||||
return await OnGetScriptSource (id, script, token);
|
||||
}
|
||||
|
||||
case "Runtime.compileScript": {
|
||||
var exp = args? ["expression"]?.Value<string> ();
|
||||
if (exp.StartsWith ("//dotnet:", StringComparison.Ordinal)) {
|
||||
OnCompileDotnetScript (id, token);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case "Debugger.getPossibleBreakpoints": {
|
||||
var resp = await SendCommand (id, method, args, token);
|
||||
if (resp.IsOk && resp.Value["locations"].HasValues) {
|
||||
SendResponse (id, resp, token);
|
||||
return true;
|
||||
}
|
||||
|
||||
var start = SourceLocation.Parse (args? ["start"] as JObject);
|
||||
//FIXME support variant where restrictToFunction=true and end is omitted
|
||||
var end = SourceLocation.Parse (args? ["end"] as JObject);
|
||||
if (start != null && end != null && await GetPossibleBreakpoints (id, start, end, token))
|
||||
return true;
|
||||
|
||||
SendResponse (id, resp, token);
|
||||
return true;
|
||||
}
|
||||
|
||||
case "Debugger.setBreakpoint": {
|
||||
break;
|
||||
}
|
||||
|
||||
case "Debugger.setBreakpointByUrl": {
|
||||
var resp = await SendCommand (id, method, args, token);
|
||||
if (!resp.IsOk) {
|
||||
SendResponse (id, resp, token);
|
||||
return true;
|
||||
}
|
||||
|
||||
var bpid = resp.Value["breakpointId"]?.ToString ();
|
||||
var locations = resp.Value["locations"]?.Values<object>();
|
||||
var request = BreakpointRequest.Parse (bpid, args);
|
||||
|
||||
// is the store done loading?
|
||||
var loaded = context.Source.Task.IsCompleted;
|
||||
if (!loaded) {
|
||||
// Send and empty response immediately if not
|
||||
// and register the breakpoint for resolution
|
||||
context.BreakpointRequests [bpid] = request;
|
||||
SendResponse (id, resp, token);
|
||||
}
|
||||
|
||||
if (await IsRuntimeAlreadyReadyAlready (id, token)) {
|
||||
var store = await RuntimeReady (id, token);
|
||||
|
||||
Log ("verbose", $"BP req {args}");
|
||||
await SetBreakpoint (id, store, request, !loaded, token);
|
||||
}
|
||||
|
||||
if (loaded) {
|
||||
// we were already loaded so we should send a response
|
||||
// with the locations included and register the request
|
||||
context.BreakpointRequests [bpid] = request;
|
||||
var result = Result.OkFromObject (request.AsSetBreakpointByUrlResponse (locations));
|
||||
SendResponse (id, result, token);
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
case "Debugger.removeBreakpoint": {
|
||||
await RemoveBreakpoint (id, args, token);
|
||||
break;
|
||||
}
|
||||
|
||||
case "Debugger.resume": {
|
||||
await OnResume (id, token);
|
||||
break;
|
||||
}
|
||||
|
||||
case "Debugger.stepInto": {
|
||||
return await Step (id, StepKind.Into, token);
|
||||
}
|
||||
|
||||
case "Debugger.stepOut": {
|
||||
return await Step (id, StepKind.Out, token);
|
||||
}
|
||||
|
||||
case "Debugger.stepOver": {
|
||||
return await Step (id, StepKind.Over, token);
|
||||
}
|
||||
|
||||
case "Debugger.evaluateOnCallFrame": {
|
||||
if (!DotnetObjectId.TryParse (args? ["callFrameId"], out var objectId))
|
||||
return false;
|
||||
|
||||
switch (objectId.Scheme) {
|
||||
case "scope":
|
||||
return await OnEvaluateOnCallFrame (id,
|
||||
int.Parse (objectId.Value),
|
||||
args? ["expression"]?.Value<string> (), token);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
case "Runtime.getProperties": {
|
||||
if (!DotnetObjectId.TryParse (args? ["objectId"], out var objectId))
|
||||
break;
|
||||
|
||||
var result = await RuntimeGetProperties (id, objectId, args, token);
|
||||
SendResponse (id, result, token);
|
||||
return true;
|
||||
}
|
||||
|
||||
case "Runtime.releaseObject": {
|
||||
if (!(DotnetObjectId.TryParse (args ["objectId"], out var objectId) && objectId.Scheme == "cfo_res"))
|
||||
break;
|
||||
|
||||
await SendMonoCommand (id, MonoCommands.ReleaseObject (objectId), token);
|
||||
SendResponse (id, Result.OkFromObject (new{}), token);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Protocol extensions
|
||||
case "Dotnet-test.setBreakpointByMethod": {
|
||||
Console.WriteLine ("set-breakpoint-by-method: " + id + " " + args);
|
||||
|
||||
var store = await RuntimeReady (id, token);
|
||||
string aname = args ["assemblyName"]?.Value<string> ();
|
||||
string typeName = args ["typeName"]?.Value<string> ();
|
||||
string methodName = args ["methodName"]?.Value<string> ();
|
||||
if (aname == null || typeName == null || methodName == null) {
|
||||
SendResponse (id, Result.Err ("Invalid protocol message '" + args + "'."), token);
|
||||
return true;
|
||||
}
|
||||
|
||||
// GetAssemblyByName seems to work on file names
|
||||
var assembly = store.GetAssemblyByName (aname);
|
||||
if (assembly == null)
|
||||
assembly = store.GetAssemblyByName (aname + ".exe");
|
||||
if (assembly == null)
|
||||
assembly = store.GetAssemblyByName (aname + ".dll");
|
||||
if (assembly == null) {
|
||||
SendResponse (id, Result.Err ("Assembly '" + aname + "' not found."), token);
|
||||
return true;
|
||||
}
|
||||
|
||||
var type = assembly.GetTypeByName (typeName);
|
||||
if (type == null) {
|
||||
SendResponse (id, Result.Err ($"Type '{typeName}' not found."), token);
|
||||
return true;
|
||||
}
|
||||
|
||||
var methodInfo = type.Methods.FirstOrDefault (m => m.Name == methodName);
|
||||
if (methodInfo == null) {
|
||||
SendResponse (id, Result.Err ($"Method '{typeName}:{methodName}' not found."), token);
|
||||
return true;
|
||||
}
|
||||
|
||||
bpIdGenerator ++;
|
||||
string bpid = "by-method-" + bpIdGenerator.ToString ();
|
||||
var request = new BreakpointRequest (bpid, methodInfo);
|
||||
context.BreakpointRequests[bpid] = request;
|
||||
|
||||
var loc = methodInfo.StartLocation;
|
||||
var bp = await SetMonoBreakpoint (id, bpid, loc, token);
|
||||
if (bp.State != BreakpointState.Active) {
|
||||
// FIXME:
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
||||
var resolvedLocation = new {
|
||||
breakpointId = bpid,
|
||||
location = loc.AsLocation ()
|
||||
};
|
||||
|
||||
SendEvent (id, "Debugger.breakpointResolved", JObject.FromObject (resolvedLocation), token);
|
||||
|
||||
SendResponse (id, Result.OkFromObject (new {
|
||||
result = new { breakpointId = bpid, locations = new object [] { loc.AsLocation () }}
|
||||
}), token);
|
||||
|
||||
return true;
|
||||
}
|
||||
case "Runtime.callFunctionOn": {
|
||||
if (!DotnetObjectId.TryParse (args ["objectId"], out var objectId))
|
||||
return false;
|
||||
|
||||
var silent = args ["silent"]?.Value<bool> () ?? false;
|
||||
if (objectId.Scheme == "scope") {
|
||||
var fail = silent ? Result.OkFromObject (new { result = new { } }) : Result.Exception (new ArgumentException ($"Runtime.callFunctionOn not supported with scope ({objectId})."));
|
||||
|
||||
SendResponse (id, fail, token);
|
||||
return true;
|
||||
}
|
||||
|
||||
var returnByValue = args ["returnByValue"]?.Value<bool> () ?? false;
|
||||
var res = await SendMonoCommand (id, MonoCommands.CallFunctionOn (args), token);
|
||||
|
||||
if (!returnByValue &&
|
||||
DotnetObjectId.TryParse (res.Value?["result"]?["value"]?["objectId"], out var resultObjectId) &&
|
||||
resultObjectId.Scheme == "cfo_res")
|
||||
res = Result.OkFromObject (new { result = res.Value ["result"]["value"] });
|
||||
|
||||
if (res.IsErr && silent)
|
||||
res = Result.OkFromObject (new { result = new { } });
|
||||
|
||||
SendResponse (id, res, token);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
async Task<Result> RuntimeGetProperties (MessageId id, DotnetObjectId objectId, JToken args, CancellationToken token)
|
||||
{
|
||||
if (objectId.Scheme == "scope")
|
||||
return await GetScopeProperties (id, int.Parse (objectId.Value), token);
|
||||
|
||||
var res = await SendMonoCommand (id, MonoCommands.GetDetails (objectId, args), token);
|
||||
if (res.IsErr)
|
||||
return res;
|
||||
|
||||
if (objectId.Scheme == "cfo_res") {
|
||||
// Runtime.callFunctionOn result object
|
||||
var value_json_str = res.Value ["result"]?["value"]?["__value_as_json_string__"]?.Value<string> ();
|
||||
if (value_json_str != null) {
|
||||
res = Result.OkFromObject (new {
|
||||
result = JArray.Parse (value_json_str.Replace (@"\""", "\""))
|
||||
});
|
||||
} else {
|
||||
res = Result.OkFromObject (new { result = new {} });
|
||||
}
|
||||
} else {
|
||||
res = Result.Ok (JObject.FromObject (new { result = res.Value ["result"] ["value"] }));
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
//static int frame_id=0;
|
||||
async Task<bool> OnBreakpointHit (SessionId sessionId, JObject args, CancellationToken token)
|
||||
{
|
||||
//FIXME we should send release objects every now and then? Or intercept those we inject and deal in the runtime
|
||||
var res = await SendMonoCommand (sessionId, MonoCommands.GetCallStack(), token);
|
||||
var orig_callframes = args? ["callFrames"]?.Values<JObject> ();
|
||||
var context = GetContext (sessionId);
|
||||
|
||||
if (res.IsErr) {
|
||||
//Give up and send the original call stack
|
||||
return false;
|
||||
}
|
||||
|
||||
//step one, figure out where did we hit
|
||||
var res_value = res.Value? ["result"]? ["value"];
|
||||
if (res_value == null || res_value is JValue) {
|
||||
//Give up and send the original call stack
|
||||
return false;
|
||||
}
|
||||
|
||||
Log ("verbose", $"call stack (err is {res.Error} value is:\n{res.Value}");
|
||||
var bp_id = res_value? ["breakpoint_id"]?.Value<int> ();
|
||||
Log ("verbose", $"We just hit bp {bp_id}");
|
||||
if (!bp_id.HasValue) {
|
||||
//Give up and send the original call stack
|
||||
return false;
|
||||
}
|
||||
|
||||
var bp = context.BreakpointRequests.Values.SelectMany (v => v.Locations).FirstOrDefault (b => b.RemoteId == bp_id.Value);
|
||||
|
||||
var callFrames = new List<object> ();
|
||||
foreach (var frame in orig_callframes) {
|
||||
var function_name = frame ["functionName"]?.Value<string> ();
|
||||
var url = frame ["url"]?.Value<string> ();
|
||||
if ("mono_wasm_fire_bp" == function_name || "_mono_wasm_fire_bp" == function_name) {
|
||||
var frames = new List<Frame> ();
|
||||
int frame_id = 0;
|
||||
var the_mono_frames = res.Value? ["result"]? ["value"]? ["frames"]?.Values<JObject> ();
|
||||
|
||||
foreach (var mono_frame in the_mono_frames) {
|
||||
++frame_id;
|
||||
var il_pos = mono_frame ["il_pos"].Value<int> ();
|
||||
var method_token = mono_frame ["method_token"].Value<uint> ();
|
||||
var assembly_name = mono_frame ["assembly_name"].Value<string> ();
|
||||
|
||||
// This can be different than `method.Name`, like in case of generic methods
|
||||
var method_name = mono_frame ["method_name"]?.Value<string> ();
|
||||
|
||||
var store = await LoadStore (sessionId, token);
|
||||
var asm = store.GetAssemblyByName (assembly_name);
|
||||
if (asm == null) {
|
||||
Log ("info",$"Unable to find assembly: {assembly_name}");
|
||||
continue;
|
||||
}
|
||||
|
||||
var method = asm.GetMethodByToken (method_token);
|
||||
|
||||
if (method == null) {
|
||||
Log ("info", $"Unable to find il offset: {il_pos} in method token: {method_token} assembly name: {assembly_name}");
|
||||
continue;
|
||||
}
|
||||
|
||||
var location = method?.GetLocationByIl (il_pos);
|
||||
|
||||
// When hitting a breakpoint on the "IncrementCount" method in the standard
|
||||
// Blazor project template, one of the stack frames is inside mscorlib.dll
|
||||
// and we get location==null for it. It will trigger a NullReferenceException
|
||||
// if we don't skip over that stack frame.
|
||||
if (location == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Log ("info", $"frame il offset: {il_pos} method token: {method_token} assembly name: {assembly_name}");
|
||||
Log ("info", $"\tmethod {method_name} location: {location}");
|
||||
frames.Add (new Frame (method, location, frame_id-1));
|
||||
|
||||
callFrames.Add (new {
|
||||
functionName = method_name,
|
||||
callFrameId = $"dotnet:scope:{frame_id-1}",
|
||||
functionLocation = method.StartLocation.AsLocation (),
|
||||
|
||||
location = location.AsLocation (),
|
||||
|
||||
url = store.ToUrl (location),
|
||||
|
||||
scopeChain = new [] {
|
||||
new {
|
||||
type = "local",
|
||||
@object = new {
|
||||
@type = "object",
|
||||
className = "Object",
|
||||
description = "Object",
|
||||
objectId = $"dotnet:scope:{frame_id-1}",
|
||||
},
|
||||
name = method_name,
|
||||
startLocation = method.StartLocation.AsLocation (),
|
||||
endLocation = method.EndLocation.AsLocation (),
|
||||
}}
|
||||
});
|
||||
|
||||
context.CallStack = frames;
|
||||
|
||||
}
|
||||
} else if (!(function_name.StartsWith ("wasm-function", StringComparison.Ordinal)
|
||||
|| url.StartsWith ("wasm://wasm/", StringComparison.Ordinal))) {
|
||||
callFrames.Add (frame);
|
||||
}
|
||||
}
|
||||
|
||||
var bp_list = new string [bp == null ? 0 : 1];
|
||||
if (bp != null)
|
||||
bp_list [0] = bp.StackId;
|
||||
|
||||
var o = JObject.FromObject (new {
|
||||
callFrames,
|
||||
reason = "other", //other means breakpoint
|
||||
hitBreakpoints = bp_list,
|
||||
});
|
||||
|
||||
SendEvent (sessionId, "Debugger.paused", o, token);
|
||||
return true;
|
||||
}
|
||||
|
||||
async Task OnDefaultContext (SessionId sessionId, ExecutionContext context, CancellationToken token)
|
||||
{
|
||||
Log ("verbose", "Default context created, clearing state and sending events");
|
||||
if (UpdateContext (sessionId, context, out var previousContext)) {
|
||||
foreach (var kvp in previousContext.BreakpointRequests) {
|
||||
context.BreakpointRequests[kvp.Key] = kvp.Value.Clone();
|
||||
}
|
||||
}
|
||||
|
||||
if (await IsRuntimeAlreadyReadyAlready (sessionId, token))
|
||||
await RuntimeReady (sessionId, token);
|
||||
}
|
||||
|
||||
async Task OnResume (MessageId msd_id, CancellationToken token)
|
||||
{
|
||||
//discard managed frames
|
||||
GetContext (msd_id).ClearState ();
|
||||
await Task.CompletedTask;
|
||||
}
|
||||
|
||||
async Task<bool> Step (MessageId msg_id, StepKind kind, CancellationToken token)
|
||||
{
|
||||
var context = GetContext (msg_id);
|
||||
if (context.CallStack == null)
|
||||
return false;
|
||||
|
||||
if (context.CallStack.Count <= 1 && kind == StepKind.Out)
|
||||
return false;
|
||||
|
||||
var res = await SendMonoCommand (msg_id, MonoCommands.StartSingleStepping (kind), token);
|
||||
|
||||
var ret_code = res.Value? ["result"]? ["value"]?.Value<int> ();
|
||||
|
||||
if (ret_code.HasValue && ret_code.Value == 0) {
|
||||
context.ClearState ();
|
||||
await SendCommand (msg_id, "Debugger.stepOut", new JObject (), token);
|
||||
return false;
|
||||
}
|
||||
|
||||
SendResponse (msg_id, Result.Ok (new JObject ()), token);
|
||||
|
||||
context.ClearState ();
|
||||
|
||||
await SendCommand (msg_id, "Debugger.resume", new JObject (), token);
|
||||
return true;
|
||||
}
|
||||
|
||||
internal bool TryFindVariableValueInCache(ExecutionContext ctx, string expression, bool only_search_on_this, out JToken obj)
|
||||
{
|
||||
if (ctx.LocalsCache.TryGetValue (expression, out obj)) {
|
||||
if (only_search_on_this && obj["fromThis"] == null)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
internal async Task<JToken> TryGetVariableValue (MessageId msg_id, int scope_id, string expression, bool only_search_on_this, CancellationToken token)
|
||||
{
|
||||
JToken thisValue = null;
|
||||
var context = GetContext (msg_id);
|
||||
if (context.CallStack == null)
|
||||
return null;
|
||||
|
||||
if (TryFindVariableValueInCache(context, expression, only_search_on_this, out JToken obj))
|
||||
return obj;
|
||||
|
||||
var scope = context.CallStack.FirstOrDefault (s => s.Id == scope_id);
|
||||
var live_vars = scope.Method.GetLiveVarsAt (scope.Location.CliLocation.Offset);
|
||||
//get_this
|
||||
var res = await SendMonoCommand (msg_id, MonoCommands.GetScopeVariables (scope.Id, live_vars.Select (lv => lv.Index).ToArray ()), token);
|
||||
|
||||
var scope_values = res.Value? ["result"]? ["value"]?.Values<JObject> ()?.ToArray ();
|
||||
thisValue = scope_values?.FirstOrDefault (v => v ["name"]?.Value<string> () == "this");
|
||||
|
||||
if (!only_search_on_this) {
|
||||
if (thisValue != null && expression == "this")
|
||||
return thisValue;
|
||||
|
||||
var value = scope_values.SingleOrDefault (sv => sv ["name"]?.Value<string> () == expression);
|
||||
if (value != null)
|
||||
return value;
|
||||
}
|
||||
|
||||
//search in scope
|
||||
if (thisValue != null) {
|
||||
if (!DotnetObjectId.TryParse (thisValue ["value"] ["objectId"], out var objectId))
|
||||
return null;
|
||||
|
||||
res = await SendMonoCommand (msg_id, MonoCommands.GetDetails (objectId), token);
|
||||
scope_values = res.Value? ["result"]? ["value"]?.Values<JObject> ().ToArray ();
|
||||
var foundValue = scope_values.FirstOrDefault (v => v ["name"].Value<string> () == expression);
|
||||
if (foundValue != null) {
|
||||
foundValue["fromThis"] = true;
|
||||
context.LocalsCache[foundValue ["name"].Value<string> ()] = foundValue;
|
||||
return foundValue;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
async Task<bool> OnEvaluateOnCallFrame (MessageId msg_id, int scope_id, string expression, CancellationToken token)
|
||||
{
|
||||
try {
|
||||
var context = GetContext (msg_id);
|
||||
if (context.CallStack == null)
|
||||
return false;
|
||||
|
||||
var varValue = await TryGetVariableValue (msg_id, scope_id, expression, false, token);
|
||||
|
||||
if (varValue != null) {
|
||||
SendResponse (msg_id, Result.OkFromObject (new {
|
||||
result = varValue ["value"]
|
||||
}), token);
|
||||
return true;
|
||||
}
|
||||
|
||||
string retValue = await EvaluateExpression.CompileAndRunTheExpression (this, msg_id, scope_id, expression, token);
|
||||
SendResponse (msg_id, Result.OkFromObject (new {
|
||||
result = new {
|
||||
value = retValue
|
||||
}
|
||||
}), token);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
logger.LogDebug (e, $"Error in EvaluateOnCallFrame for expression '{expression}.");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
async Task<Result> GetScopeProperties (MessageId msg_id, int scope_id, CancellationToken token)
|
||||
{
|
||||
try {
|
||||
var ctx = GetContext (msg_id);
|
||||
var scope = ctx.CallStack.FirstOrDefault (s => s.Id == scope_id);
|
||||
if (scope == null)
|
||||
return Result.Err (JObject.FromObject (new { message = $"Could not find scope with id #{scope_id}" }));
|
||||
|
||||
var vars = scope.Method.GetLiveVarsAt (scope.Location.CliLocation.Offset);
|
||||
|
||||
var var_ids = vars.Select (v => v.Index).ToArray ();
|
||||
var res = await SendMonoCommand (msg_id, MonoCommands.GetScopeVariables (scope.Id, var_ids), token);
|
||||
|
||||
//if we fail we just buble that to the IDE (and let it panic over it)
|
||||
if (res.IsErr)
|
||||
return res;
|
||||
|
||||
var values = res.Value? ["result"]? ["value"]?.Values<JObject> ().ToArray ();
|
||||
|
||||
if(values == null)
|
||||
return Result.OkFromObject (new { result = Array.Empty<object> () });
|
||||
|
||||
var var_list = new List<object> ();
|
||||
int i = 0;
|
||||
for (; i < vars.Length && i < values.Length; i ++) {
|
||||
// For async methods, we get locals with names, unlike non-async methods
|
||||
// and the order may not match the var_ids, so, use the names that they
|
||||
// come with
|
||||
if (values [i]["name"] != null)
|
||||
continue;
|
||||
|
||||
ctx.LocalsCache[vars [i].Name] = values [i];
|
||||
var_list.Add (new { name = vars [i].Name, value = values [i]["value"] });
|
||||
}
|
||||
for (; i < values.Length; i ++) {
|
||||
ctx.LocalsCache[values [i]["name"].ToString()] = values [i];
|
||||
var_list.Add (values [i]);
|
||||
}
|
||||
|
||||
return Result.OkFromObject (new { result = var_list });
|
||||
} catch (Exception exception) {
|
||||
Log ("verbose", $"Error resolving scope properties {exception.Message}");
|
||||
return Result.Exception (exception);
|
||||
}
|
||||
}
|
||||
|
||||
async Task<Breakpoint> SetMonoBreakpoint (SessionId sessionId, string reqId, SourceLocation location, CancellationToken token)
|
||||
{
|
||||
var bp = new Breakpoint (reqId, location, BreakpointState.Pending);
|
||||
var asm_name = bp.Location.CliLocation.Method.Assembly.Name;
|
||||
var method_token = bp.Location.CliLocation.Method.Token;
|
||||
var il_offset = bp.Location.CliLocation.Offset;
|
||||
|
||||
var res = await SendMonoCommand (sessionId, MonoCommands.SetBreakpoint (asm_name, method_token, il_offset), token);
|
||||
var ret_code = res.Value? ["result"]? ["value"]?.Value<int> ();
|
||||
|
||||
if (ret_code.HasValue) {
|
||||
bp.RemoteId = ret_code.Value;
|
||||
bp.State = BreakpointState.Active;
|
||||
//Log ("verbose", $"BP local id {bp.LocalId} enabled with remote id {bp.RemoteId}");
|
||||
}
|
||||
|
||||
return bp;
|
||||
}
|
||||
|
||||
async Task<DebugStore> LoadStore (SessionId sessionId, CancellationToken token)
|
||||
{
|
||||
var context = GetContext (sessionId);
|
||||
|
||||
if (Interlocked.CompareExchange (ref context.store, new DebugStore (logger), null) != null)
|
||||
return await context.Source.Task;
|
||||
|
||||
try {
|
||||
var loaded_pdbs = await SendMonoCommand (sessionId, MonoCommands.GetLoadedFiles(), token);
|
||||
var the_value = loaded_pdbs.Value? ["result"]? ["value"];
|
||||
var the_pdbs = the_value?.ToObject<string[]> ();
|
||||
|
||||
await foreach (var source in context.store.Load(sessionId, the_pdbs, token).WithCancellation (token)) {
|
||||
var scriptSource = JObject.FromObject (source.ToScriptSource (context.Id, context.AuxData));
|
||||
Log ("verbose", $"\tsending {source.Url} {context.Id} {sessionId.sessionId}");
|
||||
|
||||
SendEvent (sessionId, "Debugger.scriptParsed", scriptSource, token);
|
||||
|
||||
foreach (var req in context.BreakpointRequests.Values) {
|
||||
if (req.TryResolve (source)) {
|
||||
await SetBreakpoint (sessionId, context.store, req, true, token);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
context.Source.SetException (e);
|
||||
}
|
||||
|
||||
if (!context.Source.Task.IsCompleted)
|
||||
context.Source.SetResult (context.store);
|
||||
return context.store;
|
||||
}
|
||||
|
||||
async Task<DebugStore> RuntimeReady (SessionId sessionId, CancellationToken token)
|
||||
{
|
||||
var context = GetContext (sessionId);
|
||||
if (Interlocked.CompareExchange (ref context.ready, new TaskCompletionSource<DebugStore> (), null) != null)
|
||||
return await context.ready.Task;
|
||||
|
||||
var clear_result = await SendMonoCommand (sessionId, MonoCommands.ClearAllBreakpoints (), token);
|
||||
if (clear_result.IsErr) {
|
||||
Log ("verbose", $"Failed to clear breakpoints due to {clear_result}");
|
||||
}
|
||||
|
||||
var store = await LoadStore (sessionId, token);
|
||||
|
||||
context.ready.SetResult (store);
|
||||
SendEvent (sessionId, "Mono.runtimeReady", new JObject (), token);
|
||||
return store;
|
||||
}
|
||||
|
||||
async Task RemoveBreakpoint(MessageId msg_id, JObject args, CancellationToken token) {
|
||||
var bpid = args? ["breakpointId"]?.Value<string> ();
|
||||
|
||||
var context = GetContext (msg_id);
|
||||
if (!context.BreakpointRequests.TryGetValue (bpid, out var breakpointRequest))
|
||||
return;
|
||||
|
||||
foreach (var bp in breakpointRequest.Locations) {
|
||||
var res = await SendMonoCommand (msg_id, MonoCommands.RemoveBreakpoint (bp.RemoteId), token);
|
||||
var ret_code = res.Value? ["result"]? ["value"]?.Value<int> ();
|
||||
|
||||
if (ret_code.HasValue) {
|
||||
bp.RemoteId = -1;
|
||||
bp.State = BreakpointState.Disabled;
|
||||
}
|
||||
}
|
||||
breakpointRequest.Locations.Clear ();
|
||||
}
|
||||
|
||||
async Task SetBreakpoint (SessionId sessionId, DebugStore store, BreakpointRequest req, bool sendResolvedEvent, CancellationToken token)
|
||||
{
|
||||
var context = GetContext (sessionId);
|
||||
if (req.Locations.Any ()) {
|
||||
Log ("debug", $"locations already loaded for {req.Id}");
|
||||
return;
|
||||
}
|
||||
|
||||
var comparer = new SourceLocation.LocationComparer ();
|
||||
// if column is specified the frontend wants the exact matches
|
||||
// and will clear the bp if it isn't close enoug
|
||||
var locations = store.FindBreakpointLocations (req)
|
||||
.Distinct (comparer)
|
||||
.Where (l => l.Line == req.Line && (req.Column == 0 || l.Column == req.Column))
|
||||
.OrderBy (l => l.Column)
|
||||
.GroupBy (l => l.Id);
|
||||
|
||||
logger.LogDebug ("BP request for '{req}' runtime ready {context.RuntimeReady}", req, GetContext (sessionId).IsRuntimeReady);
|
||||
|
||||
var breakpoints = new List<Breakpoint> ();
|
||||
|
||||
foreach (var sourceId in locations) {
|
||||
var loc = sourceId.First ();
|
||||
var bp = await SetMonoBreakpoint (sessionId, req.Id, loc, token);
|
||||
|
||||
// If we didn't successfully enable the breakpoint
|
||||
// don't add it to the list of locations for this id
|
||||
if (bp.State != BreakpointState.Active)
|
||||
continue;
|
||||
|
||||
breakpoints.Add (bp);
|
||||
|
||||
var resolvedLocation = new {
|
||||
breakpointId = req.Id,
|
||||
location = loc.AsLocation ()
|
||||
};
|
||||
|
||||
if (sendResolvedEvent)
|
||||
SendEvent (sessionId, "Debugger.breakpointResolved", JObject.FromObject (resolvedLocation), token);
|
||||
}
|
||||
|
||||
req.Locations.AddRange (breakpoints);
|
||||
return;
|
||||
}
|
||||
|
||||
async Task<bool> GetPossibleBreakpoints (MessageId msg, SourceLocation start, SourceLocation end, CancellationToken token)
|
||||
{
|
||||
var bps = (await RuntimeReady (msg, token)).FindPossibleBreakpoints (start, end);
|
||||
|
||||
if (bps == null)
|
||||
return false;
|
||||
|
||||
var response = new { locations = bps.Select (b => b.AsLocation ()) };
|
||||
|
||||
SendResponse (msg, Result.OkFromObject (response), token);
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnCompileDotnetScript (MessageId msg_id, CancellationToken token)
|
||||
{
|
||||
SendResponse (msg_id, Result.OkFromObject (new { }), token);
|
||||
}
|
||||
|
||||
async Task<bool> OnGetScriptSource (MessageId msg_id, string script_id, CancellationToken token)
|
||||
{
|
||||
if (!SourceId.TryParse (script_id, out var id))
|
||||
return false;
|
||||
|
||||
var src_file = (await LoadStore (msg_id, token)).GetFileById (id);
|
||||
|
||||
try {
|
||||
var uri = new Uri (src_file.Url);
|
||||
string source = $"// Unable to find document {src_file.SourceUri}";
|
||||
|
||||
using (var data = await src_file.GetSourceAsync (checkHash: false, token: token)) {
|
||||
if (data.Length == 0)
|
||||
return false;
|
||||
|
||||
using (var reader = new StreamReader (data))
|
||||
source = await reader.ReadToEndAsync ();
|
||||
}
|
||||
SendResponse (msg_id, Result.OkFromObject (new { scriptSource = source }), token);
|
||||
} catch (Exception e) {
|
||||
var o = new {
|
||||
scriptSource = $"// Unable to read document ({e.Message})\n" +
|
||||
$"Local path: {src_file?.SourceUri}\n" +
|
||||
$"SourceLink path: {src_file?.SourceLinkUri}\n"
|
||||
};
|
||||
|
||||
SendResponse (msg_id, Result.OkFromObject (o), token);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
async Task DeleteWebDriver (SessionId sessionId, CancellationToken token)
|
||||
{
|
||||
// see https://github.com/mono/mono/issues/19549 for background
|
||||
if (hideWebDriver && sessions.Add (sessionId)) {
|
||||
var res = await SendCommand (sessionId,
|
||||
"Page.addScriptToEvaluateOnNewDocument",
|
||||
JObject.FromObject (new { source = "delete navigator.constructor.prototype.webdriver"}),
|
||||
token);
|
||||
|
||||
if (sessionId != SessionId.Null && !res.IsOk)
|
||||
sessions.Remove (sessionId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,71 +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 System;
|
||||
using System.Diagnostics;
|
||||
using Microsoft.AspNetCore.Components.WebAssembly.DebugProxy.Hosting;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.CommandLineUtils;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.WebAssembly.DebugProxy
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
static int Main(string[] args)
|
||||
{
|
||||
var app = new CommandLineApplication(throwOnUnexpectedArg: false)
|
||||
{
|
||||
Name = "webassembly-debugproxy"
|
||||
};
|
||||
app.HelpOption("-?|-h|--help");
|
||||
|
||||
var browserHostOption = new CommandOption("-b|--browser-host", CommandOptionType.SingleValue)
|
||||
{
|
||||
Description = "Host on which the browser is listening for debug connections. Example: http://localhost:9300"
|
||||
};
|
||||
|
||||
var ownerPidOption = new CommandOption("-op|--owner-pid", CommandOptionType.SingleValue)
|
||||
{
|
||||
Description = "ID of the owner process. The debug proxy will shut down if this process exits."
|
||||
};
|
||||
|
||||
app.Options.Add(browserHostOption);
|
||||
app.Options.Add(ownerPidOption);
|
||||
|
||||
app.OnExecute(() =>
|
||||
{
|
||||
var browserHost = browserHostOption.HasValue() ? browserHostOption.Value(): "http://127.0.0.1:9222";
|
||||
var host = DebugProxyHost.CreateDefaultBuilder(args, browserHost).Build();
|
||||
|
||||
if (ownerPidOption.HasValue())
|
||||
{
|
||||
var ownerProcess = Process.GetProcessById(int.Parse(ownerPidOption.Value()));
|
||||
ownerProcess.EnableRaisingEvents = true;
|
||||
ownerProcess.Exited += async (sender, eventArgs) =>
|
||||
{
|
||||
Console.WriteLine("Exiting because parent process has exited");
|
||||
await host.StopAsync();
|
||||
};
|
||||
}
|
||||
|
||||
host.Run();
|
||||
|
||||
return 0;
|
||||
});
|
||||
|
||||
try
|
||||
{
|
||||
return app.Execute(args);
|
||||
}
|
||||
catch (CommandParsingException cex)
|
||||
{
|
||||
app.Error.WriteLine(cex.Message);
|
||||
app.ShowHelp();
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,45 +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 System;
|
||||
using System.Net;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using WebAssembly.Net.Debugging;
|
||||
|
||||
namespace Microsoft.AspNetCore.Components.WebAssembly.DebugProxy
|
||||
{
|
||||
public class Startup
|
||||
{
|
||||
public void Configure(IApplicationBuilder app, DebugProxyOptions debugProxyOptions)
|
||||
{
|
||||
app.UseDeveloperExceptionPage();
|
||||
app.UseWebSockets();
|
||||
app.UseRouting();
|
||||
|
||||
app.UseEndpoints(endpoints =>
|
||||
{
|
||||
// At the homepage, we check whether we can uniquely identify the target tab
|
||||
// - If yes, we redirect directly to the debug tools, proxying to that tab
|
||||
// - If no, we present a list of available tabs for the user to pick from
|
||||
endpoints.MapGet("/", new TargetPickerUi(debugProxyOptions).Display);
|
||||
|
||||
// At this URL, we wire up the actual WebAssembly proxy
|
||||
endpoints.MapGet("/ws-proxy", async (context) =>
|
||||
{
|
||||
if (!context.WebSockets.IsWebSocketRequest)
|
||||
{
|
||||
context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
|
||||
return;
|
||||
}
|
||||
|
||||
var loggerFactory = context.RequestServices.GetRequiredService<ILoggerFactory>();
|
||||
var browserUri = new Uri(context.Request.Query["browser"]);
|
||||
var ideSocket = await context.WebSockets.AcceptWebSocketAsync();
|
||||
await new MonoProxy(loggerFactory).Run(browserUri, ideSocket);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -12,6 +12,8 @@
|
|||
<NoWarn>$(NoWarn);NU5100</NoWarn>
|
||||
<!-- Need to build this project in source build -->
|
||||
<ExcludeFromSourceBuild>false</ExcludeFromSourceBuild>
|
||||
|
||||
<IsShipping>false</IsShipping>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
<remove fileExtension=".wasm" />
|
||||
<remove fileExtension=".woff" />
|
||||
<remove fileExtension=".woff2" />
|
||||
<mimeMap fileExtension=".blat" mimeType="application/octet-stream" />
|
||||
<mimeMap fileExtension=".dll" mimeType="application/octet-stream" />
|
||||
<mimeMap fileExtension=".dat" mimeType="application/octet-stream" />
|
||||
<mimeMap fileExtension=".json" mimeType="application/json" />
|
||||
|
|
|
|||
|
|
@ -10,7 +10,9 @@ using System.Reflection;
|
|||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.Extensions.CommandLineUtils;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
|
|
@ -24,20 +26,20 @@ namespace Microsoft.AspNetCore.Builder
|
|||
private static readonly Regex NowListeningRegex = new Regex(@"^\s*Now listening on: (?<url>.*)$", RegexOptions.None, TimeSpan.FromSeconds(10));
|
||||
private static readonly Regex ApplicationStartedRegex = new Regex(@"^\s*Application started\. Press Ctrl\+C to shut down\.$", RegexOptions.None, TimeSpan.FromSeconds(10));
|
||||
|
||||
public static Task<string> EnsureLaunchedAndGetUrl(IServiceProvider serviceProvider)
|
||||
public static Task<string> EnsureLaunchedAndGetUrl(IServiceProvider serviceProvider, string devToolsHost)
|
||||
{
|
||||
lock (LaunchLock)
|
||||
{
|
||||
if (LaunchedDebugProxyUrl == null)
|
||||
{
|
||||
LaunchedDebugProxyUrl = LaunchAndGetUrl(serviceProvider);
|
||||
LaunchedDebugProxyUrl = LaunchAndGetUrl(serviceProvider, devToolsHost);
|
||||
}
|
||||
|
||||
return LaunchedDebugProxyUrl;
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task<string> LaunchAndGetUrl(IServiceProvider serviceProvider)
|
||||
private static async Task<string> LaunchAndGetUrl(IServiceProvider serviceProvider, string devToolsHost)
|
||||
{
|
||||
var tcs = new TaskCompletionSource<string>();
|
||||
|
||||
|
|
@ -45,10 +47,11 @@ namespace Microsoft.AspNetCore.Builder
|
|||
var executablePath = LocateDebugProxyExecutable(environment);
|
||||
var muxerPath = DotNetMuxer.MuxerPathOrDefault();
|
||||
var ownerPid = Process.GetCurrentProcess().Id;
|
||||
|
||||
var processStartInfo = new ProcessStartInfo
|
||||
{
|
||||
FileName = muxerPath,
|
||||
Arguments = $"exec \"{executablePath}\" --owner-pid {ownerPid}",
|
||||
Arguments = $"exec \"{executablePath}\" --owner-pid {ownerPid} --DevToolsUrl {devToolsHost}",
|
||||
UseShellExecute = false,
|
||||
RedirectStandardOutput = true,
|
||||
};
|
||||
|
|
@ -87,7 +90,7 @@ namespace Microsoft.AspNetCore.Builder
|
|||
var debugProxyPath = Path.Combine(
|
||||
Path.GetDirectoryName(assembly.Location),
|
||||
"BlazorDebugProxy",
|
||||
"Microsoft.AspNetCore.Components.WebAssembly.DebugProxy.dll");
|
||||
"BrowserDebugHost.dll");
|
||||
|
||||
if (!File.Exists(debugProxyPath))
|
||||
{
|
||||
|
|
@ -114,6 +117,12 @@ namespace Microsoft.AspNetCore.Builder
|
|||
|
||||
void OnOutputDataReceived(object sender, DataReceivedEventArgs eventArgs)
|
||||
{
|
||||
if (String.IsNullOrEmpty(eventArgs.Data))
|
||||
{
|
||||
taskCompletionSource.TrySetException(new InvalidOperationException(
|
||||
"No output has been recevied from the application."));
|
||||
}
|
||||
|
||||
if (ApplicationStartedRegex.IsMatch(eventArgs.Data))
|
||||
{
|
||||
aspNetProcess.OutputDataReceived -= OnOutputDataReceived;
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.AspNetCore.StaticFiles" />
|
||||
<Reference Include="Microsoft.NETCore.BrowserDebugHost.Transport" GeneratePathProperty="true" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
@ -22,38 +23,15 @@
|
|||
<Compile Include="$(ComponentsSharedSourceRoot)\src\CacheHeaderSettings.cs" Link="Shared\CacheHeaderSettings.cs" />
|
||||
<Compile Include="$(SharedSourceRoot)\CommandLineUtils\Utilities\DotNetMuxer.cs" Link="Shared\DotNetMuxer.cs" />
|
||||
|
||||
<!-- Ensure debug proxy is built first, but don't create an actual reference, since we don't want its transitive dependencies. -->
|
||||
<ProjectReference
|
||||
Include="..\..\DebugProxy\src\Microsoft.AspNetCore.Components.WebAssembly.DebugProxy.csproj"
|
||||
ReferenceOutputAssembly="false" />
|
||||
|
||||
<Content Include="build\**" Pack="true" PackagePath="build\%(RecursiveDir)%(FileName)%(Extension)" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Emit debug proxy binaries to output directory. This lets us launch it as a separate process while keeping the build output self-contained. -->
|
||||
<Target Name="IncludeDebugProxyBinariesAsContent" BeforeTargets="AssignTargetPaths">
|
||||
<ItemGroup>
|
||||
<DebugProxyBinaries Include="$(ArtifactsBinDir)Microsoft.AspNetCore.Components.WebAssembly.DebugProxy\$(Configuration)\$(DefaultNetCoreTargetFramework)\**" />
|
||||
|
||||
<!--
|
||||
For when we're building a package, we use Pack and PackagePath to bundle the debug proxy binaries into 'tools'.
|
||||
Then we have a custom build target that converts these items into content files in consuming projects. We *don't*
|
||||
use PackageCopyToOutput because that creates entries that show up in Solution Explorer in consuming projects.
|
||||
|
||||
For when we're consuming this from source in this repo, we use Link and CopyToOutputDirectory to produce the
|
||||
same effect without having the custom build target.
|
||||
-->
|
||||
<Content
|
||||
Include="@(DebugProxyBinaries)"
|
||||
Pack="true"
|
||||
PackagePath="tools\BlazorDebugProxy\%(RecursiveDir)%(FileName)%(Extension)"
|
||||
Link="BlazorDebugProxy\%(RecursiveDir)%(FileName)%(Extension)"
|
||||
CopyToOutputDirectory="PreserveNewest" />
|
||||
<DebugProxyBinaries Include="$(PkgMicrosoft_NETCore_BrowserDebugHost_Transport)\tools\$(DefaultNetCoreTargetFramework)\**" />
|
||||
<Content Include="@(DebugProxyBinaries)" Pack="true" PackagePath="tools\BlazorDebugProxy\%(RecursiveDir)%(FileName)%(Extension)" Link="BlazorDebugProxy\%(RecursiveDir)%(FileName)%(Extension)" CopyToOutputDirectory="PreserveNewest" />
|
||||
</ItemGroup>
|
||||
|
||||
<Error
|
||||
Text="Debugger proxy files were not found in $(ArtifactsBinDir)Microsoft.AspNetCore.Components.WebAssembly.DebugProxy\$(Configuration)\$(DefaultNetCoreTargetFramework)"
|
||||
Condition="'@(DebugProxyBinaries->Count())' == '0'" />
|
||||
</Target>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue