gpt4 book ai didi

.net - 使用 Directory.Build.Prop 为 .NET Framework 添加包

转载 作者:行者123 更新时间:2023-12-01 23:38:24 35 4
gpt4 key购买 nike

我有一个 Visual Studio 解决方案,我试图在所有项目中使用构建 prop 文件添加代码分析器。我的项目依赖于 .NET Core 以及框架。我有以下 Directory.Build.Prop 文件

<Project>
<Choose>
<When Condition="$(UsingMicrosoftNETSdk) == 'true'">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<RunCodeAnalysis>true</RunCodeAnalysis>
</PropertyGroup>
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory).editorconfig" Link=".editorconfig" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="5.0.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
</When>
<Otherwise>
</Otherwise>
</Choose>
</Project>

现在,我可以使用属性 UsingMicrosoftNETSdk 区分 .Net 核心项目和框架项目,因为所有新的核心项目都使用 SDK 风格的项目,而框架项目则不然。但我不太确定我应该在“其他”部分添加什么以将这些分析器添加到其中。

由于使用的分析器是独立于平台的,我正在尝试使用包引用或引用元素来添加它。但它没有按预期工作,我看到分析器没有工作,而且它弄乱了框架项目中的其他引用(获取引用上的警告标志并且项目没有构建)。

此外,我认为这与在 packages.config 文件中管理的框架项目中的包引用有关,但我不确定我们是否可以从 build.props 对其应用某些内容

最佳答案

实际上,.NET Framework 项目支持PackageReference NuGet 管理格式。参见 this official document .

而如果你想使用Directory.Build.props文件安装一些带有packages.config的NuGet包,.NET Framework项目的NuGet管理格式,是不可能的,因为packages.config NuGet管理格式使用packages.config安装包,proj文件不能修改packages.config文件。

但是 只有 PackageReference NuGet 管理可以使用 proj 安装 NuGet 包而无需 packages.config 文件。

因此,现在唯一需要考虑的是如何使用packages.config更改已经安装了一些NuGet包的.NETt Framework项目。

建议

执行此操作之前,您可以为所有项目进行备份。

1) 因此,在 VS 上打开所有 .NET Framework 项目,然后右键单击每个 packages.config 文件-->单击 Migrate packages .config 到 PackageReference

enter image description here

然后,您的所有 .NET Framework 项目都可以像 .NET Core 项目那样使用 PackageReference

2) 然后,为 .NET Framework 项目在 Directory.Build.Prop 文件中添加这些,就像您为 .NET Core 所做的一样。

<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="5.0.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>

更新 1

在此之前,您可以为您的解决方案做一个备份。

==========================

对于ASP.NET框架项目,可以使用PackageReference。只是做一些修改。

  • 首先,在解决方案资源管理器上卸载这些项目,然后打开 ASP.NET 项目的每个 csproj 文件。

记得像这样注释 ProjectTypeGuids 属性:

enter image description here

  • 其次,然后重新加载项目,然后您可以迁移到 PackageReference。右键单击 packages.config,然后单击 Migrate packages.config into PackageReference

完成此步骤时,卸载您的项目并恢复 ProjectTypeGuids 属性。

对每个 ASP.NET 项目尝试以下步骤。

=========================

对于C++项目,NuGet包Microsoft.CodeAnalysis.NetAnalyzers不适合他们,所以你必须做出判断,将C++项目从你的项目中移除当前逻辑操作。

C++ 项目使用PlatformToolset 属性来构建项目,而.NET 项目不使用它。所以这是一个很好的判断条件。

使用这个:

<Project>
<Choose>
<!--exlcude c++ projects and all the net framework and net core projects can use PackageReference-->
<When Condition="'$(PlatformToolset)'==''">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<RunCodeAnalysis>true</RunCodeAnalysis>
</PropertyGroup>
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory).editorconfig" Link=".editorconfig" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="5.0.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
</When>
<Otherwise>
</Otherwise>
</Choose>
</Project>

关于.net - 使用 Directory.Build.Prop 为 .NET Framework 添加包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65262114/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com