File: System\Runtime\CompilerServices\Attributes.cs
Web Access
Project: src\src\libraries\System.Runtime.CompilerServices.VisualC\src\System.Runtime.CompilerServices.VisualC.csproj (System.Runtime.CompilerServices.VisualC)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
// We need to add an InternalsVisibleToAttribute here to mscorlib since we need to expose some of these types via type forwards in mscorlib
// since tooling expects some types to live there and not in System.Runtime.CompilerServices.VisualC, but we don't want to expose
// these types publicly.
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("mscorlib, PublicKey=00000000000000000400000000000000")]
 
#pragma warning disable IDE0060
 
namespace System.Runtime.CompilerServices
{
    // Types used by the C++/CLI compiler during linking.
    [TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
    internal sealed class AssemblyAttributesGoHere
    {
        internal AssemblyAttributesGoHere()
        {
        }
    }
    [TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
    internal sealed class AssemblyAttributesGoHereS
    {
        internal AssemblyAttributesGoHereS()
        {
        }
    }
    [TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
    internal sealed class AssemblyAttributesGoHereM
    {
        internal AssemblyAttributesGoHereM()
        {
        }
    }
    [TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
    internal sealed class AssemblyAttributesGoHereSM
    {
        internal AssemblyAttributesGoHereSM()
        {
        }
    }
 
    [AttributeUsage(AttributeTargets.All)]
    internal sealed class DecoratedNameAttribute : Attribute
    {
        public DecoratedNameAttribute(string decoratedName) { }
    }
 
    // Indicates that the modified instance is pinned in memory.
    public static class IsPinned
    {
    }
 
    public static partial class IsBoxed
    {
    }
 
    public static partial class IsByValue
    {
    }
 
    public static partial class IsCopyConstructed
    {
    }
 
    public static partial class IsExplicitlyDereferenced
    {
    }
 
    public static partial class IsImplicitlyDereferenced
    {
    }
 
    public static partial class IsJitIntrinsic
    {
    }
 
    public static partial class IsLong
    {
    }
 
    public static partial class IsSignUnspecifiedByte
    {
    }
 
    public static partial class IsUdtReturn
    {
    }
 
    [AttributeUsage(AttributeTargets.Struct)]
    public sealed class HasCopySemanticsAttribute : Attribute
    {
        public HasCopySemanticsAttribute() { }
    }
 
    [AttributeUsage(AttributeTargets.Enum)]
    public sealed class ScopelessEnumAttribute : Attribute
    {
        public ScopelessEnumAttribute() { }
    }
 
    [AttributeUsage(AttributeTargets.Struct, Inherited = true)]
    public sealed class NativeCppClassAttribute : Attribute
    {
        public NativeCppClassAttribute() { }
    }
 
    [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
    public sealed class CppInlineNamespaceAttribute : Attribute
    {
        public CppInlineNamespaceAttribute(string dottedName) { }
    }
 
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Interface, AllowMultiple = true, Inherited = false)]
    public sealed class RequiredAttributeAttribute : Attribute
    {
        public RequiredAttributeAttribute(Type requiredContract) => RequiredContract = requiredContract;
 
        public Type RequiredContract { get; }
    }
 
    [AttributeUsage(AttributeTargets.Class |
                    AttributeTargets.Constructor |
                    AttributeTargets.Method |
                    AttributeTargets.Field |
                    AttributeTargets.Event |
                    AttributeTargets.Property)]
    [TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
    internal sealed class SuppressMergeCheckAttribute : Attribute
    {
        public SuppressMergeCheckAttribute()
        { }
    }
 
    // The CLR data marshaler has some behaviors that are incompatible with
    // C++. Specifically, C++ treats boolean variables as byte size, whereas
    // the marshaller treats them as 4-byte size.  Similarly, C++ treats
    // wchar_t variables as 4-byte size, whereas the marshaller treats them
    // as single byte size under certain conditions.  In order to work around
    // such issues, the C++ compiler will emit a type that the marshaller will
    // marshal using the correct sizes.  In addition, the compiler will place
    // this modopt onto the variables to indicate that the specified type is
    // not the true type.  Any compiler that needed to deal with similar
    // marshalling incompatibilities could use this attribute as well.
    //
    // Indicates that the modified instance differs from its true type for
    // correct marshalling.
    public static class CompilerMarshalOverride
    {
    }
}