使用 Directory.Build.Prop 为 .NET Framework 添加包
Add packages using Directory.Build.Prop for .NET Framework
我有一个 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 风格的项目,而 Framework 则不然项目。但是我不确定我应该在“其他”部分添加什么来将这些分析器添加到其中。
由于使用的分析器是独立于平台的,我正在尝试使用包参考或参考元素来添加它。但它没有按预期工作,我看到分析器没有工作,而且它弄乱了框架项目中的其他参考(获取参考上的警告标志并且项目没有构建)。
另外我认为它与在 packages.config 文件中管理的框架项目中的包引用有关,但我不确定我们是否可以从 build.props[=13= 中应用一些东西]
实际上,.NET Framework 项目支持PackageReference NuGet 管理格式。参见 this official document。
而如果您想使用Directory.Build.props
文件为.NET Framework项目安装一些具有packages.configNuGet管理格式的NuGet包,这是不可能的,因为packages.config
NuGet管理格式使用packages.config
安装包,proj
文件不能修改 packages.config
文件。
But only PackageReference NuGet 管理可以使用 proj 安装没有 packages.config
文件的 NuGet 包。
因此,现在唯一需要考虑的是如何更改已经使用packages.config
.
安装了一些NuGet包的.NETt Framework项目
建议
在执行此操作之前,您可以对所有项目进行备份。
1) 所以在 VS 上打开所有 .NET Framework 项目,然后右键单击每个 packages.config
文件-->单击 Migrate packages.config into PackageReference
.
然后,您所有的 .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。只是做一些修改。
- 首先,在 Solution Explorer 上卸载这些项目,然后打开 ASP.NET 个项目的每个 csproj 文件。
记得这样评论ProjectTypeGuids
属性:
- 其次,然后重新加载项目,然后您就可以迁移到 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>
我有一个 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 风格的项目,而 Framework 则不然项目。但是我不确定我应该在“其他”部分添加什么来将这些分析器添加到其中。
由于使用的分析器是独立于平台的,我正在尝试使用包参考或参考元素来添加它。但它没有按预期工作,我看到分析器没有工作,而且它弄乱了框架项目中的其他参考(获取参考上的警告标志并且项目没有构建)。
另外我认为它与在 packages.config 文件中管理的框架项目中的包引用有关,但我不确定我们是否可以从 build.props[=13= 中应用一些东西]
实际上,.NET Framework 项目支持PackageReference NuGet 管理格式。参见 this official document。
而如果您想使用Directory.Build.props
文件为.NET Framework项目安装一些具有packages.configNuGet管理格式的NuGet包,这是不可能的,因为packages.config
NuGet管理格式使用packages.config
安装包,proj
文件不能修改 packages.config
文件。
But only PackageReference NuGet 管理可以使用 proj 安装没有 packages.config
文件的 NuGet 包。
因此,现在唯一需要考虑的是如何更改已经使用packages.config
.
建议
在执行此操作之前,您可以对所有项目进行备份。
1) 所以在 VS 上打开所有 .NET Framework 项目,然后右键单击每个 packages.config
文件-->单击 Migrate packages.config into PackageReference
.
然后,您所有的 .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。只是做一些修改。
- 首先,在 Solution Explorer 上卸载这些项目,然后打开 ASP.NET 个项目的每个 csproj 文件。
记得这样评论ProjectTypeGuids
属性:
- 其次,然后重新加载项目,然后您就可以迁移到 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>