使用 构建 ASP.NET 核 3.1 .NET-Standard 2.0 项目会导致冲突的 Microsoft.Asp



我正在尝试构建一个ASP.NET-Core 3.1(netcoreapp3.1(应用程序,该应用程序依赖于使用MSBuild SDK"Microsoft.NET.Sdk.Razor".NET-Standard 2.0NuGet库。

这在Visual Studio(2019(中构建并运行良好,但是当我运行dotnet build时,出现以下错误:

Build FAILED.
CSC : error CS8034: Unable to load Analyzer assembly 
C:Usersdaniel.nugetpackagesmicrosoft.aspnetcore.mvc.analyzers2.2.0analyzersdotnetcsMicrosoft.AspNetCore.Mvc.Analyzers.dll
: Assembly with same name is already loaded [D:gitmyappsrcmyapp.Appmyapp.App.csproj]
0 Warning(s)
1 Error(s)

我的猜测是我的.NET-Standard 2.0库正在通过Microsoft.NET.Sdk.RazorSDK拉入Microsoft.CodeQuality.Analyzers2.x,这与ASP.NET-Core 3.1应用程序拉入的库冲突。

问题:

  1. 有没有一种方法可以通过命令行构建我的应用程序,就像Visual Studio一样?

  2. 在我的库中使用多目标和#if NETCOREAPP3_1块是正确的解决方案吗?

Visual Studio 使用 MSBuild 生成解决方案文件,因此你可以尝试MSBuild %yoursolutionfile%来生成解决方案,另一方面,dotnet build通常生成单个项目而不是解决方案。

若要回答第二个问题,如果确实发现依赖项是必需的,并且在 dotnet build for 3.1 版本中不能忽略,是的,多目标设置应该可以工作,可以按照此链接生成多目标应用程序 https://learn.microsoft.com/en-us/dotnet/core/tutorials/libraries#how-to-multitarget

这是隐藏烦人消息的解决方法,但它实际上不会消除根本问题:

编辑 .csproj 并将 8034 (CS8034(<NoWarn>添加到配置/平台<PropertyGroup>,如下所示:

<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<!-- ... -->
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<NoWarn>8034</NoWarn>
</PropertyGroup>
<!-- ... -->
</Project>

半相关,但这个问题是错误 CS8034 的顶级搜索结果之一,所以我想为其他人留下答案。就我而言,我们在使用其他分析器时遇到了错误:

CS8034: Unable to load Analyzer assembly C:....nugetpackagesstrawberryshake.codegeneration.csharp.analyzers12.0.1analyzersdotnetcsMicrosoft.CodeAnalysis.CSharp.dll

我们在.NetStandard2.0 项目,由 .Net 3.1 sdk 构建。但是,StrawberryShake使用与.Net 5一起发布的Roslyn Source Generators。在下游,依赖于我们的 StrawberryShake 代码的 csprojs 无法编译,说程序集没有任何我们生成的命名空间/类型。我们升级到 .Net 5 来构建 StrawberryShake 项目,我们的问题就消失了。

相关内容

  • 没有找到相关文章

最新更新