使用.NET Framework的Directory.Build.Prop添加包

使用.NET Framework的Directory.Build.Prop添加包,.net,visual-studio,msbuild,.net,Visual Studio,Msbuild,我有一个visualstudio解决方案,我试图在所有项目中使用buildprop文件添加代码分析器。我有一些依赖.NET核心和框架的项目。我有下面的Directory.Build.Prop文件 <Project> <Choose> <When Condition="$(UsingMicrosoftNETSdk) == 'true'"> <PropertyGroup Condition="'$

我有一个visualstudio解决方案,我试图在所有项目中使用buildprop文件添加代码分析器。我有一些依赖.NET核心和框架的项目。我有下面的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>

假的
真的
全部的
运行时间;建设;本地人;内容文件;分析仪;可传递的
现在,我可以使用MicrosoftNetsdk属性区分.Net核心项目和框架项目,因为所有新的核心项目都使用SDK风格的项目,而框架项目则不是这样。但是我不确定我应该在“否则”部分添加什么来添加这些分析器

由于使用的分析器与平台无关,因此我尝试使用包引用或引用元素来添加它。但它并没有像预期的那样工作,我看到analyzer也并没有工作,加上它弄乱了框架项目中的其他引用(在引用上得到警告标志,项目就不会生成)


另外,我认为这与packages.config文件中管理的框架项目中的包引用有关,但我不确定我们是否可以从build.props中对其应用一些东西。实际上,Net framework项目支持包引用。看

如果您想使用
Directory.Build.props
文件来安装一些带有packages.config numget管理格式的用于Net Framework项目的numget软件包,这是不可能的,因为
packages.config
numget管理格式使用
packages.config
来安装软件包,并且
proj
文件不能修改
packages.config
文件

但是只有PackageReferencenuget management可以使用proj安装nuget软件包,而不需要
packages.config
文件

因此,现在唯一要考虑的是如何更改
netframework
项目,该项目已使用
packages.config
安装了一些nuget软件包

建议

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

1)所以打开VS上的所有net framework项目,然后右键单击每个
packages.config
文件-->单击
Migrate packages.config到PackageReference

然后,您的所有网络框架项目都可以像网络核心项目那样使用PackageReference

2)然后,为
目录.Build.Prop
文件上的net framework项目添加这些,就像您为
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>

我正在尝试这样做,但其中一个软件包说它不适合此迁移。找到原因,它的asp.net项目。。。迁移目前不适用于C++和ASP.NET项目。所以,我再次回到原点谢谢你的反馈。更多信息将帮助我们更快地解决问题。我已更新了我的答案,请参见
更新1
。已经提供了更多的解决方案。嗨,关于这个问题有什么更新吗?嗨,包确实按照你建议的方式进行了移植,但是当我构建项目时,所有的包引用似乎都从列表中消失了
<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>