我有两个几乎相同的DLLS(对于相同的开源项目) - 一个是预编译的,一个是由我自己的编译器(Xamarin Studio / Mono)在本地编译的。
我编译的DLL没有使用应该使用它的应用程序(虽然是预构建的那个),所以我抓住了一个反编译器,看看我是否可以追踪任何差异(文件大小略有不同) ):
我怀疑参考差异可能是问题所在。 TOP一个是手动编译的dll。如何解决这个问题并使引用与底部dll相同?我尝试在设置中使用Mono / .NET 3.5选项,但是在一堆地方出现错误抱怨默认参数说明符,所以看起来好像是意味着< / em>用4.0编译。这是构建设置选项的上限(只有Mono / .NET 4.0选项有效):
造成装配参考差异的原因是什么?
答案 0 :(得分:0)
Microsoft在其C#编译器中引入了多目标功能,因此C#4/5编译器(csc.exe)可以生成与.NET 2.0 / 3.0 / 3.5兼容的程序集。这就是预编译程序集的来源。
不幸的是,对于MonoDevelop来说,这是一个很长时间的问题,它不支持这样的多目标。例如,您不能选择Mono / .NET 3.5并期望Xamarin Studio / MonoDevelop使用最新的mcs编译器。它总是使用.NET 3.5配置文件,如果您使用任何C#4/5语法,则无法编译。
您可能会尝试在终端使用xbuild进行编译,因为xbuild支持多目标。但是,您可能会遇到xbuild问题,因为它还没有MSBuild那样强大。