Membuat kit pengembangan perangkat lunak

Kit pengembangan perangkat lunak (SDK) adalah kumpulan API yang dapat Anda referensikan sebagai satu item di Visual Studio. Kotak dialog Manajer Referensi mencantumkan semua SDK yang relevan dengan proyek. Saat Anda menambahkan SDK ke proyek, API tersedia di Visual Studio.

Ada dua jenis SDK:

  • Platform SDK adalah komponen wajib untuk mengembangkan aplikasi untuk platform. Misalnya, Windows 8.1 SDK diperlukan untuk mengembangkan aplikasi Windows 8.x Store.

  • Ekstensi SDK adalah komponen opsional yang memperluas platform tetapi tidak wajib untuk mengembangkan aplikasi untuk platform tersebut.

Bagian berikut menjelaskan infrastruktur umum SDK dan cara membuat SDK platform dan SDK ekstensi.

SDK Platform

SDK platform diperlukan untuk mengembangkan aplikasi untuk platform. Misalnya, Windows 8.1 SDK diperlukan untuk mengembangkan aplikasi untuk Windows 8.1.

Penginstalan

Semua SDK platform akan diinstal di HKLM\Software\Microsoft\Microsoft SDKs\[TPI]\v[TPV]\@InstallationFolder = [Akar SDK]. Oleh karena itu, Windows 8.1 SDK diinstal di HKLM\Software\Microsoft\Microsoft SDKs\Windows\v8.1.

Tata letak

SDK Platform memiliki tata letak berikut:

\[InstallationFolder root]
            SDKManifest.xml
            \References
                  \[config]
                        \[arch]
            \DesignTime
                  \[config]
                        \[arch]
Simpul Deskripsi
Folder referensi Berisi biner yang berisi API yang dapat dikodekan. Ini dapat mencakup file atau rakitan Windows Metadata (WinMD).
Folder DesignTime Berisi file yang hanya diperlukan pada waktu pra-jalan/penelusuran kesalahan. Ini dapat mencakup dokumen XML, pustaka, header, biner waktu desain Kotak Alat, artefak MSBuild, dan sebagainya

Dokumen XML, idealnya, ditempatkan di folder \DesignTime , tetapi dokumen XML untuk referensi akan terus ditempatkan bersama file referensi di Visual Studio. Misalnya, dokumen XML untuk referensi\Referensi\[config]\[arch]\sample.dll akan menjadi \References\[config]\[arch]\sample.xml, dan versi dokumen yang dilokalkan akan menjadi \References\[config]\[arch]\[locale]\sample.xml.
Folder konfigurasi Hanya ada tiga folder: Debug, Retail, dan CommonConfiguration. Penulis SDK dapat menempatkan file mereka di bawah CommonConfiguration jika kumpulan file SDK yang sama harus digunakan, terlepas dari konfigurasi yang akan ditargetkan konsumen SDK.
Folder arsitektur Folder arsitektur apa pun yang didukung dapat ada. Visual Studio mendukung arsitektur berikut: x86, x64, ARM, dan netral. Catatan: Win32 memetakan ke x86, dan peta AnyCPU ke netral.

MSBuild hanya terlihat di bawah \CommonConfiguration\netral untuk SDK Platform.
SDKManifest.xml File ini menjelaskan bagaimana Visual Studio harus menggunakan SDK. LihatLah Manifes SDK untuk Windows 8.1:

<FileList DisplayName = "Windows" PlatformIdentity = "Windows, version=8.1" TargetFramework = ".NET for Windows Store apps, version=v4.5.1; .NET Framework, version=v4.5.1" MinVSVersion = "14.0"> <File Reference = "Windows.winmd"> <ToolboxItems VSCategory = "Toolbox.Default" /> </File> </FileList>

DisplayName: Nilai yang ditampilkan Browser Objek di daftar Telusuri.

PlatformIdentity: Keberadaan atribut ini memberi tahu Visual Studio dan MSBuild bahwa SDK adalah SDK platform dan bahwa referensi yang ditambahkan darinya tidak boleh disalin secara lokal.

TargetFramework: Atribut ini digunakan oleh Visual Studio untuk memastikan bahwa hanya proyek yang menargetkan Kerangka Kerja yang sama seperti yang ditentukan dalam nilai atribut ini yang dapat menggunakan SDK.

MinVSVersion: Atribut ini digunakan oleh Visual Studio untuk hanya menggunakan SDK yang berlaku untuknya.

Referensi: Atribut ini harus ditentukan hanya untuk referensi yang berisi kontrol. Untuk informasi tentang cara menentukan apakah referensi berisi kontrol, lihat di bawah ini.

SDK Ekstensi

Bagian berikut menjelaskan apa yang perlu Anda lakukan untuk menyebarkan SDK ekstensi.

Penginstalan

SDK ekstensi dapat diinstal untuk pengguna tertentu atau untuk semua pengguna tanpa menentukan kunci registri. Untuk menginstal SDK untuk semua pengguna, gunakan jalur berikut:

%Program Files%\Microsoft SDK<target platform>\v<platform version number>\ExtensionSDK

Untuk penginstalan khusus pengguna, gunakan jalur berikut:

%USERPROFILE%\AppData\Local\Microsoft SDK<target platform>\v<platform version number>\ExtensionSDK

Jika Anda ingin menggunakan lokasi yang berbeda, Anda harus melakukan salah satu dari dua hal:

  1. Tentukan dalam kunci registri:

    HKLM\Software\Microsoft\Microsoft SDK<target platform>\v<platform version number>\ExtensionSDKs<SDKName><SDKVersion>\

    dan tambahkan subkey (Default) yang memiliki nilai <path to SDK><SDKName><SDKVersion>.

  2. Tambahkan properti SDKReferenceDirectoryRoot MSBuild ke file proyek Anda. Nilai properti ini adalah daftar direktori yang dibatasi titik koma tempat SDK Ekstensi yang ingin Anda referensikan berada.

Tata letak penginstalan

Ekstensi SDK memiliki tata letak penginstalan berikut:

\<ExtensionSDKs root>
           \<SDKName>
                 \<SDKVersion>
                        SDKManifest.xml
                        \References
                              \<config>
                                    \<arch>
                        \Redist
                              \<config>
                                    \<arch>
                        \DesignTime
                               \<config>
                                     \<arch>

  1. \<SDKName>\<SDKVersion>: nama dan versi ekstensi SDK berasal dari nama folder yang sesuai di jalur ke akar SDK. MSBuild menggunakan identitas ini untuk menemukan SDK pada disk, dan Visual Studio menampilkan identitas ini di jendela Properti dan dialog Manajer Referensi.

  2. Folder referensi: biner yang berisi API. Ini bisa berupa file atau rakitan Windows Metadata (WinMD).

  3. Folder redist : file yang diperlukan untuk runtime/debugging dan harus dibungkus sebagai bagian dari aplikasi pengguna. Semua biner harus ditempatkan di bawah \redist\<config>\<arch>, dan nama biner harus memiliki format berikut untuk memastikan keunikan: ]<company.<>produk>.<tujuan>.<ekstensi>. Misalnya, *Microsoft.Cpp.Build.dll. Semua file dengan nama yang dapat bertabrakan dengan nama file dari SDK lain (misalnya, file javascript, css, pri, xaml, png, dan jpg) harus ditempatkan di bawah \redist\<config>\<arch>\<sdkname>* kecuali untuk file yang terkait dengan kontrol XAML. File-file ini harus ditempatkan di bawah *\redist\<config>\<arch>\<componentname>\.

  4. Folder DesignTime : file yang diperlukan hanya pada waktu pra-proses/penelusuran kesalahan dan tidak boleh dimas sebagai bagian dari aplikasi pengguna. Ini bisa berupa dokumen XML, pustaka, header, biner waktu desain kotak alat, artefak MSBuild, dan sebagainya. SDK apa pun yang dimaksudkan untuk dikonsumsi oleh proyek asli harus memiliki file SDKName.props . Berikut ini memperlihatkan sampel jenis file ini.

    <?xml version="1.0" encoding="utf-8"?>
    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <ExecutablePath>C:\Temp\ExecutablePath;$(ExecutablePath)</ExecutablePath>
        <IncludePath>$(FrameworkSDKRoot)\..\v8.1\ExtensionSDKs\cppimagingsdk\1.0\DesignTime\CommonConfiguration\Neutral\include;$(IncludePath)</IncludePath>
        <AssemblyReferencePath>C:\Temp\AssemblyReferencePath;(AssemblyReferencePath)</AssemblyReferencePath>
        <LibraryPath>$(FrameworkSDKRoot)\..\v8.1\ExtensionSDKs\cppimagingsdk\1.0\DesignTime\Debug\ARM;$(LibraryPath)</LibraryPath>
        <SourcePath>C:\Temp\SourcePath\X64;$(SourcePath)</SourcePath>
        <ExcludePath>C:\Temp\ExcludePath\X64;$(ExcludePath)</ExcludePath>
        <_PropertySheetDisplayName>DevILSDK, 1.0</_PropertySheetDisplayName>
      </PropertyGroup>
    </Project>
    
    

    Dokumen referensi XML ditempatkan bersama file referensi. Misalnya, dokumen referensi XML untuk rakitan \References\<config>\<arch>\sample.dll adalah \References\<config>\<arch>\sample.xml, dan versi lokal dokumen tersebut adalah \References\<config>\<arch>\<locale>\sample.xml.

  5. Folder konfigurasi : tiga subfolder: Debug, Retail, dan CommonConfiguration. Penulis SDK dapat menempatkan file mereka di bawah CommonConfiguration ketika kumpulan file SDK yang sama harus digunakan, terlepas dari konfigurasi yang ditargetkan oleh konsumen SDK.

  6. Folder arsitektur : arsitektur berikut didukung: x86, x64, ARM, netral. Win32 memetakan ke x86, dan peta AnyCPU ke netral.

SDKManifest.xml

File SDKManifest.xml menjelaskan bagaimana Visual Studio harus menggunakan SDK. Berikut ini adalah contohnya:

<FileList DisplayName = "My SDK"
          ProductFamilyName = "My SDKs"
          TargetFramework = ".NETCore, version=v4.5.1; .NETFramework, version=v4.5.1"
          MinVSVersion = "14.0"
          MaxPlatformVersion = "8.1"
          AppliesTo = "WindowsAppContainer + WindowsXAML"
          SupportPrefer32Bit = "True"
          SupportedArchitectures = "x86;x64;ARM"
          SupportsMultipleVersions = "Error"
          CopyRedistToSubDirectory = "."
          DependsOn = "SDKB, version=2.0"
          MoreInfo = "https://msdn.microsoft.com/MySDK">
  <File Reference = "MySDK.Sprint.winmd" Implementation = "XNASprintImpl.dll">
    <Registration Type = "Flipper" Implementation = "XNASprintFlipperImpl.dll" />
    <Registration Type = "Flexer" Implementation = "XNASprintFlexerImpl.dll" />
    <ToolboxItems VSCategory = "Toolbox.Default" />
  </File>
</FileList>

Daftar berikut memberikan elemen file:

  1. DisplayName: nilai yang muncul di Reference Manager, Penjelajah Solusi, Object Browser, dan lokasi lain di antarmuka pengguna untuk Visual Studio.

  2. ProductFamilyName: Nama produk SDK keseluruhan. Misalnya, SDK Pustaka Windows untuk JavaScript (WinJS) diberi nama "Microsoft.WinJS.1.0" dan "Microsoft.WinJS.2.0", yang termasuk dalam keluarga produk SDK yang sama, "Microsoft.WinJS". Atribut ini memungkinkan Visual Studio dan MSBuild untuk membuat koneksi tersebut. Jika atribut ini tidak ada, Nama SDK digunakan sebagai nama keluarga produk.

  3. FrameworkIdentity: Menentukan dependensi pada satu atau beberapa pustaka komponen Windows. Nilai atribut ini dimasukkan ke dalam manifes aplikasi yang mengkonsumsi. Atribut ini hanya berlaku untuk pustaka komponen Windows.

  4. TargetFramework: Menentukan SDK yang tersedia di Reference Manager dan kotak alat. Ini adalah daftar moniker kerangka kerja target yang dibatasi titik koma, misalnya ".NET Framework, version=v2.0; .NET Framework, version=v4.5.1". Jika beberapa versi kerangka kerja target yang sama ditentukan, Reference Manager menggunakan versi terendah yang ditentukan untuk tujuan pemfilteran. Misalnya, jika ".NET Framework, version=v2.0; .NET Framework, version=v4.5.1" ditentukan, Reference Manager akan menggunakan ".NET Framework, version=v2.0". Jika profil kerangka kerja target tertentu ditentukan, hanya profil tersebut yang akan digunakan oleh Reference Manager untuk tujuan pemfilteran. Misalnya, ketika "Silverlight, version=v4.0, profile=Windows Telepon" ditentukan, Reference Manager hanya memfilter profil Windows Telepon; proyek yang menargetkan Kerangka Kerja Silverlight 4.0 lengkap tidak melihat SDK di Reference Manager.

  5. MinVSVersion: Versi Visual Studio minimum.

  6. MaxPlatformVerson: Versi platform target maksimum harus digunakan untuk menentukan versi platform tempat Extension SDK Anda tidak akan berfungsi. Misalnya, Paket Runtime Microsoft Visual C++ v11.0 harus dirujuk hanya oleh proyek Windows 8. Dengan demikian, MaxPlatformVersion proyek Windows 8 adalah 8.0. Ini berarti bahwa Manajer Referensi memfilter Paket Runtime Microsoft Visual C++ untuk proyek Windows 8.1, dan MSBuild melemparkan kesalahan saat proyek Windows 8.1 mereferensikannya. Catatan: elemen ini didukung mulai dari Visual Studio 2013.

  7. AppliesTo: Menentukan SDK yang tersedia di Reference Manager dengan menentukan jenis proyek Visual Studio yang berlaku. Sembilan nilai diakui: WindowsAppContainer, VisualC, VB, CSharp, WindowsXAML, JavaScript, Managed, dan Native. Penulis SDK dapat menggunakan dan ("+'), atau ("|"), bukan ("!") operator untuk menentukan dengan tepat cakupan jenis proyek yang berlaku untuk SDK.

    WindowsAppContainer mengidentifikasi proyek untuk aplikasi Windows 8.x Store.

  8. SupportPrefer32Bit: Nilai yang didukung adalah "True" dan "False". Defaultnya adalah "True". Jika nilai diatur ke "False", MSBuild mengembalikan kesalahan untuk proyek Windows 8.x Store (atau peringatan untuk proyek desktop) jika proyek yang mereferensikan SDK mengaktifkan Prefer32Bit. Untuk informasi selengkapnya tentang Prefer32Bit, lihat halaman Build, Project Designer (C#) atau Halaman kompilasi, Project Designer (Visual Basic).

  9. SupportedArchitectures: Daftar arsitektur yang dibatasi titik koma yang didukung SDK. MSBuild menampilkan peringatan jika arsitektur SDK yang ditargetkan dalam proyek penggunaan tidak didukung. Jika atribut ini tidak ditentukan, MSBuild tidak pernah menampilkan jenis peringatan ini.

  10. SupportsMultipleVersions: Jika atribut ini diatur ke Kesalahan atau Peringatan, MSBuild menunjukkan bahwa proyek yang sama tidak dapat mereferensikan beberapa versi dari keluarga SDK yang sama. Jika atribut ini tidak ada atau diatur ke Izinkan, MSBuild tidak menampilkan jenis kesalahan atau peringatan ini.

  11. AppX: Menentukan jalur ke paket aplikasi untuk pustaka komponen Windows pada disk. Nilai ini diteruskan ke komponen pendaftaran pustaka komponen Windows selama penelusuran kesalahan lokal. Konvensi penamaan untuk nama file adalah <Perusahaan>.<Produk>.<Arsitektur>.<Konfigurasi>.<Versi>.appx. Konfigurasi dan Arsitektur bersifat opsional dalam nama atribut dan nilai atribut jika tidak berlaku untuk pustaka komponen Windows. Nilai ini hanya berlaku untuk pustaka komponen Windows.

  12. CopyRedistToSubDirectory: Menentukan di mana file di bawah folder \redist harus disalin relatif terhadap akar paket aplikasi (yaitu, Lokasi paket yang dipilih dalam wizard Buat Paket Aplikasi) dan akar tata letak runtime. Lokasi default adalah akar paket aplikasi dan tata letak F5 .

  13. DependsOn: Daftar identitas SDK yang menentukan SDK tempat SDK ini bergantung. Atribut ini muncul di panel detail Manajer Referensi.

  14. MoreInfo: URL ke halaman web yang menyediakan bantuan dan informasi selengkapnya. Nilai ini digunakan dalam tautan Informasi Selengkapnya di panel kanan Manajer Referensi.

  15. Jenis Pendaftaran: Menentukan pendaftaran WinMD dalam manifes aplikasi dan diperlukan untuk WinMD asli, yang memiliki DLL implementasi mitra.

  16. Referensi File: Ditentukan hanya untuk referensi yang berisi kontrol atau WinMD asli. Untuk informasi tentang cara menentukan apakah referensi berisi kontrol, lihat Menentukan lokasi item kotak alat di bawah ini.

Tentukan lokasi item kotak alat

Elemen ToolBoxItems dari skema SDKManifest.xml menentukan nama kontrol, rakitan sumber, dan nama tab kotak alat item kotak alat di platform dan ekstensi SDK. Contoh berikut menunjukkan berbagai skenario. Ini berlaku untuk referensi WinMD atau DLL.

Perhatikan bahwa di Visual Studio 2019 dan yang lebih lama, daripada mencantumkan nama kontrol kotak alat dalam manifes, Visual Studio secara dinamis menghitung jenis kontrol dalam rakitan SDK. Mulai dari Visual Studio 2022, ini tidak lagi didukung; item kotak alat harus secara eksplisit tercantum dalam SDKManifest.xml.

  1. Tempatkan kontrol dalam kategori default kotak alat.

    <File Reference = "sample.winmd">
      <ToolboxItems VSCategory = "Toolbox.Default">
        <Item Type = "Namespace.ControlName1" />
        <Item Type = "Namespace.ControlName2" />
      </ToolboxItems>
    </File>
    
  2. Tempatkan kontrol di bawah nama kategori tertentu.

    <File Reference = "sample.winmd">
      <ToolboxItems VSCategory= "MyCategoryName">
        <Item Type = "Namespace.ControlName1" />
        <Item Type = "Namespace.ControlName2" />
      </ToolboxItems>
    </File>
    
  3. Tempatkan kontrol di bawah nama kategori tertentu.

    <File Reference = "sample.winmd">
      <ToolboxItems VSCategory = "Graph">
        <Item Type = "Namespace.ControlName1" />
      </ToolboxItems>
      <ToolboxItems VSCategory = "Data">
        <Item Type = "Namespace.ControlName2" />
      </ToolboxItems>
    </File>
    
  4. Tempatkan kontrol di bawah nama kategori yang berbeda di Blend dan Visual Studio.

    // Blend accepts a slightly different structure for the category name because it allows a path rather than a single category.
    <File Reference = "sample.winmd">
      <ToolboxItems VSCategory = "Graph" BlendCategory = "Controls/sample/Graph">
        <Item Type = "Namespace.ControlName1" />
        <Item Type = "Namespace.ControlName2" />
      </ToolboxItems>
    </File>
    
  5. Menghitung kontrol tertentu secara berbeda di Blend dan Visual Studio.

    <File Reference = "sample.winmd">
      <ToolboxItems VSCategory = "Graph">
        <Item Type = "Namespace.ControlName1" />
      </ToolboxItems>
      <ToolboxItems BlendCategory = "Controls/sample/Graph">
        <Item Type = "Namespace.ControlName2" />
      </ToolboxItems>
    </File>
    
  6. Hitung kontrol tertentu, dan letakkan di bawah Jalur Umum Visual Studio atau hanya di Grup Semua Kontrol.

    <File Reference = "sample.winmd">
      <ToolboxItems VSCategory = "Toolbox.Common">
        <Item Type = "Namespace.ControlName1" />
      </ToolboxItems>
      <ToolboxItems VSCategory = "Toolbox.All">
        <Item Type = "Namespace.ControlName2" />
      </ToolboxItems>
    </File>
    
  7. Hitung kontrol tertentu, dan hanya tampilkan set tertentu di ChooseItems tanpa berada di kotak alat.

    <File Reference = "sample.winmd">
      <ToolboxItems VSCategory = "Toolbox.ChooseItemsOnly">
        <Item Type = "Namespace.ControlName1" />
        <Item Type = "Namespace.ControlName2" />
      </ToolboxItems>
    </File>