Skip to content

Releases: cpsusie/DotNetVault

Release Version 1.0.0.1

30 Oct 17:13
Compare
Choose a tag to compare

Version 1.0.0.1

This version supplies fixes for issues 22 and 23 as merged in pull requests 24 and 26, respectively. Issue 22, was a problem where if a BasicMonitorVault was constructed without supplying an initial value, a LockAlreadyHeldThreadException would be thrown every time an attempt to acquire the lock was made. Issue 24 was a bug in the version of HighPrecisionTimeStamps used by DotNetVault's static analyzer on some frameworks on some systems. It was fixed by upgrading the version requirements for HighPrecisionTimeStamps (which can be downloaded in package form here and whose repository is here) to version 1.0.0.6+ from 1.0.0.1+. The pull request from the relevant bug fixed in HighPrecisionTimeStamps can be found here.

Version 1.0 Official Release

21 Aug 16:02
6929961
Compare
Choose a tag to compare

This release finalizes the prior v0.2.5.18 release by:

  1. Finalizing v1.0 Documentation
  2. Being configured to use a deterministic build for nuget packages
  3. Depend on v1.0.0.1 of High Precision Timestamps (which itself is the first deterministic nuget package for that dependency)

This v1.0 will not be receiving any major features. Further bug-fix and minor features for version 1.0 will be handled in the version 1.0 branch. If you are using .NET Framework 4.8 or .NET Standard 2.0, the 1.0 branch is where you should look. The master branch will be dedicated to adding major new features for version 2.0 and will require .NET 6.0+.

Version 0.2.5.18 Official Release

13 Aug 20:03
008f5ba
Compare
Choose a tag to compare

RELEASE NOTES VERSION 0.2.5.18:
Non-beta release using version 1.0 of High Precision Timestamps. Originally beta tested via version 0.1.1.0-beta in DotNetVault version 0.2.5.10-beta et seq. Dependency on HpTimestamps changed from included dll to a dependency on package.
Also, added a new (minor) feature: the [ReportWhiteListLocationsAttribute], when applied to a struct or class, will emit a compiler warning giving you the path of the vaultsafewhitelist and the conditionally vault safe generic whitelist files. T

Release v0.2.5.9

22 May 16:17
78dc0b0
Compare
Choose a tag to compare

RELEASE NOTES VERSION 0.2.5.9:
* Fixed bug from Issue 8, where a readonly field of unmanaged struct (or enum) in an otherwise vault-safe reference type was being identified as not readonly merely because the unmanaged type itself has writable fields. This is incorrect because attaching the readonly qualifier to the field will prevent mutation of its writable fields ... or, at worst, cause any mutation to be written to a defensive copy. This problem manifested itself with a nullable unmanaged enum type.
* Two unit tests added that originally failed but now pass after application of fix.
* Update example code project to demonstrate.

Release v0.2.5.8

15 Dec 02:41
Compare
Choose a tag to compare

RELEASE NOTES VERSION 0.2.5.8:
* Update dependencies.
* Add dependency to High-Precision-Timestamps v0.1.0.0
* Use monotonic DateTimes from High-Precision-Timestamps to compute durations and timeouts
* Rename VaultSafeWhiteList.txt to vaultsafewhitelist.txt.

Version 0.2.5.3

25 Oct 05:45
Compare
Choose a tag to compare

RELEASE NOTES VERSION 0.2.5.3:

  * Fixed problem with SourceLink not working correctly.
  * Fixed bug (Issue #2) that would throw a recursion exception sometimes when, using certain combinations of overloads, acquiring upgradable readonly locks then upgrading them would throw a lock recursion exception.
  * Update the quick start functionality tour and installation guides to use pictures reflecting more recent versions.  
  * Package for this release also available from Github in addition to NuGet.

RELEASE NOTES VERSION 0.2.5.1:

  * No significant changes to code in this release.
  * Resolved broken links displayed on project's NuGet page.
  * Fixed problem with license on NuGet. 

RELEASE NOTES VERSION 0.2.5.0:

The last official release was version 0.1.5.4,
available as a Nuget package (https://www.nuget.org/packages/DotNetVault/0.1.5.4). Since then, many features have been added to DotNetVault:

* Upgrading to new versions of Roslyn libraries, immutable collections and other minor dependency upgrades
* Changing some of the formatting of analyzer diagnostics to comply with Roslyn authors' recommendations
* Adding Monitor Vaults (using Monitor.Enter + sync object) as the synchronization mechanism
* Adding ReadWrite Vaults (using ReaderWriterLockSlim) as their synchronization mechanism
* Fixing flawed static analyzer rules
* Adding new analyzer rules to close encountered loopholes in the ruleset that potentially allowed unsynchronized access to protected resource objects
* Unit tests as appropriate for new functionality
* Creation of quick start installation guides with test projects
* Not including project pdfs in the released package but instead providing an md document and a txt document with links to those documents in the github repository
* Significant updates to the formatting and content of project markdown documents
* Adding Source Link and releasing a symbol package along with the nuget package for this project
* Writing many test projects and demonstration projects to verify functionality, stress test and profile performance of the vaults
* Adding a document serving as a guide to using large mutable value types generally and as a repository for shared mutable state  

Version 0.2.5.1

16 Oct 18:57
Compare
Choose a tag to compare

No significant behavioral code changes. The package metadata on Nuget in version 0.2.5.0 was not displaying correctly on Nuget site: links were broken because of spaces. Files displayed in Nuget page links were renamed or copied and renamed and the nuget metadata updated. Also, discovered that symbol packages were not working correctly. Thus, no snupkg for this release: instead, I have included the pdb along with the unpacked package in addition to including the nuget package in this release. An issue has been opened regarding Source Link and I hope to have that figured out soon. Also switched package packing mechanism to 7 zip as it keeps the size down better.

Version 0.2.5.x

11 Oct 19:06
Compare
Choose a tag to compare

Release History

The last official release was version 0.1.5.4, available as a Nuget package here. Since then, many features have been added to DotNetVault. All of these features were included in the feature-complete beta version 0.2.2.12-beta, available as a Nuget package here. The following list is a non-exhaustive summary of these new features:

  • Upgrading to new versions of Roslyn libraries, immutable collections and other minor dependency upgrades
  • Changing some of the formatting of analyzer diagnostics to comply with Roslyn authors' recommendations
  • Adding Monitor Vaults (using Monitor.Enter + sync object) as the synchronization mechanism
  • Adding ReadWrite Vaults (using ReaderWriterLockSlim) as their synchronization mechanism
  • Fixing flawed static analyzer rules
  • Adding new analyzer rules to close encountered loopholes in the ruleset that potentially allowed unsynchronized access to protected resource objects
  • Unit tests as appropriate for new functionality
  • Creation of quick start installation guides with test projects
  • Not including project pdfs in the released package but instead providing an md document and a txt document with links to those documents in the github repository
  • Significant updates to the formatting and content of project markdown documents
  • Adding Source Link and releasing a symbol package along with the nuget package for this project
  • Writing many test projects and demonstration projects to verify functionality, stress test and profile performance of the vaults
  • Adding a document serving as a guide to using large mutable value types generally and as a repository for shared mutable state

Version / Branch 0.2.5.0

No major new features will be added versions 0.2.5+. Development will remain open in the 0.2.5 branch primarily for refinements, bug fixes and documentation updates. Versions 0.2.5+ will continue to support .NET Framework 4.8, .NET Standard 2.0+ and .NET Core 3.1+ but will not make use of any features from the upcoming Version 5 of the unified DotNet framework. If you are not upgrading your projects to .NET 5, continue to use releases numbered 0.2 but make no upgrade to any package versioned 0.3+.

See DotNetVault Description.pdf which serves as the most complete design document for this project.

v0.2.2.12-beta

23 Aug 17:12
Compare
Choose a tag to compare
v0.2.2.12-beta Pre-release
Pre-release

Fixed a Bug 92 where copying a protected resource into another ref-struct declared in a larger scope (of the same type or containing a field at any level of nesting in its graph) could result in unsynchronized access.

Fix was accomplished by the addition of more analyzer rules and attributes that can trigger them.

Unit tests were added to validate the fix and code was added to the ExampleCodePlayground demonstrating Bug92.

A full description of Bug 92, the new attributes and analyzer rules is available now in "DotNetVault Description.pdf".

Development Roadmap:
As of version 0.2.2.12-beta, Version 0.2 is feature complete and with luck will be released in its first non-beta version soon. Any further releases in version two will hopefully be limited to documentation content updates, cleanup of test code and demonstration code. Bug fixes may also be released in Version 2 but no new features (except as needed to fix bugs) should be expected.

Future development in Version 0.2 after it is released in non-beta form will
be limited to the correction of bugs and other flaws and perhaps refactoring to
the extent it does not materially change behavior.

After Version 0.2, new features will be developed under 0.3. These features currently center on taking advantage of Roslyn Code Generators which should be available with .NET 5.

Beta release v0.2.2.1-beta

13 Jul 00:17
Compare
Choose a tag to compare
Pre-release

This release provides a customized read-write vault that protects a list-like collection and whose locked resource objects provide a familiar (but not identical) API to List. It is especially suited for storage of large value types: it returns and enumerates by reference, has custom internal binary search, linear search and introsort utilities adapted to take advantage of large values being passed by reference and uses struct-based comparers to avoid unnecessary indirection during sort, search, etc. The delegates it accepts also allow access to values by reference.

Although these variations from the standard might not be appropriate if we could literally implement IList or IReadonlyList, since this is a vault-protected resource, 1- it must always be accessed concretely due to nature of static analysis and 2- it is accessed through LockedResource objects, which are ref structs and cannot implement interfaces because they cannot be boxed. Given these constraints, I thought it worthwhile to do List and search / sort / compare correctly -- that is, using pass-by-reference where possible and avoiding virtual method calls like the plague throughout the process.

As always, the Project Description pdf (the draft i.e. the one without any particular release number) explains all these matters in great detail. There are extensive unit tests and stress tests demonstrating proper synchronization and showing usage. Also there are plenty of test projects demonstrating how to get started, as well as a quick start guide.