Share via


연습: C# 또는 Visual Basic을 사용하여 SDK 만들기

이 연습에서는 Visual C#을 사용하여 간단한 수학 라이브러리 SDK를 만든 다음, SDK를 VSIX(Visual Studio 확장)로 패키지하는 방법을 알아봅니다. 다음 절차를 완료합니다.

필수 조건

이 연습을 수행하려면 Visual Studio SDK를 설치해야 합니다. 자세한 내용은 Visual Studio SDK를 참조하세요.

SimpleMath Windows 런타임 구성 요소를 만들려면

  1. 메뉴 모음에서 파일>새로 만들기>프로젝트를 선택합니다.

  2. 템플릿 목록에서 Visual C# 또는 Visual Basic을 확장하고 Windows 스토어 노드를 선택한 다음 Windows 런타임 구성 요소 템플릿을 선택합니다.

  3. 이름 상자에 SimpleMath를 지정한 다음 확인 단추를 선택합니다.

  4. 솔루션 탐색기에서 SimpleMath 프로젝트 노드의 바로 가기 메뉴를 열고 속성을 선택합니다.

  5. 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);
            }
        }
    }
    
  6. 솔루션 탐색기에서 솔루션 'SimpleMath'의 바로 가기 메뉴를 열고 구성 관리자를 선택합니다.

    구성 관리자 대화 상자가 열립니다.

  7. 활성 솔루션 구성 목록에서 릴리스를 선택합니다.

  8. 구성 열에서 SimpleMath 행이 릴리스로 설정되어 있는지 확인한 다음 닫기 단추를 선택하여 변경 내용을 적용합니다.

    Important

    SimpleMath 구성 요소에 대한 SDK에는 하나의 구성만 포함됩니다. 이 구성은 릴리스 빌드여야 합니다. 그렇지 않으면 구성 요소를 사용하는 앱이 Microsoft Store의 인증을 통과하지 못합니다.

  9. 솔루션 탐색기에서 SimpleMath 프로젝트 노드의 바로 가기 메뉴를 열고 빌드를 선택합니다.

SimpleMathVSIX 확장 프로젝트를 만들려면

  1. 솔루션 'SimpleMath' 노드의 바로 가기 메뉴에서 추가>새 프로젝트를 선택합니다.

  2. 템플릿 목록에서 Visual C# 또는 Visual Basic을 확장하고 확장성 노드를 선택한 다음 VSIX 프로젝트 템플릿을 선택합니다.

  3. 이름 상자에서 SimpleMathVSIX를 지정한 다음 확인 단추를 선택합니다.

  4. 솔루션 탐색기에서 source.extension.vsixmanifest 항목을 선택합니다.

  5. 메뉴 모음에서 보기>코드를 차례로 선택합니다.

  6. 기존 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>
    
  7. 솔루션 탐색기에서 SimpleMathVSIX 프로젝트를 선택합니다.

  8. 메뉴 모음에서 프로젝트>새 항목 추가를 선택합니다.

  9. 공통 항목 목록에서 데이터를 확장한 다음 XML 파일을 선택합니다.

  10. 이름 상자에서 SDKManifest.xml을 지정한 다음 추가 단추를 선택합니다.

  11. 솔루션 탐색기에서 SDKManifest.xml의 바로 가기 메뉴를 열고 속성을 선택한 다음 VSIX에 포함 속성의 값을 True로 변경합니다.

  12. 파일의 내용을 다음 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>
    
  13. 솔루션 탐색기에서 SimpleMathVSIX 프로젝트의 바로 가기 메뉴를 열고 추가를 선택한 다음 새 폴더를 선택합니다.

  14. 폴더 이름을 references으로 바꿉니다.

  15. 참조 폴더의 바로 가기 메뉴를 열고 추가를 선택한 다음 새 폴더를 선택합니다.

  16. 하위 폴더 이름을 commonconfiguration로 바꾸고, 하위 폴더 내에 하위 폴더를 만들고, 그 하위 폴더의 이름을 neutral로 지정합니다.

  17. 이전 네 단계를 반복합니다. 이번에는 첫 번째 폴더의 이름을 redist로 변경합니다.

    이제 이 프로젝트에는 다음 폴더 구조가 포함됩니다.

    references\commonconfiguration\neutral
    redist\commonconfiguration\neutral
    
  18. 솔루션 탐색기에서 SimpleMath 프로젝트의 바로 가기 메뉴를 연 다음, 파일 탐색기에서 폴더 열기를 선택합니다.

  19. 파일 탐색기에서 bin\Release 폴더로 이동하고 SimpleMath.winmd 파일의 바로 가기 메뉴를 연 다음 복사를 선택합니다.

  20. 솔루션 탐색기에서 SimpleMathVSIX프로젝트의 references\commonconfiguration\neutral 폴더에 파일을 붙여 넣습니다.

  21. 이전 단계를 반복하여 SimpleMath.pri 파일을 SimpleMathVSIX프로젝트의 redist\commonconfiguration\neutral 폴더에 붙여 넣습니다.

  22. 솔루션 탐색기에서 SimpleMath.winmd를 선택합니다.

  23. 메뉴 모음에서 보기>속성을 선택합니다(키보드: F4 키 선택).

  24. 속성 창에서 빌드 작업 속성을 콘텐츠로 변경한 다음, VSIX에 포함 속성을 True로 변경합니다.

  25. 솔루션 탐색기에서 SimpleMath.pri에 대해 이 프로세스를 반복합니다.

  26. 솔루션 탐색기에서 SimpleMathVSIX 프로젝트를 선택합니다.

  27. 메뉴 모음에서 빌드>SimpleMathVSIX 빌드를 선택합니다.

  28. 솔루션 탐색기에서 SimpleMathVSIX 프로젝트의 바로 가기 메뉴를 연 다음, 파일 탐색기에서 폴더 열기를 선택합니다.

  29. 파일 탐색기에서 \bin\Release 폴더로 이동한 다음 SimpleMathVSIX.vsix를 실행하여 설치합니다.

  30. 설치 단추를 선택하고 설치가 완료되기를 기다린 다음, Visual Studio를 다시 시작합니다.

클래스 라이브러리를 사용하는 샘플 앱을 만들려면

  1. 메뉴 모음에서 파일>새로 만들기>프로젝트를 선택합니다.

  2. 템플릿 목록에서 Visual C# 또는 Visual Basic을 확장한 다음 Windows 스토어 노드를 선택합니다.

  3. 비어 있는 앱 템플릿을 선택하고, 프로젝트 이름을 ArithmeticUI로 지정한 다음 확인 단추를 선택합니다.

  4. 솔루션 탐색기에서 ArithmeticUI 프로젝트의 바로 가기 메뉴를 연 다음 추가>참조를 선택합니다.

  5. 참조 형식 목록에서 Windows를 확장한 다음 확장을 선택합니다.

  6. 세부 정보 창에서 WinRT 수학 라이브러리 확장을 선택합니다.

    SDK에 대한 추가 정보가 나타납니다. 이 연습의 앞부분에서 SDKManifest.xml 파일에 지정한 대로 추가 정보 링크를 선택하여 https://msdn.microsoft.com/을 열 수 있습니다.

  7. 참조 관리자 대화 상자에서 WinRT 수학 라이브러리 확인란을 선택하고 확인 단추를 선택합니다.

  8. 메뉴 모음에서 보기>개체 브라우저를 선택합니다.

  9. 찾아보기 목록에서 간단한 수학을 선택합니다.

    이제 SDK의 내용을 탐색할 수 있습니다.

  10. 솔루션 탐색기에서 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>
    
  11. 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 #";
            }
        }
    }
}
  1. F5 키를 선택하여 앱을 실행합니다.

  2. 앱에서 두 개의 숫자를 입력하고 작업을 선택한 다음, = 단추를 선택합니다.

    올바른 결과가 나타납니다.

    확장 SDK를 만들고 사용했습니다.