【问题标题】:Do all dependencies used in a mono project need to be compiled with mono单声道项目中使用的所有依赖项都需要用单声道编译吗
【发布时间】:2010-12-15 16:48:15
【问题描述】:

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

注意 1:我问这个问题的原因是我在 Ubuntu 9.10 上使用 MonoDevelop 构建了一个项目,一切都变得很迷人,但是当我尝试调试运行一些用 NUnit 编写的测试时,一切都冻结了。我必须取消正在运行的测试才能恢复 MonoDevelop,并且没有明确的堆栈跟踪或提示可以用来查找问题。所以我认为也许我需要在 Mono/Linux 下编译 NHibernate(和其他依赖项)。

【问题讨论】:

    标签: c# mono dependencies


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        当然,如果您计划在 Linux 或 Windows 以外的任何平台上运行,则必须依赖正确编写的这些程序集,因此使用 Environment.NewLine、Path.Combine 等而不是 Windows 特定代码。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多