.net - Mono 多目标项目中的项目引用与文件链接

标签 .net mono xamarin.ios xamarin.android

我已经看到了一些关于这个问题的讨论,但我还没有看到明确的答案,尤其是对于 Android 版的 MonoTouch/Mono。

我正在开发一个基于Xamarin的多目标解决方案,自然我有很多通用代码。理想情况下,此代码将驻留在“通用”标准 .NET 类库项目(或项目)中。当我在特定于平台的项目中引用此项目时,确实收到警告“无法引用项目‘Common’。引用的项目针对不同的框架系列 (.NETFramework)”,但解决方案仍然编译成功。

本质上,我是在问当我的公共(public)代码处理多个目标时是否必须使用文件链接方法。更详细地说,我的问题是:

  1. 当我的“常见”项目仅引用 Mono* 目标支持的程序集时,上述方法是否有效?
  2. 如果上述答案是肯定的:假设我在我的“公共(public)”项目中引用了第 3 方 .NET 库(以 DLL 的形式,而不是项目),并且该库确实针对不同的目标有不同的程序集(但它没有引用 Mono* 不支持的程序集),我仍然可以引用该程序集的 Windows 版本并摆脱它吗?

最佳答案

有一种叫做“可移植类库”的东西已经推出了一段时间了。从 Visual Studio 2012(2012 年 9 月 12 日发布)开始,它现在是 Visual Studio 的一等公民,因此您可以在 Windows 8、Windows Phone、Silverlight、Windows <8 等之间共享库。

我希望 MonoDevelop 能够遵循这一轨道,以便即使与 Mono for Android 和 MonoTouch 也可以共享可移植库。

同时,您应该为每个平台创建一个项目,即使链接到相同的源文件。我发现这是最好的解决方案:

项目文件命名如下

MyCompany.MyProduct.MyModule.Ios.csproj
MyCompany.MyProduct.MyModule.Android.csproj
MyCompany.MyProduct.MyModule.WinPhone.csproj

所有项目中的命名空间都是MyCompany.MyProduct.MyModule。

您将项目中的相同 cs 文件链接到“共享”文件夹。

如果您需要在 Ios 版本中公开一些额外的类,只需将该文件添加到 Ios 项目(未链接)并将 .Ios 添加到命名空间,因为您希望跨平台命名空间不会与平台混淆具体的东西。

以下是不会破坏 Windows 路径长度问题的文件夹结构:

/MyCompany/MyProduct/

这里放置所有目标平台的解决方案文件,命名如下:

MyCompany.MyProduct.Ios.sln
MyCompany.MyProduct.Wpf.sln
...

每个程序集的文件夹:

/MyCompany/MyProduct/MyModule/

这里放置一个“共享”文件夹,并为每个平台放置一个文件夹,因此:

/MyCompany/MyProduct/MyModule/Shared/

仅限跨平台代码(从每个项目文件链接到)!!!

/MyCompany/MyProduct/MyModule/Android/
/MyCompany/MyProduct/MyModule/Ios/
/MyCompany/MyProduct/MyModule/WinPhone/
/MyCompany/MyProduct/MyModule/Wpf/
/MyCompany/MyProduct/MyModule/Mac/
...

这是您放置模块的每个平台的项目文件的位置,也是放置在特定平台上实现模块所需的任何特定于平台的 cs 文件的位置。

这对我们来说非常有效。

关于.net - Mono 多目标项目中的项目引用与文件链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12351247/

相关文章:

macos - 单声道无法在 OSX 上运行

xamarin.ios - 无法在设备上启动 Xamarin.iOS 应用

c# - Razor View 引擎何时将 IActionResult 转换为 HTML?

c# - 重新实例化线程

c# - C++/CLI 使用抽象方法从 native C++ 类继承并将其公开给 C#

c# - monotouch 中的 Mysql 连接问题

ios - Monotouch 中的默认 DNS 服务器

c# - 没有预期异常的测试

c# - MonoDroid GetSpans 最后一个参数

c# - 如何反序列化没有名称的 JSON 数组?