在将使用SlimDX并因此具有非托管代码的项目转换到.NET 4.0时,我遇到了以下错误:

混合模式程序集是针对版本"v2"构建的.0.50727',如果没有其他配置信息,则无法在4.0运行时中加载.

谷歌搜索给了我一个解决方案,就是把这个添加到应用程序配置中:

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

我的问题是,useLegacyV2RuntimeActivationPolicy人在做什么?我找不到任何关于它的文件.

推荐答案

经过一段时间(以及更多的搜索),我找到了Jomo Fisher的this blog entry个.

我们最近看到的一个问题是,由于对并行运行时的支持,.NET4.0改变了它绑定到旧的混合模式程序集的方式.例如,这些程序集是从C++\CLI编译的程序集.当前可用的DirectX程序集是混合模式.如果您看到这样的消息,则表明您遇到了问题:

Mixed mode assembly is built against version 'v1.1.4322' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.

[剪切]

对于应用程序来说,好消息是,您可以 Select 退回到.NET 2.0通过设置应用程序来绑定这些程序集.像这样的配置标志:

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

因此,运行时加载混合模式程序集的方式似乎已经改变.我找不到关于这一变化的任何细节,也找不到为什么要这样做.但是useLegacyV2RuntimeActivationPolicy属性恢复为CLR 2.0加载.

.net相关问答推荐

使用 DataDog 收集 OpenTelemetry 跟踪

Npgsql Minimum Pool Size 似乎没有被考虑在内

.Net MAUI Android 无法与 API localhost 对话

如何找到windows服务exe路径

判断 Windows 路径中是否存在可执行文件

process.WaitForExit() 异步

DbContext 丢弃更改而不释放

为什么不能使用 null 作为 Dictionary 的键?

使用泛型装箱和拆箱

.NET 世界是否有 Maven 替代方案或端口?

共享 AssemblyInfo 用于跨解决方案的统一版本控制

OpenCV的.Net(dotNet)包装器?

是否有用于 Windows / C# 开发的可嵌入 Webkit 组件?

如何创建只读依赖属性?

C#:获得完整的桌面大小?

如何退出所有正在运行的线程?

在 C# 中使用委托

.NET 委托类型的正确命名约定?

如何重新启动 WPF 应用程序?

在 try/catch/finally 中等待的一个很好的解决方案?