如何防止C ++ / CLI链接器删除未引用的内部类型?

时间:2012-08-14 14:12:56

标签: .net c++-cli visual-c++-2005

我的.NET程序集中有一个非公共类型,我在这个程序集中加载了反射。

这在调试版本中很有用,但在发布版本中,链接器会删除此类型,因为:

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

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

1 个答案:

答案 0 :(得分:1)

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

方法中的

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