Я попытался использовать Directory.Build.props, чтобы настроить некоторые переменные для использования с различными типами проектов.
<Project>
<PropertyGroup>
<!-- For SDK style c# projects -->
<ApmTargetFramework>net481</ApmTargetFramework>
</PropertyGroup>
<PropertyGroup>
<ApmTargetFrameworkVersion>v4.8.1</ApmTargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup>
<!-- For APM multi-targeted projects-->
<ApmMultiTargetFrameworks>net6.0;net481</ApmMultiTargetFrameworks>
</PropertyGroup>
</Project>
Для проектов в стиле SDK оба эти варианта работают:
<TargetFrameworks>$(ApmMultiTargetFrameworks)</TargetFrameworks>
и
<TargetFramework>$(ApmTargetFramework)</TargetFramework>
В файлах csproj старого стиля это, похоже, не работает:
<TargetFrameworkVersion>$(ApmTargetFrameworkVersion)</TargetFrameworkVersion>
Кажется, он работает в проектах в стиле SDK с многоцелевым таргетингом и без него.
Похоже, что в файлах csproj старого стиля он отображается как «пустой» или пустой.
В качестве теста я попробовал вручную установить значение в пользовательском интерфейсе.
В файле проекта это отобразилось как:
<TargetFrameworkVersion>v4.8.1</TargetFrameworkVersion>
Спасибо за идею. Версия 4.8 по-прежнему не позволяла мне загружать проекты. У меня все компилировалось с версией 4.8.1, но затем я пытался использовать Directory.Build.props, чтобы иметь некоторые общие переменные, чтобы у меня не было 200 файлов csproj с жестко закодированной в них версией 4.8.1. Кажется, он работает для проектов в стиле SDK. Не уверен, что происходит с проектами старого стиля.
Просматривая некоторую документацию здесь:
Directory.Build.props импортируется очень рано. Microsoft.Common.props и свойства, определенные позже, недоступны. к этому. Поэтому избегайте ссылок на свойства, которые еще не определены (и будет оценен как пустой).
Когда я посмотрел, некоторые файлы нашего проекта не содержали Microsoft.Common.props. У нас есть несколько собственных файлов .props, и я думаю, что кто-то мог удалить Microsoft.Common.props.
например файлы, которые не включали это, не работали с Directory.Build.props
<Import Project = "$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition = "Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
Из «Целевая структура и профиль»
v4.8
— это поддерживаемое значение дляTargetFrameworkVersion
. Можете ли вы проверить и посмотреть, работает ли<ApmTargetFrameworkVersion>v4.8</ApmTargetFrameworkVersion>
? Возможно,V4.8.1
просто не распознается.