Написать заметку меня побудила статья Александра Зуева:
https://weandrevit.ru/obnovlenie-na-revit-api-2025-net8/
Благодарю Александра за труд и за то что делится своими наработками!
При чтении глаз зацепился за этот момент:
Сам когда-то писал точно так же. Если используется две-три версии Revit, то ещё терпимо, а при большом числе поддерживать такой файл проекта окзалось весьма затруднительно.
Чтобы утоптать эту часть задал переменную RvtVersion
<PropertyGroup Condition="$(Configuration.Contains('RVT2015'))">
<RvtVersion>2015</RvtVersion>
<TargetFramework>net45</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2016'))">
<RvtVersion>2016</RvtVersion>
<TargetFramework>net45</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2017'))">
<RvtVersion>2017</RvtVersion>
<TargetFramework>net452</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2018'))">
<RvtVersion>2018</RvtVersion>
<TargetFramework>net452</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2019'))">
<RvtVersion>2019</RvtVersion>
<TargetFramework>net47</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2020'))">
<RvtVersion>2020</RvtVersion>
<TargetFramework>net47</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2021'))">
<RvtVersion>2021</RvtVersion>
<TargetFramework>net48</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2022'))">
<RvtVersion>2022</RvtVersion>
<TargetFramework>net48</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2023'))">
<RvtVersion>2023</RvtVersion>
<TargetFramework>net48</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2024'))">
<RvtVersion>2024</RvtVersion>
<TargetFramework>net48</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2025'))">
<RvtVersion>2025</RvtVersion>
<TargetFramework>net8-windows</TargetFramework>
</PropertyGroup>
Для задания условий по конфигурациям типа Debug и Release сделал два блока с условиями:
<PropertyGroup Condition="$(Configuration.Contains('Debug'))">
<DefineConstants>TRACE;DEBUG;RVT$(RvtVersion)</DefineConstants>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('Release'))">
<DefineConstants>RVT$(RvtVersion)</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
</PropertyGroup>
Таким образом, для задания путей к библиотекам Revit API можно использовать переменную RvtVersion, не требуется громадный блок Choose-When
<ItemGroup>
<Reference Include="AdWindows">
<HintPath>C:\Program Files\Autodesk\Revit $(RvtVersion)\AdWindows.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="RevitAPI">
<HintPath>C:\Program Files\Autodesk\Revit $(RvtVersion)\RevitAPI.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="RevitAPIUI">
<HintPath>C:\Program Files\Autodesk\Revit $(RvtVersion)\RevitAPIUI.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>
В <PostBuildEvent> также компактная запись:
<PropertyGroup>
<OutputPath>bin\$(Configuration)</OutputPath>
<InstallAddinPath>$(MSBuildProjectDirectory)\..\Publish\Release\Autodesk\REVIT\Addins\$(RvtVersion)</InstallAddinPath>
<StartAction>Program</StartAction>
<StartProgram>$(ProgramW6432)\Autodesk\Revit $(RvtVersion)\Revit.exe</StartProgram>
<StartArguments>/viewer</StartArguments>
<PostBuildEvent>
echo "$(AppData)\Autodesk\REVIT\Addins\$(RvtVersion)"
if $(Configuration) == RVT$(RvtVersion)Release (
mkdir "$(AppData)\Autodesk\REVIT\Addins\$(RvtVersion)"
copy "$(MSBuildProjectDirectory)\ConnectToElPanel.addin" "$(AppData)\Autodesk\REVIT\Addins\$(RvtVersion)"
copy "$(MSBuildProjectDirectory)\$(OutputPath)\$(TargetFramework)\ConnectToElPanel.dll" "$(AppData)\Autodesk\REVIT\Addins\$(RvtVersion)"
md $(InstallAddinPath)
copy "$(MSBuildProjectDirectory)\ConnectToElPanel.addin" "$(InstallAddinPath)\"
copy "$(MSBuildProjectDirectory)\$(OutputPath)\$(TargetFramework)\ConnectToElPanel.dll" "$(InstallAddinPath)")
</PostBuildEvent>
</PropertyGroup>
При таком подходе файл проекта становится намного компактнее и проще в поддержке
С полным текстом примера можно ознакомиться тут.
Рекомендую ознакомиться с примерами в репозитории
https://github.com/Nice3point/RevitTemplates
Успехов!