0

我有两个几乎相同的 DLLS(用于同一个开源项目)——一个是预编译的,一个是由我自己的编译器(Xamarin Studio/Mono)在本地编译的。

我编译的 DLL 不适用于应该使用它的应用程序(而预构建的应用程序可以),所以我抓住了一个反编译器,看看我是否可以追踪任何差异(文件大小略有不同):

在此处输入图像描述

我怀疑参考差异可能是问题所在。TOP 一个是手动编译的 dll。我该如何解决这个问题并使引用与底部 dll 相同?我尝试在设置中使用 Mono/.NET 3.5 选项,但它导致在一堆地方抱怨默认参数说明符的错误,所以它似乎要编译 w/4.0。这是构建设置选项的上限(仅 Mono/.NET 4.0 选项有效):

在此处输入图像描述

是什么导致了程序集引用的差异?

4

1 回答 1

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 强大。

于 2013-05-12T03:55:58.013 回答