Skip to content
This repository was archived by the owner on Dec 31, 2025. It is now read-only.
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,29 @@ Should only be enabled in projects containing the Revit manifest file (`.addin`)

`Clean solution` or `Clean project` commands will delete the deployed files.

#### Versioned folder for local deployment

By default, local deployment copies the add-in into a folder named after the assembly under
`%AppData%\Autodesk\Revit\Addins\$(RevitVersion)` (for example, `RevitAddIn`).

If you want the deployment folder name to include the assembly version (for example, `RevitAddIn_1.2.3`),
enable the `AppendVersion` property. Optionally, you can also define a separator between the name and version
with `VersionDelimiter`:

```xml
<PropertyGroup>
<DeployRevitAddin>true</DeployRevitAddin>
<AppendVersion>true</AppendVersion>
<VersionDelimiter>_</VersionDelimiter>
</PropertyGroup>
```

When `AppendVersion` is enabled and `AssemblyVersion` is defined, the add-in will be deployed into a
versioned folder, and the `.addin` manifest will be updated automatically to point to the versioned path.
If `AppendVersion` is not set (or `AssemblyVersion` is missing), the non-versioned folder name is used as before.

_Default: Disabled_

#### Publishing for distribution

If your goal is to generate an installer or a bundle, enable the `PublishRevitAddin` property.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,31 @@
-->

<PropertyGroup>
<DeployRevitAddin Condition="'$(DeployRevitAddin)' == ''">false</DeployRevitAddin>
<AppDataDeployDir>$(AppData)\Autodesk\Revit\Addins\$(RevitVersion)</AppDataDeployDir>

<DeployRevitAddin Condition="'$(DeployRevitAddin)' == ''">false</DeployRevitAddin>
<PublishRevitAddin Condition="'$(DeployRevitAddin)' == 'true'">true</PublishRevitAddin>
<PublishRevitAddin Condition="'$(PublishRevitAddin)' == ''">false</PublishRevitAddin>
</PropertyGroup>

<AppendVersion Condition="'$(AppendVersion)'!='true' OR '$(AssemblyVersion)'==''">false</AppendVersion>
<AddinDeployFolder Condition="'$(AppendVersion)'=='true'">$(AssemblyName)$(VersionDelimiter)$(AssemblyVersion)</AddinDeployFolder>
<AddinDeployFolder Condition="'$(AddinDeployFolder)'==''">$(AssemblyName)</AddinDeployFolder>
<AddinDeployDir>$(AppDataDeployDir)\$(AddinDeployFolder)</AddinDeployDir>
<AddinManifestFileName>$(AssemblyName).addin</AddinManifestFileName>
</PropertyGroup>

<Target Name="PublishRevitAddinFiles"
AfterTargets="CoreBuild"
Condition="$(PublishRevitAddin) == 'true' AND $(RevitVersion) != ''">
Condition="'$(PublishRevitAddin)' == 'true' AND '$(RevitVersion)' != ''">

<ItemGroup>
<RootItem Include="$(ProjectDir)*.addin"/>
<RootItem Include="$(ProjectDir)**\*$(AddinManifestFileName)"/>
<AddinItem Include="$(TargetDir)**\*" Exclude="**\$(PublishDirName)\**\*"/>
<_ResolvedFileToPublishAlways Include="@(Content)" PublishDirectory="%(Content.PublishDirectory)" Condition="'%(Content.CopyToPublishDirectory)' == 'Always'"/>
<_ResolvedFileToPublishPreserveNewest Include="@(Content)" PublishDirectory="%(Content.PublishDirectory)" Condition="'%(Content.CopyToPublishDirectory)' == 'PreserveNewest'"/>
</ItemGroup>

<PropertyGroup>
<PropertyGroup>
<RootDir>$(PublishDir)\Revit $(RevitVersion) $(Configuration) addin\</RootDir>
<AddinDir>$(RootDir)$(AssemblyName)\</AddinDir>
</PropertyGroup>
Expand All @@ -46,29 +54,46 @@

<Target Name="DeployRevitAddinFiles"
AfterTargets="PublishRevitAddinFiles"
Condition="$(DeployRevitAddin)">
Condition="'$(DeployRevitAddin)' == 'true'">

<ItemGroup>
<AddinFiles Include="$(PublishDir)\Revit $(RevitVersion) $(Configuration) addin\**\*"/>
</ItemGroup>
<ItemGroup>
<AddinManifest Include="$(PublishDir)\Revit $(RevitVersion) $(Configuration) addin\$(AddinManifestFileName)" />
<AddinFiles Include="$(PublishDir)\Revit $(RevitVersion) $(Configuration) addin\$(AssemblyName)\**\*" />
</ItemGroup>

<Copy SourceFiles="@(AddinFiles)"
DestinationFolder="$(AppData)\Autodesk\Revit\Addins\$(RevitVersion)\%(RecursiveDir)"/>
<Copy SourceFiles="@(AddinManifest)"
DestinationFolder="$(AppDataDeployDir)" />

<Message Text="$(AssemblyName) -> $(AppData)\Autodesk\Revit\Addins\$(RevitVersion)\" Importance="high"/>
<Copy SourceFiles="@(AddinFiles)"
DestinationFolder="$(AddinDeployDir)\%(RecursiveDir)" />

<Message Text="$(AssemblyName) -> $(AppDataDeployDir)\" Importance="high"/>
</Target>

<Target Name="CleanRevitAddinFolder"
<Target Name="UpdateAddinManifestPath"
AfterTargets="DeployRevitAddinFiles"
Condition="'$(AppendVersion)' == 'true'">

<Exec Command="powershell -NoLogo -NonInteractive -ExecutionPolicy Bypass -Command ^
$path='$(AppDataDeployDir)\$(AddinManifestFileName)'; ^
$xml=[xml](Get-Content $path); ^
$xml.RevitAddIns.AddIn.Assembly='$(AddinDeployFolder)\$(AssemblyName).dll'; ^
$xml.Save($path)" />

<Message Text="'$(AssemblyName)\$(AssemblyName).dll' -> '$(AddinDeployFolder)\$(AssemblyName).dll'" Importance="high" />
</Target>

<Target Name="CleanRevitAddinDeployFolder"
AfterTargets="Clean"
Condition="$(DeployRevitAddin)">
Condition="'$(DeployRevitAddin)' == 'true'">

<RemoveDir Directories="$(AppData)\Autodesk\Revit\Addins\$(RevitVersion)\$(AssemblyName)"/>
<Delete Files="$(AppData)\Autodesk\Revit\Addins\$(RevitVersion)\$(AssemblyName).addin"/>
<RemoveDir Directories="$(AddinDeployDir)"/>
<Delete Files="$(AppDataDeployDir)\$(AddinManifestFileName)"/>
</Target>

<Target Name="CleanPublishFolder"
AfterTargets="Clean"
Condition="$(PublishRevitAddin) == 'true'">
Condition="'$(PublishRevitAddin)' == 'true'">

<RemoveDir Directories="$(PublishDir)"/>
</Target>
Expand Down