澳门新葡亰网址下载Visual Studio for Mac 简介

by admin on 2020年2月29日

5 月 9 日,微软宣布开源所有 Xamarin API
文档,API
文档根据知识共享署名 4.0 许可(Creative Commons Attribution 4.0
License)发布,同时任何相关源代码则基于 MIT
许可。该项目受微软开源行为准则(Microsoft’s Open Source Code of
Conduct)约束。

通过本文你将学会如下内容:

2016-12-13 Hutchinson 微软中国MSDN

其中 Xamarin.Android API 文档页面是基于 Android
开源项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5
Attribution License 中描述的条款使用。

1,如何使用Xamarin开发跨平台(Windows,Android,iOS)应用。

 

微软介绍,Xamarin API 文档是使用 mono 项目的开源 mdoc
工具链构建的,此工具链将内联代码注释转换为 XML
文档文件的专用目录。更新源程序集时,添加/删除的类和成员将同步到文档仓库。

2,如何使用微软的登录界面登入Microsoft账号。

在 11 月举行的 Connect(); 上,Microsoft 将推出 Visual Studio for Mac
预览版。这是一个激动人心的进展,将以移动为中心的 Xamarin Studio IDE
发展成为真正的移动先行和云优先的 .NET 和 C# 开发工具,并为 Mac 带来
Visual Studio 开发体验。

开源的这些 API 文档分别有单独的 GitHub repo:

3,如何使用Outlook邮箱API。

 

  • Xamarin.Forms API
    Docs
  • Xamarin.Android API
    Docs
  • Xamarin’s API Docs for iOS and
    Mac
  • SkiaSharp API Docs

4,了解MVVM思想。

Visual Studio 系列的新成员

从本质上说,Visual Studio for Mac 是与
Windows 版 Visual Studio 对应的 macOS 版本。如果你很喜欢 Visual Studio
开发体验,但又需要或想使用 macOS 的话,就应该不会感到陌生。

 

尽管其用户体验源于 Visual Studio 的启发,但在设计上看上去就像专为 macOS
量身打造的一样。与 Windows 版的 Visual Studio 类似,在不需要完整的 IDE
但需要轻型而丰富的独立源代码编辑器时,也可使用 Visual Studio Code
对其进行补充。

 

实际上,Visual Studio for Mac 还与 Visual Studio
系列中的同级产品有很多共同之处。例如,它也使用 Roslyn 编译器平台支持
IntelliSense 和重构功能;并同样在项目系统和生成引擎中使用
MSBuild;而且其源代码编辑器也支持 TextMate 捆绑包。

 

对于 Xamarin 和 .NET Core 应用,使用的是同样的调试器引擎,而且对于
Xamarin.iOS 和 Xamarin.Android 使用的是相同的设计器。

 

兼容性是 Visual Studio for Mac
的一个重要关注点。尽管它是一个新产品,暂时还无法支持所有 Visual Studio
项目类型,但对于确实可支持的那些项目类型,它使用相同的 MSBuild
解决方案和项目格式。

 

如果你的团队中既有人使用 macOs 又有人使用 Windows,或你自己在两个 OS
之间切换,则可以无缝地跨平台共享项目。无需执行任何转换或迁移操作。

澳门新葡亰网址下载, 

同时,微软还将相关项目从旧的 Xamarin 主页迁移到
docs.microsoft.com,地址分别为:

5,了解Prism框架。

移动先行和云优先开发

Visual Studio for Mac 支持的主要工作负载是通过 Xamarin 进行原生
iOS、Android 和 Mac 开发,以及通过 .NET Core 与 Azure
集成进行服务器开发。它提供了这两个开发场景所需要的所有工具,可帮助你开发当今用户所期望的众多原生移动应用体验,以及为这些体验提供强力支持的基于云的服务器后端。

所有这些开发都采用你熟悉并喜爱的 C# 语言,而且是最新的工作效率更高的
C# 7。

 

你不仅可获得编译型代码更好的性能、现代的类型安全语言所带来的工作效率、对每个平台独特功能的访问,而且还可以充分利用丰富生态系统中的库和工具。可以跨移动域和云域使用现有的体验,在客户端与服务器之间共享代码。对于一个解决方案中的所有项目,可以利用解决方案级的跨项目重构和代码导航。

 

在 Visual Studio for Mac 预览版中,C#
不是唯一支持的语言。对于你们当中的函数式程序员,它通过在 Visual Studio
中使用相同的 F# 编译器,可以提供卓越的 F# 支持。

 

  • Xamarin.Forms
  • Xamarin.Android
  • Xamarin.iOS &
    Xamarin.Mac
  • SkiaSharp

原代码地址:https://github.com/NewBLife/MyOutlook

iOS、Android 和 Mac

对于当今碎片化的移动市场,能够支持各种设备显得尤为重要。由于 Visual
Studio for Mac 是基于 Xamarin Studio 的,因此,对采用 Xamarin 平台基于
C# 开发 iOS、Android 和 Mac 应用的支持是久经考验的。你可以利用现有的
C# 经验和库,跨平台共享通用代码,完全访问本机
API,因此,可以打造出快速、可媲美本机应用体验的应用。

 

要实现更广泛的代码共享,可以使用跨平台的 Xamarin.Forms UI 库,Visula
Studio for Mac 提供了熟悉的基于 XAML 的开发环境,可以面向多平台,包括
iOS、Android、macOS 和通用 Windows 平台 (UWP) – 尽管 Visual Studio
当前仅支持 UWP 开发,并映射到每个平台上的本机 UI。

 

当需要更多控制时,可以将 Xamarin.Forms
与可直接访问的本机工具包混合搭配使用。另外,通过 NuGet
还提供了大量可用于 Xamarin
的库生态系统,其中包括平台特定的库、到本机代码的绑定和可移植的 .NET
Standard 库。

 

与 Visual Studio 一样,Visual Studio for Mac
也提供了拖放式设计器,可以在 iOS 和 Android 开发中使用它快速组装和微调
UI。

 

对于 Xamarin.Forms,它提供了丰富的 XAML IntelliSense
和并行实时预览功能,如图
1 所示。设计器和实时预览都可使用模拟器精确呈现应用将在实际运行设备上的显示效果,即使你的自定义控件也可以支持。

 

澳门新葡亰网址下载 1 
图 1 Xamarin.Forms XAML 实时预览

 

docs.microsoft.com 站点提供了与 Microsoft .NET
平台相同的演示、搜索、浏览、本地化和版本控制体验,开发者可以按平台和版本进行过滤,快速准确地获得命名空间、类名和成员签名的搜索结果。

Xamarin概述

为云量身定制

几乎每个移动应用的背后都有一个为其提供支持的服务,Visual Studio for Mac
支持最新的 ASP.NET Core Web
开发平台,让你能够轻松开发自己的应用服务。ASP.NET Core 运行于 .NET Core
上,后者是 .NET Framework 和运行时的最新发展。

 

它经过调优,可提供极快的性能,进行分解后,更便于小规模安装,且经过重新构思设计,可在
Linux 和 macOS 以及 Windows 上运行。

 

.NET Core
提供了前所未有的巨大灵活性,让你可以随时随地开发和部署自己的服务器应用程序,无论是在自己的数据中心还是
Microsoft Azure 等云平台上。由于 .NET Core 和 Xamarin
平台都是开源的,因此,不必担忧被供应商绑架。

 

此外,Visual Studio for Mac 对 .NET Core 项目的支持也使你能够编写 .NET
Standard 库,这是未来跨 .NET 平台共享代码的一种新方式。.NET Standard 库取代了可移植类库
(PCL),提供了覆盖范围更广的 API。由于 .NET Core 和 Xamarin
平台都是遵循 .NET Standard
的,因此,你可以使用它们在你的解决方案中和通过 NuGet
程序包管理器共享代码。

 

澳门新葡亰网址下载 2

Xamarin由开源项目Mono发展而来,是一套跨平台的移动开发工具,开发人员可以使用
C# 为iOS,Android, Mac以及Windows开发原生应用,比Hybrid
App性能更好。基本思想就是将与平台无关的逻辑代码使用C# Portable Class
Libraries类库实现,与平台相关部分单独实现。2015年被微软收购,现在Visual
Studio全面支持Xamarin开发并且免费。

熟悉的工作区

Visual Studio for Mac 工作区对于现有 Visual Studio
开发人员来说应该是熟悉的。首次打开时,会看到一个欢迎页面,其中包含最近打开的解决方案列表,开发人员新闻动态,以及可帮助你快速入门的其他信息。

 

要创建新解决方案,请转至“文件”菜单,选择“新建项目”,之后,将显示包含新解决方案的工作区。如图
2 所示,处于中心位置的是一个选项卡式源代码编辑器,周围是一些其他停靠窗口或“面板”,例如“解决方案”、“输出”、“属性”、“文档大纲”和“工具箱”。与
Visual Studio
一样,这种布局可高度定制,并可根据你当前是在编码、调试还是在使用拖放式设计器,进行自动切换。

 

澳门新葡亰网址下载 3 
图 2 Visual Studio for Mac 工作区

 

工具栏也是非常熟悉的,但也有一些明显的差别:

左侧是“运行”按钮、从中选择“活动配置”的下拉列表,以及从中选择“运行配置”和“目标设备”的下拉列表。对于跨平台移动开发,通过下拉列表能够轻松切换在上面测试或调试应用程序的设备或模拟器。“运行配置”与
Visual Studio
中的启动项目类似,除了能够切换运行的项目之外,还可以为运行选项集创建自定义名称。

 

工具栏的中心位置是通知区域,其中显示有关各种操作(例如,生成或还原 NuGet
程序包)的消息。当有操作正在运行时,通知区域中会出现一个取消按钮。有关软件更新的通知也显示在通知区域中。有些通知你可以直接单击,例如生成错误,可显示提供更多信息的面板。

 

在工具栏的右侧是全局搜索。除了帮助你在解决方案中查找命令和文件之外,它的
camelCase
筛选系统还使其成为快速激活命令或跳转至解决方案中的文件或类型的极好方法。它甚至还可以在解决方案中启动“在文件中查找”搜索,或打开
NuGet 程序包管理器以搜索包。

 

“解决方案”面板的工作方式与 Visual Studio
中的“解决方案资源管理器”基本相同,可以方便地浏览和管理解决方案以及其中项目和文件的结构。上下文菜单会根据在解决方案树中选择的项提供各种上下文特定的命令,例如,在项目中添加或删除文件,编辑项目引用,在文件夹中打开终端窗口,以及生成或调试特定项目。

 

“错误”面板会显示任何生成警告和错误,在拆分视图中还可以看到生成日志输出。与
Visual Studio
不同,没有一个统一的面板来显示所有类型的输出。例如,“应用程序输出”面板会显示运行或调试应用程序时来自应用的输出,NuGet
操作日志会显示在“NuGet
控制台”面板。“属性”面板会根据上下文显示当前专注并选中的任何内容的属性,可用于查看和更改解决方案面板中的文件生成操作。

 

源代码编辑器是整个 IDE 的中心,包含可从 Visual Studio
系列成员获得的所有功能。图 3 显示 .NET Core 项目中的 C# IntelliSense
语法突出显示。还有代码折叠、键入时用下划线实时进行错误提醒和建议提示、可配置的自动格式设置、代码导航命令和一系列强大的重构工具。

 

 澳门新葡亰网址下载 4
图 3 .NET Core 项目中的 IntelliSense

 

默认情况下,并不会启用编辑器的所有功能。可从 Mac
应用程序菜单中,打开“首选项”对话框,调整 Visual Studio for Mac
设置。这相当于 Visual
Studio“工具”菜单中的“选项”对话框,其中包含很多选项,供你按需自定义 IDE。

 

对单元测试使用 NUnit
进行支持,其他测试运行程序可通过扩展插入。程序集中发现的测试会显示在“单元测试”面板中,该面板可从“查看
| 面板”菜单进行访问。在源代码编辑器中也集成了 Git
版本控制,在编辑器底部显示有一行选项卡,可以访问当前文件的日志、差异和责任视图。

 

如果希望利用更多的提示和技巧快速进入状态,建议从 Xamarin Evolve 2016
观看我的“Become a Xamarin Studio Expert(成为 Xamarin Studio 专家)”讲座
(xmn.io/xs-expert),因为这个讲座内容正好适用于 Visual Studio for Mac。

 

(文/开源中国)    

澳门新葡亰网址下载 5

开源的内核

与 Xamarin Studio 一样,Visual Studio for
Mac 是基于开源的 MonoDevelop IDE(这也是 Microsoft
积极开发的开源项目)。它完全采用 C#
编写,具有强大的可扩展性模型,从简单的编辑器命令到全新的语言和项目类型,都可以通过扩展来添加功能性。即使已有核心功能,例如
C# 编辑,对 Xamarin.iOS、Xamarin.Android 和 ASP.NET Core
的支持也都是通过扩展实现。

 

与 Visual Studio 和 Visual Studio Code 一样,Visual Studio for Mac 中对
C# 的支持也是基于开源 Roslyn 编译器平台实现的。你可拥有与使用 Visual
Studio 时完全相同且熟悉的 IntelliSense
体验,并且支持编辑器中实时分析器和代码修复。Visual Studio for Mac
甚至还默认包括分析器和代码修复的 Refactoring Essentials 集合。

 

借助 TextMate 捆绑包提供语法突出显示和简单的 IntelliSense,Visual Studio
for Mac 可支持编辑各种语言。它包括了来自 Visual Studio Code 的大量开源
TextMate 捆绑包。

 

Xamarin.Forms
是由Xamarin提供的一个创建跨平台用户界面的开源库,通过Xamarin.Forms
可以一次编码生成基于各个移动平台(iOS, Android, Windows
Phone)的应用界面。

创建 ASP.NET Core 应用

为了展示使用 Visuao Studio for Mac
加速开发是多么容易,接下来我会创建一个简单的 ASP.NET Core
后端进行演示。它用于一个假想的“共享待办事项列表”移动应用,允许多个用户添加事项,只要其中任何一个用户发布事项,所有用户都可以看到。

 

请注意,我在撰写本文时使用的是 Visual Studio for Mac 预发布版,UI
的一些细节在发布版中可能会有所变动。但是,本文介绍的方法和概念仍是适用的。

安装并打开 Visual Studio for Mac
后,首先在欢迎页面上单击“新建解决方案”按钮,这会打开“新建项目”对话框。

 

之后,导航到“云”部分,选择“ASP.NET Core Web
应用程序”模板,单击“下一步”,然后选择“Web API”模板。“Web
API”模板会创建一个 RESTful Web
服务,这是适用于移动后端的首选接口方式,不过你也可以稍后向项目中添加视图以创建
Web 前端。

 

最后,我将项目命名为 HelloVSMac,并单击“创建”。Visual Studio for Mac
使用 .net 模板引擎创建项目,打开项目,并开始还原项目所依赖的 NuGet
程序包。

 

如果使用解决方案面板中项目上的“工具 |
编辑文件”上下文菜单在编辑器中打开项目文件,则会看到它是一个便于理解的基于
MSBuild 的简单项目文件。如果直接对其编辑并保存,则 IDE
将自动重新加载经过修改的版本。

 

接下来在解决方案面板中看一下项目,关键项包括:

 

程序包: 项目的 NuGet 程序包依赖项。生成项目的 ASP.NET Core、.NET Core
框架和 MSBuild 目标都通过 NuGet 程序包进行安装。

 

Program.cs: Web 应用的入口点。ASP.NET Core
应用是程序,因此,有一个主要方法入口点,用于在应用核心创建、生成和运行
WebHost。

Startup.cs: 用于定义传递至 WebHost 的 Startup
类。该类包含应用程序的初始化方法。

 

appsettings.json: 应用的配置设置。这是 ASP.NET web.config 的 ASP.NET
Core 等效项。

 

出于演示目的,所有这些将不做改动,下面看一下 Views 文件夹中的
ValuesController.cs 文件。该文件包含在 [Route(“api/[controller]”)]
路由上注册的 ValuesController 类。[controller]
是类名称的占位符,因此实际上是 api/values 路由。

 

我先定义一个非常简单的 ToDoItem 类和一个 ToDoList 存储类。ToDoList
是静态的,因此可以在请求之间共享。

 

在实际应用中,会使用一个数据库,但目前就先这样吧。我还将 controller
类重命名为 ToDoController(使路由变为 api/todo),将 Get 和 Post
方法连接至存储,并清除其他未使用的 controller 方法。结果如图 4 所示。

 

图 4 Controller 及其简单的共享待办事项列表存储

[Route("api/[controller]")]
public class ToDoController : Controller
{
  [HttpGet]
  public IEnumerable<ToDoItem> Get()
  {
    return ToDoList.GetAll();
  }
  [HttpPost]
  public void Post([FromBody]ToDoItem item)
  {
    ToDoList.Add(item);
  }
}

public class ToDoItem
{
  public string Title { get; set; }
}

public static class ToDoList
{
  static List<ToDoItem> list = new List<ToDoItem>();
  public static void Add(ToDoItem item)
  {
    lock (list) { list.Add(item); }
  }
  public static IEnumerable<ToDoItem> GetAll()
  {
    lock (list) { return list.ToArray(); }
  }
}

 

现在,我们实现了一个完整但非常小的 RESTful Web 服务。让我们来试一试。

我在 Post
方法中放置一个断点,然后开始调试应用。应用启动时,“输出”面板开始显示
ASP.NET Core 内置 Kestrel Web 服务器的输出,输出端口默认采用
5000,但它在收到请求之前不会执行任何其他操作。

 

可以打开 Web 浏览器,访问
127.0.0.1:5000/api/todo,但此刻返回的只是一个空数组。

 

澳门新葡亰网址下载 6
图 5 调试 .NET Core 项目

 

由于现在并没有一个针对该服务的移动客户端,因此,需要打开 macOs
终端应用,使用 curl 向应用发送一个 POST 请求:

 

$ curl -H "Content-type: application/json" -X POST -d '{ title: "build
  mobile app" }' 127.0.0.1:5000/api/todo

 

这会触发调试器中的断点。可以检查自动从请求的 JSON 主体解析并转换为
ToDoItem 对象的值。你会看到 Visual Studio for Mac
自动进入调试布局,并提供了所期望的所有调试器面板:
堆栈、局部、线程、断点等等。

现在,返回到终端,使用 curl 访问 Get 方法,你会看到 JSON
数组包含了刚刚添加的项。

$ curl 127.0.0.1:5000/api/todo
[{"title":"build mobile app"}]

 

下一步是生成移动应用,就请你自行进行探索吧。如需更深入了解有关 ASP.NET
Core 的信息,建议访问asp.net/get-started;如需了解有关 Xamarin
开发的更多信息,请访问 developer.xamarin.com,其中提供了大量有价值的资料供你参考。尽管有关
Visual Studio for Mac 的文档还不多,但 Xamarin Studio
文档恰好适用于大多数情况,Visual Studio 文档通常也适用。

澳门新葡亰网址下载 7

总结

我希望这篇简介能够经引发你试用 Visual Studio for Mac
的兴趣,使其成为你进行云端和移动端开发的优选 macOS IDE! 如果你有
Mac,建议从 VisualStudio.com 下载预览版,试试看,让我们知道你的看法。我们很高兴听到你的反馈,以帮助在预览版及其之后版本中提供指导。

 

Prism概述

Prism是8年前由微软创建的一套快速开发WPF的开源MVVM框架,目前已经移植到Github全面支持Xamarin跨平台开发。包含画面跳转,对话框,依赖注入等等很多功能,大幅度简化开发。MVVM思想也是微软发布WPF时提出来的一套全新思想:通过将UI设计与UI交互分离,使得界面的自动化测试成为可能。

澳门新葡亰网址下载 8

 

Microsoft账号登录

Xamarin跨平台Microsoft账号认证可以使用微软开源类库Microsoft Authentication Library
(MSAL)实现如下登录界面:

澳门新葡亰网址下载 9

在使用前需要前往Microsoft个人应用中心(https://apps.dev.microsoft.com)进行注册获取ApplicationID。

澳门新葡亰网址下载 10

 

OutLook API

使用微软公布的 Microsoft Graph
API可以访问多个 Microsoft 云服务中的数据,包括 Azure Active
Directory、作为 Office 365 一部分的 Exchange
Online、SharePoint、OneDrive、OneNote 和 Planner。

澳门新葡亰网址下载 11

本次主要使用:https://graph.microsoft.com/v1.0/me/messages 列出个人邮件。

 

最终效果图

跟随本文最后将做出如下APP应用:

澳门新葡亰网址下载 12

澳门新葡亰网址下载 13

Hands-ON

1,下载添加Prism Template
Pack模板

澳门新葡亰网址下载 14

2,从Prism模板创建Xamarin.Froms项目

澳门新葡亰网址下载 15

选择iOS,Android,UWP平台

澳门新葡亰网址下载 16

澳门新葡亰网址下载 17

 

3,为每个工程添加Microsoft.Identity.Client包

澳门新葡亰网址下载 18

提醒:

【无法安装程序包“Microsoft.Identity.Client
1.0.304142221-alpha”。你正在尝试将此程序包安装到目标为“.NETPortable,Version=v4.5,Profile=Profile111”的项目中,但该程序包不包含任何与该框架兼容的程序集引用或内容文件。有关详细信息,请联系程序包作者。】

以上错误解决办法:MyOutlook.csproj文件中的Profile111改成Profile7。

澳门新葡亰网址下载 19

4,添加Microsoft登录认证

Microsoft.Identity.Client默认将RefreshToken保存在本地文件中,下次认证时自动从文件读取判断。

public class AuthUtility
    {
        /// <summary>
        /// 用户认证
        /// </summary>
        /// <returns></returns>
        public static async Task<bool> AuthAsync()
        {
            try
            {
                // 已经认证的时候直接获取认证信息
                App.Authentication = await App.PCA.AcquireTokenSilentAsync(Constants.Scopes);
                return true;
            }
            catch
            {
                try
                {
                    // 没有认证的时候重新认证
                    App.Authentication = await App.PCA.AcquireTokenAsync(Constants.Scopes);
                    return true;
                }
                catch
                {
                    // 认证失败
                    return false;
                }
            }
        }
    }

调用这个方法时将自动出现如下登录界面:

澳门新葡亰网址下载 20

如果输入个人邮箱地址将自动跳转到如下登录界面:

澳门新葡亰网址下载 21

认证成功后将获得Token信息

澳门新葡亰网址下载 22

澳门新葡亰网址下载 23

5,添加退出逻辑

只需要执行如下代码即可清除认证信息

App.Authentication.User.SignOut();

澳门新葡亰网址下载 24

6,添加读取邮件信息逻辑

有了Token直接调用接口就能获得我们需要的全部信息,本次只读取邮件信息(https://graph.microsoft.com/v1.0/me/messages)。

public class EmailUtility
    {
        private static JsonSerializer serializer = new JsonSerializer()
        {
            MissingMemberHandling = MissingMemberHandling.Ignore,
            NullValueHandling = NullValueHandling.Ignore,
            ReferenceLoopHandling = ReferenceLoopHandling.Serialize
        };
        /// <summary>
        /// 执行API
        /// </summary>
        /// <param name="url">API地址</param>
        /// <param name="method">请求方式</param>
        /// <returns>请求结果</returns>
        private static async Task<byte[]> ExcuteApi(string url, HttpMethod method)
        {
            var httpclient = new HttpClient();

            using (var request = new HttpRequestMessage(method, url))
            {
                request.Headers.Authorization = new AuthenticationHeaderValue(App.Authentication.TokenType, App.Authentication.Token);

                using (var response = await httpclient.SendAsync(request).ConfigureAwait(false))
                {
                    if (response.IsSuccessStatusCode)
                    {
                        return await response.Content.ReadAsByteArrayAsync().ConfigureAwait(false);
                    }
                }
            }
            return null;
        }

        /// <summary>
        /// 邮件一览取得
        /// </summary>
        /// <returns>邮件一览</returns>
        public static async Task<List<Message>> GetListAsync()
        {
            var listData = await ExcuteApi(Constants.MESSAGES_LIST, HttpMethod.Get);
            if (listData?.Length > 0)
            {
                var listObject = JObject.Parse(System.Text.Encoding.UTF8.GetString(listData, 0, listData.Length));
                var list = new List<Message>();

                foreach (var item in listObject["value"])
                {
                    list.Add(item.ToObject<Message>(serializer));
                }
                return list;
            }
            else
            {
                return null;
            }
        }
    }

Http请求取得的数据经Json转换成自己需要的形式(Message)显示如下:

一览画面

澳门新葡亰网址下载 25

详细画面(邮件详细为Html文件内容,只需要用WebView显示就可以)

澳门新葡亰网址下载 26

本次就简单实现邮件取得和显示,后续有时间在慢慢添加。个人电脑性能有限ios模拟器没办法跑起来,本次就先演示UWP了。

总结

Xamarin开发跨平台应用门槛越来越低,唯独UI设计比较麻烦,每个平台显示多少还是有区别。看完本文希望大家对Xamarin开发充满信心,本人在日本微软合作公司,目前日本这边推广的很火,很多开发交流会。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图