Cha*_*ari 4 .net msbuild visual-studio
我有一个 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>
Run Code Online (Sandbox Code Playgroud)
现在,我可以使用该属性区分 .Net core 和框架项目UsingMicrosoftNETSdk,因为所有新核心项目都使用 SDK 风格的项目,而 Framework 项目则不然。但我不太确定应该在“其他”部分中添加什么来将这些分析器添加到其中。
由于使用的分析器是独立于平台的,因此我尝试使用包引用或引用元素来添加它。但它没有按预期工作,而且我看到分析器没有工作,而且它弄乱了框架项目中的其他引用(在引用上获取警告标志,项目无法构建)。
另外我认为这与在 packages.config 文件中管理的框架项目中的包引用有关,但我不确定我们是否可以从 build.props 中应用一些东西
实际上,.NET Framework 项目支持PackageReference NuGet 管理格式。参见这个官方文档。
而如果你想使用Directory.Build.props文件来安装一些带有packages.config NuGet管理格式的.NET Framework项目的NuGet包,这是不可能的,因为packages.configNuGet管理格式使用packages.config来安装包,并且proj文件无法修改packages.config文件。
但只有PackageReference NuGet管理可以使用proj来安装没有文件的NuGet包packages.config。
因此,现在唯一考虑的是如何更改使用.NETt Framework安装了一些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>
Run Code Online (Sandbox Code Playgroud)
更新1
在此过程之前,您可以为您的解决方案进行备份。
=========================
对于ASP.NET框架项目,可以使用PackageReference。只需做一些修改即可。
请记住像这样评论该ProjectTypeGuids属性:
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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7261 次 |
| 最近记录: |