#.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?