【发布时间】:2019-09-06 19:43:28
【问题描述】:
我有下面的结构,它正在为 COM 互操作编译。我收到以下构建警告:
warning : 类型库导出器警告处理 'MyNamespace.MyStruct.k__BackingField, 我的程序集名称'。 警告:公共结构包含一个 或更多将被导出的非公开字段。
但我看不出它指的是什么 - 根本没有非公共字段或字段。也许编译器正在生成我看不到的东西?这个警告是什么意思,如果我能做些什么来清理它?
这是正在构建的(稍微清理过的)代码:
[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 - 但不清楚这意味着什么。
【问题讨论】:
标签: c# com-interop tlbexp