Modernize to .NET 4.8 with Bug Fixes and Cache Introspection APIs#26
Merged
Conversation
Upgraded several NuGet dependencies (e.g., System.Text.Json, Newtonsoft.Json, Microsoft.CrmSdk.CoreAssemblies) to latest versions and updated assembly references accordingly. Changed root namespaces and assembly names from "Innofactor.Xrm.Persistent.Collections" to "Xrm.Persistent.Collections" in both main and test projects. Added app.config files with binding redirects to resolve assembly version conflicts. Updated solution file to reflect new project names and Visual Studio version. Added System.ServiceModel.Http and Primitives references for compatibility. These changes modernize dependencies and improve .NET/VS support.
- Bump target framework to .NET 4.8 and version to 2.0.0 - Rename namespace: Innofactor.Xrm.Persistent.Collections → Xrm.Persistent.Collections - Update all NuGet dependencies (SQLite, xUnit, etc.) to latest - Overhaul assembly metadata and versioning - Add comprehensive CHANGELOG.md and NuGet .nuspec - Add/modernize GitHub Actions: CI, code quality, release, publish - Expand unit tests to 27, covering CRM types and persistence - Update .gitignore and documentation - Backward compatible with existing DB files; migration guide included
Switched from SemVer to CalVer (e.g., 2.2025.1.15) across nuspec, AssemblyInfo, release workflow, and documentation. Updated GitHub Actions to validate CalVer and clarify versioning. Renamed/moved projects from Innofactor.Xrm.Persistent.Collections to Xrm.Persistent.Collections and updated the solution file accordingly. Added CalVer documentation files and updated .gitignore. Revised CHANGELOG and release notes to reflect versioning changes. Reformatted packages.config files (no dependency changes).
Major upgrade: migrate to .NET Framework 4.8, x64 platform, and latest SQLite (sqlite-net-pcl 1.9.172, SQLitePCLRaw 2.1.11+). Rename all Innofactor.Xrm.Persistent.Collections references to Xrm.Persistent.Collections across code, CI, and packaging. Update test project for 64-bit, add binding redirects, and ensure native SQLite DLLs are copied for test runs. Refresh all dependencies (xunit, analyzers, System.* libs), improve CI/CD workflows, and add a comprehensive new README. Update .nuspec metadata, add icon, and reset versioning to new CalVer scheme. This is a breaking, future-proofing modernization and rebranding release.
Added a test.runsettings file to configure test execution. This enforces x64 test host (for native SQLite), sets the results directory, session timeout, and enables source information collection.
- Clarified in copilot-instructions.md that app.config files and Any CPU configs should remain in the repo - Expanded CHANGELOG.md with detailed notes on: - Enhanced README and new use case scenarios - Explicit support for AliasedValue, OptionSetValueCollection, and BooleanManagedProperty in Xrm.Json.Serialization - SQLite upgrade details (sqlite-net-pcl 1.9.172, performance, pooling, WAL) - SQLitePCLRaw changes (bundle_e_sqlite3, provider.dynamic_cdecl, security fixes) - xUnit improvements (test runner, analyzers, new dependency) - Removed "Planned Releases" section for clarity
Refactored LocalDictionaryTests to use Assert.Single and Assert.Empty for clearer and more idiomatic xUnit assertions. Added a new SQLiteVersionTests class to verify SQLite engine availability by querying its version. Updated the test project file to include the new test file.
Updated project references to SQLitePCLRaw 2.1.11.2622 and adjusted HintPaths for netstandard2.0 compatibility. Added trace logging of SQLite engine version in SQLite_Engine_Version_Is_Available test for easier debugging.
Removed obsolete Microsoft.Testing.* references and related MSBuild logic from test project. Updated SQLitePCLRaw and SQLite-net references for consistency and correct versioning. Removed unused code from BlobCache.cs and ensured required assemblies are copied locally. Cleaned up packages.config to reflect dependency changes.
Added unit tests for PersistentBlobCache covering retrieval, insertion, expiration, invalidation, and error handling. Updated Get method to throw KeyNotFoundException for missing or expired keys. Improved LocalDictionary key existence checks and exception handling. Updated project file and made minor formatting changes.
Added GetAll and GetAllKeys methods to IBlobCache and PersistentBlobCache for enumerating non-expired items and keys. Implemented unit tests to verify correct behavior, including handling of expired entries. Cleaned up interface documentation and removed legacy code.
- Fixed KeyNotFoundException bug in PersistentBlobCache.Get() - Added GetAll() and GetAllKeys() to IBlobCache interface - Fixed Type reflection safety with throwOnError parameter - Fixed LocalDictionary methods to use GetOrDefault() - Created 15 comprehensive unit tests (43 total, all passing) - Updated README.md with cache introspection use case - Updated CHANGELOG.md with all improvements - Removed obsolete TODO comments
Cleared appveyor.yml of all build, artifact, and deployment configuration. The file is now empty, removing CI/CD setup for this project.
Removed actions/setup-dotnet@v4 and the explicit .NET Framework 4.8 setup from the CI pipeline. The workflow now restores NuGet packages and builds the solution directly, simplifying the process.
Added .gitattributes to standardize LF line endings for text files and mark binaries. Updated GitHub Actions workflow to output test results to a dedicated directory and adjusted the test reporter to use the specific results file path. Made minor formatting improvements for clarity.
- ci.yml: Simple build/test on push/PR - publish-nuget.yml: Triggers on tag push (v*.*.*), builds, tests, publishes - Removed release.yml and code-quality.yml (redundant)
Updated AssemblyInfo.cs to reflect copyright year 2026. Incremented assembly and file versions from 2.2026.3.1 to 2.2026.3.2 for the March 2026 release.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Major release modernizing the library to .NET Framework 4.8 with critical bug fixes, new cache introspection APIs, and significantly improved performance (15-25% faster).
Key Changes
🐛 Bug Fixes
KeyNotFoundExceptionnever thrown inGet()methodLocalDictionarymethods (Contains,ContainsKey,TryGetValue)🎁 New Features
GetAll()method for cache introspectionGetAllKeys()method with type metadata📈 Improvements
Innofactor.Xrm.*→Xrm.Persistent.Collectionsusingstatements in your codeTesting
Compatibility