演练:使用 C# 或 Visual Basic 创建 SDK
在本演练中,你将了解如何使用 Visual C# 创建简单的数学库 SDK,然后使用本演练将 SDK 打包为 Visual Studio 扩展 (VSIX)。 你将完成以下过程:
先决条件
要按照本演练的步骤操作,必须安装 Visual Studio SDK。 有关详细信息,请参阅 Visual Studio SDK。
创建 SimpleMath Windows 运行时组件
在菜单栏上,依次选择“文件”>“新建”>“项目”。
在模板列表中,展开 Visual C# 或 Visual Basic,选择“Microsoft Store”节点,然后选择“Windows 运行时组件”模板。
在“名称”框中,指定 SimpleMath,然后选择“确定”按钮。
在“解决方案资源管理器”中,打开 SimpleMath 项目节点的快捷键菜单,然后选择“属性”。
将 Class1.cs 重命名为 Arithmetic.cs,并将其更新为匹配以下代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WinRTMath { public sealed class Arithmetic { public float add(float firstNumber, float secondNumber) { return (firstNumber + secondNumber); } public float subtract(float firstNumber, float secondNumber) { return (firstNumber - secondNumber); } public float multiply(float firstNumber, float secondNumber) { return (firstNumber * secondNumber); } public float divide(float firstNumber, float secondNumber) { return (firstNumber / secondNumber); } } }
在解决方案资源管理器中,打开“解决方案’SimpleMath’”节点的快捷键菜单,然后选择“配置管理器”。
此时将打开“配置管理器”对话框。
在“活动解决方案配置”列表中,选择“发布”。
在“配置”列中,验证 SimpleMath 行是否设置为“发布”,然后选择关闭按钮接受更改。
重要
SimpleMath 组件的 SDK 仅包含一个配置。 此配置必须是发布版本,否则使用该组件的应用不会通过 Microsoft Store 的认证。
在解决方案资源管理器中,打开 SimpleMath 项目节点的快捷键菜单,然后选择“生成”。
创建 SimpleMathVSIX 扩展项目
在“解决方案’SimpleMath’”节点的快捷键菜单上,选择“添加”>“新项目”。
在模板列表中,展开 Visual C# 或 Visual Basic,选择“扩展性”节点,然后选择“VSIX 项目”模板。
在“名称”框中,指定 SimpleMathVSIX,然后选择确定按钮。
在解决方案资源管理器中,选择 source.extension.vsixmanifest 项。
在菜单栏上,选择“视图”>“代码”。
将现有 XML 替换为以下 XAML:
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011"> <Metadata> <Identity Id="SimpleMath" Version="1.0" Language="en-US" Publisher="[YourName]" /> <DisplayName>SimpleMath Library</DisplayName> <Description xml:space="preserve">Basic arithmetic operations in a WinRT-compatible library. Implemented in C#.</Description> </Metadata> <Installation Scope="Global" AllUsers="true"> <InstallationTarget Id="Microsoft.ExtensionSDK" TargetPlatformIdentifier="Windows" TargetPlatformVersion="v8.0" SdkName="SimpleMath" SdkVersion="1.0" /> </Installation> <Prerequisites> <Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[14.0,16.0]" /> </Prerequisites> <Dependencies> <Dependency Id="Microsoft.Framework.NDP" DisplayName="Microsoft .NET Framework" d:Source="Manual" Version="4.5" /> </Dependencies> <Assets> <Asset Type="Microsoft.ExtensionSDK" d:Source="File" Path="SDKManifest.xml" /> </Assets> </PackageManifest>
在解决方案资源管理器中,选择 SimpleMathVSIX 项目。
在菜单栏上,依次选择“项目”>“添加新项”。
在“常用项”列表中,展开“数据”,然后选择“XML 文件”。
在“名称”框中,指定
SDKManifest.xml
,然后选择添加按钮。在解决方案资源管理器中,打开
SDKManifest.xml
的快捷键菜单,选择“属性”,然后将“包括在 VSIX 中”属性的值更改为 True。用下列 XML 替换该文件的内容:
C#
<FileList DisplayName="WinRT Math Library (CS)" MinVSVersion="11.0" TargetFramework=".NETCore,version=v4.5" AppliesTo="WindowsAppContainer" SupportsMultipleVersions="Error" MoreInfo="https://msdn.microsoft.com/"> </FileList>
Visual Basic
<FileList DisplayName="WinRT Math Library (VB)" MinVSVersion="11.0" TargetFramework=".NETCore,version=v4.5" AppliesTo="WindowsAppContainer" SupportsMultipleVersions="Error" MoreInfo="https://msdn.microsoft.com/"> </FileList>
在解决方案资源管理器中,打开 SimpleMathVSIX 项目的快捷键菜单,选择“添加”,然后选择“新文件夹”。
将该文件夹重命名为
references
。打开“引用”文件夹的快捷键菜单,选择“添加”,然后选择“新文件夹”。
将子文件夹重命名为
commonconfiguration
,在其中创建子文件夹,并将其命名为neutral
。重复前面的四个步骤,这次将第一个文件夹重命名为
redist
。项目现在包含以下文件夹结构:
references\commonconfiguration\neutral redist\commonconfiguration\neutral
在解决方案资源管理器中,打开 SimpleMath 项目的快捷键菜单,然后选择“在文件资源管理器中打开文件夹”。
在文件资源管理器中,导航到 bin\Release 文件夹,打开 SimpleMath.winmd 文件的快捷键菜单,然后选择“复制”。
在解决方案资源管理器中,将文件粘贴到 SimpleMathVSIX 项目中的 references\commonconfiguration\neutral 文件夹中。
重复上一步,将 SimpleMath.pri 文件粘贴到 SimpleMathVSIX 项目中的 redist\commonconfiguration\neutral 文件夹中。
在解决方案资源管理器中,选择 SimpleMath.winmd。
在菜单栏上,选择“查看”>“属性”(键盘:选择 F4 键)。
在“属性”窗口中,将“生成操作”属性更改为“内容”,然后将“包含在 VSIX 中”属性更改为 True。
在解决方案资源管理器中,对 SimpleMath.pri 重复此过程。
在解决方案资源管理器中,选择 SimpleMathVSIX 项目。
在菜单栏上,依次选择“生成”>“生成 SimpleMathVSIX”。
在解决方案资源管理器中,打开 SimpleMathVSIX 项目的快捷键菜单,然后选择“在文件资源管理器中打开文件夹”。
在文件资源管理器中,导航到 \bin\Release 文件夹,然后运行
SimpleMathVSIX.vsix
以安装它。选择安装按钮,等待安装完成,然后重启 Visual Studio。
创建使用类库的示例应用
在菜单栏上,依次选择“文件”>“新建”>“项目”。
在模板列表中,展开 Visual C# 或 Visual Basic,然后选择“Microsoft Store”节点。
选择“空白应用”模板,将项目命名为 ArithmeticUI,然后选择确定按钮。
在解决方案资源管理器中,打开 ArithmeticUI 项目的快捷键菜单,然后选择“添加”>“引用”。
在引用类型列表中,展开 Windows,然后选择“扩展”。
在详细内容窗格中,选择“WinRT 数学库”扩展。
此时将显示有关 SDK 的其他信息。 可以选择要打开的“详细信息”链接以打开
https://msdn.microsoft.com/
,如本演练前面的 SDKManifest.xml 文件中指定的那样。在“引用管理器”对话框中,选择“WinRT 数学库”复选框,然后选择确定按钮。
在菜单栏上,选择“查看”>“对象浏览器”。
在“浏览”列表中,选择“简单数学”。
现在可以浏览 SDK 中的内容。
在解决方案资源管理器中,打开 MainPage.xaml 并将其内容替换为以下 XAML:
C#
<Page x:Class="ArithmeticUI.MainPage" IsTabStop="False" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:SimpleMath" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <TextBox x:Name="_firstNumber" HorizontalAlignment="Left" Margin="414,370,0,0" TextWrapping="Wrap" Text="First Number" VerticalAlignment="Top" Height="32" Width="135" TextAlignment="Center"/> <TextBox x:Name="_secondNumber" HorizontalAlignment="Left" Margin="613,370,0,0" TextWrapping="Wrap" Text="Second Number" VerticalAlignment="Top" Height="32" Width="135" TextAlignment="Center"/> <Button Content="+" HorizontalAlignment="Left" Margin="557,301,0,0" VerticalAlignment="Top" Height="39" Width="49" Click="OnOperatorClick"/> <Button Content="-" HorizontalAlignment="Left" Margin="557,345,0,0" VerticalAlignment="Top" Height="39" Width="49" Click="OnOperatorClick"/> <Button Content="*" HorizontalAlignment="Left" Margin="557,389,0,0" VerticalAlignment="Top" Height="39" Width="49" Click="OnOperatorClick"/> <Button Content="/" HorizontalAlignment="Left" Margin="557,433,0,0" VerticalAlignment="Top" Height="39" Width="49" Click="OnOperatorClick"/> <Button Content="=" HorizontalAlignment="Left" Margin="755,367,0,0" VerticalAlignment="Top" Height="39" Width="49" Click="OnResultsClick"/> <TextBox x:Name="_result" HorizontalAlignment="Left" Margin="809,370,0,0" TextWrapping="Wrap" Text="Result" VerticalAlignment="Top" Height="32" Width="163" TextAlignment="Center" IsReadOnly="True"/> </Grid> </Page>
Visual Basic
<Page x:Class="ArithmeticUI.MainPage" IsTabStop="False" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:SimpleMath" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <TextBox x:Name="_firstNumber" HorizontalAlignment="Left" Margin="414,370,0,0" TextWrapping="Wrap" Text="First Number" VerticalAlignment="Top" Height="32" Width="135" TextAlignment="Center"/> <TextBox x:Name="_secondNumber" HorizontalAlignment="Left" Margin="613,370,0,0" TextWrapping="Wrap" Text="Second Number" VerticalAlignment="Top" Height="32" Width="135" TextAlignment="Center"/> <Button Content="+" HorizontalAlignment="Left" Margin="557,301,0,0" VerticalAlignment="Top" Height="39" Width="49" Click="OnOperatorClick"/> <Button Content="-" HorizontalAlignment="Left" Margin="557,345,0,0" VerticalAlignment="Top" Height="39" Width="49" Click="OnOperatorClick"/> <Button Content="*" HorizontalAlignment="Left" Margin="557,389,0,0" VerticalAlignment="Top" Height="39" Width="49" Click="OnOperatorClick"/> <Button Content="/" HorizontalAlignment="Left" Margin="557,433,0,0" VerticalAlignment="Top" Height="39" Width="49" Click="OnOperatorClick"/> <Button Content="=" HorizontalAlignment="Left" Margin="755,367,0,0" VerticalAlignment="Top" Height="39" Width="49" Click="OnResultsClick"/> <TextBox x:Name="_result" HorizontalAlignment="Left" Margin="809,370,0,0" TextWrapping="Wrap" Text="Result" VerticalAlignment="Top" Height="32" Width="163" TextAlignment="Center" IsReadOnly="True"/> </Grid> </Page>
更新 MainPage.xaml.cs,使之与以下代码匹配:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
namespace ArithmeticUI
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page
{
public static string operation = null;
public MainPage()
{
this.InitializeComponent();
}
/// <summary>
/// Invoked when this page is about to be displayed in a Frame.
/// </summary>
/// <param name="e">Event data that describes how this page was reached. The Parameter
/// property is typically used to configure the page.</param>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
/// <summary>
/// Sets the operator chosen by the user
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnOperatorClick(object sender, RoutedEventArgs e)
{
operation = (sender as Button).Content.ToString();
}
/// <summary>
/// Calls the SimpleMath SDK to do simple arithmetic
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnResultsClick(object sender, RoutedEventArgs e)
{
try
{
float firstNumber = float.Parse(this._firstNumber.Text);
float secondNumber = float.Parse(this._secondNumber.Text);
SimpleMath.Arithmetic math = new SimpleMath.Arithmetic();
switch (operation)
{
case "+":
this._result.Text = (math.add(firstNumber, secondNumber)).ToString();
break;
case "-":
this._result.Text = (math.subtract(firstNumber, secondNumber)).ToString();
break;
case "*":
this._result.Text = (math.multiply(firstNumber, secondNumber)).ToString();
break;
case "/":
this._result.Text = (math.divide(firstNumber, secondNumber)).ToString();
break;
default:
this._result.Text = "Choose operator";
break;
}
}
catch
{
this._result.Text = "Enter valid #";
}
}
}
}
选择 F5 键运行应用。
在应用中,输入任意两个数字,选择一个操作,然后选择 = 按钮。
此时将显示正确的结果。
已成功创建和使用扩展 SDK。