【问题标题】:Error after switching from .NET 3.5 to 4从 .NET 3.5 切换到 4 后出错
【发布时间】:2010-12-27 17:07:58
【问题描述】:
Application.Run(new Main());

这行给出 TypeInitializationException 在我从 3.5 切换到 4 框架后未处理。

这是为什么?

编辑:忘了说这是一个 Winforms C# 应用程序。

好的,我已经引用了 SQLite .NET。我在默认情况下在 .NET 4 上创建的项目上尝试了这个,没有给我任何错误,所以我认为这与 SQLite .NET 无关 http://sqlite.phxsoftware.com/

请注意 v2.0.50727 这是 DLL 的运行时版本,似乎是导致问题的原因。

  • 抛出:“A assemblagem de modo misto foi criada com base na versão 'v2.0.50727' do tempo de execução e não é possível carregá-la no tempo de execução 4.0 sem informações de configuração adicionais。” (System.IO.FileLoadException) 异常消息 = "A assemblagem de modo misto foi criada com base na versão 'v2.0.50727' do tempo de execução e não é possível carregá-la no tempo de execução 4.0 sem informações de configuração adicionais。" , 异常类型 = "System.IO.FileLoadException"

似乎他无法使用额外配置在 v4 上运行 DLL。

【问题讨论】:

  • 检查您的目标是 .NET Framework 4 而不是 .NET Framework 4 客户端配置文件。

标签: c# .net winforms


【解决方案1】:

查看 InnerException 获取 Main 类的静态构造函数失败的原因。它通常是由静态变量初始化器抛出异常引起的。

更新:我的葡萄牙语相当生疏,但看起来您使用的是用 C++/CLI 编写并针对 .NET 2.0 版本的 CLR 构建的程序集。 SqlLite 符合该描述。除了获取该程序集的更新之外,您还需要告诉 CLR 可以使用 .NET 4.0 版本的 CLR 加载程序集。项目 + 添加新项目,选择应用程序配置文件。让它看起来像这样:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

【讨论】:

  • 没什么可看的,您没有记录您在内部异常中发现的内容。一个完全疯狂的猜测是项目 + 属性,构建选项卡,平台目标 = x86。
  • 如果我将 DLL 包含在一个从一开始就是 .NET v4 的项目中,你如何解释它的工作原理?
  • 这看起来像是 x86 和 x64 版本之间的问题。
  • 我检查了一下,显然在转换时 app.config 是由 VS 创建的。在启动时添加 useLegacyV2RuntimeActivationPolicy="true" 解决了这个问题。非常感谢汉斯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 2017-12-17
  • 2011-02-15
  • 1970-01-01
相关资源
最近更新 更多