使用.NET 4.5和混合程序集时出现未知异常

时间:2012-12-11 11:33:54

标签: c++ .net command-line-interface mixed

安装新的.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!"));
    }
};

祝你好运

迈克尔

2 个答案:

答案 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”动态强制转换“

祝你好运

迈克尔