C# System.Action在使用Mono时定义多次

C# System.Action在使用Mono时定义多次,c#,mono,action,monodevelop,C#,Mono,Action,Monodevelop,我一直在VisualStudio2010中从事winforms C项目,并刚刚开始使用Mono 2.10.8进行编译。将该项目导入Monodevelop 3.0.3.5非常有效,只要使用.NET运行时,它就可以顺利编译和运行 然而,当我尝试用Mono运行时编译它时,除了对System.Action和System.Func的两个引用之外,所有的东西都会编译-我得到错误CS0433,它被多次定义。我有对System.dll、System.Drawing.dll和System.Windows.Form

我一直在VisualStudio2010中从事winforms C项目,并刚刚开始使用Mono 2.10.8进行编译。将该项目导入Monodevelop 3.0.3.5非常有效,只要使用.NET运行时,它就可以顺利编译和运行

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

解决

看起来我做了一些相当愚蠢的事情,尽管我要责备MonoUI!这导致了冲突。这些项目的目标仍然是.NETFramework4客户端配置文件。我不知道您可以更改它们,因为在解决方案的选项上没有这样做的选项,但在每个项目上都有。我花了很长时间在包含的库中查找,发现v4.0 mscorlib.dll和v2.0 System.core.dll之间存在冲突。当我用v4替换v2.0 mscorelib.dll时,它编译得很好


然后我发现简单地将targeting改为Mono/.net4就可以解决这个问题。哦,好吧…

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

您使用什么来编译MonoXbuild、monodevelop或makefile

您使用哪个编译器dmcs

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


您是否在独立环境虚拟机上,或者mono和.NET在同一台PC上?

是否可以引用两次?如果您有一个指向Mono的引用,并且在Bin中复制了一个windows dll,那么可能会发生这种情况,我想…嗯-当我将引用添加到Mono时,它会自动在Bin目录中复制一个windows dll的本地副本。我尝试关闭“生成本地副本”选项,但它停止了此操作-但不幸的是,还是同一个多引用错误。我认为这可能与它有关-System。3.5 System.core.dll和4.0 mscorlib.dllun中都定义了操作。幸运的是,空/obj文件夹仍会发生此操作。我使用的是带有gmsc的monodevelop,而不是在一个独立的环境中-mono和.NET在同一台机器上windows 7。除了冲突,mono构建工作正常,运行正常。编辑-应该是dmcs,而不是gmcs。