.net 如何预防C++/是否禁止CLI链接器删除未引用的内部类型?

.net 如何预防C++/是否禁止CLI链接器删除未引用的内部类型?,.net,c++-cli,visual-c++-2005,.net,C++ Cli,Visual C++ 2005,我的.NET程序集中有一个非公共类型,我正在加载该程序集中的反射 这在调试版本中非常有效,但在发布版本中,链接器会删除此类型,因为: 它是内部的 它未在程序集的代码中引用 我可以在整个项目中关闭此行为,或者将类型公开,但这不是我想要的。相反,我正在寻找一种方法,告诉链接器在任何情况下添加类型。理想情况下,与的完全相反。最简单的方法是引用类型。(我认为有理由使用反射来查找类型,而不是直接引用它。)您可以在进行反射的方法中或在任何公共类型的静态构造函数中执行此操作。无论你在哪里做这件事,只要你记

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

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

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

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

最简单的方法是引用类型。(我认为有理由使用反射来查找类型,而不是直接引用它。)您可以在进行反射的方法中或在任何公共类型的静态构造函数中执行此操作。无论你在哪里做这件事,只要你记录下发生了什么以及你为什么要这样做,一切都会好起来


Type^keepThis=InternalOnlyClass::typeid可能就是您所需要的全部。如果编译器优化了该语句,则
internal:static Type^keepThis=InternalOnlyClass::typeid应该可以做到这一点。

托管代码不能使用/OPT:REF。如果属性中引用了删除的类型,则链接器将生成无效程序集。这可能是一个bug,您可以将其发布到connect.microsoft.com。不要期待奇迹。