diff --git a/src/ZB.MOM.WW.LmxOpcUa.Host/OpcUa/LmxNodeManager.cs b/src/ZB.MOM.WW.LmxOpcUa.Host/OpcUa/LmxNodeManager.cs index 6851aec..210a82f 100644 --- a/src/ZB.MOM.WW.LmxOpcUa.Host/OpcUa/LmxNodeManager.cs +++ b/src/ZB.MOM.WW.LmxOpcUa.Host/OpcUa/LmxNodeManager.cs @@ -85,12 +85,17 @@ namespace ZB.MOM.WW.LmxOpcUa.Host.OpcUa rootFolder.NodeId = new NodeId("ZB", NamespaceIndex); rootFolder.AddReference(ReferenceTypeIds.Organizes, true, ObjectIds.ObjectsFolder); - // Add reverse reference from Objects folder to our root - var extRefs = _externalReferences ?? new Dictionary>(); - AddExternalReference(ObjectIds.ObjectsFolder, ReferenceTypeIds.Organizes, false, rootFolder.NodeId, extRefs); - AddPredefinedNode(SystemContext, rootFolder); + // Add reverse reference from Objects folder → ZB root. + // BuildAddressSpace runs after CreateAddressSpace completes, so the + // externalReferences dict has already been consumed by the core node manager. + // Use MasterNodeManager.AddReferences to route the reference correctly. + Server.NodeManager.AddReferences(ObjectIds.ObjectsFolder, new List + { + new NodeStateReference(ReferenceTypeIds.Organizes, false, rootFolder.NodeId) + }); + // Create nodes for each object in hierarchy var nodeMap = new Dictionary(); diff --git a/src/ZB.MOM.WW.LmxOpcUa.Host/Program.cs b/src/ZB.MOM.WW.LmxOpcUa.Host/Program.cs index 61473d4..4aa9367 100644 --- a/src/ZB.MOM.WW.LmxOpcUa.Host/Program.cs +++ b/src/ZB.MOM.WW.LmxOpcUa.Host/Program.cs @@ -8,6 +8,10 @@ namespace ZB.MOM.WW.LmxOpcUa.Host { static int Main(string[] args) { + // Set working directory to exe location so relative log paths resolve correctly + // (Windows services default to System32) + Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory; + Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() .WriteTo.Console()