No, I think you have misunderstood.
The essence of immutability is that you are dealing with values, that are known only by their value and do not have an identity. For an object to be mutable it must conceptually have an identity that survives when its value is changed.
So value types in .NET are inherently expected to be immutable, because they are values. The number 7, the floating point number 1.3e17 and the date 1/1/1901 are immutable. variables holding these values may be mutable, but the values themselves are not.
Strings are also immutable. The value "abc" is immutable, even though it happens to be held in a reference type. Strings have no identity, and can be copied freely.
Structs in .NET are value types, and are copied on assignment. This is what you would expect, since copying a value does not create a new entity. It's just a copy of the same value.
The .NET framework does not enforce immutability for user-defined types. You have to do that yourself. You should consider whether a type you create is identified by its value or whether it has an identity, and design your classes and structs accordingly. It is quite reasonable to use structs for immutable values and classes for mutable identifiable objects, but that is up to you to decide and enforce.
It's important to remember the distinction between variables and the values they contain. A String, DateTime or a Point is a value, a StringBuilder or a Stream is not. A String variable contains a String value. A StringBuilder variable contains a reference to a StringBuilder, which in turn contains a String value. A Point variable contains a Point value (which happens to have X and Y int components). The variables are mutable, the values are not.
When a Point is assigned the value does not change but the variable holding it (LHS) changes from old value to new value.