如何配置 NCrunch 以便它可以构建 Blazor 项目
How to configure NCrunch so that it can build a Blazor project
当 NCrunch(版本 4.2.0.7)尝试构建 Blazor 项目(版本 3.0.0-preview9)时,它会产生以下错误:
packages\microsoft.aspnetcore.blazor.build.0.0-preview9.19465.2\targets\Blazor.MonoRuntime.targets (441, 5): The command "dotnet "C:\Users\Rodolfo.nuget\packages\microsoft.aspnetcore.blazor.mono.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 (... lots of files here...) exited with code -532462766.
如何让 NCrunch 构建 Blazor 项目?
免责声明:我在网上找不到单一答案(包括 SO)后才写这个问题。我已经找到了解决方案并打算自己回答这个问题,以便 - 希望 - 帮助其他人。
TL;DR
- 转到 Blazor 项目的 NCrunch 配置。
- 添加一个名为 BlazorLinkOnBuild 的 自定义构建 属性(自 3.2.0-preview3 起,重命名为 BlazorWebAssemblyEnableLinking) 值为 false.
完整解释
...以防细节发生变化。
在报错信息中提到的.targets文件的第441行可以找到导致报错的Exec命令:
<Exec Command="dotnet "$(MonoLinkerPath)" $(_BlazorLinkerAdditionalOptions) @(_BlazorFolderLookupPaths, ' ') -o "$(BlazorIntermediateLinkerOutputPath)" @(_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 构建项目。
当 NCrunch(版本 4.2.0.7)尝试构建 Blazor 项目(版本 3.0.0-preview9)时,它会产生以下错误:
packages\microsoft.aspnetcore.blazor.build.0.0-preview9.19465.2\targets\Blazor.MonoRuntime.targets (441, 5): The command "dotnet "C:\Users\Rodolfo.nuget\packages\microsoft.aspnetcore.blazor.mono.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 (... lots of files here...) exited with code -532462766.
如何让 NCrunch 构建 Blazor 项目?
免责声明:我在网上找不到单一答案(包括 SO)后才写这个问题。我已经找到了解决方案并打算自己回答这个问题,以便 - 希望 - 帮助其他人。
TL;DR
- 转到 Blazor 项目的 NCrunch 配置。
- 添加一个名为 BlazorLinkOnBuild 的 自定义构建 属性(自 3.2.0-preview3 起,重命名为 BlazorWebAssemblyEnableLinking) 值为 false.
完整解释 ...以防细节发生变化。
在报错信息中提到的.targets文件的第441行可以找到导致报错的Exec命令:
<Exec Command="dotnet "$(MonoLinkerPath)" $(_BlazorLinkerAdditionalOptions) @(_BlazorFolderLookupPaths, ' ') -o "$(BlazorIntermediateLinkerOutputPath)" @(_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 构建项目。