== Why is this an issue?

Objects that can be accessed across https://learn.microsoft.com/en-us/dotnet/framework/app-domains/application-domains[application domain] boundaries are said to have weak identity. This means that these objects can be considered shared resources outside of the domain, which can be lead to them being accessed or modified by multiple threads or concurrent parts of a program, outside of the domain.

A https://en.wikipedia.org/wiki/Thread_(computing)[thread] acquiring a https://en.wikipedia.org/wiki/Lock_(computer_science)[lock] on such an object runs the risk of being blocked by another thread in a different application domain, leading to poor performance and potentially https://stackoverflow.com/questions/1162587/what-is-starvation[thread starvation] and https://en.wikipedia.org/wiki/Deadlock[deadlocks].

Types with weak identity are:

* https://learn.microsoft.com/en-us/dotnet/api/system.marshalbyrefobject[MarshalByRefObject]
* https://learn.microsoft.com/en-us/dotnet/api/system.executionengineexception[ExecutionEngineException]
* https://learn.microsoft.com/en-us/dotnet/api/system.outofmemoryexception[OutOfMemoryException]
* https://learn.microsoft.com/en-us/dotnet/api/system.stackoverflowexception[StackOverflowException]
* https://learn.microsoft.com/en-us/dotnet/api/system.string[String]
* https://learn.microsoft.com/en-us/dotnet/api/system.reflection.memberinfo[MemberInfo]
* https://learn.microsoft.com/en-us/dotnet/api/system.reflection.parameterinfo[ParameterInfo]
* https://learn.microsoft.com/en-us/dotnet/api/system.threading.thread[Thread]
