我是一名经验丰富的 WPF 开发人员,试图通过 .Net Maui 进入移动开发领域。
我花了一整天的时间试图了解如何从 Maui.NativeLibraryInterop 存储库构建简单的示例。
我正在努力理解一个看似非常简单的问题:如何正确使用“using”指令。
我发现这个存储库,这个博客文章和这个浅薄的YouTube内容,所有这些都试图对这个主题进行介绍,但不幸的是,这甚至没有触及似乎是最微不足道的起点:如何编译这个东西并使其工作!
该解决方案由 3 个项目组成:Maui 一个和两个绑定模板,一个用于 Android,另一个用于 iOS/Mac。
我从 Android 开始...这一切都表明本机 java 项目应该使用 Android Studio 进行编译,瞧,一切都应该可以正常工作,我可以在下面的类中使用这样的“精简绑定” .
namespace MauiSample;
#if IOS || MACCATALYST
using NewBinding = NewBindingMaciOS.DotnetNewBinding;
#elif ANDROID
using NewBinding = NewBindingAndroid.DotnetNewBinding;
#elif (NETSTANDARD || !PLATFORM) || (NET6_0_OR_GREATER && !IOS && !ANDROID)
using NewBinding = System.Object;
#endif
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
// Call the native binding, which will append a platform specific string to the input string
var labelText = NewBinding.GetString("Community Toolkit");
newBindingSampleLabel.Text = "Hello, " + labelText;
}
async void OnDocsButtonClicked(object sender, EventArgs e)
{
try
{
Uri uri = new Uri("https://learn.microsoft.com/dotnet/communitytoolkit/maui/native-library-interop/get-started");
await Browser.Default.OpenAsync(uri, BrowserLaunchMode.SystemPreferred);
}
catch (Exception ex)
{
throw new Exception("Browser failed to launch", ex);
}
}
}
但是,根据官方 github 存储库示例,我在代码中的其他任何位置都找不到使用没有“.cs”文件的“using”指令的任何方法。
#if IOS || MACCATALYST
using NewBinding = NewBindingMaciOS.DotnetNewBinding;
#elif ANDROID
using NewBinding = NewBindingAndroid.DotnetNewBinding;
#elif (NETSTANDARD || !PLATFORM) || (NET6_0_OR_GREATER && !IOS && !ANDROID)
using NewBinding = System.Object;
#endif
这个“NewBindingMaciOS.DotnetNewBinding”和“NewBindingAndroid.DotnetNewBinding”来自哪里?好吧,因为这似乎是一个错误,我尝试按如下方式替换它,但没有成功......
#if IOS || MACCATALYST
using NewBinding = NewBinding.Android.Binding;
#elif ANDROID
using NewBinding = NewBinding.MaciOS.Binding;
#elif (NETSTANDARD || !PLATFORM) || (NET6_0_OR_GREATER && !IOS && !ANDROID)
using NewBinding = System.Object;
#endif
也许我错过了一些非常非常基本的东西,这阻碍了我前进。我很感激任何人可以提供帮助。
要在 .NET MAUI 平台中正确使用“using”指令,您需要了解如何管理命名空间和特定于平台的代码。以下是一些要点:
全局使用指令:.NET MAUI 包含几个隐式全局使用指令,这意味着您不需要手动添加它们。例如,默认情况下包含 Microsoft.Maui.Controls 命名空间。
特定于平台的代码:在编写特定于平台的代码时,经常需要使用条件编译。这涉及到在 #if 指令中添加针对特定于平台的命名空间的 using 指令。例如,如果您要实现自定义效果,则可能需要包含特定于平台的命名空间,例如 Microsoft.Maui.Controls.Platform。
条件编译示例:以下是如何在 .NET MAUI 项目中使用条件编译和 using 指令的示例:
#if ANDROID
using Android.Content;
using Android.Views;
#elif IOS
using UIKit;
#endif
using Microsoft.Maui.Controls;
这个“NewBindingMaciOS.DotnetNewBinding”在哪里? “NewBindingAndroid.DotnetNewBinding”来自哪里?
我强烈建议您查看原生库互操作入门中的文档,其中可能包含您正在寻找的一些解释。
根据文档,NewBindingAndroid.DotnetNewBinding 位于 CommunityToolkit/Maui.NativeLibraryInterop。