Xamarin 多框架目标

Posted

技术标签:

【中文标题】Xamarin 多框架目标【英文标题】:Xamarin Multiple framework target 【发布时间】:2021-12-07 12:03:12 【问题描述】:

早安

我正在为 Xamrin.Forms 构建包。我按照James Montenango

做的

这是我的 .csproj 的一些重要部分

<TargetFrameworks>netstandard2.0;Monoandroid10.0;Xamarin.ios10</TargetFrameworks>

  <ItemGroup>
    <Compile Include="**\*.shared.cs" />
  </ItemGroup>

  <ItemGroup Condition=" $(TargetFramework.StartsWith('netstandard')) ">
    <PackageReference Include="XTricks.Shared" Version="1.0.1" />
    <PackageReference Include="Xamarin.Essentials" Version="1.6.1" />
  </ItemGroup>

  <ItemGroup Condition=" $(TargetFramework.StartsWith('MonoAndroid')) ">
    <PackageReference Include="Xamarin.Forms" Version="5.0.0.2196" />
    <PackageReference Include="Xamarin.GooglePlayServices.Location" Version="118.0.0.1" />
    <PackageReference Include="XTricks.Shared" Version="1.0.1" />
    <PackageReference Include="Xamarin.Essentials" Version="1.6.1" />
    <Compile Include="**\*.android.cs" />
  </ItemGroup>

  <ItemGroup Condition=" $(TargetFramework.StartsWith('Xamarin.iOS')) ">
    <PackageReference Include="Xamarin.Essentials" Version="1.6.1" />
    <PackageReference Include="XTricks.Shared" Version="1.0.1" />
    <Compile Include="**\*.apple.cs" />
  </ItemGroup>

除了一件重要的事情外,一切正常。 我想为 Android 和 iOS 实现同一个类的两个实现。

为此,我声明和接口为:

IMyService.shared.cs

我创建了两个类,一个在 Android 文件夹中,名为: MyService.android.cs 实现了 IMyService.shared.cs 第二个在名为 MyService.apple.cs 的 Apple 文件夹中。

现在就像在上面的库中所做的那样,我想在共享代码中使用服务。

        private static IMyService Service
        
            get
            
#if NETSTANDARD1_0 || NETSTANDARD2_0
                return null;
#else
                return new MyService(); // And this code is red one. MyService cannot be found. 
#endif
            
        

基本上我被困在那里。有人知道如何前进吗?

【问题讨论】:

this article 有帮助吗?依赖注入是解决特定平台服务类的最简单方法。 @AndrewH 谢谢你,但它不是解决这个问题的方法 这正是您提出问题的解决方案:“我希望为 Android 和 iOS 提供同一类的两个实现。”如果您有其他问题,请更新问题。 【参考方案1】:

确保您的共享代码与 MyService 类具有相同的命名空间,然后您只需构建您的库。

【讨论】:

以上是关于Xamarin 多框架目标的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Visual Studio for Mac 在 Xamarin.Forms 中实现多目标?

如何指定引用的多目标项目的平台?

在 JetBrains Rider 中找不到目标框架

在 Rider IDE 中设置 Android Xamarin 解决方案未检测到框架

TeamCity 上的 Xamarin 表单:Xamarin.Forms 任务与目标不匹配

Xamarin图表开发基础教程OxyPlot框架