使用 .NET-Standard 2.0 项目构建 ASP.NET-Core 3.1 会导致 Microsoft.AspNetCore.Mvc.Analyzers 程序集冲突
Building ASP.NET-Core 3.1 with .NET-Standard 2.0 projects leads to conflicting Microsoft.AspNetCore.Mvc.Analyzers assemblies
我正在尝试构建一个 ASP.NET-Core 3.1
(netcoreapp3.1
) 应用程序,它依赖于 .NET-Standard 2.0
使用 MSBuild SDK "Microsoft.NET.Sdk.Razor"
的 NuGet 库。
从 Visual Studio (2019) 开始构建并且 运行 没问题,但是当我 运行 dotnet build
我收到以下错误:
Build FAILED.
CSC : error CS8034: Unable to load Analyzer assembly
C:\Users\daniel\.nuget\packages\microsoft.aspnetcore.mvc.analyzers.2.0\analyzers\dotnet\cs\Microsoft.AspNetCore.Mvc.Analyzers.dll
: Assembly with same name is already loaded [D:\git\myapp\src\myapp.App\myapp.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
通常构建单个项目而不是解决方案.
回答你的第二个问题,如果你确实发现你的依赖是必需的,并且在 3.1 版本的 dotnet build 中不能被忽略,是的,多目标设置应该可以工作,你可以按照这个 link 来构建多目标应用程序 https://docs.microsoft.com/en-us/dotnet/core/tutorials/libraries#how-to-multitarget
这是隐藏烦人消息的解决方法,但实际上并不能解决根本问题:
编辑 .csproj 并将 8034 (CS8034) <NoWarn>
添加到 Configuration/Platform <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:\...\.nuget\packages\strawberryshake.codegeneration.csharp.analyzers.0.1\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.dll
我们在 .NetStandard2.0 项目上安装了 StrawberryShake,该项目由 .Net 3.1 sdk 构建。但是,StrawberryShake 使用与 .Net 5 一起发布的 Roslyn 源代码生成器。下游依赖于我们 StrawberryShake 代码的 csprojs 无法编译,表示该程序集没有我们生成的任何名称空间/类型。我们升级到 .Net 5 来构建 StrawberryShake 项目,我们的问题消失了。
我正在尝试构建一个 ASP.NET-Core 3.1
(netcoreapp3.1
) 应用程序,它依赖于 .NET-Standard 2.0
使用 MSBuild SDK "Microsoft.NET.Sdk.Razor"
的 NuGet 库。
从 Visual Studio (2019) 开始构建并且 运行 没问题,但是当我 运行 dotnet build
我收到以下错误:
Build FAILED.
CSC : error CS8034: Unable to load Analyzer assembly
C:\Users\daniel\.nuget\packages\microsoft.aspnetcore.mvc.analyzers.2.0\analyzers\dotnet\cs\Microsoft.AspNetCore.Mvc.Analyzers.dll
: Assembly with same name is already loaded [D:\git\myapp\src\myapp.App\myapp.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
通常构建单个项目而不是解决方案.
回答你的第二个问题,如果你确实发现你的依赖是必需的,并且在 3.1 版本的 dotnet build 中不能被忽略,是的,多目标设置应该可以工作,你可以按照这个 link 来构建多目标应用程序 https://docs.microsoft.com/en-us/dotnet/core/tutorials/libraries#how-to-multitarget
这是隐藏烦人消息的解决方法,但实际上并不能解决根本问题:
编辑 .csproj 并将 8034 (CS8034) <NoWarn>
添加到 Configuration/Platform <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:\...\.nuget\packages\strawberryshake.codegeneration.csharp.analyzers.0.1\analyzers\dotnet\cs\Microsoft.CodeAnalysis.CSharp.dll
我们在 .NetStandard2.0 项目上安装了 StrawberryShake,该项目由 .Net 3.1 sdk 构建。但是,StrawberryShake 使用与 .Net 5 一起发布的 Roslyn 源代码生成器。下游依赖于我们 StrawberryShake 代码的 csprojs 无法编译,表示该程序集没有我们生成的任何名称空间/类型。我们升级到 .Net 5 来构建 StrawberryShake 项目,我们的问题消失了。