Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
4c571df
updated GregRevitAuth (#3027)
zeusongit Jan 12, 2024
160168e
fix two failed tests
vpavel04 Jan 17, 2024
7ca1f68
bumpup version to make build with signed binaries
Mikhinja Jan 23, 2024
2701ba0
bump up version to publish
Mikhinja Jan 23, 2024
d35fb7e
Update DynamoRevit.cs (#3033)
aparajit-pratap Jan 25, 2024
2ee6da7
Update Dynamo Core to 3.0.2.7476
Mikhinja Jan 25, 2024
cc2123f
Update DynamoRevit versioning to 3.0.2 to align with DynamoCore
Mikhinja Jan 26, 2024
e19d8ed
Fix a couple of Regression tests
Mikhinja Jan 26, 2024
eecab07
Update Dynamo Core to 3.0.3.7597
Mikhinja Jan 31, 2024
ab901bc
Update DynamoRevit versioning to 3.0.3
Mikhinja Jan 31, 2024
3c29dbb
Version *.customization.dll files with number from other output binary
Mikhinja Apr 5, 2024
5e55ee9
Fix regression in familytype.bygeometry (#3066)
saintentropy Apr 30, 2024
944c23e
Integrate Dynamo Core 3.1 in Revit 2025.2
Mikhinja May 23, 2024
b5a20fb
Update D4R minor version to 3.1.0
Mikhinja May 27, 2024
23533ff
Update Dynamo to 3.2.0
Mikhinja Jun 6, 2024
11e4076
Update Dynamo to 3.2.0
Mikhinja Jun 6, 2024
a6354ce
Update Dynamo to 3.2.0
Mikhinja Jun 6, 2024
3a22623
* update Dynamo Core to 3.2.1
Mikhinja Jun 19, 2024
4836afd
* update Dynamo Core to 3.2.1
Mikhinja Jun 19, 2024
0278a00
Merge branch 'RC3.2.0_Revit2025' of https://github.com/DynamoDS/Dynam…
Mikhinja Jun 19, 2024
cce1a96
REVIT-222587
Mikhinja Jun 21, 2024
ce5f184
change content publishing
Mikhinja Jun 21, 2024
2ad9983
Roof.Points bug fix integration in Revit 2025.3 (#3081)
AdrianaStanica Aug 6, 2024
a4eb9ca
update Dynamo Core to 3.2.2.5494 (#3084)
Mikhinja Aug 6, 2024
ffe4ed3
Create ContinuousLocalization.yml
ZbynekHanak-RWS Sep 25, 2024
bc2a8fa
Update Dynamo Core to 3.3.0
Mikhinja Oct 14, 2024
636c476
update
pinzart90 Apr 4, 2025
0279992
update
pinzart90 Apr 4, 2025
76742f2
update
pinzart90 Apr 4, 2025
8fc45d5
update
pinzart90 Apr 4, 2025
b3a4fb8
Update RevitNodesUI.csproj
pinzart90 Apr 4, 2025
0227ab8
UPDATE
pinzart90 Apr 7, 2025
2d268cd
update
pinzart90 Apr 8, 2025
f89cd62
update
pinzart90 Apr 8, 2025
aaf1194
update
pinzart90 Apr 8, 2025
54896d9
update
pinzart90 Apr 8, 2025
8b754f8
Update DisposeLogic.cs
pinzart90 Apr 8, 2025
3019b88
update
pinzart90 Apr 9, 2025
efb08c5
update
pinzart90 Apr 10, 2025
db62a50
Merge branch 'master' into D4R_DA
pinzart90 Apr 17, 2025
5dde24a
update
pinzart90 Apr 17, 2025
ff9a951
update
pinzart90 Apr 17, 2025
88f1641
Update AssemblyInfoGenerator.csproj
pinzart90 Apr 17, 2025
18bea14
Update AssemblyInfoGenerator.csproj
pinzart90 Apr 17, 2025
e3f8b61
update
pinzart90 Apr 17, 2025
c94a31e
Update DynamoRevitIcons.csproj
pinzart90 Apr 17, 2025
32d9219
update
pinzart90 Apr 23, 2025
581914c
update
pinzart90 Apr 25, 2025
1202a2c
update
pinzart90 May 6, 2025
1a1e913
update
pinzart90 May 6, 2025
8fdb261
update
pinzart90 May 6, 2025
6dffdd5
update
pinzart90 May 6, 2025
f184ad8
Update DAEntrypoint.cs
pinzart90 May 13, 2025
3397634
update
pinzart90 May 13, 2025
c54f7c9
update
pinzart90 May 21, 2025
348ffc6
update
pinzart90 May 21, 2025
2f5e37c
Update DAEntrypoint.cs
pinzart90 May 21, 2025
c59fdf6
update
pinzart90 May 21, 2025
9b3e6bf
Update RevitServices.csproj
pinzart90 May 21, 2025
c1ed0fa
Update RevitServices.csproj
pinzart90 May 21, 2025
c7217ff
Update DocumentManager.cs
pinzart90 May 21, 2025
4de2399
Merge branch 'master' into D4R_DA
pinzart90 Nov 4, 2025
1f3f14f
update for latest master
pinzart90 Nov 4, 2025
12612bf
simplify
pinzart90 Nov 4, 2025
793010c
update
pinzart90 Nov 4, 2025
bc6c714
Update DynamoRevitApp.cs
pinzart90 Nov 4, 2025
0542287
Add cloud model support (#3252)
pinzart90 Nov 19, 2025
a92411d
Update DAEntrypoint.cs
pinzart90 Nov 19, 2025
c387e30
update
pinzart90 Feb 24, 2026
7803436
update
pinzart90 Mar 9, 2026
1bcd3bc
update
pinzart90 Mar 9, 2026
d544dc8
update for 2026
pinzart90 Mar 9, 2026
3e68a28
WIP - unify log output between DA appbundle and daas | 2026 (#3296)
mjkkirschner Mar 13, 2026
c484e66
Isolate the DA Application class (#3299)
pinzart90 Mar 16, 2026
d99b3d7
update for transactions (#3303)
pinzart90 Mar 25, 2026
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
2 changes: 2 additions & 0 deletions src/AssemblySharedInfoGenerator/AssemblyInfoGenerator.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@
<TransformOutOfDateOnly>false</TransformOutOfDateOnly>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<PreBuildEvent>"$(SolutionDir)transform_all.bat" "$(ProjectDir)"</PreBuildEvent>
<DebugSymbols>false</DebugSymbols>
<OutputPath>bin\</OutputPath>
<DebugSymbols>false</DebugSymbols>
<DebugType>None</DebugType>
<AssemblyTitle>AssemblyInfoGenerator</AssemblyTitle>
<OutputPath>bin\$(Configuration)\</OutputPath>
</PropertyGroup>
<PropertyGroup>
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
Expand Down
106 changes: 106 additions & 0 deletions src/BUILDSYSTEM_TODO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# Build System Cleanup — Open Questions & TODOs

These are known issues and open design questions in the build system that need
to be resolved, particularly for the `D4R_DA_2026` branch targeting Revit 2026 / net8.

---

## 1. Platform naming is confusing and redundant

`CS_SDK.props` defines three platforms:

| Platform | TargetFramework | Notes |
|------------|---------------------|-------|
| `NET80` | `net8.0-windows` | Interactive Revit build |
| `NET10_DA` | `net8.0-windows` | **Same as NET80 — name implies net10 but it's net8** |
| `NET100` | `net10.0-windows` | Future Revit targeting net10 |

For the `D4R_DA_2026` branch (Revit 2026), only `net8.0-windows` is relevant.
`NET100` adds noise and `NET10_DA` is actively misleading.

**Important:** `_DA` in the platform name is a meaningful build profile — it is not just a
TFM alias. Any platform whose name contains `_DA` triggers these behaviours across multiple projects:

| Project | What `_DA` removes |
|---|---|
| `CS_SDK.props` | Defines `DESIGN_AUTOMATION` compile constant |
| `DynamoRevit.csproj` | Removes `DynamoRevit.cs`, `DynamoRevitApp.cs`, entire `ViewModel/` (interactive startup + ribbon) |
| `RevitNodesUI.csproj` | Removes all WPF controls, selection dialogs, XAML pages |
| `RevitServices.csproj` | Removes `Threading/*.cs` (UI thread marshalling, not needed in headless DA) |

So the `_DA` suffix carries real semantic weight. The problem is solely the `NET10` prefix,
which implies net10 when the TFM is actually net8. Renaming `NET10_DA` → `NET80_DA` everywhere
would fix the confusion without changing any build behaviour.

**Questions:**
- Should `D4R_DA_2026` drop `NET100` entirely and only expose `NET80`?
- Was `NET10_DA` ever actually net10 and got downgraded, or has it always been net8?
- Should DA just use `NET80` with a separate property/flag to denote DA vs interactive,
rather than a separate platform name?
- If `NET10_DA` stays, should it be renamed (e.g. `NET80_DA`) to reflect actual TFM?

---

## 2. Solution file responsibilities are unclear

| Solution | Projects included | Typical build command |
|-----------------------|--------------------------------|-----------------------|
| `DynamoRevit.DA.sln` | DADynamoApp + deps only | `/p:Platform=NET10_DA` |
| `DynamoRevit.All.sln` | Everything incl. tests | `/p:Platform=NET80` or `NET100` |

`DADynamoApp` is **not** listed explicitly in `All.sln` — it is pulled in as a
transitive project reference from `RevitSystemTests`. This causes the solution to
build it without a proper platform mapping, which leads to build errors under
`dotnet build` with .NET SDK 10 (see issue 3 below).

A workaround was added: explicit `DADynamoApp` entry in `All.sln` mapping
`NET80`/`NET100` → `NET10_DA`. But this is a band-aid.

**Questions:**
- Should `DADynamoApp` be a first-class explicit project in `All.sln`?
- Should `DA.sln` be a proper subset configuration of `All.sln`, or kept fully separate?
- Is there a reason DA uses `NET10_DA` platform instead of `NET80`? If not, unify them
and remove the extra platform.

---

## 3. `dotnet build` vs VS MSBuild inconsistency

`DynamoRevit.All.sln` builds cleanly with VS MSBuild:
```
& "C:\Program Files\Microsoft Visual Studio\18\Professional\MSBuild\Current\Bin\MSBuild.exe" DynamoRevit.All.sln -p:Configuration=Debug -p:Platform=NET80 -m
```

But fails with `dotnet build` using .NET SDK 10:
```
dotnet build DynamoRevit.All.sln -c Debug /p:Platform=NET80
```

Two known `dotnet build`-only failures:

**a) `DADynamoApp` — `MSB3992: 'RootElementName' is not set`**
- Root cause: `EnableDynamicLoading=true` causes SDK 10 to set
`UseAttributeForTargetFrameworkInfoPropertyNames=true`, which requires
`RootElementName` to be set explicitly. VS MSBuild does not have this requirement.
- Possible fixes: set `<UseAttributeForTargetFrameworkInfoPropertyNames>false</UseAttributeForTargetFrameworkInfoPropertyNames>`,
or set `<RootElementName>DADynamoApp</RootElementName>` explicitly.

**b) `DynamoRevitIcons` — `ResGen.exe not supported on .NET Core MSBuild`**
- Pre-existing issue. The `.resx` code generation step uses ResGen.exe which is
not available in the .NET Core MSBuild toolchain.
- Possible fix: migrate resource generation to use `<EmbeddedResource>` without
ResGen, or exclude from `dotnet build` paths.

**Question:** Is `dotnet build` a supported/required path in CI, or does CI always
use VS MSBuild? The `Jenkinsfile` delegates to `DynamoRevitUtils` — need to check
those build scripts to confirm.

---

## 4. Research needed / action items

- [ ] Check `DynamoRevitUtils` Jenkins scripts: which solution, which platform, `dotnet` or VS MSBuild?
- [ ] Confirm whether `NET100` is used in any CI job for this branch
- [ ] Decide on NET10_DA rename/merge with NET80
- [ ] Decide whether All.sln should be the canonical "build everything" solution
- [ ] Fix `dotnet build` compatibility if CI requires it (MSB3992 + ResGen)
9 changes: 7 additions & 2 deletions src/Config/CS_SDK.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@
<PropertyGroup>
<PlatformTarget >x64</PlatformTarget>
<Prefer32Bit>false</Prefer32Bit>
<Platforms>NET80;NET100</Platforms>
<Platforms>NET80;NET10_DA;NET100</Platforms>
<TargetFramework Condition="'$(Platform)' == 'NET80'">net8.0-windows</TargetFramework>
<TargetFramework Condition="'$(Platform)' == 'NET10_DA'">net8.0-windows</TargetFramework>
<TargetFramework Condition="'$(Platform)' == 'NET100'">net10.0-windows</TargetFramework>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">17.0</VisualStudioVersion>
<RevitVersionNumber Condition=" '$(RevitVersionNumber)' == '' ">Preview Release</RevitVersionNumber>
<RevitVersionNumber Condition=" '$(RevitVersionNumber)' == '' ">2026</RevitVersionNumber>
<PACKAGESPATH>$(SolutionDir)packages</PACKAGESPATH>
<DynamoExternPath Condition=" '$(DynamoExternPath)' == '' ">$(SolutionDir)..\extern</DynamoExternPath>
<REVITAPI Condition=" !Exists('$(REVITAPI)') ">$(SolutionDir)..\lib\Revit $(RevitVersionNumber)\$(DCoreLibSubFolder)</REVITAPI>
Expand Down Expand Up @@ -40,9 +41,13 @@
<Optimize>true</Optimize>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="$(Platform.Contains('_DA'))">
<DefineConstants>$(DefineConstants);DESIGN_AUTOMATION</DefineConstants>
</PropertyGroup>
<ItemDefinitionGroup>
<ProjectReference>
<Private>false</Private>
<PrivateAssets>all</PrivateAssets>
</ProjectReference>
</ItemDefinitionGroup>
</Project>
6 changes: 3 additions & 3 deletions src/Config/packages_versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<!-- 3rd party package versions -->
<DYNAMOCORE_VERSION>4.0.0-beta2972</DYNAMOCORE_VERSION>
<DYNAMOCORE_VERSION>3.5.0.8300</DYNAMOCORE_VERSION>

<DYNAMOWPFUI_VERSION Condition="'$(DYNAMOWPFUI_VERSION)' == ''">$(DYNAMOCORE_VERSION)</DYNAMOWPFUI_VERSION>
<DYNAMOCORENODES_VERSION Condition="'$(DYNAMOCORENODES_VERSION)' == ''">$(DYNAMOCORE_VERSION)</DYNAMOCORENODES_VERSION>
Expand All @@ -13,8 +13,8 @@
<DCoreLibSubFolder Condition="'$(Platform)' == 'NET100'">net10.0</DCoreLibSubFolder>

<Greg_VERSION>3.0.1.4707</Greg_VERSION>
<GregRevitAuth_VERSION>4.0.9405.33709</GregRevitAuth_VERSION>
<GregRevitAuthLibSubFolder>net10.0</GregRevitAuthLibSubFolder>
<GregRevitAuth_VERSION>3.0.9229.39980</GregRevitAuth_VERSION>
<DotnetVerSubFolder>net8.0</DotnetVerSubFolder>

<!-- Keep in sync with DynamoCore & TODO: check if still needed -->
<DynamicLanguageRuntime_VERSION>1.2.2</DynamicLanguageRuntime_VERSION>
Expand Down
63 changes: 63 additions & 0 deletions src/DADynamoApp/DAApplication.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@

using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.DB;
using System.Diagnostics;
using System.Reflection;

namespace DADynamoApp
{
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
public class DAApplication : IExternalDBApplication
{
private string ParentPath;
private string CurrentDirectory;
private readonly string PythonDllFolder = "pythonDependencies";

private DAEntrypoint daEntryPoint;

public ExternalDBApplicationResult OnShutdown(ControlledApplication application)
{
AppDomain.CurrentDomain.UnhandledException -= CurrentDomain_UnhandledException;
AppDomain.CurrentDomain.ProcessExit -= CurrentDomain_ProcessExit;
AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve;
return daEntryPoint.OnShutdown(application);
}

public ExternalDBApplicationResult OnStartup(ControlledApplication application)
{
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit;
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

CurrentDirectory = Directory.GetCurrentDirectory();
ParentPath = Directory.GetParent(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)).FullName;

Console.WriteLine("<<!>> Starting to load DAEntrypoint");

daEntryPoint ??= new DAEntrypoint();

return daEntryPoint.OnStartup(application);
}

private static void CurrentDomain_ProcessExit(object? sender, EventArgs e)
{
Process proc = Process.GetCurrentProcess();
Console.WriteLine($"Dynamo exiting with Peak physical memory {proc.PeakWorkingSet64} bytes");
if (proc.HasExited)
{
Console.WriteLine($"Dynamo exiting with code {proc.ExitCode}");
}
}

private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Console.WriteLine($"Unhandled exception: {e}");
}

private Assembly? CurrentDomain_AssemblyResolve(object? sender, ResolveEventArgs args)
{
return DynamoRevitAssemblyResolver.ResolveDynamoAssembly(ParentPath, [Path.Combine(CurrentDirectory, PythonDllFolder)], args);
}
}
}
58 changes: 58 additions & 0 deletions src/DADynamoApp/DADynamoApp.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<Project Sdk="Microsoft.NET.Sdk">
<ImportGroup Label="PropertySheets">
<Import Project="$(SolutionDir)Config\CS_SDK.props" />
</ImportGroup>

<PropertyGroup>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<!--EnableDynamicLoading prepares the project so that it can be used as a plugin -->
<!--https://learn.microsoft.com/en-us/dotnet/core/tutorials/creating-app-with-plugin-support#simple-plugin-with-no-dependencies-->
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>

<ItemGroup>
<Compile Remove="obj\**" />
<EmbeddedResource Remove="obj\**" />
<None Remove="obj\**" />
</ItemGroup>

<ItemGroup>
<Reference Include="RevitAPI">
<HintPath>$(REVITAPI)\RevitAPI.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Autodesk.Forge.DesignAutomation.Revit" Version="2026.0.0" />
<PackageReference Include="Autodesk.DataManagement" Version="2.0.0-beta4" />
<PackageReference Include="DynamoVisualProgramming.Core" Version="$(DYNAMOCORE_VERSION)" ExcludeAssets="runtime" GeneratePathProperty="true" />
<PackageReference Include="DynamoPlayer" Version="6.0.2" ExcludeAssets="runtime" GeneratePathProperty="true" />
<PackageReference Include="GregRevitAuth" Version="$(GregRevitAuth_VERSION)" GeneratePathProperty="true">
<ExcludeAssets>runtime</ExcludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DynamoRevit\DynamoRevit.csproj" />
<ProjectReference Include="..\Libraries\RevitNodes\RevitNodes.csproj" />
<ProjectReference Include="..\Libraries\RevitServices\RevitServices.csproj" />
</ItemGroup>
<ItemGroup>
<Reference Include="DynamoPlayer.Models">
<HintPath>$(PkgDynamoPlayer)\bin\Release\net8.0\bin\DynamoPlayer.Models.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="DynamoPlayer.Server">
<HintPath>$(PkgDynamoPlayer)\bin\Release\net8.0\bin\DynamoPlayer.Server.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="DynamoPlayer.Workflows">
<HintPath>$(PkgDynamoPlayer)\bin\Release\net8.0\bin\DynamoPlayer.Workflows.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>
<Target Name="Copy dll" AfterTargets="Build">
<Copy SourceFiles="$(PkgGregRevitAuth)\lib\$(DotnetVerSubFolder)\GregRevitAuth.dll" DestinationFolder="$(OutputPath)" />
</Target>
</Project>
Loading