Увеличить время сборки для Net Core 3.1 Blazor Server Side Visual Studio 2019

#.net-core #build #blazor #server-side

#.net-ядро #сборка #blazor #серверная часть

Вопрос:

Мы перенесли (после 4 месяцев работы) проект с NEt Core 2.2 на Net Core 3.1 на стороне сервера Blazor, и у нас есть большая разница во времени сборки для разработки в Visual Studio:

  • Net Core 2.2 Visual Studio 2019: 15 секунд (допустимо)
  • Net Core 3.1 с Blazor Server Side Visual Studio 2019: 1 минута. (Неприемлемо)

В Visual Studio Enterprise вышло последнее обновление, мы перенесли .NET Core на: 3.1.7

Конфигурация компьютера: Azure Server, SSD-накопитель премиум-класса, процессор 8, 2,7 ГГц

Есть ли какой-либо способ увеличить время сборки не только для разработки? Требуется время, чтобы изменить всего лишь небольшой код, а затем подождать 1 минуту, чтобы увидеть результат.

Мы перепробовали множество настроек, которые видели в Интернете. Код проекта является :

 <Project Sdk="Microsoft.NET.Sdk.Web">   
<PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <UserSecretsId>....</UserSecretsId>
    <ServerGarbageCollection>false</ServerGarbageCollection>
    <RazorCompileOnBuild>false</RazorCompileOnBuild>
    <RazorCompileOnPublish>true</RazorCompileOnPublish>
    <RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
    <BlazorLinkOnBuild Condition="'$(Configuration)'!='Release'">false</BlazorLinkOnBuild>
    <RunCodeAnalysis>false</RunCodeAnalysis>
    <UseRazorBuildServer>false</UseRazorBuildServer>
    <DisableImplicitAspNetCoreAnalyzers>true</DisableImplicitAspNetCoreAnalyzers>
</PropertyGroup>
<ItemGroup>
    <PackageReference Include="BlazorDateRangePicker" Version="2.9.0" />
    <PackageReference Include="Blazored.LocalStorage" Version="3.0.0" />
    <PackageReference Include="Blazored.SessionStorage" Version="1.0.12" />
    <PackageReference Include="BlazorInputFile" Version="0.2.0" />
    <PackageReference Include="ChartJs.Blazor" Version="1.1.0" />
    <PackageReference Include="EPPlus" Version="5.2.1" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.Google" Version="3.1.7" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.7" />
    <PackageReference Include="Microsoft.AspNetCore.Blazor.HttpClient" Version="3.2.0-preview3.20168.3" />
    <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="3.1.7" />
    <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.7" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="3.1.7" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.7" />
    <PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="3.1.7" />
    <PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.7" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.7"/>
    <PackageReference Include="Microsoft.AspNetCore.Authentication.Facebook" Version="3.1.7" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.7" />
    <PackageReference Include="Hangfire" Version="1.7.12" />
    <PackageReference Include="MailKit" Version="2.8.0" />
    <PackageReference Include="SixLabors.ImageSharp" Version="1.0.0" />
</ItemGroup>
  

Спасибо

Журнал

 1>Target Performance Summary:
1>        0 ms  CoreGenerateAssemblyInfo                   1 calls
1>        0 ms  PrepareResources                           1 calls
1>        0 ms  ResolvePackageDependenciesForBuild         1 calls
1>        0 ms  RazorComponentGenerateCore                 1 calls
1>        0 ms  RazorGenerate                              1 calls
1>        0 ms  PrepareProjectReferences                   1 calls
1>        0 ms  PrepareForRazorGenerate                    1 calls
1>        0 ms  ResolveSDKReferences                       1 calls
1>        0 ms  ExpandSDKReferences                        1 calls
1>        0 ms  _RemoveRazorDeclartionsFromCompile         1 calls
1>        0 ms  PrepareForRazorComponentGenerate           1 calls
1>        0 ms  BeforeCompile                              1 calls
1>        0 ms  Build                                      1 calls
1>        0 ms  GenerateFakes                              1 calls
1>        0 ms  AfterResolveReferences                     1 calls
1>        0 ms  ResolveReferences                          1 calls
1>        0 ms  AddSourceRevisionToInformationalVersion    1 calls
1>        0 ms  InitializeSourceControlInformation         1 calls
1>        0 ms  CopyAdditionalFiles                        1 calls
1>        0 ms  GenerateMSBuildEditorConfigFile            1 calls
1>        0 ms  GenerateMSBuildEditorConfigFileShouldRun   1 calls
1>        0 ms  SplitResourcesByCulture                    1 calls
1>        0 ms  CreateCustomManifestResourceNames          1 calls
1>        0 ms  PrepareResourceNames                       1 calls
1>        0 ms  BeforeResGen                               1 calls
1>        0 ms  GetTypeScriptOutputForPublishing           1 calls
1>        0 ms  RazorComponentGenerate                     1 calls
1>        0 ms  GenerateCompiledExpressionsTempFile        1 calls
1>        0 ms  IncludeTransitiveProjectReferences         1 calls
1>        0 ms  AddTransitiveFrameworkReferences           1 calls
1>        0 ms  _CheckForUnsupportedNETCoreVersion         1 calls
1>        0 ms  _CheckForUnsupportedCppNETCoreVersion      1 calls
1>        0 ms  AfterBuild                                 1 calls
1>        0 ms  CoreBuild                                  1 calls
1>        0 ms  PrepareForRun                              1 calls
1>        0 ms  ComputeDependencyFileCompilerOptions       1 calls
1>        0 ms  _ComputeUserRuntimeAssemblies              1 calls
1>        0 ms  _CopySourceItemsToOutputDirectory          1 calls
1>        0 ms  ResolveReferencedProjectsStaticWebAssets   1 calls
1>        0 ms  GetTargetPath                              1 calls
1>        0 ms  CollectPackageReferences                   1 calls
1>        0 ms  GetTargetPathWithTargetPlatformMoniker     1 calls
1>        0 ms  DesignTimeXamlMarkupCompilation            1 calls
1>        0 ms  Compile                                    1 calls
1>        0 ms  DisableAnalyzers                           1 calls
1>        0 ms  _GenerateRazorAssemblyInfo                 1 calls
1>        0 ms  _ComputePackageReferencePublish            1 calls
1>        0 ms  _DefaultMicrosoftNETPlatformLibrary        1 calls
1>        0 ms  BeforeResolveReferences                    1 calls
1>        0 ms  AfterCompile                               1 calls
1>        0 ms  ComputeRunAnalyzers                        1 calls
1>        0 ms  _BeforeVBCSCoreCompile                     1 calls
1>        0 ms  GetReferenceAssemblyPaths                  1 calls
1>        0 ms  GetFrameworkPaths                          1 calls
1>        0 ms  BuildOnlySettings                          1 calls
1>        0 ms  BeforeBuild                                1 calls
1>        0 ms  AfterResGen                                1 calls
1>        1 ms  RazorGenerateComponentDefinition           1 calls
1>        1 ms  SetWin32ManifestProperties                 1 calls
1>        1 ms  _DiscoverMvcApplicationParts               1 calls
1>        1 ms  GenerateTargetFrameworkMonikerAttribute    1 calls
1>        1 ms  CleanupEmptyRefsFolder                     1 calls
1>        1 ms  ValidationExtension                        1 calls
1>        1 ms  _CheckForCompileOutputs                    1 calls
1>        1 ms  ResGen                                     1 calls
1>        1 ms  _CollectTargetFrameworkForTelemetry        1 calls
1>        1 ms  _GetAppHostPaths                           1 calls
1>        1 ms  ResolveLockFileAnalyzers                   1 calls
1>        1 ms  _GenerateSatelliteAssemblyInputs           1 calls
1>        1 ms  _GetProjectJsonPath                        1 calls
1>        1 ms  ResolveStaticWebAssetsInputs               1 calls
1>        1 ms  ResolveRazorGenerateInputs                 1 calls
1>        1 ms  GenerateAssemblyInfo                       1 calls
1>        1 ms  GetAssemblyAttributes                      1 calls
1>        1 ms  _CheckForObsoleteDotNetCliToolReferences   1 calls
1>        1 ms  RazorGetAssemblyAttributes                 1 calls
1>        1 ms  _GetUserSecretsAssemblyAttribute           1 calls
1>        1 ms  _CoreGenerateRazorAssemblyInfo             1 calls
1>        1 ms  ResolveProjectReferences                   1 calls
1>        1 ms  BeforeGenerateFakesAssemblies              1 calls
1>        1 ms  _PopulateCommonStateForGetCopyToOutputDirectoryItems   1 calls
1>        1 ms  CreateSatelliteAssemblies                  1 calls
1>        1 ms  _PrepareForStaticWebAssets                 1 calls
1>        1 ms  CleanXsdCodeGen                            1 calls
1>        1 ms  _CheckForLanguageAndFeatureCombinationSupport   1 calls
1>        1 ms  ComputeIntermediateSatelliteAssemblies     1 calls
1>        1 ms  ResolveRazorComponentInputs                1 calls
1>        1 ms  _SetTargetFrameworkMonikerAttribute        1 calls
1>        1 ms  _SetEmbeddedWin32ManifestProperties        1 calls
1>        1 ms  CreateManifestResourceNames                1 calls
1>        1 ms  ExpressionBuildExtension                   1 calls
1>        1 ms  GetCopyToOutputDirectoryXamlAppDefs        1 calls
1>        1 ms  EnableIntermediateOutputPathMismatchWarning   1 calls
1>        1 ms  _SplitProjectReferencesByFileExistence     1 calls
1>        1 ms  _GenerateCompileInputs                     1 calls
1>        1 ms  _ComputeNETCoreBuildOutputFiles            1 calls
1>        2 ms  ApplyImplicitVersions                      1 calls
1>        2 ms  ValidateIdentityUIFrameworkVersion         1 calls
1>        2 ms  _CheckForUnsupportedAppHostUsage           1 calls
1>        2 ms  ResolveCodeAnalysisRuleSet                 1 calls
1>        2 ms  _GetCopyToOutputDirectoryItemsFromTransitiveProjectReferences   1 calls
1>        2 ms  CheckFileSystemCaseSensitive               1 calls
1>        2 ms  _CheckForInvalidConfigurationAndPlatform   1 calls
1>        2 ms  GetTypeScriptCopyToOutputDirectoryItems    1 calls
1>        2 ms  AssignRazorGenerateTargetPaths             1 calls
1>        2 ms  CheckForImplicitPackageReferenceOverrides   1 calls
1>        3 ms  _CreateRazorAssemblyInfoInputsCacheFile    1 calls
1>        3 ms  GenerateBuildDependencyFile                1 calls
1>        3 ms  _GetProjectReferenceTargetFrameworkProperties   1 calls
1>        3 ms  _GenerateRuntimeConfigurationFilesInputCache   1 calls
1>        3 ms  PreXsdCodeGen                              1 calls
1>        3 ms  TypeScriptDeleteOutputFromOtherConfigs     1 calls
1>        3 ms  ResolveRazorConfiguration                  1 calls
1>        3 ms  _HashRazorGenerateInputs                   1 calls
1>        3 ms  _CopyOutOfDateSourceItemsToOutputDirectory   1 calls
1>        3 ms  CreateGeneratedAssemblyInfoInputsCacheFile   1 calls
1>        3 ms  _ResolveComponentRazorGenerateInputs       1 calls
1>        4 ms  _GetCopyToOutputDirectoryItemsFromThisProject   1 calls
1>        6 ms  ReportTypeScriptVersion                    1 calls
1>        6 ms  _GetRestoreProjectStyle                    1 calls
1>        7 ms  AssignRazorComponentTargetPaths            1 calls
1>        8 ms  GenerateBuildRuntimeConfigurationFiles     1 calls
1>        8 ms  UpdateAspNetToFrameworkReference           1 calls
1>        9 ms  GetAssemblyVersion                         1 calls
1>        9 ms  ResolveLockFileReferences                  1 calls
1>        9 ms  ResolveTargetingPackAssets                 1 calls
1>       10 ms  AssignProjectConfiguration                 1 calls
1>       10 ms  ResolveFrameworkReferences                 1 calls
1>       11 ms  GetCopyToOutputDirectoryItems              1 calls
1>       11 ms  ResolveLockFileCopyLocalFiles              1 calls
1>       11 ms  _ComputeReferenceAssemblies                1 calls
1>       12 ms  ProcessFrameworkReferences                 1 calls
1>       12 ms  _ResolveMvcAssemblyAttributes              1 calls
1>       13 ms  _HashRazorComponentInputs                  1 calls
1>       13 ms  CopyFilesToOutputDirectory                 1 calls
1>       18 ms  _CreateStaticWebAssetsInputsCacheFile      1 calls
1>       20 ms  ResolvePackageAssets                       1 calls
1>       21 ms  CoreResGen                                 1 calls
1>       23 ms  ResolveAssemblyReferenceRazorGenerateInputs   1 calls
1>       24 ms  PrepareForBuild                            1 calls
1>       27 ms  FindConfigFiles                            1 calls
1>       30 ms  _GenerateCompileDependencyCache            1 calls
1>       43 ms  IncrementalClean                           1 calls
1>       43 ms  _CleanGetCurrentAndPriorFileWrites         1 calls
1>       47 ms  CheckForDuplicateItems                     1 calls
1>       50 ms  _CopyFilesMarkedCopyLocal                  1 calls
1>       83 ms  _ResolveRazorGenerateOutputs               1 calls
1>       88 ms  _CopyReferenceOnlyAssembliesForBuild       1 calls
1>      101 ms  _HandlePackageFileConflicts                1 calls
1>      122 ms  AssignTargetPaths                          1 calls
1>      126 ms  FindReferenceAssembliesForReferences       1 calls
1>      136 ms  _ResolveRazorComponentOutputs              1 calls
1>      156 ms  _CreateAppHost                             1 calls
1>      307 ms  GenerateSatelliteAssemblies                2 calls
1>      879 ms  ResolveAssemblyReferences                  1 calls
1>     1447 ms  GenerateStaticWebAssetsManifest            1 calls
1>     1527 ms  ResolveTagHelperRazorGenerateInputs        1 calls
1>     2057 ms  RazorGenerateComponentDeclaration          1 calls
1>     2838 ms  ResolveCurrentProjectStaticWebAssetsInputs   1 calls
1>     6867 ms  RazorCoreGenerate                          1 calls
1>    19849 ms  RazorCompileComponentDeclaration           1 calls
1>    21464 ms  CoreCompile                                1 calls
1>
1>Task Performance Summary:
1>        0 ms  Delete                                     2 calls
1>        0 ms  FindInList                                 1 calls
1>        0 ms  CheckFileSystemCaseSensitive               1 calls
1>        0 ms  AssignCulture                              1 calls
1>        1 ms  ApplyImplicitVersions                      1 calls
1>        1 ms  CheckForImplicitPackageReferenceOverrides   1 calls
1>        1 ms  ResolveFrameworkReferences                 1 calls
1>        1 ms  MSBuild                                    1 calls
1>        1 ms  Telemetry                                  1 calls
1>        1 ms  ResolveCodeAnalysisRuleSet                 1 calls
1>        1 ms  CheckForDuplicateFrameworkReferences       1 calls
1>        1 ms  GetFrameworkPath                           1 calls
1>        1 ms  CreateCSharpManifestResourceName           1 calls
1>        3 ms  Touch                                      2 calls
1>        3 ms  JoinItems                                  1 calls
1>        3 ms  Message                                    4 calls
1>        3 ms  ReadLinesFromFile                          1 calls
1>        3 ms  ResolveAppHosts                            1 calls
1>        4 ms  GetRestoreProjectStyleTask                 1 calls
1>        4 ms  ProcessFrameworkReferences                 1 calls
1>        4 ms  FormatLocalizedString                      1 calls
1>        4 ms  GetPackageDirectory                        6 calls
1>        7 ms  ConvertToAbsolutePath                      1 calls
1>        7 ms  CheckIfPackageReferenceShouldBeFrameworkReference   2 calls
1>        7 ms  ResolveTargetingPackAssets                 1 calls
1>        8 ms  AssignProjectConfiguration                 1 calls
1>        9 ms  GetAssemblyVersion                         1 calls
1>       10 ms  WriteLinesToFile                           7 calls
1>       11 ms  CallTarget                                 3 calls
1>       14 ms  FindUnderPath                              5 calls
1>       15 ms  RemoveDuplicates                           2 calls
1>       18 ms  GenerateResource                           1 calls
1>       19 ms  ResolvePackageAssets                       1 calls
1>       24 ms  FindAppConfigFile                          1 calls
1>       27 ms  FindConfigFiles                            1 calls
1>       31 ms  Hash                                       7 calls
1>       37 ms  RemoveDir                                  1 calls
1>       45 ms  CheckForDuplicateItems                     3 calls
1>       46 ms  MakeDir                                   53 calls
1>       87 ms  ResolvePackageFileConflicts                1 calls
1>      129 ms  AssignTargetPath                          11 calls
1>      145 ms  Copy                                       6 calls
1>      155 ms  CreateAppHost                              1 calls
1>      303 ms  AL                                         2 calls
1>      873 ms  ResolveAssemblyReference                   1 calls
1>     1523 ms  RazorTagHelper                             1 calls
1>     8746 ms  RazorGenerate                              2 calls
1>    41309 ms  Csc                                        2 calls
1>
1>Build succeeded.
1>    0 Warning(s)
1>    0 Error(s)
1>  

Комментарии:

1. Вы пробовали регистрировать сборку, чтобы узнать, что занимает так много времени? Вы просто создаете или переделываете, потому что повторная сборка обходится дорого.

2. Спасибо за ответ. Когда мы что-то меняем в файле .razor, мы нажимаем сохранить и Cntrl-F5, я не знаю другого способа компиляции. Я отредактировал вопрос и добавил некоторый раздел из журнала. Честно говоря, я не знаю, где искать. Кажется, RazorCompileComponentDeclaration (19849 мс), CoreCompile (21464 мс CoreCompile), RazorGenerate (8746 мс RazorGenerate) и т.д.

3. Моим первым предложением было бы разделить ваши компоненты на библиотеки классов Razor — чем больше разделение, тем лучше (в некоторой степени), чтобы инкрементные сборки требовали меньше компиляции. Является ли это особенно масштабируемым решением? Используете ли вы быстрый SSD-накопитель? Отключено антивирусное сканирование исходных папок?

4. Если вы работаете с использованием Ctrl-F5, вы могли бы попробовать просто нажать Ctrl b после изменения вместо Ctrl-F5 — он должен просто выполнить сборку и перезапустить — и для меня это быстрее, чем Ctrl-F5, когда он уже запущен

5. В решении был только один проект со всеми файлами. Теперь я разделил больше проектов: Уровень представления (Blazor и некоторые вспомогательные средства), разделяемую библиотеку (некоторые общие вспомогательные средства), библиотеку доступа к данным (миграции и контекст БД), службы бизнес-логики (сервисы и запросы к базе данных), и теперь все завершается за 20 секунд (используя Ctrl-B, как вы сказали). Разница в 20 секунд связана с миграциями, потому что за это время было: 663 файла. Да, я использую SSD, который мы протестировали на большем количестве серверов и компьютеров. Текущий компьютер находится на сервере Azure F8s v2 16 ГБ, 8 процессоров. Антивируса нет.