Files
UA-.NETStandard/common.props
Marc Schier 8d2402c995 Bump version to 2.0 and land 1.5.378 to 2.0 migration guide (#3819)
Prepares the repository for a 2.0 release: bumps every version reference
from 1.6 to 2.0, and lands the migration guide describing the 1.5.378 →
2.0 upgrade path. The 1.6 line never shipped, so this is a straight
rename with no historical 1.6 migration content to preserve.

The PR is split into two commits:

1. **`Bump version to 2.0 (next release is a major version change)`** —
version metadata, NuGet metadata, the side documentation, and the
migration agent file.
2. **`[Docs] Close 19 audit gaps in 1.5.378 to 2.0 migration guide`** —
adds and reorganizes `Docs/MigrationGuide.md` to close every gap from a
rigorous code-review audit of the 1.5.378 → 2.0 breaking-change surface.

### Version bump (commit 1)

- `version.json`: `1.6-preview` → `2.0-preview`
- `common.props`: `<VersionPrefix>1.6</VersionPrefix>` →
`<VersionPrefix>2.0</VersionPrefix>`
- `nuget/Opc.Ua.nuspec` and `nuget/Opc.Ua.Symbols.nuspec`: `1.6.0` →
`2.0.0`
- `README.md`: "New in 1.6" → "New in 2.0"
- `Docs/ComplexTypes.md`, `Docs/Observability.md`, `Docs/Sessions.md`:
1.6 → 2.0 mentions
- Renames `.github/agents/opcua-v16-migration.agent.md` →
`.github/agents/opcua-v20-migration.agent.md` and updates the agent
metadata (name, description, trigger phrases, version table)
- `UA.slnx`: solution-items reference updated to the new agent filename
-
`Tools/Opc.Ua.SourceGeneration.Core/Generators/ObjectTypeProxyGenerator.cs`:
two v16 → v20 comment fixes

### Migration guide (commit 2)

Closes 19 gaps from an audit comparing `master378` (1.5.378) with
`master` (2.0). Adds a new top-level **Package, Target Framework and
Dependency Changes** section covering the new `Opc.Ua.Core.Types` and
`Opc.Ua.Security.Certificates` packages, the `LibTypesTargetFrameworks`
netstandard2.0 drop, the NuGet dependency additions/removals, and the
residual Newtonsoft.Json dependency in `Opc.Ua.PubSub`.

In-place additions:

- new H4 for `INodeManager3` under Node States
- `Session.Call` `Variant.From` worked example
- new H3 `Subscriptions and Transports` with H4 verdicts for Durable
subscriptions (source-breaking), PubSub (no source break) and Reverse
connect (no source break)
- new H3 `Telemetry and Logging` covering `ITelemetryContext`
constructor-injection patterns
- `in DataValue` async copy-to-local pattern
- UNSAFE / SAFE pair for `WithPoolNotifications` pooling
- using-alias example for classic vs V2 `SubscriptionOptions`
- "Silent regression" callout for `OnAfterCreate`
- numbered lifecycle ordering for
`ApplicationConfiguration.CertificateManager`

Corrections:

- clarifies that the `SessionReconnectHandler` `[Obsolete]` is still
present in 2.0 (not withdrawn);
- clarifies that the source-generated `ServerCapability` constants vs
the `ServerCapabilityInfo` registry type are distinct;
- disambiguates `ReconnectPolicyOptions` (DTO) from `ReconnectPolicy`
(runtime).

Adds an "Automate the migration" pointer to the forthcoming
`Opc.Ua.CodeFixers` analyzer package, which mechanizes 17 of the
patterns covered in this guide. The analyzer is published in a follow-up
PR.
2026-05-29 08:18:41 +02:00

111 lines
5.2 KiB
XML

<Project>
<PropertyGroup>
<Product>OPC UA .NET Standard Library</Product>
<RepositoryUrl>https://github.com/OPCFoundation/UA-.NETStandard</RepositoryUrl>
<VersionPrefix>2.0</VersionPrefix>
<VersionSuffix>preview-$([System.DateTime]::Now.ToString("yyyyMMdd"))</VersionSuffix>
<Copyright>Copyright © 2004-2025 OPC Foundation, Inc</Copyright>
<PackagePrefix>OPCFoundation.NetStandard</PackagePrefix>
<AssemblyPrefix>Opc.Ua</AssemblyPrefix>
<Company>OPC Foundation</Company>
<Authors>OPC Foundation</Authors>
<NeutralLanguage>en-US</NeutralLanguage>
<HighEntropyVA>true</HighEntropyVA>
<IsPackable>false</IsPackable>
<PlatformTarget>AnyCPU</PlatformTarget>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<ProduceReferenceAssembly>true</ProduceReferenceAssembly>
<LangVersion>14.0</LangVersion>
<!-- to enable package validation, uncomment here -->
<!--<EnablePackageValidation>true</EnablePackageValidation>-->
<!-- to check the package validation on a release build, uncomment here -->
<!--<PackageValidationBaselineVersion>1.5.374.27</PackageValidationBaselineVersion>-->
<!-- to regenerate the compatibility suppression file, uncomment here -->
<!--<GenerateCompatibilitySuppressionFile>true</GenerateCompatibilitySuppressionFile>-->
<NuGetAuditMode>all</NuGetAuditMode>
<NuGetAudit>true</NuGetAudit>
</PropertyGroup>
<PropertyGroup>
<AccelerateBuildsInVisualStudio>true</AccelerateBuildsInVisualStudio>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<RunAnalyzersDuringBuild Condition="'$(RunAnalyzersDuringBuild)' == ''">true</RunAnalyzersDuringBuild>
<CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
<AnalysisLevel>preview</AnalysisLevel>
<AnalysisMode>all</AnalysisMode>
<AnalysisModeStyle>default</AnalysisModeStyle>
</PropertyGroup>
<PropertyGroup Condition="'$(BuildingInsideVisualStudio)' == 'true'">
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
</PropertyGroup>
<ItemGroup Condition="'$(NoRoslynatorAnalzers)' == ''">
<PackageReference Include="Roslynator.Analyzers" PrivateAssets="All" />
<PackageReference Include="Roslynator.Formatting.Analyzers" PrivateAssets="All" />
</ItemGroup>
<PropertyGroup>
<NoWarn>$(NoWarn);NU1510</NoWarn>
<PackageIcon>images/logo.jpg</PackageIcon>
<PackageProjectUrl>$(RepositoryUrl)</PackageProjectUrl>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<!--<PackageLicenseExpression>MIT</PackageLicenseExpression>-->
<PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
<PackageReleaseNotes>$(RepositoryUrl)/releases</PackageReleaseNotes>
<PackageReadmeFile>NugetREADME.md</PackageReadmeFile>
<PackageTags>OPCFoundation OPC UA ios linux dotnet net netcore</PackageTags>
</PropertyGroup>
<PropertyGroup Condition="'$(SignAssembly)' == 'true'">
<!-- OPC Foundation public key -->
<PublicKey>0024000004800000940000000602000000240000</PublicKey>
<PublicKey>$(PublicKey)525341310004000001000100d987b12f068b3580</PublicKey>
<PublicKey>$(PublicKey)429f3dde01397508880fc7e62621397618456ca1</PublicKey>
<PublicKey>$(PublicKey)549aeacfbdb90c62adfe918f05ce3677b390f783</PublicKey>
<PublicKey>$(PublicKey)57b8745cb6e1334655afce1a9527ac92fc829ff5</PublicKey>
<PublicKey>$(PublicKey)85ea79f007e52ba0f83ead627e3edda40bec5ae5</PublicKey>
<PublicKey>$(PublicKey)74128fc9342cb57cb8285aa4e5b589c0ebef3be5</PublicKey>
<PublicKey>$(PublicKey)71b5c8f2ab1067f7c880e8f8882a73c80a12a1ef</PublicKey>
</PropertyGroup>
<Choose>
<When Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net5.0'))">
<PropertyGroup>
<!-- Disable strongname warning as that's not been enforced since .net 5.-->
<NoWarn>$(NoWarn);CS8002</NoWarn>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup>
<!-- Disable nullable warning as it is not as meaningful on .net framework as on .net -->
<NoWarn>$(NoWarn);nullable</NoWarn>
</PropertyGroup>
</Otherwise>
</Choose>
<ItemGroup Condition="'$(IsPackable)' != 'false'">
<None
Include="$(MSBuildThisFileDirectory)/LICENSE.txt"
Pack="true"
PackagePath="$(PackageLicenseFile)"
/>
<None
Include="$(MSBuildThisFileDirectory)/nuget/logo.jpg"
Pack="true"
PackagePath="$(PackageIcon)"
/>
<None
Include="$(MSBuildThisFileDirectory)/Docs/NugetREADME.md"
Pack="true"
PackagePath="$(PackageReadmeFile)"
/>
</ItemGroup>
<ItemGroup Condition="'$(NBGV_PublicRelease)' != ''">
<PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" />
</ItemGroup>
<!-- Deterministic build is currently not supported for code coverage tests. -->
<PropertyGroup Condition="'$(CollectCoverage)' != 'true' AND ('$(TF_BUILD)' == 'true' OR '$(GITHUB_ACTIONS)' == 'true')">
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
</PropertyGroup>
<PropertyGroup>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
</PropertyGroup>
</Project>