首页 > 解决方案 > 如何配置 NCrunch 以便它可以构建 Blazor 项目

问题描述

当 NCrunch(版本 4.2.0.7)尝试构建 Blazor 项目(版本 3.0.0-preview9)时,会产生以下错误:

packages\microsoft.aspnetcore.blazor.build\3.0.0-preview9.19465.2\targets\Blazor.MonoRuntime.targets (441, 5):命令“dotnet”C:\Users\Rodolfo.nuget\packages\microsoft.aspnetcore .blazor.mono\3.0.0-preview9.19462.2\build\netstandard1.0../../tools/illink/illink.dll" -l none --disable-opt unreachablebodies --verbose --strip-security true --exclude-feature com --exclude-feature sre -v false -c link -u link -b true -d (...这里有很多文件...)以代码 -532462766 退出。

如何让 NCrunch 构建 Blazor 项目?

免责声明:我在网上没有找到一个答案后写这个问题,包括 SO。我已经找到了解决方案并打算自己回答这个问题,以便 - 希望 - 帮助其他人。

标签: blazorncrunch

解决方案


TL;博士

  1. 转到 Blazor 项目的 NCrunch 配置。
  2. 添加一个名为BlazorLinkOnBuild的自定义构建属性(从 3.2.0-preview3 开始,重命名为BlazorWebAssemblyEnableLinking),其值为false

项目的 NCrunch 配置 NCrunch 自定义构建属性对话框


完整的解释 ......以防细节发生变化。

在错误消息中提到的 .targets 文件的第 441 行中,您将找到导致错误的 Exec 命令:

<Exec Command="dotnet &quot;$(MonoLinkerPath)&quot; $(_BlazorLinkerAdditionalOptions) @(_BlazorFolderLookupPaths, ' ') -o &quot;$(BlazorIntermediateLinkerOutputPath)&quot; @(_BlazorAssemblyDescriptorFiles, ' ') @(_BlazorAssembliesToLink, ' ')"  />

此命令包含在以下目标中:

<Target
  Name="_LinkBlazorApplication"
  Condition="$(_BlazorShouldLinkApplicationAssemblies) != ''"
  Inputs="$(BlazorBuildLinkerInputsCache);
          @(IntermediateAssembly);
          @(_BlazorDependencyInput);
          @(BlazorLinkerDescriptor)"
  Outputs="$(BlazorIntermediateLinkerResultFilePath)"
>

这意味着仅当 _BlazorShouldLinkApplicationAssemblies 属性不为空时才会执行 Exec。在 .targets 文件中搜索设置此内部属性的位置,您将找到此 PropertyGroup(第 152 行):

<PropertyGroup Label="Build properties">
  <_BlazorShouldLinkApplicationAssemblies Condition="$(BlazorLinkOnBuild) == 'false'"></_BlazorShouldLinkApplicationAssemblies>
  <_BlazorShouldLinkApplicationAssemblies Condition="$(BlazorLinkOnBuild) == 'true'">true</_BlazorShouldLinkApplicationAssemblies>
  <_BlazorBuiltInBclLinkerDescriptor>$(MSBuildThisFileDirectory)BuiltInBclLinkerDescriptor.xml</_BlazorBuiltInBclLinkerDescriptor>
</PropertyGroup>

这就是为什么将BlazorLinkOnBuild(从 3.2.0-preview3 开始,重命名为BlazorWebAssemblyEnableLinking)设置为false允许 NCrunch 构建项目。


推荐阅读