我们是否在 .NET MAUI 应用程序中创建/使用 an HttpClient,就像在 Web 或 API 应用程序中一样?具体来说,我将我的HttpClient' 添加到我的应用程序中Program.cs使用IHttpFactory-- 见下文:
builder.Services.AddHttpClient("NamedClient1", config =>
{
var url = currentState == "production"
? "https://my-production-url"
: "https://sandbox-url";
config.BaseAddress = new Uri(url);
});
Run Code Online (Sandbox Code Playgroud)
我理解 .NET MAUI 的想法是标准化我们处理事物的方式。当我尝试在 .NET MAUI 应用程序中添加该行时builder.Services,IntelliSense 并不建议AddHttpClient。
当我意识到没有直接的帮助器方法可以手动找到执行 toMaui.Graphics.Color或Android.Graphics.Colora 的转换器时,我正在创建一个自定义控件UIKIT.UIColor
我错过了什么吗?在 XF 中我们有类似的方法
XFColor.ToUIColor();
XFColor.ToAndroidColor();
Run Code Online (Sandbox Code Playgroud)
如果我遗漏了什么,请告诉我
为了限制标签的最大行数并指示文本截断,我们使用MaxLines和控件LineBreakMode的属性Label。
这在 Xamarin.Forms 中工作正常,但在 .NET MAUI 中不起作用。
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Maui_POC.MainPage">
<ScrollView>
<StackLayout
Spacing="25"
Padding="30,0"
VerticalOptions="Center">
<Image
Source="dotnet_bot.png"
SemanticProperties.Description="Cute dot net bot waving hi to you!"
HeightRequest="200"
HorizontalOptions="Center" />
<Label
Text="Hello, World!"
SemanticProperties.HeadingLevel="Level1"
FontSize="32"
HorizontalOptions="Center" />
<Label
Text="Welcome to .NET Multi-platform App UI, Cute dot net bot waving hi to you!"
SemanticProperties.HeadingLevel="Level2"
FontSize="18"
MaxLines="2"
LineBreakMode="TailTruncation"
HorizontalOptions="Center" />
<Button
x:Name="CounterBtn"
Text="Click me"
SemanticProperties.Hint="Counts the number of times you click"
Clicked="OnCounterClicked" …Run Code Online (Sandbox Code Playgroud) 我正在尝试设计一个界面,其中左侧有一个窗格,另一个窗格可以扩展以适应剩余空间。我尝试使用 执行此操作HorizontalStackLayout,但无论我做什么,如果不设置特定的 ,我都无法显示第二个窗格WidthRequest。这是我想要的外观的演示:
这就是我正在尝试的,但选项组合似乎不起作用:
<HorizontalStackLayout HorizontalOptions="FillAndExpand">
<BoxView BackgroundColor="Green" HorizontalOptions="Start" WidthRequest="200"></BoxView>
<BoxView BackgroundColor="Blue" HorizontalOptions="FillAndExpand"></BoxView>
</HorizontalStackLayout>
Run Code Online (Sandbox Code Playgroud)
我尝试过“开始”、“开始并展开”、“填充并展开”,但没有任何效果。我究竟做错了什么?
严重性代码说明项目文件行抑制状态错误清单文件“obj\Debug\net6.0-android\android-x86\staticwebassets.build.json”未找到。MauiApp3 C:\Program Files\dotnet\sdk\6.0.401\Sdks\Microsoft.NET.Sdk.Razor\targets\Microsoft.NET.Sdk.Razor.StaticWebAssets.targets 680
我正在努力让 Android 应用程序正常运行。我的 Windows 窗体将构建,但对于 arm、arm-64 和 x86-64,我也收到上述错误。我只是点击创建项目并尝试立即运行而不进行任何更改。
我的 android SDK 应该正确匹配。我有 31.2.1 Android 模拟器和 Android 11.0 (API 30) 操作系统 我创建的模拟器是 Pixel 5 11.0 Android。
有没有办法在 Windows 桌面上运行 exe,而无需执行安装程序和部署步骤?我注意到所需的所有内容最终都位于 bin\debug\win10-x64 下的 AppX 文件夹中,但由于 App Store 集成,它似乎只能通过开始菜单快捷方式启动。有没有办法手动创建快捷方式?我处于开发/质量保证环境中,我们共享并传递实用程序,每次运行安装程序都有点痛苦。
如果需要的话,我很乐意制作一个简单的注册表脚本。看起来好像添加了一个参考HKLM\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\Deployment\Package\*
详细信息似乎在这里设置:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModel\StateRepository\Cache\Application\Data\
我正在使用部分类在 .NET MAUI 应用程序中实现特定于平台的行为:
干:
public partial class MyServices
{
public partial void DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
Android/iOS/MacCatalyst/Windows/Tizen 特定实现都与此类似:
public partial class MyServices
{
public partial void DoSomething()
{
// Android/iOS/MacCatalyst/Windows/Tizen specific implementation
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,对于 MAUI 来说很正常(尽管特定于平台的实现可以以不同的方式完成,但是部分类方法对于 MAUI 来说很常见并且看起来很方便)。
现在,为了能够执行单元测试 (xUnit),需要将目标添加net7.0到SingleProject的.csproj<TargetFrameworks>文件中,如下所示:
<PropertyGroup>
<TargetFrameworks>net7.0;net7.0-android;net7.0-ios;net7.0-maccatalyst</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net7.0-windows10.0.19041.0</TargetFrameworks>
<!-- skipping irrelevant stuff here... -->
<OutputType Condition="'$(TargetFramework)' != 'net7.0'">Exe</OutputType>
<!-- skipping irrelevant stuff here... -->
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
这正如 Gerald Versluis 在他的YouTube 视频中所描述的那样。相关代码示例可以在这里找到:https://github.com/jfversluis/MauixUnitTestSample/blob/main/MauixUnitTestSample/MauixUnitTestSample.csproj#L5
这就是我的问题开始的地方:
由于net7.0目标和类的缺失实现 …
问题
我在使用 .NET Maui 部署到任何 iOS 模拟器时遇到问题。我收到以下错误:无法在设备“iOS 15.5 - iPhone 11”上安装应用程序“com.app.name”,simctl 返回退出代码 22。
Mac 构建服务器上的控制台报告“应用程序 Info.plist 不包含有效的 CFBundleVersion”。
信息。Mac 上部署文件夹中的列表显示以下内容: 捆绑包版本 = 1 捆绑包版本字符串(短)= 2.0
我尝试过的
我已经在 Visual Studio 中使用多个值和设置修改了版本和构建,但没有效果。我已使用“重置内容和设置”重置了模拟器。
其他注意事项
我可以使用相同的版本和构建设置,使用新的 .NET Maui 项目部署到同一个模拟器。尽管它只是加载启动画面然后黑屏,但它确实部署了。
这在某个时候是有效的,我不确定它具体是什么时候坏掉的。
我相信问题出在我的项目上,我只是不确定下一步该去哪里。任何关于下一步该去哪里的帮助将不胜感激。
[更新] Xamarin 与毛伊岛
22 年 10 月 12 日更新 - 我将当前的生产版本(使用 Xamarin Forms)与使用相同版本号的 Maui 版本进行了比较。Xamarin Forms 项目在 iOS 模拟器中运行。除了毛伊岛特有的内容之外,Info.plist 文件是相同的。
我在这里很绝望。我的截止日期即将到来,而我的 VisualStudio 现在完全混乱了。
直到今天早上,我的开发机器上的“Pixel5 - API 33”下有几个 MAUI 解决方案运行良好。
我的错 - 我有可怕的灵感接受 Visual Studio 2022 提出的更新,因此从 Visual Studio 版本 I-Don't-Remember-Which-Version-I-Had 到版本 17.8.0
现在,我以前的所有 MAUI 解决方案都将无法工作 - 它们无法在 Visual Studio 中作为 MAUI 应用程序运行。项目属性甚至不包含所需的部分。
我只能将旧的 MAUI 应用程序作为 Windows 机器运行,而不能运行其他任何东西。
我已经开始了一个新的虚拟 MAUI 项目,完全不做任何事情,你知道,模板,并且它具有与我之前的 MAUI 项目完全不同的属性。对于这个,我可以看到 Pixel5 - API 33、Windows 机器、Android 模拟器、iOS 本地设备、iOS 模拟器等 - 整个列表,你知道。
但对于我的“旧”MAUI 应用程序(从今天早上开始“旧”)我只能看到 Windows 机器。当然,它们的属性页面现在完全不同了。
发生了什么 ?Visual Studio 更新是否搞乱了我的解决方案?我确信有。我在 Notepad++ 中比较了两个 sln 文件,但找不到差异。
这就是我对 MAUI 应用程序的所有选择:
这些是所需的选择:
现在这些是我的项目属性:
这些是我应该拥有的项目属性: