已修改为导出变量的C#exe上的程序集加载错误

已修改为导出变量的C#exe上的程序集加载错误,c#,reflection,nvidia,cil,optimus,C#,Reflection,Nvidia,Cil,Optimus,正在为Windows桌面开发C#.NET应用程序,该应用程序可进行3D渲染。在英伟达双卡视频(英特尔视频和英伟达集成)的笔记本电脑上,可能出现的问题是用户没有改变NVIDIA控制面板设置,更喜欢NVIDIA卡。因此,该应用程序可能会选择集成的视频,并表现不佳 ,这是一个非托管代码,可以在下面从主exe导出整数,显然英伟达软件将检测到这一点,然后强制应用程序运行NVIDIA卡,而用户不必更改控制面板设置。(要求他们这样做是不现实的,这会给应用程序性能留下不好的第一印象) 为了使用.NETC#可执行

正在为Windows桌面开发C#.NET应用程序,该应用程序可进行3D渲染。在英伟达双卡视频(英特尔视频和英伟达集成)的笔记本电脑上,可能出现的问题是用户没有改变NVIDIA控制面板设置,更喜欢NVIDIA卡。因此,该应用程序可能会选择集成的视频,并表现不佳

<英伟达代码>,这是一个非托管代码,可以在下面从主exe导出整数,显然英伟达软件将检测到这一点,然后强制应用程序运行NVIDIA卡,而用户不必更改控制面板设置。(要求他们这样做是不现实的,这会给应用程序性能留下不好的第一印象)

为了使用.NETC#可执行文件(显然它必须是主exe而不是DLL)执行上述操作,我尝试使用下面链接中概述的方法

这种方法是在编译后分解.exe,然后修改IL,在伪方法的开头插入下面的,然后重新组装修改后的IL,创建一个新的exe

.export [0] as NvOptimusEnablement
然后在运行时,它会做更多的事情来获取值集

Could not load file or assembly '...' or one of its dependencies.  Attempt to load an unverified executable with fixups (IAT with more than 2 sections or a TLS section.) (Exception from HRESULT: 0x80131019
搜索此错误表明,这是由托管程序集引起的,该程序集还包含非托管代码,这当然正是我们要做的()

还有其他人有这方面的经验吗?我猜是在该变通方法创建时,这一切都很有效,但现在可能程序集加载更严格了?有人知道变通方法吗

Could not load file or assembly '...' or one of its dependencies.  Attempt to load an unverified executable with fixups (IAT with more than 2 sections or a TLS section.) (Exception from HRESULT: 0x80131019