The first thing I do after installing the new release of Revit is compile the Revit SDK and set up RvtSamples to load the external commands. So, here we go again:
- Update the RevitSdkSamples repo
- Set the Revit API references
- Eliminate processor architecture mismatch warning
- Missing XML comments
- Targets and rule sets
- Set up RvtSamples
I installed the new SDK and performed a pretty exhaustive comparison with the previous version to ensure that I do not overwrite anything important in the RevitSdkSamples repository.
The advantage of maintaining a public repository for this is that changes can easily be tracked and I can share the steps that I take to compile the SDK samples and set up
RvtSamples to load them.
I enjoyed the support and conversation with jmcouffin during this process, in his pull request #1 2023SDK samples. That was the first time anyone offered to help with this repository, by the way, so thank you very much indeed for that!
I compiled diff_2022_2023.txt listing the differences between the Revit 2023 SDK samples and previous versions, both in the directory structure and individual files.
Afaict from that analysis, three new samples were added:
We need to take a look at those asap.
First things first, though: compile the SDK and set up
The first attempt at compiling
SDKSamples.sln right out of the box produced 9544 error and 1168 warnings;
Autodesk could not be found.
SDKSamples includes 199 solution projects, and I am not going to edit their references one by one, so I need to implement a batch update somehow.
Luckily, there is no need to do so either; searching globally for
RevitAPI.dll, I find only 8 occurrences, in the
targets files in the
VSProps folder and in the
Apparently, the latter is an exception.
I ended up fixing the Revit API references by replacing variable expressions by a constant C:\Program Files\Autodesk\Revit 2023 in the following files:
With those modifications, I was able to successfully compile all 199 projects with zero errors.
95 warnings remain. Most of those concern the everlasting processor architecture mismatch, e.g.:
- Warning: There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "RevitAPIUI", "AMD64". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project.
I mentioned this warning when it appeared and have been fixing it in every release ever since:
- Processor Architecture Mismatch Warning and Key Hook
- Recursively Disable Architecture Mismatch Warning
- Architecture Mismatch Warning Disabler Update
I implemented the DisableMismatchWarning utility to help me do so, and make use of that now as well:
After running that over all samples, only 6 warnings remain.
Two of the remaining six warnings are easy to fix, so let's do so:
- Warning CS1591: Missing XML comment for publicly visible type or member 'ExportPDFData.Combine' in ImportExport, ...\ImportExport\CS\Export\ExportPDFData.cs line 41
- Warning CS1591: Missing XML comment for publicly visible type or member 'ExportPDFOptionsForm.ExportPDFOptionsForm(ExportPDFData)' in ImportExport, ...\ImportExport\CS\Export\ExportPDFOptionsForm.cs, line 45
I simply added placeholder XML documentation to both methods.
The four remaining warnings seem unimportant and can be ignored:
- C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Csharp.targets cannot be imported again. It was already imported at Y:\a\src\rvt\RevitSdkSamples\SDK\Samples\VSProps\SDKSamples.targets (29,3). This is most likely a build authoring error. This subsequent import will be ignored. SampleCommandsSteelElements
- Warning Could not find rule set file "Migrated rules for FrameBuilder.ruleset". FrameBuilder
- Warning Could not find rule set file "GeometryCreation_BooleanOperation.ruleset". GeometryCreation_BooleanOperation
- Warning Could not find rule set file "ProximityDetection_WallJoinControl.ruleset". ProximityDetection_WallJoinControl
I added my local system path Y:/a/src/rvt/RevitSdkSamples/SDK/Samples/ in both
Some add-in file paths are not found, so I set the debugging flag in
bool testClassName = true; // jeremy
The culprits are the usual suspects, all of them VB.NET samples, but strangely enough not all VB.NET samples, cf. revit_2023_sdk_samples_errors_warnings_2.txt.
RvtSamples.txt erroneously listed an external command named
Command for the
DatumsModification SDK sample.
In fact, it defines no such command; instead, it implements three others:
I updated RvtSamples.txt accordingly.
ContextualAnalyticalModel defines 15 external commands:
RvtSamples.txt erroneously lists three others: AddRelation, UpdateRelation and BreakRelation.
I replaced them by AddAssociation and RemoveAssociation.
The CivilAlignments sample defines two commands and tries to create menu entries named "Infrastructure Alignments" or both of them.
This causes Revit to throw an exception.
I fixed that by naming them 'Infrastructure Alignments CreateAlignmentStationLabelsCmd' and 'Infrastructure Alignments ShowPropertiesCmd', respectively.
I finished off by resetting the
testClassName debug switch and creating the final
RevitSdkSamples release 2023.0.0.3.