为Xamarin项目编译C#库

时间:2016-03-23 14:09:25

标签: c# .net dll xamarin portable-class-library

我对Xamarin和整个C#/ .NET世界都很陌生。我计划使用Xamarin开发一个交叉平台应用程序,我需要创建库以与其他开发人员共享。我听说过PCL,但是有些限制让我有些不安。例如,我不能使用System.Net,即使我可以直接在iOS或Android项目中使用它。

我知道,再次举例来说,System.Net在iOS项目中的编译方式与在Android项目中的编译方式不同,这也是我无法在PCL中使用它的原因之一。但是,是否可以编写库,然后为每个平台编译它?

另一方面,共享项目让我这样做。但我无法将其作为图书馆分享。

所以,我尝试做的只是维护一个代码。写一次,编译两次,到处运行(在移动设备上,Windows Phone除外)。

所以,问题是:

有可能实现这样的目标吗?

4 个答案:

答案 0 :(得分:2)

在我们的桌面/ Android / IPhone项目中,我们采用了下一种方法:

假设我们有下一个项目

  • 德罗伊德
  • 触摸
  • Common.PCL
  • Common.Shared

Droid和Touch项目引用PCL和共享库。 接下来,在Common.PCL中创建一个接口

namespace Common.PCL
{
    public interface INetSpecificFactory
    {
        INetSpecific CreateSomething();
    }
}

并在共享

中实施
using Common.PCL;

namespace Common.Shared
{
    public class NetSpecificFactory : INetSpecificFactory
    {
        public INetSpecific CreateSomething()
        {
            ....
        }
    }
}

在共享库中添加autofac模块

using Common.PCL;
namespace Common.Shared
{
    public class AutofacModule : Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterType<NetSpecificFactory>().As<INetSpecificFactory>();
        }
    }
}

所以,我可以通过DI在我的PCL中使用INetSpecificFactory。它比使用链接文件更好(这是最初的选项之一)

答案 1 :(得分:1)

你可以做的是使用编译器指令来区分你正在开发的平台。不幸的是,这并没有减少为不同平台编写两次不同代码的事实,因为你需要不同的库在不同的平台上做同样的事情

使用这些指令,您可以为指定的平台编译每个或您自己的库。

答案 2 :(得分:0)

.NET Core和.NET Platform Standard即将推出,您应该查看它们。他们是取代PCL的未来。

我已经将#SNMP库部分移植到.NET Core RC1,并希望在RC2及其后来移植其余部分,

https://blog.lextudio.com/2016/03/how-to-port-snmp-library-to-net-core/

答案 3 :(得分:0)

您应该做的是为iOS和Android创建一个类库。然后,只在其中一个中编写代码,并将代码文件链接到另一个类库。这样,您编写一次代码,编译每个类库,并从相同的代码中获得2个DLL库。