Files
Marc Schier 06ae192084 Fix CI failures tracked by #4299 (#4308)
## Summary
- stabilize the History, authentication lockout, Robotics, redundancy,
and DI tests reported in #4301-#4305
- fix the closed-transport buffered-write completion deadlock that hung
`ConnectMultipleSessionsAsync`
- add macOS crash diagnostics for #4306 and retain evidence for
root-cause analysis
- run macOS tests and NativeAOT in GitHub Actions pull requests, using
supported Intel and ARM64 runners, while keeping every Azure macOS
definition disabled by default
- move all remaining source-level `InternalsVisibleTo` declarations into
project files so signed OpenUSD builds receive the repository public key

## Local validation
- MCP PubSub: 29 passed
- History focused tests: 3 passed
- Sessions lockout: 3 passed
- Sessions multiple-session regression: 3 passed
- deterministic binary client channel tests: 22 passed
- Robotics runtime: 34 passed
- Redundancy focused tests: 4 passed
- OpenUSD net10.0: 914 passed
- affected OpenUSD projects build on net10.0 and net48

Refs #4299, #4300, #4306

Fixes #4301
Fixes #4302
Fixes #4303
Fixes #4304
Fixes #4305

---------

Copilot-Session: 7cb486de-8b4c-43c5-a900-e7d2e0ad04a8
2026-08-22 19:30:19 +00:00

78 lines
4.4 KiB
XML

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>$(AppTargetFrameworks)</TargetFrameworks>
<OutputType>Exe</OutputType>
<IsPackable>false</IsPackable>
<AssemblyName>GeneratorServer</AssemblyName>
<PackageId>GeneratorServer</PackageId>
<Description>Self-contained .NET console OPC UA server demonstrating the Generators companion specification end-to-end, including a datasheet-driven generator-set simulation, a twelve-state operating state machine, protection alarms and a per-set OpenUSD twin.</Description>
<RootNamespace>Generators</RootNamespace>
<Nullable>enable</Nullable>
<NoWarn>$(NoWarn);CA1822</NoWarn>
<PublishAot Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net10.0'))">true</PublishAot>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\src\Opc.Ua.Configuration\Opc.Ua.Configuration.csproj" />
<ProjectReference Include="..\..\..\src\Opc.Ua.Server\Opc.Ua.Server.csproj" />
<ProjectReference Include="..\..\..\src\Opc.Ua.Di\Opc.Ua.Di.csproj" />
<ProjectReference Include="..\..\..\src\Opc.Ua.Di.Server\Opc.Ua.Di.Server.csproj" />
<ProjectReference Include="..\..\..\src\Opc.Ua.OpenUsd\Opc.Ua.OpenUsd.csproj" />
<ProjectReference Include="..\..\..\src\Opc.Ua.OpenUsd.Server\Opc.Ua.OpenUsd.Server.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\tools\Opc.Ua.SourceGeneration\Opc.Ua.SourceGeneration.csproj">
<OutputItemType>Analyzer</OutputItemType>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" />
</ItemGroup>
<!-- The conformance tests read the simulation constants to verify that they
agree with the published datasheet instead of duplicating those values. -->
<ItemGroup>
<InternalsVisibleTo Include="Opc.Ua.OpenUsd.Tests" />
</ItemGroup>
<!-- Authored USD layers embedded so the server ships (and serves) its own twin
geometry: Powerhouse.usda (RootLayer) + generator.usda (Reference). -->
<ItemGroup>
<EmbeddedResource Include="Assets\Powerhouse.usda"><LogicalName>Powerhouse.usda</LogicalName></EmbeddedResource>
<EmbeddedResource Include="Assets\generator.usda"><LogicalName>generator.usda</LogicalName></EmbeddedResource>
</ItemGroup>
<!-- IA + Machinery + Generators NodeSet2 XMLs are source-generated locally; no
library refs needed. The generator emits typed classes, NodeId tables, and
the AddOpcUaMachinery / AddOpcUaGenerators extension methods in the
Opc.Ua.Machinery and Opc.Ua.Generators namespaces (internal to this
assembly). Cross-namespace type references to DI types resolve via the
[assembly: ModelDependencyAttribute] carried in the Opc.Ua.Di assembly, so
no DI NodeSet2 XML is needed here.
The full official Machinery nodeset is required (not the reduced copy the
pump sample carries): the Generators model composes the Machinery
MachineryItemState and MachineryOperationMode state machines and
specialises MachineIdentificationType, none of which the reduced set
defines. The full set in turn declares a dependency on IA, so IA is
vendored as well - it needs only UA core and DI.
The matching *.NodeSet2.csv files (alongside each XML) are picked up as the
stable NodeId tables. Without them the generator would assign synthetic
NodeIds at compile time, breaking byte-stable wire formats for clients that
cache NodeIds across builds. -->
<ItemGroup>
<AdditionalFiles Include="Model\Opc.Ua.Machinery.NodeSet2.xml">
<ModelSourceGeneratorPrefix>Opc.Ua.Machinery</ModelSourceGeneratorPrefix>
</AdditionalFiles>
<AdditionalFiles Include="Model\Opc.Ua.Machinery.NodeSet2.csv" />
<AdditionalFiles Include="Model\Opc.Ua.Generators.NodeSet2.xml">
<ModelSourceGeneratorPrefix>Opc.Ua.Generators</ModelSourceGeneratorPrefix>
</AdditionalFiles>
<AdditionalFiles Include="Model\Opc.Ua.Generators.NodeSet2.csv" />
</ItemGroup>
<Import Project="..\..\..\tools\Opc.Ua.SourceGeneration\OPCFoundation.Opc.Ua.SourceGeneration.props" />
<PropertyGroup>
<ModelSourceGeneratorVersion>v105</ModelSourceGeneratorVersion>
<ModelSourceGeneratorUseAllowSubtypes>true</ModelSourceGeneratorUseAllowSubtypes>
</PropertyGroup>
</Project>