我已经安装了 .NET 6(版本6.0.100-rc.1.21458.32)和 Visual Studio 2020 Preview(尽管它可能不是先决条件)。
我正在尝试调试 hello-world 应用程序,但收到有关 Java 的构建错误。
C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\31.0.100-rc.1.12\targets\Microsoft.Android.Sdk.Tooling.targets(20,5): error XA0031:
Java SDK 11.0 or above is required when using .NET 6 or higher.
Run Code Online (Sandbox Code Playgroud)
我已经安装了 Java 17 设置Path,并指向 Visual Studio 设置中的 Java 开发工具包位置(工具->选项->Xamarin->Android 设置)。因为这不起作用,我已将 JDK 位置设置为 Microsoft 的 openjdk,但它仍然不起作用。
这是怎么回事?
.NET MAUI 中的边框和框架之间的功能区别是什么?
根据文档,边界的摘要是
.NET 多平台应用程序 UI (.NET MAUI) 边框是一个容器控件,可在另一个控件周围绘制边框、背景或两者。一个边框只能包含一个子对象。如果要在多个对象周围放置边框,请将它们包装在容器对象(例如布局)中。
而一个Frame的总结如下
.NET 多平台应用程序 UI (.NET MAUI) Frame 类用于使用可配置颜色、阴影和其他选项的边框来包装视图或布局。框架可用于创建控件周围的边框,但也可用于创建更复杂的 UI。
听起来他们都对我做了同样的事情:在另一个视图周围绘制边框(无论是布局还是单个控件并不重要)。那么为什么会有两种不同的观点呢?我如何决定使用哪一个?
我试图了解如何在 .NET MAUI 应用程序中实现依赖注入。
我有一个服务类及其接口,用于处理我的 REST 调用,如下所示:
public class MyRestApiService : IMyRestApiService
{
public async Task<string> Get()
{
// Do someting
}
}
Run Code Online (Sandbox Code Playgroud)
然后我将其放入我的 DI 容器中MauiProgram.cs:
builder.Service.AddTransient<IMyRestApiService, MyRestApiService>();
Run Code Online (Sandbox Code Playgroud)
我还有一个将用于我的MainPage.xaml. 问题是,如果我对服务进行构造函数注入,XAML 似乎不喜欢它。
看起来MainPageViewModel像这样:
public class MainPageViewModel : BaseViewModel
{
IMyRestApiService _apiService;
public MainPageViewModel(IMyRestApiService apiService)
{
_apiService = apiService;
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试定义如下MainPageViewModel视图模型时MainPage.xaml,出现错误:
<ContentPage.BindingContext>
<vm:MainPageViewModel />
</ContentPage.BindingContext>
Run Code Online (Sandbox Code Playgroud)
错误如下:
MainPageViewModel 类型不能用作对象元素,因为它不是公共的,或者没有定义公共无参数构造函数或类型转换器。
如何将我的服务注入到我的视图模型中?
我正在尝试将 Xamarin.Forms 应用程序移植到 .NET MAUI,但遇到了 Device.StartTimer 的弃用,虽然这显然目前在 MAUI 中仍然有效,我有兴趣了解替代方案是什么?
目前我有一个包装类如下:
public void Start()
{
if (IsRunning)
{
return;
}
var wrapper = new TaskWrapper(Task, IsRecurring, true);
Tasks.Add(wrapper);
Device.StartTimer(Interval, wrapper.RunTask);
}
Run Code Online (Sandbox Code Playgroud)
我尝试用System.Timers.Timer替换它,但这导致了由于位于错误的线程上而无法修改 UI 元素的问题?计时器包装器本身在多个地方使用,因此在这种情况下我也不能使用绑定。
实际上是否有 Device.StartTimer 的直接替代品?非常感谢任何帮助。
在 Windows 窗体和 WPF 应用程序中,我们可以使用设置设计器文件来保存用户特定的设置。该文档仅提到 .Net Framework(例如 1 - 4),而不是 .Net Core 或 .Net(例如 5+)。我已经确认 .settings 格式和设计器仍然可以在使用 Visual Studio 2022 的 Windows 上的 .Net 6 WPF 中工作。
我的问题是,文件格式和设计器仍然是.Net MAUI.settings应用程序的推荐方法吗?它可以在所有平台(Windows、macOS、移动设备)上运行吗?如果没有,建议的方法是简单地编写自己的自定义文件来保存用户设置,如果是,该文件应该写入哪里?/ , 或者别的地方?Environment.SpecialFolder.ApplicationDataEnvironment.SpecialFolder.LocalApplicationData
我最近阅读了 .NET MAUI,但我对其与 Blazor 的用途感到困惑。
您可以使用 .NET MAUI 和 blazor 开发一个面向 Web、ios、android 和 windows 的网页吗?
例如,有效地开发网页以在任何其他设备上也作为应用程序工作,但在浏览器中以正常的 Blazor 方式工作(即使用 WASM)?
.net MAUI 最近在其最新版本之一中删除了日志记录。现在有什么替代方案以及应该如何实施?已经在网上查遍了,但找不到任何实现的日志架构的示例。尝试过log4net,NLog但最终没有成功设置其中任何一个。在线有 0 个用于在 MAUI 上设置任何日志记录的示例。
另外,在 MauiProgram 中看到了builder.Services.AddLogging()和builder.Logging.Services,它应该与依赖注入一起使用,但也找不到该实现的任何 Maui 示例。
现在应该如何在 MAUI 中设置基本日志记录?
.NET MAUI 提供了一个 FilePicker 来显示本机对话框,您可以在其中从设备中选取文件。
有没有办法显示保存文件的对话框?(您可以在其中选择路径并输入文件名,...)。
我在 .NET MAUI 文档中没有找到任何内容,并阅读了此StackOverflow 问题来实现FolderPicker,但这并不完全是我所需要的。
有没有办法为 MAUI 应用程序设置全局错误处理程序?当我从 Visual Studio 启动我的应用程序时,它当前运行良好。但是,在所有模拟器上,如果我尝试从 shell 的应用程序图标启动应用程序,它会启动然后退出(在 iOS 上,我会收到故障转储)。我不知道这发生在哪里,所以想尝试捕获全局处理程序。
我查看了 builder.ConfigureMauiHandlers,但它似乎只适用于控件。您不能使用 UnhandledExceptionEventHandler 类型,这是我认为合适的类型。
我还尝试了 AppDomain 处理程序,但它似乎也不起作用:
AppDomain ad = AppDomain.CurrentDomain;
ad.UnhandledException += Ad_UnhandledException;
Run Code Online (Sandbox Code Playgroud)
这可能吗?我只找到了 WCF 的示例,但它们不起作用。
我发现此链接中似乎有用的内容:
Xamarin Forms 中的键盘禁用了 Entry 控件
但它似乎只适用于 Xamarin Forms。我什至在我的 MAUI 应用程序中使用了它,但它根本没有效果!
我希望这样做的原因是因为我想启用编辑器字段的焦点,但不触发软键盘(对于条形码扫描仪字段)
谢谢。