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

问题描述 投票:0回答:1

我们开发了一个 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?

c# c++ dll c#-4.0 fortran
1个回答
2
投票

据我了解,这是不可能的。

问题是,您需要应用的配置设置 (

useLegacyV2RuntimeActivationPolicy
) 基本上是说“对于整个应用程序,无论程序集要求什么,都使用 CLR 4。

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


编辑:

经过进一步研究,在一些有限的场景下其实是有办法做到这一点的。我在我的博客上发布了相关内容,但基本上,您可以使用 CLR 托管 API 从库中获取一些设置权限。

© www.soinside.com 2019 - 2024. All rights reserved.