如何摆脱警告 IL2080?

问题描述 投票:0回答:1

在下面的行代码中

ConstructorInfo constructorInfoObj = ValueType.GetConstructor(Type.EmptyTypes);

我收到这个警告:

ValueDescriptor.cs(58, 50): [IL2080] 'this' 参数不 满足 'DynamicallyAccessedMemberTypes.PublicParameterlessConstructor' 在 调用“System.Type.GetConstructor(Type[])”。场 'MigraDocCore.DocumentObjectModel.Internals.ValueDescriptor.ValueType' 没有匹配的注释。源值必须声明于 至少与目标位置上声明的要求相同 它被分配给。

这只有在我添加

时才会发生
<IsTrimmable>true</IsTrimmable>
<EnableTrimAnalyzer>true</EnableTrimAnalyzer>

到 .csproj 文件。

为什么会抛出这个警告,和 trimmable 有什么关系?
如何在不删除

IsTrimmable
并且不将
EnableTrimAnalyzer
设置为false的情况下解决这个问题?

这是上下文代码:

using System;
using System.ComponentModel;
using System.Collections;
using System.Diagnostics;
using System.Globalization;
using System.Reflection;

namespace MigraDocCore.DocumentObjectModel.Internals
{
    /// <summary>
    /// Base class of all value descriptor classes.
    /// </summary>
    public abstract class ValueDescriptor
    {
        public Type ValueType;

        internal ValueDescriptor(Type valueType)
        {
            this.ValueType = valueType;
        }

        public object CreateValue()
        {
            ConstructorInfo constructorInfoObj = ValueType.GetConstructor(Type.EmptyTypes);
            
            return constructorInfoObj.Invoke(null);
        }
        
        // [...]
    }
}

本课程的完整来源: https://github.com/ststeiger/PdfSharpCore/blob/master/MigraDocCore.DocumentObjectModel/MigraDoc.DocumentObjectModel.Internals/ValueDescriptor.cs#L58

c# visual-studio csproj roslyn-code-analysis
1个回答
0
投票

所以修复看起来像:

internal ValueDescriptor(string valueName, 
    [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)] Type valueType, 
    Type memberType,
    MemberInfo memberInfo,
    VDFlags flags)
{
    this.ValueType = valueType;
    // ...
}

/// <summary>
/// Type of the described value, e.g. typeof(Int32) for an NInt.
/// </summary>
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)]
public Type ValueType;

但是随后您需要将该属性传播到将要使用它的所有地方(属性和枚举也应该是公共的)。

© www.soinside.com 2019 - 2024. All rights reserved.