AlibrePDMObjectModel 1.0.4
dotnet add package AlibrePDMObjectModel --version 1.0.4
NuGet\Install-Package AlibrePDMObjectModel -Version 1.0.4
<PackageReference Include="AlibrePDMObjectModel" Version="1.0.4" />
<PackageVersion Include="AlibrePDMObjectModel" Version="1.0.4" />
<PackageReference Include="AlibrePDMObjectModel" />
paket add AlibrePDMObjectModel --version 1.0.4
#r "nuget: AlibrePDMObjectModel, 1.0.4"
#:package AlibrePDMObjectModel@1.0.4
#addin nuget:?package=AlibrePDMObjectModel&version=1.0.4
#tool nuget:?package=AlibrePDMObjectModel&version=1.0.4
AlibrePDMObjectModel (.NET library)
AlibrePDMObjectModel wraps the Alibre PDM vault API (safes, projects, libraries, folders, files, properties, classes, version history) in a VBA-style object model. PDMApplication is the entry point. Call it from VB.NET or C#.
| Package ID | AlibrePDMObjectModel |
| Entry point | PDMApplication |
| Target frameworks | net481, net8.0 |
| Runtime | Windows only, x64 |
| License | MIT |
Requirements
- Windows x64.
- Alibre Design 29.x with Alibre PDM, installed. The library drives PDM over COM. It does not redistribute
AlibreX.dll; it loads that at runtime from your licensed Alibre install. - A reachable Alibre PDM vault.
Installation
dotnet add package AlibrePDMObjectModel
Or add a PackageReference:
<PackageReference Include="AlibrePDMObjectModel" Version="1.0.4" />
Getting started
Connect with credentials, or reuse a PDM Browser session you already signed into:
Dim app As New PDMApplication()
app.Connect("http://localhost:8099/", "MYDOMAIN", "user", "password")
' Or reuse the Alibre UI's connection:
' app.UseActiveConnection()
For Each safe In app.Safes
Console.WriteLine(safe.Name)
Next
Browse a safe and read file metadata:
Dim safe = app.GetSafe("Alibre Safe")
Dim proj = safe.Projects("bore")
For Each f As PDMFile In proj.Files
Console.WriteLine($"{f.FullName} v{f.CurrentVersion}")
For Each p As PDMProperty In f.Properties
Console.WriteLine($" {p.DisplayName} = {p.ValueText}")
Next
Next
C# reads the same way:
var app = new PDMApplication();
app.UseActiveConnection();
var safe = app.GetSafe("Alibre Safe");
foreach (PDMFile f in safe.Projects["bore"].Files)
Console.WriteLine($"{f.FullName} v{f.CurrentVersion}");
Object model
PDMApplication: entry point.Connect/UseActiveConnection/Disconnect,Safes,GetSafe(name).PDMSafe:Projects,Libraries,Classes,PropertyDefinitions.PDMFolder:Folders,Files, create / upload / check-in.PDMFile:Properties,History,Lock/Unlock,CheckIn,Rename,SetPropertyValue.PDMProperty/PDMPropertyDefinition: metadata values and the definitions behind them.PDMClass/PDMClassDataItem: vault classes and their data items.
Every call throws a PDMException on failure, with a friendly message. PDMApplication.LastError holds the most recent one.
Not implemented in this build
PDMFile.CheckIn, PDMFolder.UploadFiles and PDMFile.Move throw NotImplementedException. The asynchronous PDM upload/check-in hangs when driven over a reused Alibre Design connection, because the completion callback never reaches the calling thread. PDMFile.Move reports success but the file leaves the source folder without arriving in the destination. Check in, upload and move from the Alibre PDM Browser instead.
Everything else is verified against a live vault: create, copy, rename, delete, lock, unlock, property get and set, revisions, and the full read and browse surface.
PDMFile.Copy returns Nothing: the copied file materializes asynchronously. Wait, then look the file up by name in the destination folder.
Notes
One client at a time holds the active PDM connection. A second concurrent client gets "another client instance is already accessing the Server."
© 2026 Stephen S. Mitchell. Released under the MIT License.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Framework | net481 is compatible. |
-
.NETFramework 4.8.1
- No dependencies.
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
v1.0.4 - Version alignment release: all three Alibre packages published together at 1.0.4. No code changes from v1.0.3. v1.0.3 - Removed the misleading "VBA" tag (this is a VBA-style object model for .NET, not a VBA package). Disabled PDMFile.Move (throws NotImplementedException, implementation retained): verified against a live vault, the move reports success but the file leaves the source folder without arriving in the destination. Use the Alibre PDM Browser to move files. Fix: PropertyDefinitions(name) now resolves either the definition's underlying name or its display name, instead of failing when given the identifier the caller happens to hold. v1.0.2 -Fix: PDMFolder.Files and PDMFolder.Folders no longer throw NullReferenceException on a freshly created project (the COM collection is Nothing until the folder is re-fetched); they now return an empty collection. Disabled (throw NotImplementedException instead of failing badly, implementation retained): PDMFile.CheckIn and PDMFolder.UploadFiles, because the asynchronous PDM upload/check-in hangs when driven over a reused Alibre Design connection (the completion callback never reaches the STA thread); Use the Alibre PDM Browser for check-in and upload. Fix: PDMFolder.CreateFolder returned a folder whose underlying COM object was unpopulated, which made any later use of it (for example PDMFile.Move into that folder) fail with a null reference; it now re-fetches the new folder by name. PDMFile.Move also rejects an unbound destination folder with a clear message. All other operations (create/copy/move/rename/delete/lock/unlock/property get+set/revisions and the full read+browse surface) are verified against a live vault. v1.0.1 - PDMFiles.Item(name) falls back to Name/FullName enumeration when COM GetFileItemByName returns nothing.