在下面的行代码中
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);
}
// [...]
}
}
所以修复看起来像:
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;
但是随后您需要将该属性传播到将要使用它的所有地方(属性和枚举也应该是公共的)。