{"id":8275,"date":"2017-06-13T02:54:46","date_gmt":"2017-06-13T10:54:46","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/vbteam\/?p=8275"},"modified":"2024-07-05T12:36:29","modified_gmt":"2024-07-05T19:36:29","slug":"visual-basic-and-cross-platform-mobile-apps-with-vb-xamarin-and-net-standard","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/vbteam\/visual-basic-and-cross-platform-mobile-apps-with-vb-xamarin-and-net-standard\/","title":{"rendered":"Visual Basic and Cross-Platform: Mobile Apps with VB, Xamarin, and .NET Standard!"},"content":{"rendered":"<p>How would you like it if you could create a Console App in Visual Basic and run it on Linux? Or running the same Xamarin.Forms-App written in Visual Basic on an iPhone, and Android and a Windows Tablet? Welcome to the world of cross-platform development, which from Visual Studio 2017 Update 3 on \u2013 thanks to .NET Standard and .NET Core \u2013 is now also available for Visual Basic! Well, currently the <i>preview<\/i> of Visual Studio 2017 lets you use this, and it is the best set of features that Update 3 (aka VS 15.3) will bring for us VBs: We are getting Visual Basic .NET Core and .NET Standard templates. Note though, that there are some limitations in this first version for Visual Basic regarding .NET Core and .NET Standard support compared to C#: There is no ASP.NET template for .NET Core yet, and Xamarin support when using .NET Standard is also limited. But we come to that later in more detail.<\/p>\n<p>Before we start with a sample to show off what we VBs can do with our new cross-platform powers, let\u2019s ask the team\u2019s .NET Core\/.NET Standard champion Immo Landwerth to explain what .NET Core and .NET Standard are with just one respective tweet:<\/p>\n<blockquote class=\"twitter-tweet\">\n<p lang=\"en\" dir=\"ltr\"><a href=\"https:\/\/twitter.com\/terrajobst\">@terrajobst<\/a> For <a href=\"https:\/\/twitter.com\/hashtag\/visualbasic?src=hash\">#visualbasic<\/a> guys, who just got <a href=\"https:\/\/twitter.com\/hashtag\/netstandard?src=hash\">#netstandard<\/a> and <a href=\"https:\/\/twitter.com\/hashtag\/dotnetcore?src=hash\">#dotnetcore<\/a> with VS 2017 U3, can you explain both in a respective tweet?<\/p>\n<p>&mdash; Klaus L\u00f6ffelmann (@loeffelmann) <a href=\"https:\/\/twitter.com\/loeffelmann\/status\/863872755413995520\">May 14, 2017<\/a><\/p><\/blockquote>\n<\/p>\n<blockquote class=\"twitter-tweet\">\n<p lang=\"en\" dir=\"ltr\">.NET Core is our new open source and cross platform .NET implementation. It supports command line tools and <a href=\"https:\/\/t.co\/a0lvit6464\">https:\/\/t.co\/a0lvit6464<\/a> apps.<\/p>\n<p>&mdash; Immo Landwerth (@terrajobst) <a href=\"https:\/\/twitter.com\/terrajobst\/status\/863873536888258560\">May 14, 2017<\/a><\/p><\/blockquote>\n<p>But, as I said, let\u2019s be clear about one thing:<\/p>\n<blockquote class=\"twitter-tweet\">\n<p lang=\"en\" dir=\"ltr\"><a href=\"https:\/\/twitter.com\/loeffelmann\">@loeffelmann<\/a> That&#039;s right, we don&#039;t have templates for <a href=\"https:\/\/t.co\/a0lvit6464\">https:\/\/t.co\/a0lvit6464<\/a> Core yet. AFAIK we plan on adding them except for Razor as that&#039;s C# tech.<\/p>\n<p>&mdash; Immo Landwerth (@terrajobst) <a href=\"https:\/\/twitter.com\/terrajobst\/status\/863879774304739328\">May 14, 2017<\/a><\/p><\/blockquote>\n<\/p>\n<p>If you want to learn more about .NET Core and .NET Standard, I suggest you to read Immo\u2019s excellent blog posts <a href=\"https:\/\/blogs.msdn.microsoft.com\/dotnet\/2016\/09\/26\/introducing-net-standard\/\">Introducing .NET Standard<\/a> and <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/introducing-net-core\/\">Introducing .NET Core<\/a>, and also watch some <a href=\"https:\/\/www.youtube.com\/playlist?list=PLRAdsfhKI4OWx321A_pr-7HhRNk7wOLLY\">awesome videos<\/a> about the topic on YouTube in addition!<\/p>\n<p><h3>Using Xamarin.Forms with .NET Standard in Visual Basic<\/h3>\n<p>With that, let\u2019s take a look what that means for a practical sample, and we concentrate in this example on .NET Standard, not on .NET Core. (If you want to see a dedicated .NET Core VB sample, tweet me @loeffelmann or find me at <a href=\"http:\/\/www.activedevelop.de\" target=\"_blank\" rel=\"noopener\">ActiveDevelop<\/a>). As you might know, Visual Studio supports cross-platform development on Android, iOS, Windows Universal Platform and the Mac in C# via Xamarin since Visual Studio 2015. Principally, the Xamarin tooling provides two options for creating apps for platforms other than Windows. <\/p>\n<ul>\n<li>You can create native apps for each platform which use the native APIs of each respective OS. You can only do this in C# though \u2013 Xamarin does not support Visual Basic in that scenario. The advantage is that you can really use every aspect of the target platform, and you do not have to make any compromises. The disadvantage: None of the front-end code is reusable on other platforms.<\/li>\n<li>You use <i>Xamarin.Forms<\/i> projects.<\/li>\n<\/ul>\n<p>Here is how that works in practice: In Xamarin.Forms there are \u2013 let\u2019s call them \u2013 Bootstrap-Projects for every platform (iOS, Android, UWP \u2013 later Xamarin will add WPF as a potential target platform as well). Those bootloader apps, which Visual Studio creates for you in C#, then initialize the Xamarin.Forms framework and utilize one shared cross-platform DLL for each platform which holds at least one so-called <i>ContentPage<\/i> with the initial UI. This <i>ContentPage<\/i> becomes the main <i>Activity<\/i> in Android, the main <i>Page<\/i> in Windows UWP and the main <i>ViewController<\/i> in iOS. So, this shared library holds the UI in a somewhat generic UI definition, and Xamarin.Forms translates these generic UI elements into the platform-native equivalents of each platform-specific app at runtime. Now, here is the important part for us VBs: Such a Xamarin.Forms library is by standard (for now, but subject to change in later versions!) a <i>Portable Class Library<\/i> project, but it can also be a .NET Standard class library project. And since Visual Basic supports .NET Standard from Visual Studio 2017 Update 3 on, we can have the lion share of a Xamarin.Forms app also in Visual Basic! Compared to C#, there is one drawback, though: While in C# a Xamarin.Forms .NET Standard DLL can define the UI for all apps via the markup language XAML, this scenario is so far not supported in Visual Basic. In VB, Xamarin.Forms libraries can define their UI only through code.<\/p>\n<p>The following screenshot points out the different project types of the solution in the solution explorer.<\/p>\n<p><a href=\"http:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/13_SolutionExplorer.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/13_SolutionExplorer-2.png\" alt=\"\" width=\"352\" height=\"252\" class=\"alignnone size-full wp-image-8345\" \/><\/a><\/p>\n<p>Now, let&#8217;s see how to make this work. If you happened to read the post about <a href=\"https:\/\/blogs.msdn.microsoft.com\/vbteam\/2017\/05\/21\/introduction-to-live-unit-testing-in-visual-basic\/\">Unit Testing with Visual Basic<\/a>, you already learned about the Roman Numerals App we built in that context as our demo example. Our goal now: Let\u2019s port this app to Xamarin.Forms and have it run on UWP, Android and iOS!<\/p>\n<p>Before we start coding, here are some Beta prerequisites.<\/p>\n<ul>\n<li>Visual Studio 2017 prior to Update 3 will <i>not<\/i> work, so you need to get the <a href=\"https:\/\/www.visualstudio.com\/vs\/preview\/\">Visual Studio Update 3 Preview Bits<\/a>. The installer allows you to install a dedicated Beta instance, which means that your already existing Community, Professional or Enterprise instances will not be harmed, and both installations can co-exist.<\/li>\n<li>Once the installer has finished, start the Visual Studio Preview and perform an update by clicking <i>Extension and Updates<\/i> in the <i>Tools<\/i> menu. Check for updates under <i>Updates\/Product updates<\/i>, and install them, if present.<\/li>\n<\/ul>\n<p>Now, be warned: As said before, when we develop the app(s), there will be C# projects involved, but we will just create them. We do not need to touch their code! All things <i>we<\/i> code will be pure VB. So, here we go:<\/p>\n<ul>\n<li>Create a new Project. In the <i>New Project<\/i> dialog, from the installed templates click <i>Cross-Platform<\/i> in the C# branch, and from the collection of available templates, pick <i>Cross Platform App (Xamarin.Forms or Native, Visual C#)<\/i>\n<a href=\"http:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/01_CreateNewXamarinProject01.png\"><img decoding=\"async\" src=\"\" alt=\"\" width=\"500\" height=\"323\" class=\"alignnone size-mediumlarge wp-image-8285\" \/><\/a><\/p>\n<li>Name the solution <i>VbAndXamarinForms<\/i>. Make sure that the checkbox <i>Create directory for solution<\/i> is checked.<\/li>\n<li>In the dialog, Visual Studio brings up next, click <i>Blank App<\/i>, and make sure that the option buttons <i>Xamarin.Forms<\/i> and <i>Portable Class Library (PCL)<\/i> are checked.\/((02_CreateNewXamarinProject02))<\/li>\n<li>Visual Studio creates a new solution now, which includes one iOS Project, an Android project, and a Universal Windows App project. For the latter, Visual Studio needs to know the minimum and the preferred Windows 10 version the app should run against. You can leave the default options in this case since we would not need any functionality of newer Windows 10 versions.<\/li>\n<p><a href=\"http:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/03_CreateNewXamarinProject03.png\"><img decoding=\"async\" src=\"\" alt=\"\" width=\"500\" height=\"201\" class=\"alignnone size-mediumlarge wp-image-8286\" \/><\/a><\/ul>\n<p>When Visual Studio sets up the Xamarin.Forms project, the actual front-end code will be hosted in a C# portable class library by default. We\u2019re going to replace this default PCL C# library by a Visual Basic .NET Standard library.<\/p>\n<p><strong>NOTE:<\/strong> Portable Class Libraries are the precursor of .NET Standard Libraries. In its current preview state, Visual Studio does not yet provide the Xamarin .NET Standard library templates for hosting the Xamarin.Forms based UI code \u2013 but setting up this library type manually already works! What\u2019s important though for this to succeed: The new library must address the Standard V1.4, so it is supported by iOS, Android and UWP apps (later versions of those platforms will support .NET Standard V2.0).<\/p>\n<ul>\n<li>To this end, let\u2019s first delete the existing Portable Class Library project. Find it in the solution explorer, open the context menu of the branch of project <i>VbAndXamarinForms<\/i>, and click <i>Remove<\/i>. But that\u2019s not enough: We also need to erase that project physically from the disk so that we can create a new (.NET Standard) project with that exact name. Hence, find that project on your disk with the file explorer, and delete it:<\/li>\n<p><a href=\"http:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/07_DeleteExistingPcl.png\"><img decoding=\"async\" src=\"\" alt=\"\" width=\"500\" height=\"220\" class=\"alignnone size-mediumlarge wp-image-8295\" \/><\/a><\/p>\n<li>Switch back to Visual Studio to create a new .NET Standard library now with that same name (and of course in the same directory) in Visual Basic. To that end, pick <i>File\/New\/Project<\/i>, and in the dialog, Visual Studio shows now, from the section <i>Visual Basic\/.NET Standard<\/i> chose the template <i>Class Library (.NET Standard)<\/i>.<\/li>\n<p><a href=\"http:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/04_CreateVbNetStandard.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/04_CreateVbNetStandard-1024x538.png\" alt=\"\" width=\"879\" height=\"462\" class=\"alignnone size-large wp-image-8326\" srcset=\"https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/04_CreateVbNetStandard-1024x538.png 1024w, https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/04_CreateVbNetStandard-300x158.png 300w, https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/04_CreateVbNetStandard-768x403.png 768w, https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/04_CreateVbNetStandard.png 1693w\" sizes=\"(max-width: 879px) 100vw, 879px\" \/><\/a><\/p>\n<li>Enter the project\u2019s name, pick the correct path and finally click OK, to create the project.<\/li>\n<li>In the next step, we need to make some modification to the project file of the library, which we just created. Open the context menu of the library project, and click <i>Open VbAndXamarinForms.vbproj<\/i>. This, by the way, is a new feature in Visual Studio 2017: You can edit the content of project files directly within Visual Studio, and you do not need to open that file with an external editor!<\/li>\n<\/ul>\n<p>Copy the content of the following listing to the project file, save the changes and close the document. With that, you are changing the Standard version to Version 1.4 for once, and secondly, this makes the project backward compatible for NuGet packages, which were originally created for Portable Class Libraries. This, by the way, will no longer be necessary, once the final templates and NuGet packages for Xamarin.Forms for Update 3 have been released.<\/p>\n<\/p>\n<ul>\n<li>Next, we need to add the Xamarin.Forms NuGet package to the library to leverage the Xamarin.Forms functionality. What this does is, amongst a lot of other things, to provide classes for the UI Elements (like <i>Button<\/i>, <i>TextBox<\/i> \u2013 which are called <i>Entries<\/i> in Xamarin.Forms \u2013 or <i>Labels<\/i>, which get translated to each control of their native respective UI platform: So, for UWP for example, a Xamarin.Forms <i>Label<\/i> will end up as a <i>TextBlock<\/i>, and a XamarinForms <i>Entry<\/i> will be surface as a <i>TextBox<\/i> control). To do this, open the context menu for the project, we\u2019ve just created, and click <i>Manage NuGet packages<\/i>.<\/li>\n<p><a href=\"http:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/06_AddingXamarinNuGet.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/06_AddingXamarinNuGet-1024x498.png\" alt=\"\" width=\"879\" height=\"427\" class=\"alignnone size-large wp-image-8336\" srcset=\"https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/06_AddingXamarinNuGet-1024x498.png 1024w, https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/06_AddingXamarinNuGet-300x146.png 300w, https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/06_AddingXamarinNuGet-768x374.png 768w\" sizes=\"(max-width: 879px) 100vw, 879px\" \/><\/a><\/p>\n<li>In the search field, type in &#8216;Xamarin&#8217;, find the package <i>Xamarin.Forms<\/i> in the list, and click on <i>Install<\/i>. Close that tab.<\/li>\n<li>Prepared with the infrastructure, let\u2019s implement the actual code for <i>VbAndXamarinForms<\/i>, which consists of three parts: An <i>App<\/i> class, which represents the generic frame and starting point for your actual application, a <i>MainView<\/i> class, which holds the code for the UI, and a class named <i>RomanNumeral<\/i>, which represents our Business Part.<\/li>\n<\/ul>\n<p>Let\u2019s rename the existing <i>Class1.vb<\/i> file to <i>App.vb<\/i>, and insert this code:<\/p>\n<p>This code does not do that much: At some point, it will be called by the bootstrap project of each individual platform app, and instantiate the <i>MainView<\/i> (the UI).<\/p>\n<p>This <i>MainView<\/i> again, needs to be placed in another code file named <i>MainView.vb<\/i>, which you need to add to the project. Here\u2019s the code:<\/p>\n<\/p>\n<ul>\n<li>And finally, we need our business logic: the algorithm which converts a decimal integer value to a Roman numeral. This one also goes into a dedicated code file names <i>RomanNumerals.vb<\/i>, and you find it here:<\/li>\n<\/ul>\n<p>There is only one step left to do. Since we erased the original Xamarin.Forms project (which was in C#, and which we replaced by our Visual Basic version), the references from the three main projects for each UI got also lost. So, we need to go through each of the platform-specific bootstrap projects and add the reference back to our VB Xamarin.Forms .NET Standard project.<\/p>\n<ul>\n<li>For that to end, open the branches for each platform-specific project, and find the references node.<\/li>\n<li>Click <i>Add Reference<\/i>. Open the branch <i>Projects<\/i> in the dialog, Visual Studio shows now, and check the Xamarin.Forms-.NET Standard project <i>VbAndXamarinForms<\/i>.<\/li>\n<p><a href=\"http:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/08_ReAddReferences.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/08_ReAddReferences.png\" alt=\"\" width=\"956\" height=\"505\" class=\"alignnone size-full wp-image-8296\" srcset=\"https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/08_ReAddReferences.png 956w, https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/08_ReAddReferences-300x158.png 300w, https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/08_ReAddReferences-768x406.png 768w\" sizes=\"(max-width: 956px) 100vw, 956px\" \/><\/a><\/p>\n<li>Click OK, to add the reference and close the dialog.<\/li>\n<li>Repeat those steps for each platform.<\/li>\n<\/ul>\n<p>If everything went smoothly so far, you should be ready to fire up the app. Let\u2019s start with the UWP app directly on our Windows machine, because that is the simplest way to test the app. For that, find the UWP project in the solution explorer, open the context menu on the project root, and click <i>Set as StartUp project<\/i>. Start the app.<\/p>\n<p><a href=\"http:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/RomanNumeralsUWP.gif\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/RomanNumeralsUWP-1.gif\" alt=\"\" width=\"638\" height=\"709\" class=\"alignnone size-full wp-image-8325\" \/><\/a><\/p>\n<p>If you have an Android phone or an Android tablet, let\u2019s see how easy it is to deploy the app on a physical Android machine. Two things are necessary to make this happen.<\/p>\n<ul>\n<li>You need to activate the Developer mode on your Android device.<\/li>\n<li>You need to connect the Android device to your developer machine via USB.<\/li>\n<\/ul>\n<p><strong>NOTE:<\/strong> Enable the Developer mode before you connect your Android device to our developer machine.<\/p>\n<ul>\n<li>To that end, on the Android device go to <i>Settings<\/i> and find the item <i>About device<\/i>.<\/li>\n<\/ul>\n<p><a href=\"http:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/12_EnableDeveloperMode.png\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/12_EnableDeveloperMode-1024x640-1.png\" alt=\"\" width=\"879\" height=\"549\" class=\"alignnone size-large wp-image-8306\" \/><\/a><\/p>\n<ul>\n<li>Now, tap seven times (yes, you read correctly!) on <i>Build number<\/i>. Your tablet or phone should comment that with what you see in the screenshot above.<\/li>\n<li>Connect your Android Phone or Tablet via USB to your PC.<\/li>\n<li>Make the Android project of the solution the start project.<\/li>\n<li>Open the <i>Run<\/i> (<i>Start app<\/i>) combo box in the Visual Studio toolbar, find the entry with your device\u2019s name, and select it.<\/li>\n<li>Click the <i>Play<\/i> button to compile, deploy, and start the app on your device:<\/li>\n<\/ul>\n<p><a href=\"http:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/RomanNumeralsAndroid.gif\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2017\/06\/RomanNumeralsAndroid-1.gif\" alt=\"\" width=\"500\" height=\"894\" class=\"alignnone size-full wp-image-8315\" \/><\/a><\/p>\n<p>And now: Happy cross-platform development in Visual Basic!<\/p>\n<p><strong>Tip:<\/strong> You can get the project directly from the VB Samples Git repository, <a href=\"https:\/\/github.com\/KlausLoeffelmann\/VBTeam17\">which you find here<\/a> (04 .NET Standard).<\/p>\n<p>And, as always: Comment and like this post! Tell others about the posts here on the VB blog! And follow me also on Twitter @loeffelmann, to receive the latest tips and news about .NET Development, Software Modernization, C# and of course Visual Basic Development!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>How would you like it if you could create a Console App in Visual Basic and run it on Linux? Or running the same Xamarin.Forms-App written in Visual Basic on an iPhone, and Android and a Windows Tablet? Welcome to the world of cross-platform development, which from Visual Studio 2017 Update 3 on \u2013 thanks [&hellip;]<\/p>\n","protected":false},"author":9483,"featured_media":8818,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[6,195],"tags":[31,51,76,91,110,111,161],"class_list":["post-8275","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to","category-visual-basic","tag-android","tag-cross-platform","tag-ios","tag-klaus-loeffelmann","tag-net-core","tag-net-standard","tag-uwp"],"acf":[],"blog_post_summary":"<p>How would you like it if you could create a Console App in Visual Basic and run it on Linux? Or running the same Xamarin.Forms-App written in Visual Basic on an iPhone, and Android and a Windows Tablet? Welcome to the world of cross-platform development, which from Visual Studio 2017 Update 3 on \u2013 thanks [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts\/8275","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/users\/9483"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/comments?post=8275"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts\/8275\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/media\/8818"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/media?parent=8275"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/categories?post=8275"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/tags?post=8275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}