使用 .NET 4.5 和混合程序集时出现未知异常
Unknown Exception when using .NET 4.5 and Mixed Assemblies
安装新的.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!"));
}
};
此致敬意
迈克尔
我会看看最初抛出的异常 - 这应该给你一个线索,为什么代码在.NET Framework 4.5下不起作用。
最后我自己解决了这个问题。由于 .NET 4.5 中的一些优化,这可能是一个概念问题。参见以下示例:
// 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)" 动态强制转换
此致敬意
迈克尔
相关文章:
- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- 继承期间显示未知行为的子类
- C++中的赋值发生,尽管右侧出现异常
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- 当类定义不可见时捕获异常
- 输入中的字符串数未知(以字母表示)
- 具有未知值时的时间复杂性
- 示例代码 (C++) 中的未知异常格式
- 使用 .NET 4.5 和混合程序集时出现未知异常
- boost::iostreams::mapped_file_sink 抛出未知异常
- 如何调试未知代码中的异常
- 未处理的异常,原始未知
- gcc/clang:错误:未知类名"异常";你是说'std::exception'
- .NET 4.0在XP上出现未知异常,但在Windows 7上运行良好
- 来自IWbemClassObject::Get的未知异常
- C++ -- 为什么"什么"在捕获范围内打印"未知异常"?
- c++时间未知异常