Добавьте пакеты с помощью Directory.Сборка.Prop для .NET Framework

#.net #visual-studio #msbuild

#.net #visual-studio #msbuild

Вопрос:

У меня есть решение Visual Studio, в котором я пытаюсь добавить анализаторы кода, используя файл build prop, во все проекты. У меня есть проекты, которые зависят как от .NET Core, так и от framework. У меня есть каталог ниже.Сборка.Файл 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>
 

Теперь я могу различать .Проекты Net core и framework, использующие свойство UsingMicrosoftNETSdk , поскольку все новые проекты core используют стиль проектов SDK, чего нельзя сказать о проектах Framework. Но я не совсем уверен, что мне следует добавить в раздел «Иначе», чтобы добавить к нему эти анализаторы.

Поскольку используемый анализатор не зависит от платформы, я пытаюсь использовать ссылку на пакет или элемент reference для его добавления. Но он работает не так, как ожидалось, и я вижу, что анализатор не работает, плюс он портит другие ссылки в проекте Framework (появляется предупреждающий знак при ссылке, и проект не создается).

Также я думаю, что это связано со ссылкой на пакет в проекте framework, который управляется в файле packages.config, но я не уверен, можем ли мы применить что-то к нему из build.props

Ответ №1:

На самом деле, проекты .NET Framework поддерживают формат управления PackageReference NuGet. Смотрите этот официальный документ.

И если вы хотите использовать Directory.Build.props file для установки некоторых пакетов NuGet с помощью packages.config Формат управления NuGet для проектов .NET Framework, это невозможно, потому packages.config что формат управления NuGet использует packages.config для установки пакетов, а proj file не может изменять packages.config file .

Но только PackageReference NuGet management может использовать proj для установки пакетов NuGet без packages.config файла.

Поэтому единственное соображение сейчас заключается в том, как изменить .Проект NETt Framework, в котором установлены некоторые пакеты NuGet с использованием packages.config .

Предложение

Прежде чем делать это, вы могли бы сделать резервную копию для всех ваших проектов.

1) Итак, откройте все свои проекты .NET Framework на VS, а затем щелкните правой кнопкой мыши на каждом packages.config файле -> щелкните Migrate packages.config into PackageReference .

введите описание изображения здесь

Тогда все ваши проекты .NET Framework могли бы использовать PackageReference, как это делали проекты .NET Core.

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. Просто внесите некоторые изменения.

  • Сначала выгрузите эти проекты в обозревателе решений, а затем откройте каждый файл csproj из ASP.NET проекты.

Не забудьте прокомментировать 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>
 

Комментарии:

1. Я пытаюсь это сделать, но в одном из пакетов указано, что он не подходит для этой миграции

2. Найдена причина, ее asp.net проект… Миграция в настоящее время недоступна для C и ASP.NET проекты. Итак, я снова возвращаюсь к исходной точке

3. Спасибо за ваш отзыв. А дополнительная информация поможет нам быстрее решить проблему. Я обновил свой ответ, см. update 1 . Было предоставлено больше решений.

4. Эй, пакет был перенесен так, как вы предложили, но когда я создаю проект, кажется, что все ссылки на пакет исчезают из списка

5. Может ли это быть из-за записей времени выполнения в web config?