【问题标题】:PortableDLL in MonoTouch and MonoDroidMonoTouch 和 MonoDroid 中的 PortableDLL
【发布时间】:2012-01-27 17:59:28
【问题描述】:

您能否在 Full.NET、WindowsPhone、Silverlight、MonoTouch、MonoDroid 之间共享 .NET DLL(使用 Visual Studio 以 VB.NET 编写)。 (未来还有 WinRT)

这可能吗?

我不打算分享 UI 代码,主要是模型,但可能还有一些 ViewModel(即使用 MVVM)

我想知道使用可移植 DLL 是否可行? 见http://visualstudiogallery.msdn.microsoft.com/b0e0b5e9-e138-410b-ad10-00cb3caf4981/

更多详情: 这不是我今天需要的东西。 我正在考虑为 .NET 4 重新构建用 VB.NET 编写的现有项目。这将在明年左右进行。只是想知道 Mono* 设备是否能够播放......

谢谢, 迈克·G

【问题讨论】:

  • Monotouch 编译为原生 ARM 代码并且不使用 CLR,因此它不能使用 .NET DLL。如果可以使用源代码...取决于您调用的 API。
  • @AnthonyLambert 最终的设备本机代码将是 ARM 二进制文件。所有其他步骤(和模拟器)都使用 .NET 程序集。事实上,即使是最终代码(一个设备)也会获得 .NET 程序集(但没有 IL),因为可以在元数据上使用反射,并且每个 MonoTouch 应用程序内部链接的运行时 (CLR) 都支持这一点。
  • 部分问题是 .NET DLL 是否可以在 MonoTouch 上使用。答案是否定的——你需要重新编译它们。与 Mac 上的 Mono 不同,例如我使用在 Win 上编译的 .NET DLL 而不重新编译它们。
  • 感谢 anothony,这是我正在寻找的信息,很遗憾您没有将其作为“答案”(我无法点击接受评论!)
  • 感谢大家的帮助!

标签: .net mvvm xamarin.ios xamarin.android


【解决方案1】:

对于常规的 .NET 程序集:是和否的组合。广泛地说,是的。但实际上,由于每个平台的限制,通常需要进行特定于平台的更改,这将阻止它运行程序集。 IDE 也不喜欢某些引用组合。 monodevelop IDE 在 IIRC 可接受的程序集方面更宽松。

Re 那些不起作用的东西;它可能是愚蠢的事情,比如Trace.WriteLine(...) 是否存在,或者(最近在“unity”上,Interlocked),或者它可能是平台限制(例如,你不能在 iOS 上做那么多的元编程)。

WinRT 为打破常规设置了一个新的“标准”,整个过程都发生了根本性的变化(Type 等基本原理已发生巨大变化)。

我的建议:按平台构建;否则,您将自己限制在最小公分母上,这不是可选的。充分利用每个平台上存在的内容,并在不存在的情况下进行备用。

【讨论】:

    【解决方案2】:

    您可以在不同平台的项目之间共享源代码。您只需创建一次文件并链接到针对不同平台的其他项目。见this

    您不能共享 DLL。例如,由于所选的目标平台,您不能在 Silverlight 项目中引用 .NET“桌面”程序集。

    【讨论】:

    • 共享代码是一个有趣的想法,但可能会变得复杂,因为会有多个 DLL,我预见到在不同类型的各个项目中管理代码文件之间的依赖关系会很头疼。其中一些将是公司范围的库代码,其中一些是特定于应用程序的代码等...但是感谢该链接,我将进行调查...
    • 虽然不是我想要的答案,但这是最有用的。在我将代码文件缓慢迁移到新的 MVVM 架构时,共享代码文件将在明年非常有用。也是 Mono* 产品必须使用的。
    【解决方案3】:

    是的,你可以! (tm)

    尽管有一些限制:您已经提到了与 UI 相关的内容,但您必须撒下更大的网:您的 DLL 可能不会使用,也可能不会引用 任何在其中一个平台上无法访问的东西。

    稍微调整一下时间,您甚至可以包含 .NET CF

    【讨论】:

    • 谢谢。您的意思是可以使用便携式 DLL 吗?
    • 这是不可能的 - 例如,您不能在 WPF 应用程序中引用 Silverlight DLL,反之亦然。
    • Karel,可移植 DLL 怎么样? (见我的链接)
    • @KarelFrajtak 正如我在答案中提到的,您可能不会参考 Silverlight、WPF 或类似产品。只要源不使用不可移植的东西,您可以使用$COMPILER /target:library mysource.xyz 编译的 DLL 将按给定的方式工作。
    • @Eugen,即使你不使用 UI 特定的东西,你也不能创建使用例如客户端配置文件 System.dll(即 Silverlight)的通用 DLL 并在 WPF 中使用它 - 你必须创建特定于平台的 DLL。
    猜你喜欢
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多