2009-11-12 79 views
3

假設我在Windows(Visual Studio 2008)下啓動了一個C#項目,並且想切換到Mono。我是否必須重新編譯我項目使用的所有依賴關係,例如NHibernate和每個外部依賴關係?單聲道項目中使用的所有依賴關係是否需要使用單聲道進行編譯

注意1:我問這個問題的原因是我在Ubuntu 9.10上使用MonoDevelop構建了一個項目,並且所有內容都像是魅力一樣,但是當我嘗試調試運行時,一些使用NUnit編寫的測試都只是停了下來。我必須取消正在運行的測試才能恢復MonoDevelop,並且沒有可用於查找問題的明確堆棧跟蹤或提示。所以我雖然也許我需要在Mono/Linux下編譯NHibernate(和其他依賴項)。

回答

6

不,您不需要重新編譯您在使用Mono編譯器編譯的代碼中引用的DLL。

但是,如果您的用戶在Mono而不是Microsoft.NET框架下執行該應用程序,並且該DLL包含Mono框架不支持的調用,則它們將遇到問題。

有一個Mono migration tool可以分析您的DLL,以查看它們是否包含Mono用戶不支持的任何調用。

同樣,使用Mono編譯器編譯的DLL可以被使用Microsoft編譯器編譯的代碼引用。

1

正如其他人所說,它們是二進制兼容的。

作爲一個例子,我最近需要使用Mono.Cecil.dll來避免我遇到的一些基於AppDomain反射的痛苦,並且能夠獲取由Mono編譯器構建的最新版本,並且它運行在我的。 NET 3.5運行時沒有問題。

當然,如果您打算在Linux或Windows以外的任何平臺上運行,則必須依賴那些正確編寫的程序集,因此使用Environment.NewLine,Path.Combine等代替Windows特定代碼。