我有下面的结构,它正在为 COM 互操作编译。我收到以下构建警告:
警告:类型库导出器警告处理“MyNamespace.MyStruct.k__BackingField,MyAssemblyName”。警告:公共结构包含一个或多个将被导出的非公共字段。
但我看不出它指的是什么——根本没有非公共领域或领域。也许编译器正在生成我看不到的东西?这个警告是什么意思,如果我能做些什么来清理它?
这是正在构建的(稍微清理过的)代码:
[Guid("....")]
[ComVisible(true)]
public struct MyStruct
{
public string StringA { get; set; }
public string StringB { get; set; }
public MyStruct(string a, string b)
{
StringA = a;
StringB = b;
}
public MyStruct(MyStruct other)
{
StringA = other.StringA;
StringB = other.StringB;
}
public override bool Equals(object obj)
{
if (!(obj is MyStruct)) return false;
var other = (MyStruct)obj;
return
other.StringA == this.StringA &&
other.StringB == this.StringB;
}
public static bool operator ==(MyStructa, MyStructb) => a != null && a.Equals(b);
public static bool operator !=(MyStructa, MyStructb) => !(a == b);
public override int GetHashCode() => ToString().GetHashCode();
public override string ToString() => $"{StringA}-{StringB}";
}
为了更好地衡量,这里是生成的 IDL:
typedef [uuid(....), version(1.0), custom(xxxx, MyNamespace.MyStruct)]
struct tagMyStruct {
LPSTR <StringA>k__BackingField;
LPSTR <StringB>k__BackingField;
} MyStruct;
由 OleView 生成。我可以看到它包含与k__BackingField
警告中相同的内容 - 但不清楚这意味着什么。