【问题标题】:Build error with code analyzer after upgrading to .net core 3.1 preview4升级到 .net core 3.1 preview4 后使用代码分析器构建错误
【发布时间】:2020-03-29 12:01:40
【问题描述】:

我有一个 Blazor webassembly 项目(托管),我刚刚尝试将其升级到 .net core 3.1 的发布版本。为此,我已将 VS 2019 预览版升级到 16.5 预览版 1。我已将项目中的所有包升级到 3.1.0-preview4.19579.2。我还将客户端和共享项目更新为 .net 标准 2.1 并安装了最新的模板(我认为)。

当我尝试构建我的解决方案时,我现在收到此错误,似乎在某处显示重复的代码分析资源文件:

Severity    Code    Description Project File    Line    Suppression State
Error   MSB4018 The "ResolveBlazorRuntimeDependencies" task failed unexpectedly.
System.InvalidOperationException: Multiple assemblies found with the same assembly name 'Microsoft.CodeAnalysis.resources':
Microsoft.CodeAnalysis.resources
C:\Users\NickWhymark\.nuget\packages\microsoft.codeanalysis.common\3.3.1\lib\netstandard2.0\de\Microsoft.CodeAnalysis.resources.dll
   at Microsoft.AspNetCore.Blazor.Build.ResolveBlazorRuntimeDependencies.<ResolveRuntimeDependenciesCore>g__CreateAssemblyLookup|17_1(IEnumerable`1 assemblyPaths)
   at Microsoft.AspNetCore.Blazor.Build.ResolveBlazorRuntimeDependencies.ResolveRuntimeDependenciesCore(String entryPoint, IEnumerable`1 applicationDependencies, IEnumerable`1 monoBclAssemblies)
   at Microsoft.AspNetCore.Blazor.Build.ResolveBlazorRuntimeDependencies.Execute()
   at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
   at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() Test.Blazor.Client  C:\Users\myuser\.nuget\packages\microsoft.aspnetcore.blazor.build\3.1.0-preview4.19579.2\targets\Blazor.MonoRuntime.targets 252 

错误似乎出现在 Web 程序集(客户端)项目中。我看不到任何重复的分析器。但是在服务器项目中,我注意到 Microsoft.AspNetCore.Components.Analyzers.dll 的副本。一个来自 Program Files 中的 .Net Core 3.1 SDK 文件夹,另一个来自 .nuget/packages。请注意,我没有明确添加 nuget,它只是“出现”了。

虽然很奇怪,但我认为服务器项目中重复的分析器不一定是原因,因为我创建了一个新的 Blazor webassembly 项目,它也有重复但编译正确。

我尝试过清理/重建,重新启动 VS,删除 bin/obj 文件夹,但问题仍然存在。

其他可能相关的点:

  • 我正在使用 Telerik Blazor 控件
  • 我已经安装了 VS2019 的发行版以及预览版。我也升级到 16.4.

非常感谢任何帮助!

【问题讨论】:

    标签: asp.net-core blazor-client-side


    【解决方案1】:

    my project 的更新遇到了同样的问题。

    Severity    Code    Description Project File    Line    Suppression State
    Error   MSB4018 The "ResolveBlazorRuntimeDependencies" task failed unexpectedly.
    System.InvalidOperationException: Multiple assemblies found with the same assembly name 'Microsoft.CodeAnalysis.resources':
    Microsoft.CodeAnalysis.resources
    C:\Users\SARI\.nuget\packages\microsoft.codeanalysis.common\3.4.0\lib\netstandard2.0\de\Microsoft.CodeAnalysis.resources.dll
       at Microsoft.AspNetCore.Blazor.Build.ResolveBlazorRuntimeDependencies.<ResolveRuntimeDependenciesCore>g__CreateAssemblyLookup|17_1(IEnumerable`1 assemblyPaths)
       at Microsoft.AspNetCore.Blazor.Build.ResolveBlazorRuntimeDependencies.ResolveRuntimeDependenciesCore(String entryPoint, IEnumerable`1 applicationDependencies, IEnumerable`1 monoBclAssemblies)
       at Microsoft.AspNetCore.Blazor.Build.ResolveBlazorRuntimeDependencies.Execute()
       at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
       at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() BlazorDemo  C:\Users\SARI\.nuget\packages\microsoft.aspnetcore.blazor.build\3.1.0-preview4.19579.2\targets\Blazor.MonoRuntime.targets   252
    

    从项目文件 (.csproj) 中删除 &lt;BlazorLinkOnBuild&gt;false&lt;/BlazorLinkOnBuild&gt; 解决了该问题。

    编辑:找到另一个solution。将此添加到项目文件中

    <Target Name="_RemoveSatelliteAssemblies" BeforeTargets="_ResolveBlazorRuntimeDependencies">
      <ItemGroup>
        <_BlazorDependencyInput Remove="@(_BlazorDependencyInput->WithMetadataValue('AssetType', 'resources'))"  />
      </ItemGroup>
    </Target>
    

    【讨论】:

    • 感谢 SARI,这也对我有用。 Telerik 的人建议我,我还必须添加一个 Linker.xml 文件以防止链接器对 Telerik 控件过于激进。他们现在已将此添加到入门指南中,以防万一它对某人有所帮助!
    • 我有同样的错误。但是,这个解决方案对我没有帮助。删除BlazorLinkOnBuild 语句后,我得到一个ILLink failed with exited code 1. at C:\Users\SeppPenner\.nuget\packages\microsoft.aspnetcore.blazor.build\3.1.0-preview4.19579.2\targets\Blazor.MonoRuntime.targets 204。有什么想法吗?
    【解决方案2】:

    netcore3.1netstandard2.1blazor-wasm-3.1 库似乎存在已知问题。对我来说,https://github.com/aspnet/AspNetCore/issues/17754#issuecomment-564431825 的解决方法奏效了:

    解决方法是在您的主目录中编辑文件“.nuget\packages\microsoft.aspnetcore.blazor.build\3.1.0-preview4.19579.2\targets\Blazor.MonoRuntime.targets”并进行更改:

        <BlazorILLink
        ILLinkPath="$(MonoLinkerPath)"
        AssemblyPaths="@(_BlazorAssemblyToLink)"
        RootAssemblyNames="@(_BlazorLinkerRoot)"
        RootDescriptorFiles="@(BlazorLinkerDescriptor)"
        OutputDirectory="$(BlazorIntermediateLinkerOutputPath)"
        ExtraArgs="$(_BlazorLinkerAdditionalOptions)"
        ToolExe="$(_DotNetHostFileName)"
        ToolPath="$(_DotNetHostDirectory)" />
    

        <BlazorILLink
        ILLinkPath="&quot;$(MonoLinkerPath)&quot;"
        AssemblyPaths="@(_BlazorAssemblyToLink)"
        RootAssemblyNames="@(_BlazorLinkerRoot)"
        RootDescriptorFiles="@(BlazorLinkerDescriptor)"
        OutputDirectory="$(BlazorIntermediateLinkerOutputPath)"
        ExtraArgs="$(_BlazorLinkerAdditionalOptions)"
        ToolExe="$(_DotNetHostFileName)"
        ToolPath="$(_DotNetHostDirectory)" />
    

    问题是,如果用户名包含空格(如果您有一个 Windows 帐户并给出了名字和姓氏,这是默认值 --> 例如 Hans Meier),链接器路径是配置不正确,引号丢失。

    【讨论】:

    • @Ted 您是否还会遇到此问题?这应该在不久前就已经修复了......
    • 已通过将 Visual Studio 更新到最新版本来解决。没有其他解决方法有效,我也没有。
    猜你喜欢
    • 2021-10-13
    • 2021-05-04
    • 2020-04-22
    • 2013-07-22
    • 2022-06-13
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 2020-02-18
    相关资源
    最近更新 更多