Skip to content
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
43 changes: 42 additions & 1 deletion Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ Depending on your workflow, you can either deploy the files locally for immediat

#### Local deployment

To copy Revit add-in files to the `%AppData%\Autodesk\Revit\Addins` folder after building a project, you can enable the `DeployRevitAddin` property.
To copy Revit add-in files to the default `%AppData%\Autodesk\Revit\Addins` folder after building a project, you can enable the `DeployRevitAddin` property.

Copying files helps attach the debugger to the add-in when Revit starts. This makes it easier to test the application or can be used for local development.

Expand All @@ -104,6 +104,47 @@ Should only be enabled in projects containing the Revit manifest file (`.addin`)

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

#### Local deployment location (ProgramData vs AppData)

By default, local deployment copies the add-in files to `%AppData%\Autodesk\Revit\Addins\$(RevitVersion)`.

If you prefer to deploy to `%ProgramData%\Autodesk\Revit\Addins\$(RevitVersion)`, enable the
`DeployToProgramData` property alongside `DeployRevitAddin`:

```xml
<PropertyGroup>
<DeployRevitAddin>true</DeployRevitAddin>
<DeployToProgramData>true</DeployToProgramData>
</PropertyGroup>
```

When `DeployToProgramData` is `false` or not set, the add-in continues to be deployed under `%AppData%`.

_Default: Disabled_

#### 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,35 @@
-->

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

<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>$(DeployDir)\$(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 +58,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="@(AddinManifest)"
DestinationFolder="$(DeployDir)" />

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

<Message Text="$(AssemblyName) -> $(AppData)\Autodesk\Revit\Addins\$(RevitVersion)\" Importance="high"/>
<Message Text="$(AssemblyName) -> $(DeployDir)\" Importance="high"/>
</Target>

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

<Exec Command="powershell -NoLogo -NonInteractive -ExecutionPolicy Bypass -Command ^
$path='$(DeployDir)\$(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="$(DeployDir)\$(AddinManifestFileName)"/>
</Target>

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

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