チュートリアル: C# または Visual Basic を使用して SDK を作成する
このチュートリアルでは、Visual C# を使用して単純な Math Library SDK を作成してから、その SDK を Visual Studio 拡張機能 (VSIX) としてパッケージ化する方法について説明します。 以下の手順を完了することになります。
前提条件
このチュートリアルを行うには、Visual Studio SDK をインストールする必要があります。 詳細については、「Visual Studio SDK」を参照してください。
SimpleMath Windows ランタイム コンポーネントを作成するには
メニュー バーで、 [ファイル]>[新規作成]>[プロジェクト] を選択します。
テンプレートの一覧で [Visual C#] または [Visual Basic] を展開し、[Windows ストア] ノードを選択してから、[Windows ランタイム コンポーネント] テンプレートを選択します。
[名前] ボックスで「SimpleMath」と指定してから、[OK] ボタンを選択します。
ソリューション エクスプローラーで [SimpleMath] プロジェクト ノードのショートカット メニューを開いてから、[プロパティ] を選択します。
Class1 という名前を 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 に含まれる構成は 1 つだけです。 この構成はリリース ビルドである必要があります。そうでないと、このコンポーネントを使用するアプリが Microsoft Store の認定に合格しません。
ソリューション エクスプローラーで [SimpleMath] プロジェクト ノードのショートカット メニューを開いてから、[ビルド] を選択します。
SimpleMathVSIX 拡張機能プロジェクトを作成するには
ソリューションの [SimpleMath] ノードのショートカット メニューで、[追加]>[新しいプロジェクト] を選択します。
テンプレートの一覧で [Visual C#] または [Visual Basic] を展開し、[機能拡張] ノードを選択してから、[VSIX プロジェクト] テンプレートを選択します。
[名前] ボックスで「SimpleMathVSIX」と指定してから、[OK] ボタンを選択します。
ソリューション エクスプローラーで、[source.extension.vsixmanifest] 項目を選択します。
メニュー バーで [表示]>[コード] の順に選択します。
既存の XML を次の XML に置き換えます。
<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
にします。前の 4 つの手順を繰り返します。今度は、最初のフォルダーの名前を
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] を展開してから、[Windows ストア] ノードを選択します。
[空のアプリケーション] テンプレートを選択し、プロジェクトに ArithmeticUIという名前を付けてから、[OK] ボタンを選択します。
ソリューション エクスプローラーで、[ArithmeticUI] プロジェクトのショートカット メニューを開いて、[追加]>[参照] を選択します。
参照の種類の一覧で、[Windows] を展開してから、[拡張機能] を選択します。
詳細ペインで、[WinRT Math Library] 拡張機能を選択します。
SDK に関する追加の情報が表示されます。 このチュートリアルで前に SDKManifest.xml ファイルで指定したように、[詳細情報] リンクを選択して
https://msdn.microsoft.com/
を開くことができます。[参照マネージャー] ダイアログ ボックスで [WinRT Math Library] チェック ボックスを選択してから、[OK] ボタンを選択します。
メニュー バーで、[表示]>[オブジェクト ブラウザー] を選択します。
[参照] の一覧で、[Simple Math] を選択します。
これで 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 キーを押してアプリを実行します。
アプリで任意の 2 つの数値を入力し、操作を選択してから、=[] ボタンを選択します。
正しい結果が表示されます。
拡張機能 SDK を正しく作成して使用しました。