我对Xamarin和整个C#/ .NET世界都很陌生。我计划使用Xamarin开发一个交叉平台应用程序,我需要创建库以与其他开发人员共享。我听说过PCL,但是有些限制让我有些不安。例如,我不能使用System.Net,即使我可以直接在iOS或Android项目中使用它。
我知道,再次举例来说,System.Net在iOS项目中的编译方式与在Android项目中的编译方式不同,这也是我无法在PCL中使用它的原因之一。但是,是否可以编写库,然后为每个平台编译它?
另一方面,共享项目让我这样做。但我无法将其作为图书馆分享。
所以,我尝试做的只是维护一个代码。写一次,编译两次,到处运行(在移动设备上,Windows Phone除外)。
所以,问题是:
有可能实现这样的目标吗?
答案 0 :(得分:2)
在我们的桌面/ Android / IPhone项目中,我们采用了下一种方法:
假设我们有下一个项目
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库。