安装新的.Net Framework(版本4.5)时遇到问题。我正在开发一个通过本机代码访问的插件程序集。该库是使用Visual Studio 2010和.NET 4.0作为目标平台构建的。
以下代码段在.NET 4.5中引发异常,并且在.NET 4.0中正常运行。知道如何解决这个问题吗?
#pragma managed(push, off)
#pragma managed(push, on)
static bool ManagedTestFunction() {
return false;
}
#pragma managed(pop)
static void CheckIfManagedUnmanagedTransitionIsPossible()
{
try
{
ManagedTestFunction();
}
catch (...)
{
throw misc::mwException(0, _T("The program is not working if .NET Framework 4.5 is installed. Please revert to previous version .NET 4.0!"));
}
};
祝你好运
迈克尔
答案 0 :(得分:0)
我会查看最初抛出的异常 - 这应该可以为您提供有关代码在.NET Framework 4.5下不起作用的线索。
答案 1 :(得分:0)
最后我自己解决了这个问题。由于.NET 4.5中的一些优化,这可能是一个概念问题。 Concider以下示例:
// managed class
ref class A
{
}
// native class holding a reference to A
class B
{
msclr::gcroot<A^> m_refA;
};
当第一次跨越本机管理的边界时,新的.NET Framework会尝试解析本机类中引用的所有托管类型,无论它们是否实际使用。那时,尚无法订阅AppDomain.ResolveAssembly事件。如果框架无法解析类型,则会发生崩溃。
一个可能的解决方案是修改B类,以便它存储对System :: Object ^的引用,并使用“cli_safe((System :: Object ^)m_refA”动态强制转换“
祝你好运
迈克尔