Full OPC UA server on .NET Framework 4.8 (x86) exposing AVEVA System Platform Galaxy tags via MXAccess. Mirrors Galaxy object hierarchy as OPC UA address space, translating contained-name browse paths to tag-name runtime references. Components implemented: - Configuration: AppConfiguration with 4 sections, validator - Domain: ConnectionState, Quality, Vtq, MxDataTypeMapper, error codes - MxAccess: StaComThread, MxAccessClient (partial classes), MxProxyAdapter using strongly-typed ArchestrA.MxAccess COM interop - Galaxy Repository: SQL queries (hierarchy, attributes, change detection), ChangeDetectionService with auto-rebuild on deploy - OPC UA Server: LmxNodeManager (CustomNodeManager2), LmxOpcUaServer, OpcUaServerHost with programmatic config, SecurityPolicy None - Status Dashboard: HTTP server with HTML/JSON/health endpoints - Integration: Full 14-step startup, graceful shutdown, component wiring 175 tests (174 unit + 1 integration), all passing. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
55 lines
1.9 KiB
XML
55 lines
1.9 KiB
XML
<Project Sdk="Microsoft.NET.Sdk">
|
|
|
|
<PropertyGroup>
|
|
<OutputType>Exe</OutputType>
|
|
<TargetFramework>net48</TargetFramework>
|
|
<PlatformTarget>x86</PlatformTarget>
|
|
<LangVersion>9.0</LangVersion>
|
|
<Nullable>enable</Nullable>
|
|
<RootNamespace>ZB.MOM.WW.LmxOpcUa.Host</RootNamespace>
|
|
<AssemblyName>ZB.MOM.WW.LmxOpcUa.Host</AssemblyName>
|
|
</PropertyGroup>
|
|
|
|
<ItemGroup>
|
|
<InternalsVisibleTo Include="ZB.MOM.WW.LmxOpcUa.Tests" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<!-- Service hosting -->
|
|
<PackageReference Include="Topshelf" Version="4.3.0" />
|
|
<PackageReference Include="Topshelf.Serilog" Version="4.3.0" />
|
|
|
|
<!-- Logging -->
|
|
<PackageReference Include="Serilog" Version="2.10.0" />
|
|
<PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" />
|
|
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
|
|
|
|
<!-- OPC UA -->
|
|
<PackageReference Include="OPCFoundation.NetStandard.Opc.Ua.Server" Version="1.5.374.126" />
|
|
|
|
<!-- Configuration -->
|
|
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1" />
|
|
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
|
|
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.1" />
|
|
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="6.0.0" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<!-- MXAccess COM interop -->
|
|
<Reference Include="ArchestrA.MxAccess">
|
|
<HintPath>..\..\lib\ArchestrA.MxAccess.dll</HintPath>
|
|
<EmbedInteropTypes>false</EmbedInteropTypes>
|
|
</Reference>
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<None Update="appsettings.json">
|
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
</None>
|
|
<None Update="appsettings.*.json">
|
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
</None>
|
|
</ItemGroup>
|
|
|
|
</Project>
|