是否需要使用mono编译单声道项目中使用的所有依赖项

时间:2009-11-12 00:34:01

标签: c# mono dependencies

假设我在Windows(Visual Studio 2008)下启动了一个C#项目,我想切换到Mono。我是否必须重新编译项目使用的所有依赖项,例如NHibernate和出现的每个外部依赖项?

注1:我问这个问题的原因是我在Ubuntu 9.10上使用MonoDevelop构建了一个项目,一切都像魅力一样但是当我尝试调试运行一些用NUnit编写的测试时,一切都冻结了。我必须取消正在运行的测试以使MonoDevelop备份,并且没有明确的堆栈跟踪或提示我可以用来查找问题。所以我可能需要在Mono / Linux下编译NHibernate(以及其他依赖项)。

3 个答案:

答案 0 :(得分:6)

不,您不需要重新编译在使用Mono编译器编译的代码中引用的DLL。

但是,如果您的用户在Mono而不是Microsoft.NET框架下执行应用程序并且DLL包含Mono框架不支持的调用,则它们将遇到问题。

有一个Mono migration tool可以分析您的DLL,看看它们是否包含Mono用户不支持的任何调用。

同样,使用Mono编译器编译的DLL可以使用Microsoft编译器编译的代码引用。

答案 1 :(得分:2)

请参阅Mono常见问题解答的Is Mono Binary Compatible with Windows?部分。

答案是mono是二进制兼容的,所以不需要重新编译。

答案 2 :(得分:1)

正如其他人所说,它们是二进制兼容的。

作为一个例子,我最近需要使用Mono.Cecil.dll来避免我遇到的一些基于AppDomain反射的痛苦,并且能够获取由Mono编译器构建的最新版本并且它在我的.NET上运行3.5运行时没有问题。

当然,如果您计划在Linux或Windows以外的任何其他设备上运行,则必须依赖正确编写的程序集,因此请使用Environment.NewLine,Path.Combine等代替Windows特定代码。