Update System.Activity API to be more readonly (dotnet/corefx#35863)
authorVance Morrison <vancem@microsoft.com>
Fri, 8 Mar 2019 17:52:06 +0000 (09:52 -0800)
committerGitHub <noreply@github.com>
Fri, 8 Mar 2019 17:52:06 +0000 (09:52 -0800)
commit001a1942dadd79b6b2b6b93bc933cd56b65d2ed7
tree230ec9e67b139046563feb17dedbefc339e527b0
parent9b877cb2f605a799a2e3f0c7f5e337e28f1cc4b0
Update System.Activity API to be more readonly (dotnet/corefx#35863)

* Add back in Read-only-ness for ActivitySpanId and ActivityTraceId

I was able to determine a way of casting away readonly-ness (using Unsafe.AsRef),
so I was able to make ActivitySpanId and ActivityTraceId read-only (and cast away
the read-only when updating the cache).   This works better becasuse it allows
refs to these IDs to be readonly and thus prevent update to Activity.TraceId and Activity.SpanId (which we don't want).

Note that for some reason on NetStandard1.3 ref readonly returns fail (says it can't find the 'InAttribute').
This error seems to be bogus, but the upshot is that older standards gives the C# compiler a problem so
we work around it by simply droping the read-only attribute for those (you still have all the functionality).

* Resolved conflicts

* Fix for NetStandard1.3

* Update to make the cache ref-equality friendly.

Commit migrated from https://github.com/dotnet/corefx/commit/0846c3157735b00135500e20a61be9bf879859fa
src/libraries/System.Diagnostics.DiagnosticSource/ref/System.Diagnostics.DiagnosticSource.csproj
src/libraries/System.Diagnostics.DiagnosticSource/ref/System.Diagnostics.DiagnosticSourceActivity.cs
src/libraries/System.Diagnostics.DiagnosticSource/src/System.Diagnostics.DiagnosticSource.csproj
src/libraries/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/Activity.cs