我正在尝试构建一个ASP.NET-Core 3.1
(netcoreapp3.1
(应用程序,该应用程序依赖于使用MSBuild SDK"Microsoft.NET.Sdk.Razor"
的.NET-Standard 2.0
NuGet库。
这在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.Razor
SDK拉入Microsoft.CodeQuality.Analyzers
2.x,这与ASP.NET-Core 3.1
应用程序拉入的库冲突。
问题:
有没有一种方法可以通过命令行构建我的应用程序,就像Visual Studio一样?
在我的库中使用多目标和
#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 项目,我们的问题就消失了。