0

我的 .NET 程序集中有一个非公共类型,我从这个程序集中使用反射加载它。

这在调试版本中效果很好,但在发布版本中,链接器会删除这种类型,因为:

  • 它是内部的
  • 它没有在程序集的代码中引用

我可以为整个项目关闭此行为或将类型公开,但这不是我想要的。相反,我正在寻找一种方法来告诉链接器在任何情况下都添加类型。理想情况下,与System::Runtime::CompilerServices::DiscardableAttribute完全相反。

4

1 回答 1

1

最简单的方法是引用类型。(我认为有理由使用反射来查找类型,而不是直接引用它。)您可以在进行反射的方法中执行此操作,或者在任何公共类型的静态构造函数中执行此操作。无论您在哪里执行此操作,只要您记录正在发生的事情以及您这样做的原因,就应该没问题。

Type^ keepThis = InternalOnlyClass::typeid;in a method 可能就是您所需要的。如果编译器优化了该语句,那么internal: static Type^ keepThis = InternalOnlyClass::typeid;应该可以解决问题。

于 2012-08-14T17:18:51.233 回答