Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
e8831fe
[ECO-4567] Created implementation plan to support msgpack encoding
sacOO7 Oct 20, 2025
86d5060
[ECO-5624] Refactored/Simplified DLL merging implementation in cake s…
sacOO7 Oct 25, 2025
e6da13c
[ECO-5624] Updated unity project with FAT Ably DLL
sacOO7 Oct 26, 2025
3b2765c
Merge branch 'fix/upgrade-newtonsoft-dep' into fix/newtonsoft-unity
sacOO7 Oct 27, 2025
de00d64
[ECO-5624] Removed fluentassertions dependency from tests
sacOO7 Oct 27, 2025
2838467
Merge branch 'fix/upgrade-newtonsoft-dep' into fix/newtonsoft-unity
sacOO7 Oct 27, 2025
4a04264
Merge branch 'fix/newtonsoft-unity' into feature/support-msgpack
sacOO7 Oct 27, 2025
14423cd
[ECO-4567] Updated msgpack to use latest version, removed conditional
sacOO7 Oct 27, 2025
73d7fce
[ECO-4567] Added cake script to format the code
sacOO7 Oct 29, 2025
b7b7995
[ECO-4567] Created implementation plan to support MsgPack exactly sim…
sacOO7 Oct 29, 2025
da42072
[ECO-4567] Implemented msgpack support
sacOO7 Oct 30, 2025
dd138de
[ECO-4567] Upgraded msgpack dep from msgpack-cli to msgpack-csharp
sacOO7 Oct 31, 2025
c49d355
[ECO-5624] Migrated messagepack integration from index to keyName
sacOO7 Nov 3, 2025
a241793
[ECO-4567] Updated NetFramwork, Xamarin-Android and Xamarin-iOS with …
sacOO7 Nov 4, 2025
b3002d4
[ECO-4567] Fixed Default.Protocol references across the codebase
sacOO7 Nov 4, 2025
8068059
[ECO-4567] Removed Defaults.Protocol references across the codebase
sacOO7 Nov 4, 2025
585ee7d
[ECO-4567] Refactored MsgPackHelper
sacOO7 Nov 5, 2025
f19dee1
[ECO-4567] Updated MsgPackHelper and fixed PaginatedResponse
sacOO7 Nov 6, 2025
a1592b2
[ECO-4567] Refactored MessageHandler with IsMsgPack() flag
sacOO7 Nov 7, 2025
8b0cced
[ECO-4567] Fixed parsing logic for errorResponse for msgpack encoding
sacOO7 Nov 10, 2025
85f0040
[ECO-4567] Updated MessageHandler with MsgPack specific encoders
sacOO7 Nov 11, 2025
0e9b10d
[ECO-4567] Added custom JObjectMessagePackSerializer
sacOO7 Nov 12, 2025
e9c9a04
[ECO-4567] Removed intermediate generated markdown files for msgpack
sacOO7 Nov 12, 2025
0532d66
Merge branch 'main' into feature/support-msgpack
sacOO7 Nov 12, 2025
e2aac5e
[ECO-4567] Removed unncessary EnumMember attribute from DataRequestQuery
sacOO7 Nov 12, 2025
477e4d9
[ECO-4567] Fixed test.cake script to throw exception when retry tests…
sacOO7 Nov 13, 2025
3d56db4
[ECO-4567] Fixed MsgPackSerializer tests with proper logging
sacOO7 Nov 13, 2025
4fdf426
[ECO-4567] Added explicit test for TestMsgpackDecoding based on msgpa…
sacOO7 Nov 13, 2025
39a2c58
[ECO-4567] Reverted all formatting based changes for all files
sacOO7 Nov 14, 2025
5d7a02f
[ECO-4567] Updated tests to use JAssert.DeepEquals instead of JToken.…
sacOO7 Nov 14, 2025
a1ceae7
[ECO-4567] Updated DateTimeOffset/TimeSpan MsgPackSerializer similar …
sacOO7 Nov 17, 2025
3246e3e
[ECO-4567] Moved separate msgpack project to core shared project
sacOO7 Nov 17, 2025
e0b038c
[ECO-4567] Added MessagePack dependency to every platform in the nuspec
sacOO7 Nov 18, 2025
9385d46
[ECO-4567] Fixed unity editmode and playmode tests
sacOO7 Nov 18, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 0 additions & 37 deletions .github/workflows/run-tests-macos-mono.yml

This file was deleted.

7 changes: 7 additions & 0 deletions nuget/io.ably.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -20,26 +20,33 @@
<dependencies>
<group targetFramework="net46">
<dependency id="System.Threading.Channels" version="4.6.0" />
<dependency id="MessagePack" version="3.1.4" />
Copy link

@coderabbitai coderabbitai bot Nov 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify MessagePack version 3.1.4 validity, security, and compatibility; consider using a version range.

The hard-pinned version "3.1.4" prevents consumers from automatically receiving patch updates or security fixes. Additionally, compatibility with older frameworks (net46, monoandroid, monotouch) and mobile platforms should be verified.

Consider using a version range instead of an exact version, such as [3.1.4, 4.0.0) to allow patch updates while preventing breaking changes.

Run the following script to verify the package version and check for security advisories:

Additionally, search the web for the latest MessagePack-CSharp documentation and compatibility information:

Also applies to: 27-27, 31-31, 35-35, 39-39, 44-44, 49-49


🏁 Script executed:

#!/bin/bash
# Description: Verify MessagePack version 3.1.4 exists, check for latest version, and verify security advisories.

# Check NuGet for MessagePack versions
echo "=== Checking NuGet for MessagePack versions ==="
curl -s "https://api.nuget.org/v3-flatcontainer/messagepack/index.json" | jq '.versions' | grep -E '"3\.[0-9]+\.[0-9]+"' | tail -10

# Get package metadata for version 3.1.4
echo -e "\n=== Checking if version 3.1.4 exists ==="
curl -s "https://api.nuget.org/v3-flatcontainer/messagepack/3.1.4/messagepack.nuspec" | head -20

# Check supported frameworks for 3.1.4
echo -e "\n=== Checking supported frameworks ==="
curl -s "https://api.nuget.org/v3/registration5-gz-semver2/messagepack/3.1.4.json" | gunzip 2>/dev/null | jq -r '.catalogEntry.dependencyGroups[].targetFramework' 2>/dev/null || echo "Could not retrieve framework info"

# Check GitHub security advisories
echo -e "\n=== Checking for security advisories ==="
gh api graphql -f query='
{
  securityVulnerabilities(first: 10, ecosystem: NUGET, package: "MessagePack") {
    nodes {
      advisory {
        summary
        severity
        publishedAt
      }
      vulnerableVersionRange
      firstPatchedVersion {
        identifier
      }
    }
  }
}'

Length of output: 2816


🌐 Web query:

MessagePack-CSharp 3.1.4 compatibility with .NET Framework 4.6 and Xamarin

💡 Result:

Short answer: MessagePack-CSharp 3.1.4 targets .NETStandard 2.0 (and explicitly .NETFramework 4.7.2) and is compatible with Xamarin platforms. That means it requires a runtime that supports .NET Standard 2.0 — i.e. .NET Framework 4.6.1 or later — so it will NOT work on plain .NET Framework 4.0–4.6.0 without upgrading. NuGet also lists Xamarin (iOS/Mac/Android/TVOS/WatchOS) as compatible. [1][2]

If you must stay on .NET Framework 4.6.0, either upgrade the project to ≥4.6.1 (recommended) or use an older MessagePack release that supports that runtime. [1][3]

Sources:

  • MessagePack 3.1.4 NuGet details (targets: .NETStandard 2.0, .NETFramework 4.7.2; compatibility info includes Xamarin). [1]
  • MessagePack 3.1.4 NuGet package page (framework/compatibility listing). [2]
  • MessagePack-CSharp GitHub releases. [3]

Remove MessagePack 3.1.4 from the net46 target framework group; it requires .NET Framework 4.6.1+.

MessagePack 3.1.4 is valid and not affected by known security vulnerabilities. However, there is a critical compatibility issue: MessagePack 3.1.4 explicitly requires .NET Standard 2.0 support, which means .NET Framework 4.6.1 or later. The net46 target framework (4.6.0) falls below this minimum requirement and will fail to resolve this dependency.

Fix: Either remove the dependency from the net46 group (line 23) or upgrade that framework to net461. The dependency is compatible with Xamarin platforms and modern frameworks (net6.0, net7.0).

🤖 Prompt for AI Agents
In nuget/io.ably.nuspec around line 23, the net46 target group declares a
MessagePack 3.1.4 dependency which requires .NET Framework 4.6.1+; either remove
the <dependency id="MessagePack" version="3.1.4" /> entry from the net46 target
group or change that target framework to net461 so the dependency can be
resolved; update the nuspec accordingly and ensure the package metadata and CI
builds still pass after the change.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, since MessagePack 3.1.4 supports netstandard2.0, we should be able to use it here right?
Dependency resolution mechanism should automatically take care of resolving relevant dependencies based on netstandard2.0 right

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sacOO7, unfortunately no—the dependency resolution mechanism will not automatically resolve this because .NET Framework 4.6.0 does not support .NET Standard 2.0.

Here's why:

The compatibility issue:

  • net46 refers to .NET Framework 4.6.0
  • .NET Standard 2.0 support was introduced in .NET Framework 4.6.1
  • MessagePack 3.1.4 targets .NET Standard 2.0, which means it requires .NET Framework 4.6.1 minimum

What will happen:
When users try to install your package targeting net46, NuGet will fail to resolve the MessagePack 3.1.4 dependency because the framework version is incompatible. The dependency resolver won't "fall back" to a compatible version automatically.

Solutions:

  1. Upgrade the target framework (recommended):

    <group targetFramework="net461">
      <dependency id="System.Threading.Channels" version="4.6.0" />
      <dependency id="MessagePack" version="3.1.4" />
    </group>
  2. Remove MessagePack from the net46 group (if you must support .NET Framework 4.6.0):

    • Keep the net46 group without MessagePack
    • Add a separate net461 group with MessagePack
    • This means users on .NET Framework 4.6.0 won't have MsgPack support

Additional note:
The other target frameworks in your nuspec are fine:

  • monoandroid, Xamarin.iOS, and monotouch all support .NET Standard 2.0
  • netstandard2.0, net6.0, and net7.0 obviously support it

I recommend upgrading to net461 since .NET Framework 4.6.0 is quite old (released 2015) and most users should be on 4.6.1+ by now.

</group>
<group targetFramework="monoandroid">
<dependency id="System.Threading.Channels" version="4.6.0" />
<dependency id="MessagePack" version="3.1.4" />
</group>
<group targetFramework="Xamarin.iOS">
<dependency id="System.Threading.Channels" version="4.6.0" />
<dependency id="MessagePack" version="3.1.4" />
</group>
<group targetFramework="monotouch">
<dependency id="System.Threading.Channels" version="4.6.0" />
<dependency id="MessagePack" version="3.1.4" />
</group>
<group targetFramework="netstandard2.0">
<dependency id="System.Threading.Channels" version="4.6.0" />
<dependency id="MessagePack" version="3.1.4" />
<dependency id="Newtonsoft.Json" version="13.0.1" />
</group>
<group targetFramework="net6.0">
<dependency id="System.Threading.Channels" version="4.6.0" />
<dependency id="MessagePack" version="3.1.4" />
<dependency id="Newtonsoft.Json" version="13.0.1" />
</group>
<group targetFramework="net7.0">
<dependency id="System.Threading.Channels" version="4.6.0" />
<dependency id="MessagePack" version="3.1.4" />
<dependency id="Newtonsoft.Json" version="13.0.1" />
</group>
</dependencies>
Expand Down
23 changes: 16 additions & 7 deletions src/IO.Ably.Android/IO.Ably.Android.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
<TargetFrameworkVersion>v11.0</TargetFrameworkVersion>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>obj/Generated</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
Expand Down Expand Up @@ -51,9 +53,16 @@
<!-- Fix for DeterministicSourcePaths in CI environments -->
<!-- See: https://github.com/dotnet/sourcelink/issues/572 -->
<ItemGroup>
<SourceRoot Include="$(MSBuildThisFileDirectory)..\..\"/>
<SourceRoot Include="$(MSBuildThisFileDirectory)..\..\" />
</ItemGroup>
<ItemGroup>
<Reference Include="MessagePack, Version=3.1.4.0, Culture=neutral, PublicKeyToken=b4a0369545f0a1be">
<HintPath>..\packages\MessagePack.3.1.4\lib\netstandard2.0\MessagePack.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="MessagePack.Annotations, Version=3.1.4.0, Culture=neutral, PublicKeyToken=b4a0369545f0a1be, processorArchitecture=MSIL">
<HintPath>..\packages\MessagePack.Annotations.3.1.4\lib\netstandard2.0\MessagePack.Annotations.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.Async.1.0.168\lib\portable-net45+win8+wpa81\Microsoft.Threading.Tasks.dll</HintPath>
Expand All @@ -65,9 +74,6 @@
</Reference>
<Reference Include="Mono.Android" />
<Reference Include="mscorlib" />
<Reference Include="MsgPack, Version=0.9.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MsgPack.Cli.0.9.2\lib\MonoAndroid10\MsgPack.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\netstandard2.0\Newtonsoft.Json.dll</HintPath>
</Reference>
Expand All @@ -87,8 +93,8 @@
<HintPath>..\packages\System.Threading.Channels.4.5.0\lib\netstandard2.0\System.Threading.Channels.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.0\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Xml.Linq" />
Expand All @@ -107,14 +113,17 @@
<SubType>Designer</SubType>
</None>
</ItemGroup>
<ItemGroup>
<Analyzer Include="..\packages\MessagePackAnalyzer.3.1.4\analyzers\roslyn4.3\cs\MessagePack.SourceGenerator.dll" />
<Analyzer Include="..\packages\MessagePackAnalyzer.3.1.4\analyzers\roslyn4.3\cs\MessagePack.Analyzers.CodeFixes.dll" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\lib\delta-codec\IO.Ably.DeltaCodec\IO.Ably.DeltaCodec.csproj">
<Project>{412deb5f-7936-4027-8bf8-977f23d465ed}</Project>
<Name>IO.Ably.DeltaCodec</Name>
</ProjectReference>
</ItemGroup>
<Import Project="..\IO.Ably.Shared\IO.Ably.Shared.projitems" Label="Shared" />
<Import Project="..\IO.Ably.Shared.MsgPack\IO.Ably.Shared.MsgPack.projitems" Label="Shared" Condition="$(DefineConstants.Contains(MSGPACK))" />
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" Condition="Exists('$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets')" />
<Import Project="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Xamarin\Android\Xamarin.Android.CSharp.targets" Condition="Exists('C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Xamarin\Android\Xamarin.Android.CSharp.targets')" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Expand Down
8 changes: 5 additions & 3 deletions src/IO.Ably.Android/packages.config
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="monoandroid403" />
<package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="monoandroid403" />
<package id="Microsoft.CSharp" version="4.4.0" targetFramework="monoandroid71" />
<package id="MessagePack" version="3.1.4" targetFramework="monoandroid71" />
<package id="MessagePack.Annotations" version="3.1.4" targetFramework="monoandroid71" />
<package id="MessagePackAnalyzer" version="3.1.4" targetFramework="monoandroid71" developmentDependency="true" />
<package id="Microsoft.NETCore.Platforms" version="2.0.1" targetFramework="monoandroid71" />
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="monoandroid403" />
<package id="MsgPack.Cli" version="0.9.2" targetFramework="monoandroid403" />
<package id="NETStandard.Library" version="2.0.3" targetFramework="monoandroid71" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="monoandroid71" />
<package id="System.AppContext" version="4.3.0" targetFramework="monoandroid403" />
Expand Down Expand Up @@ -57,10 +59,10 @@
<package id="System.Threading" version="4.3.0" targetFramework="monoandroid403" />
<package id="System.Threading.Channels" version="4.5.0" targetFramework="monoandroid71" />
<package id="System.Threading.Tasks" version="4.3.0" targetFramework="monoandroid403" />
<package id="System.Threading.Tasks.Extensions" version="4.5.0" targetFramework="monoandroid71" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="monoandroid71" />
<package id="System.Threading.ThreadPool" version="4.3.0" targetFramework="monoandroid403" />
<package id="System.Threading.Timer" version="4.3.0" targetFramework="monoandroid403" />
<package id="System.Xml.ReaderWriter" version="4.3.0" targetFramework="monoandroid403" />
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="monoandroid403" />
<package id="System.Xml.XmlDocument" version="4.3.0" targetFramework="monoandroid403" />
</packages>
</packages>
44 changes: 38 additions & 6 deletions src/IO.Ably.NETFramework/IO.Ably.NETFramework.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,15 @@
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<TargetFrameworkProfile />
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)Generated</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG;EXCLUDE_MSGPACK</DefineConstants>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<RunCodeAnalysis>true</RunCodeAnalysis>
Expand Down Expand Up @@ -57,26 +59,52 @@
<!-- Fix for DeterministicSourcePaths in CI environments -->
<!-- See: https://github.com/dotnet/sourcelink/issues/572 -->
<ItemGroup>
<SourceRoot Include="$(MSBuildThisFileDirectory)..\..\"/>
<SourceRoot Include="$(MSBuildThisFileDirectory)..\..\" />
</ItemGroup>
<ItemGroup>
<Reference Include="MessagePack, Version=3.1.4.0, Culture=neutral, PublicKeyToken=b4a0369545f0a1be">
<HintPath>..\packages\MessagePack.3.1.4\lib\netstandard2.0\MessagePack.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="MessagePack.Annotations, Version=3.1.4.0, Culture=neutral, PublicKeyToken=b4a0369545f0a1be, processorArchitecture=MSIL">
<HintPath>..\packages\MessagePack.Annotations.3.1.4\lib\netstandard2.0\MessagePack.Annotations.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.NET.StringTools, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.NET.StringTools.17.11.4\lib\netstandard2.0\Microsoft.NET.StringTools.dll</HintPath>
</Reference>
Comment on lines +65 to +77
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify: Major version bumps for framework compatibility.

The addition of System.Runtime.CompilerServices.Unsafe 6.0.0 (up from 4.5.0) and System.Collections.Immutable 8.0.0 represent significant version changes. Although these are dependencies of MessagePack 3.1.4, confirm:

  • System.Runtime.CompilerServices.Unsafe 6.0.0 is compatible with .NET Framework 4.6.2
  • No breaking API changes in these library versions that would affect the codebase
  • All transitive dependencies resolve correctly for .NET Framework 4.6.2

Consider running target framework compatibility checks as part of testing.

Also applies to: 82-107


🌐 Web query:

System.Runtime.CompilerServices.Unsafe 6.0.0 .NET Framework 4.6.2 compatibility

💡 Result:

Yes — System.Runtime.CompilerServices.Unsafe 6.0.0 is compatible with .NET Framework 4.6.2. The NuGet package for 6.0.0 includes a net46.1 target (and netstandard2.0), which is compatible with 4.6.2 (4.6.2 >= 4.6.1). For later 6.1.x releases the package explicitly lists net462 as a target. [1][2]

Sources:

  • System.Runtime.CompilerServices.Unsafe 6.0.0 (NuGet). [1]
  • System.Runtime.CompilerServices.Unsafe 6.1.0 (NuGet) — shows net462 target. [2]

🌐 Web query:

System.Collections.Immutable 8.0.0 .NET Framework support

💡 Result:

Yes — System.Collections.Immutable 8.0.0 supports .NET Framework. The NuGet package lists .NETFramework 4.6.2 (and compatibility with 4.6.1/4.6.2+ / 4.7 / 4.7.1 / 4.7.2 / 4.8 / 4.8.1) and includes a net461 target; the .NETFramework build depends on System.Memory (>= 4.5.5) and System.Runtime.CompilerServices.Unsafe (>= 6.0.0). [1]

Sources:
[1] NuGet — System.Collections.Immutable 8.0.0 (package metadata).


🌐 Web query:

MessagePack 3.1.4 target frameworks requirements

💡 Result:

MessagePack 3.1.4 (NuGet) — target framework requirements (summary)

  • Provided/targeted: .NET 8.0, .NETStandard 2.0, .NETStandard 2.1, and .NET Framework 4.7.2.
  • Compatible (computed) frameworks include many .NET Core/.NET and framework TFMs (e.g., net5.0–net10.0, netcoreapp2.x–3.x, net6/net7/net8/net9, netcoreapp, netstandard, netframework variants).
  • Included package asset TFMs and package dependencies by TFM (examples):
    • .NETFramework 4.7.2 (assets include MessagePack.Annotations, MessagePackAnalyzer, Microsoft.Bcl.AsyncInterfaces, System.Memory, System.Runtime.CompilerServices.Unsafe, etc.).
    • .NETStandard 2.0 (assets include MessagePack.Annotations, MessagePackAnalyzer, Microsoft.Bcl.AsyncInterfaces, System.Reflection.Emit, System.Memory, Unsafe, etc.).
    • .NETStandard 2.1 (assets include MessagePack.Annotations, MessagePackAnalyzer, Microsoft.NET.StringTools, System.Collections.Immutable).
    • net8.0 / net9.0 (assets include MessagePack.Annotations, MessagePackAnalyzer, Microsoft.NET.StringTools).

Source: NuGet package metadata for MessagePack 3.1.4. [1]

References
[1] NuGet — MessagePack 3.1.4 package metadata (target frameworks, included assets and dependencies). [NuGet package page].


🏁 Script executed:

#!/bin/bash
# Check the TargetFramework property in the .csproj file
grep -n "TargetFramework" src/IO.Ably.NETFramework/IO.Ably.NETFramework.csproj | head -5

Length of output: 96


🏁 Script executed:

#!/bin/bash
# Also check for any PropertyGroup with framework version
grep -n -A2 "PropertyGroup" src/IO.Ably.NETFramework/IO.Ably.NETFramework.csproj | grep -i "target\|framework" | head -10

Length of output: 237


CRITICAL: MessagePack 3.1.4 targets .NET Framework 4.7.2, incompatible with project's 4.6.2 target.

MessagePack 3.1.4 explicitly targets .NET Framework 4.7.2, but this project targets .NET Framework 4.6.2 (line 13: <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>). While individual transitive dependencies like System.Runtime.CompilerServices.Unsafe 6.0.0 and System.Collections.Immutable 8.0.0 are compatible with .NET Framework 4.6.2, the primary package is incompatible.

This change cannot proceed without either:

  • Upgrading the project's target framework to 4.7.2 or higher
  • Using a compatible version of MessagePack that supports 4.6.2

<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Collections.Immutable, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Collections.Immutable.8.0.0\lib\net462\System.Collections.Immutable.dll</HintPath>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.Data" />
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http">
<HintPath>..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Net.Http.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Channels, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Channels.4.6.0\lib\netstandard2.0\System.Threading.Channels.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.2\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Xml" />
<Reference Include="System.Net" />
Expand All @@ -98,6 +126,8 @@
<Analyzer Include="..\packages\Microsoft.CodeQuality.Analyzers.2.9.6\analyzers\dotnet\cs\Humanizer.dll" />
<Analyzer Include="..\packages\StyleCop.Analyzers.1.1.118\analyzers\dotnet\cs\StyleCop.Analyzers.CodeFixes.dll" />
<Analyzer Include="..\packages\StyleCop.Analyzers.1.1.118\analyzers\dotnet\cs\StyleCop.Analyzers.dll" />
<Analyzer Include="..\packages\MessagePackAnalyzer.3.1.4\analyzers\roslyn4.3\cs\MessagePack.SourceGenerator.dll" />
<Analyzer Include="..\packages\MessagePackAnalyzer.3.1.4\analyzers\roslyn4.3\cs\MessagePack.Analyzers.CodeFixes.dll" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\lib\delta-codec\IO.Ably.DeltaCodec\IO.Ably.DeltaCodec.csproj">
Expand All @@ -112,5 +142,7 @@
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.CodeQuality.Analyzers.2.9.6\build\Microsoft.CodeQuality.Analyzers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeQuality.Analyzers.2.9.6\build\Microsoft.CodeQuality.Analyzers.props'))" />
<Error Condition="!Exists('..\packages\MessagePackAnalyzer.3.1.4\build\MessagePackAnalyzer.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MessagePackAnalyzer.3.1.4\build\MessagePackAnalyzer.targets'))" />
</Target>
<Import Project="..\packages\MessagePackAnalyzer.3.1.4\build\MessagePackAnalyzer.targets" Condition="Exists('..\packages\MessagePackAnalyzer.3.1.4\build\MessagePackAnalyzer.targets')" />
</Project>
16 changes: 10 additions & 6 deletions src/IO.Ably.NETFramework/app.config
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.ThreadPool" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0"/>
<assemblyIdentity name="System.Threading.ThreadPool" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.11.0" newVersion="4.0.11.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/></startup></configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" /></startup></configuration>
15 changes: 13 additions & 2 deletions src/IO.Ably.NETFramework/packages.config
Original file line number Diff line number Diff line change
@@ -1,10 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ILRepack.Lib.MSBuild.Task" version="2.0.18" targetFramework="net461" />
<package id="MessagePack" version="3.1.4" targetFramework="net462" />
<package id="MessagePack.Annotations" version="3.1.4" targetFramework="net462" />
<package id="MessagePackAnalyzer" version="3.1.4" targetFramework="net462" developmentDependency="true" />
<package id="Microsoft.Bcl.AsyncInterfaces" version="8.0.0" targetFramework="net462" />
<package id="Microsoft.CodeQuality.Analyzers" version="2.9.6" targetFramework="net461" developmentDependency="true" />
<package id="Microsoft.NET.StringTools" version="17.11.4" targetFramework="net462" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net461" />
<package id="StyleCop.Analyzers" version="1.1.118" targetFramework="net461" developmentDependency="true" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net461" />
<package id="System.Buffers" version="4.5.1" targetFramework="net462" />
<package id="System.Collections.Immutable" version="8.0.0" targetFramework="net462" />
<package id="System.Memory" version="4.5.5" targetFramework="net462" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net462" />
<package id="System.Reflection.Emit" version="4.7.0" targetFramework="net462" />
<package id="System.Reflection.Emit.Lightweight" version="4.7.0" targetFramework="net462" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net462" />
<package id="System.Threading.Channels" version="4.6.0" targetFramework="net461" />
<package id="System.Threading.Tasks.Extensions" version="4.5.2" targetFramework="net461" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net461" />
</packages>
Loading
Loading