我想使用反射来查看 .dll 中的所有类型,并为具有 ProtoContract 属性的任何类型生成 .proto 文件。我将使用 .proto 文件生成 C++ 类,以便我的 C# 代码可以与某些 C++ 互操作。此代码将通过 .dll 查找具有 ProtoContract 属性的类型,但我不知道如何将类型动态传递给 GetProto()。
//get assemblies in directory.
string file = @"C:\bungie\networking\shared\online\output\bin\Test\Xetrov\Xetrov.Core\Xetrov.Core.dll";
var assembly = Assembly.LoadFile(file);
foreach (var type in assembly.GetTypes())
{
if (!type.IsClass || type.IsNotPublic)
{
continue;
}
//Get all the attribute for the type
object[] attributes = type.GetCustomAttributes(true);
//Look for the ProtoContract attribute
if(attributes.Where(att => att is ProtoBuf.ProtoContractAttribute).Any())
{
// We have a type that protobuf can use, generate the .proto file
// How to tell it what type T is?? can't use variable type
string protoDefinition = ProtoBuf.Serializer.GetProto<T>();
}
}
有什么想法可以做到这一点吗?还是为所有类型生成 .proto 文件的更好方法?
谢谢!!