我们开发了一个C#4.0模块,需要从非托管C ++程序(以及Fortran程序)访问。 DLL正确加载并且该方法可用于C ++程序,但在调用指向C#代码的方法时会抛出异常。对于可视化:
[Unmanaged C++ / Fortran Projects]
-> controller.dll (unmanaged C++ within the C++ project)
-> managed_wrapper.dll (managed C++ within the C# project)
-> C# 4.0 Project
当控制器尝试调用托管C ++时(使用.NET 4.0框架),会抛出异常。
我怀疑需要应用以下配置,因为我们之前在creating a proof of concept时遇到错误:
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
我正确地应用了上述概念证明,但这是在一个独立的控制台应用程序上。由于非托管C ++程序非常庞大且每个模块的设置都不通用,因此我无法使用上述配置创建MyApplication.exe.config
文件并将其称为日期。
我的问题是:是否可以将该配置应用于特定的DLL?
答案 0 :(得分:2)
根据我的理解,这是不可能的。
问题在于,您需要应用的配置设置(useLegacyV2RuntimeActivationPolicy
)基本上是“对于整个应用程序,无论程序集请求是什么,请改用CLR 4.
如果您可以将其应用于单个DLL,那么您将违反这里的目标 - 因为目标是强制所有程序集使用CLR 4。
编辑:
经过进一步研究,实际上有一种方法可以在一些有限的情况下实现。我posted about this on my blog,但基本上,您可以使用CLR Hosting API获取从库中设置此内容的权限。