繁体   English   中英

在C ++代码中为Dll更改.NET 4运行时激活策略

[英]Changing .NET 4 Runtime Activation Policy For Dll Within C++ Code

我们开发了一个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框架)时,会抛出异常。

我怀疑需要应用以下配置,因为我们在创建概念证明时遇到了错误:

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

我正确地应用了上述概念验证,但这是在一个独立的控制台应用程序上。 由于非托管C ++程序非常庞大且每个模块的设置都不通用,因此我无法使用上述配置创建MyApplication.exe.config文件并将其调用。

我的问题是:是否可以将该配置应用于特定的DLL?

根据我的理解,这是不可能的。

问题是,您需要应用的配置设置( useLegacyV2RuntimeActivationPolicy )基本上是“对于整个应用程序,无论程序集请求是什么,请使用CLR 4。

如果您可以将它应用于单个DLL,那么您将违反这里的目标 - 因为目标是强制所有程序集使用CLR 4。


编辑:

经过进一步研究,实际上有一种方法可以在一些有限的情况下完成。 在我的博客上发布了这个 ,但基本上,你可以使用CLR Hosting API来获取一些从库中设置它的权限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM