假设我在Windows(Visual Studio 2008)下启动了一个C#项目,我想切换到Mono。我是否必须重新编译项目使用的所有依赖项,例如NHibernate和出现的每个外部依赖项?
注1:我问这个问题的原因是我在Ubuntu 9.10上使用MonoDevelop构建了一个项目,一切都像魅力一样但是当我尝试调试运行一些用NUnit编写的测试时,一切都冻结了。我必须取消正在运行的测试以使MonoDevelop备份,并且没有明确的堆栈跟踪或提示我可以用来查找问题。所以我可能需要在Mono / Linux下编译NHibernate(以及其他依赖项)。
答案 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特定代码。