【问题标题】:System.Action<> defined multiple times when using Mono使用 Mono 时多次定义 System.Action<>
【发布时间】:2015-11-20 19:28:33
【问题描述】:

我一直在 Visual Studio 2010 中处理一个 winforms C# 项目,并且刚刚开始使用 Mono 2.10.8 编译它。将项目导入 Monodevelop 3.0.3.5 效果很好,只要使用 .NET 运行时,它就可以毫无问题地编译和运行。

但是,当我尝试使用 Mono 运行时对其进行编译时,除了对 System.Action 和 System.Func 的(两个)引用之外,所有内容都会编译 - 我收到错误 CS0433,它被多次定义。我从 Mono 库的 4.0 版中引用了 System.dll、System.Drawing.dll 和 System.Windows.Forms.dll。我收集到 System.core 中的声明与其他地方的声明之间存在冲突。其他人有这个问题吗?我的整个项目的编译和运行都与此完全不同!

已解决

似乎我在做一些相当愚蠢的事情(尽管我要责怪 Monodevelop UI!),这导致了冲突。这些项目仍然设置为针对 .NET Framework 4 客户端配置文件。我没有意识到您可以更改它们,因为在解决方案的选项上没有这样做的选项,但是每个单独的项目都有 。我花了很长时间研究包含的库,发现 v4.0 mscorlib.dll 和 v2.0 System.core.dll 之间存在冲突。当我用 v4 替换 v2.0 mscorelib.dll 时,它编译得很好。

然后我发现只需将目标更改为 Mono / .NET 4 即可解决问题。哦,好吧……

【问题讨论】:

  • 你有可能被引用两次吗?如果您有一个指向 Mono 的引用,并且在 Bin 中复制了一个 windows dll,我认为可能会发生这种情况......
  • 嗯 - 当我添加对 Mono 的引用时,它会自动在 bin 目录中生成 windows dll 的本地副本。我尝试关闭 make local copy 选项并且它停止这样做 - 但不幸的是同样的多重引用错误。
  • 我认为这可能与它有关link - System.Action 在 3.5 system.core.dll 和 4.0 mscorlib.dll 中都定义了

标签: c# mono action monodevelop


【解决方案1】:

首先确保您已清除 bin /obj 文件夹。

你用什么来编译 mono(xbuild、monodevelop 还是 makefile?)?

你使用哪个编译器 dmcs?

这些引用(Func 和 Action)是 mscorlib 的一部分。 Mscorlib 在链接时添加。

您是在独立环境(虚拟机)还是单声道和 .NET 在同一台 PC 上?

【讨论】:

  • 不幸的是,空 /obj 文件夹仍然会发生。我在独立环境中使用带有 gmsc 的 monodevelop - mono 和 .NET 在同一台机器上(Windows 7)。除了冲突之外,单声道构建工作正常并且可以正常运行。
  • 编辑 - 应该是 dmcs,而不是 gmcs。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多