共用方式為


HOW TO:建立軟體開發套件

Software Development Kit (SDK) 是 Visual Studio 視為單一參考項目檔案的集合。 [參考管理員] 對話方塊會列出與專案相關的叫用 [參考管理員] 對話方塊中所有的 SDK。 當您將 SDK 加入至專案時,所有內容會透過 IntelliSense、 [工具箱],設計工具,物件瀏覽器、組建、部署、偵錯和套件提供的。

取得 SDK 的兩種型別:

  • Platform SDK 是開發的應用程式必須的元件平台的。 例如,要求 Windows 8 SDK 開發 Windows 市集 應用程式。

  • 擴充功能 SDK 是擴充平台的選擇性元件,但是該平台的開發的應用程式不是必要的。

下列章節描述 SDK 一般基礎結構以及如何建立 Platform SDK 和擴充功能 SDK。

  • 目標平台的 Moniker

  • Platform SDK

  • 擴充功能 SDK

目標平台的 Moniker

Visual Studio 2012 支援兩個新屬性:

  1. 目標平台識別項 (TPI):這個屬性的有效值包括您可以開發軟體的各種平台。 視窗是平台的範例。

  2. 目標平台版本 (TPV):這個屬性會識別目標平台的版本。 例如,如果是 Windows 8, TPV 為 8.0,因此, TPI 是視窗。

同時,這兩個屬性形成目標平台 Moniker (TPM),形成參考基礎結構的 Windows 8 和 SDK 的基礎。 例如, Windows 8 的 TPM 是視窗, version=8.0」。

Platform SDK

要求 Platform SDK 開發平台的應用程式。 例如,要求 Windows 8 SDK 開發 Windows 8應用程式。

Hh768146.collapse_all(zh-tw,VS.110).gif安裝

所有平台 SDK 安裝在 HKLM\Software\Microsoft\Microsoft SDKs\[TPI]\v[TPV]\@InstallationFolder = [SDK root]。 因此, Windows 8 SDK 安裝在 HKLM \ Software \ Microsoft \ Microsoft SDKs \ Windows \ v8.0。

Hh768146.collapse_all(zh-tw,VS.110).gifLayout

Platform SDK 將具有下列設定:

\[InstallationFolder root]
            SDKManifest.xml
            \References
                  \[config]
                        \[arch]
            \DesignTime
                  \[config]
                        \[arch]

節點

描述

參照資料夾

包含 API 可以撰寫的二進位檔。 這些可由 Windows 中繼資料 (WinMD) 檔案或組件。

DesignTime 資料夾

只包含必要前/偵錯階段檔案。 這些可以包含 XML 文件,程式庫,標題,工具箱設計階段二進位, MSBuild 成品,依此類推。

注意事項警告
XML 文件中 DesignTime \資料夾,在理想情況下,將放置,不過, XML 文件參考將繼續沿著參考文件位於 Visual Studio 2012。例如, XML 文件為參考\ Reference \ [組態] \ [曲拱] \ sample.dll 是\參考\ [組態] \ [曲拱] \ sample.xml,當地語系化版本,並將該文件是\ Reference \ [組態] \ [曲拱] \ [地區設定] \ sample.xml。

組態資料夾

只能有三個資料夾:偵錯,零售和 CommonConfiguration。 SDK 作者可以將其檔案在 CommonConfiguration 下,如果同一組 SDK 檔案應該消耗,不論 SDK 消費者目標的組態。

結構資料夾

所有支援的結構資料夾可能存在。 Visual Studio 2012 支援下列結構:x86, x64 和 ARM,中性。 注意:Win32 為 x86 和 AnyCPU 對應的對應中性。

在 .NET Framework 4.5中, MSBuild 會硬式編碼只出現在\ CommonConfiguration \中性平台 SDK。

SDKManifest.xml

這個檔案會描述 Visual Studio 應該如何使用 SDK。 請 SDK 資訊清單為 Windows 8:

<FileList
            DisplayName = “Windows”
            PlatformIdentity = “Windows, version=8.0”
            TargetFramework = “.NET for Windows Store apps, version=v4.5; .NET Framework, version=v4.5”
            MinVSVersion = “11.0”>
            <File Reference = “Windows.winmd”>
               <ToolboxItems VSCategory = “Toolbox.Default” />
            </File>
</FileList>
DisplayName物件瀏覽器中瀏覽清單顯示的值。
PlatformIdentity這個屬性的存在告訴 MSBuild 和 Visual Studio SDK 是平台 SDK,不應該在本機複製它加入的參考。
TargetFrameworkVisual Studio 會使用這個屬性可確保在此屬性中指定的值指向相同框架的專案可以使用 SDK。
MinVSVersionVisual Studio 會使用這個屬性會套用至它的 SDK。
參考資料必須指定這個屬性提供包含控制項的參考。如需如何指定參考是否包含控制項的詳細資訊,請參閱以下內容。

Hh768146.collapse_all(zh-tw,VS.110).gif在 Visual Studio

參考管理員看到目標平台 Moniker (TPM) 然後替代屬性值在 HKLM\Software\Microsoft\Microsoft SDKs\[TPI]\v[TPV]\@InstallFolder = [SDK root] 尋找 Platform SDK 的磁碟位置。 參考管理員將會:

  1. 開啟 SDK 資訊清單判斷 Platform SDK 是否適用於參考管理員叫用的 Visual Studio 版本,而且 Platform SDK 是根據叫用參考管理員之專案的目標 Framework 適用。 如果平台 SDK 適用於兩計數,參考管理員為列舉 Platform SDK 參考索引標籤的名稱使用目標平台識別項屬性。 如果平台 SDK 磁碟上找不到,這個選項將會出現,不過,中間窗格會顯示訊息「[TPI] SDK 是在電腦上找不到」。

  2. 列舉所有參考指定在 [InstallFolder 根]\references\CommonConfiguration\neutral資料夾下的 [TPI] | 核心選項。

會將所有組件或 WinMD,使用者可以將 Platform SDK 中的參考加入至專案並使用這些程式碼。

擴充功能 SDK

擴充功能 SDK 擴充平台,但對於該平台的開發的應用程式不是必要的。 例如, Bing 地圖服務和 Windows Live SDK 擴充 Windows 8 ,但沒有該作業系統的所有開發人員需要。

Hh768146.collapse_all(zh-tw,VS.110).gif安裝

擴充功能 SDK 可以出現在四個位置的其中一個方法呼叫:

  • \Program Files\Microsoft SDKs\[TPI]\v[TPV]\ExtensionSDKs

  • \Users\[使用者名稱]\AppData\Local\Microsoft SDKs\[TPI]\v[TPV]\ExtensionSDKs

  • 在為 dir1 和 dir2 識別在磁碟上的任何兩個位置之 <PropertyGroup><SDKReferenceDirectoryRoot>dir1;dir2</SDKReferenceDirectoryRoot></PropertyGroup> 的專案檔

  • HKLM\Software\Microsoft\Microsoft SDKs\[TPI]\v[TPV]\ExtensionSDKs\[SDKName]\[SDKVersion]\@default = [SDK root] where [SDK root] is [Path to SDK]\[SDKName]\[SDKVersion]\

針對前三個位置,登錄機碼不是必要的。 您可以將擴充功能 SDK 的電腦上,使用特定或自訂位置,因此, Visual Studio 會採用 SDK。 如果這些機制都不適合,您可以指定 SDK 的自訂位置使用登錄路徑在第四個位置。

Hh768146.collapse_all(zh-tw,VS.110).gifLayout

擴充功能 SDK 將具有下列設定:

\[ExtensionSDKs root]
           \[SDKName]
                 \[SDKVersion]
                        SDKManifest.xml
                        \References
                              \[config]
                                    \[arch]
                        \Redist
                              \[config]
                                    \[arch]
                        \DesignTime
                               \[config]
                                     \[arch]

節點

描述

\[SDKName]\[SDKVersion]

建立擴充功能 SDK 的識別。 換句話說,擴充功能 SDK 的名稱和版本從對應的資料夾名稱取得 SDK 根目錄的路徑。 MSBuild 會使用此識別尋找磁碟的 SDK 和 Visual Studio 會顯示在 [屬性] 視窗和參考管理員的這個識別。

參照資料夾

包含 API 可以撰寫的二進位檔。 這些可以是 Windows 中繼資料 (WinMD) 檔案或組件。

可轉散發資料夾

包含用於執行階段/偵錯所需的,應該取得包裝成使用者的應用程式一部分的檔案。 兩個規則:

  1. 所有二進位檔應該放置在\ redist \ [組態] \ [曲拱],因此,二進位檔名稱必須保證以下格式的唯一:[公司]。[產品]。[目的]。[副檔名]。 例如, Microsoft.Cpp.Build.dll。

  2. 例如所有檔案名稱可能與其他 SDK 的檔案名稱衝突 (, Java 語言、css、pri、xaml、png、jpg 檔案) 應該放置在\ redist \ [組態] \ [曲拱] \ [sdkname] \除了與 XAML 控制項的檔案。 這些檔案應該放置在 \redist\[config]\[arch]\[componentname]\。

DesignTime 資料夾

包含做為使用者的應用程式中,需要最後/偵錯時,不應該包裝的檔案。 這些可以是 XML 文件,程式庫,標題,工具箱設計階段二進位, MSBuild 成品,依此類推。

注意事項警告
預定不供原生專案的所有 SDK 都必須有 SDKName.props 檔。下列程式碼顯示這類檔案的範例。
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ExecutablePath>C:\Temp\ExecutablePath;$(ExecutablePath)</ExecutablePath>
    <IncludePath>$(FrameworkSDKRoot)\..\v8.0\ExtensionSDKs\cppimagingsdk\1.0\DesignTime\CommonConfiguration\Neutral\include;$(IncludePath)</IncludePath>
    <AssemblyReferencePath>C:\Temp\AssemblyReferencePath;$(AssemblyReferencePath)</AssemblyReferencePath>
    <LibraryPath>$(FrameworkSDKRoot)\..\v8.0\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>
注意事項注意事項
XML 文件中 DesignTime \資料夾,在理想情況下,將放置,不過, XML 文件參考將繼續沿著參考文件位於 Visual Studio 2012。例如, XML 文件為參考\ Reference \ [組態] \ [曲拱] \ sample.dll 是\參考\ [組態] \ [曲拱] \ sample.xml,當地語系化版本,並將該文件是\ Reference \ [組態] \ [曲拱] \ [地區設定] \ sample.xml。

組態資料夾

只能有三個資料夾:偵錯,零售和 CommonConfiguration。 SDK 作者可以將其檔案在 CommonConfiguration 下,在應該使用時同一組 SDK 檔案,不論 SDK 消費者目標的組態。

結構資料夾

所有支援的結構資料夾可能存在。 Visual Studio 2012 支援下列結構:x86, x64,號誌,中性。 Win32 為 x86 和 AnyCPU 對應的對應中性。

SDKManifest.xml

這個檔案會描述 Visual Studio 應該如何使用 SDK。 請參閱下列範例 SDK 資訊清單。

<FileList
DisplayName = “My SDK”
ProductFamilyName = “My SDKs”
FrameworkIdentity-Debug = “Name=MySDK.10.Debug, MinVersion=1.0.0.0”
FrameworkIdentity-Retail = “Name=MySDK.10, MinVersion=1.0.0.0”
TargetFramework = “.NETCore, version=v4.5; .NETFramework, version=v4.5”
MinVSVersion = “11.0”
AppliesTo = "WindowsAppContainer + WindowsXAML"
SupportPrefer32Bit = “OS”
SupportedArchitectures = “x86;x64;ARM”
SupportsMultipleVersions = “Error”
AppX-Debug-x86 = “.\AppX\Debug\x86\Microsoft.MySDK.x86.Debug.1.0.appx”
AppX-Debug-x64 = “.\AppX\Debug\x64\Microsoft.MySDK.x64.Debug.1.0.appx”
AppX-Debug-ARM = “.\AppX\Debug\ARM\Microsoft.MySDK.ARM.Debug.1.0.appx”
AppX-Release-x86 = “.\AppX\Retail\x86\Microsoft.MySDK.x86.1.0.appx”
AppX-Release-x64 = “.\AppX\Retail\x64\Microsoft.MySDK.x64.1.0.appx”
AppX-Release-ARM = “.\AppX\Retail\ARM\Microsoft.MySDK.ARM.1.0.appx” 
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>
節點描述
DisplayName用來參考管理員、方案總管、物件瀏覽器和其他位置顯示使用者介面的 Visual Studio 的值。
ProductFamilyName整體 SDK 產品名稱。例如, 適用於 JavaScript 的 Windows Library (WinJS) SDK 將傳輸名為「Microsoft.WinJS.1.0」和「Microsoft.WinJS.2.0」的 SDK,屬於 SDK 產品系列的相同系列, 「Microsoft.WinJS」。這個屬性可讓 Visual Studio 和 MSBuild 建立該連接。如果這個屬性不存在, SDK 名稱當做產品系列名稱。
FrameworkIdentity只適用於 Windows 元件程式庫。這個屬性的值會放入使用的應用程式資訊清單指出在一個或多個 Windows 元件程式庫的相依性。
TargetFramework用來決定哪些 SDK 可以在參考管理員和工具箱。這可以是目標 Framework Moniker 的分號分隔清單。如果同一目標 Framework 的多個版本的指定,參考管理員為篩選目的使用最低的指定版本。例如,如果「, .NET Framework 中, version=v2.0;.NET Framework 中, version=v4.0」指定,參考管理員會使用 .NET Framework 中, version=v2.0」。如果特定目標 Framework 設定檔指定,,只有該設定檔會參考管理員用於篩選目的。例如,在中,當「Silverlight, version=v4.0, profile=WindowsPhone」指定,參考管理員會在視窗只篩選給設定檔呼叫;以完整 Silverlight 4.0 Framework 的專案不會看到在參考管理員的 SDK。
MinVSVersion用來篩選 SDK Visual Studio 每個版本隨即出現。
AppliesTo
用來決定哪些 SDK 可以在參考管理員透過指定適用的 Visual Studio 專案類型。在 Visual Studio 2012中,屬性值會辨識:WindowsAppContainer、VisualC、VB、CSharp、WindowsXAML、JavaScript、Managed 和原生。SDK 作者可以使用和 (" + "),或 ("|"),而不是 ("! ") 正確指定適用於 SDK 的範圍運算子的專案類型。
注意事項注意事項
WindowsAppContainer 識別 Windows 市集 應用程式的專案。
SupportPrefer32Bit支援的值為「true」和「false」。如果值設為「true」,則結果會是相同的,則屬性未設定;即預設假設是 Prefer32Bit 支援。如果值設為「false」, MSBuild 會傳回 Windows 市集 專案的錯誤 (或桌面專案的警告),如果參考 SDK 的專案有 Prefer32Bit 允許。如需 Prefer32Bit 的詳細資訊,請依程式設計語言參閱下列其中一個主題,:
  1. 專案設計工具、建置頁 (C#)

  2. 專案設計工具、編譯頁 (Visual Basic).

SupportedArchitecturesSDK 支援結構的分號分隔清單。MSBuild 會顯示警告會消耗之專案的目標 SDK 結構是否不受支援。如果沒有指定此屬性, MSBuild 會顯示這個警告。
SupportsMultipleVersions如果這個屬性設定為 [錯誤] 或 [警告], MSBuild 表示同一專案無法參考相同 SDK 系列的多個版本。如果這個屬性不存在或不是設定為 [允許], MSBuild 無法顯示此類錯誤或警告。
AppX只適用於 Windows 元件程式庫。這個屬性值指定路徑應用程式封裝為 Windows 元件庫磁碟上,在本機偵錯期間,因此,路徑傳遞至 Windows 元件庫的註冊元件。檔案名稱的命名慣例是 [公司].[產品].[架構].[組態].[版本].appx 。如果不適用於 Windows 元件程式庫,組態和結構都是選擇性的屬性名稱和屬性值。
CopyRedistToSubDirectorySDK 作者可以判斷檔案\ redist 資料夾位置下將複本相對應用程式套件根目錄 (也就是在建立應用程式套件精靈中選取 [套件位置] ]) 和執行階段配置根。預設位置是應用程式套件和 F5 配置的根。
DependsOn定義這個 SDK SDK 所依賴的 SDK 識別分隔清單。這個屬性會出現在參考管理員的詳細資料窗格中。
MoreInfo包含 URL 的 SDK 消費者以指引的 Web 網頁。這個值可用來在參考管理員的右窗格的詳細資訊連結。
檔案參考必須為那些只指定這個屬性至組件/WinMD 參考包含控制項或是原生必須指定註冊型別的 WinMD。
註冊型別這個屬性在應用程式資訊清單中指定 WinMD 註冊和對於原生 WinMD 是必要的,有對應實作 DLL。
工具箱
下表說明支援的屬性。
在工具箱的位置SDKManifest.xml 範例 (適用於任何參考– WinMD 或 DLL)
列舉所有控制項,並將其置於工具箱預設分類。
<File Reference = “sample.winmd”>
                <ToolboxItems VSCategory = “Toolbox.Default”/>     
</File>
列舉所有控制項,並將其置於特定分類名稱。
<File Reference = “sample.winmd”>
                <ToolboxItems VSCategory= “MyCategoryName”/>
</File>
列舉特定控制項,並將其置於特定分類名稱。
<File Reference = “sample.winmd”>
                < ToolboxItems VSCategory = “Graph”>
                                <item Type = “sample.bargraph”/>
                                <Item Type = “sample.piegraph”/>
                < ToolboxItems/>
                < ToolboxItems VSCategory = “Data”>
                                <Item Type = “sample.datagrid”/>
                                <Item Type = “sample.dataconnection”/>
                < ToolboxItems />
</File>
列舉特定控制項,並將它們放置在不同的分類名稱下在 Blend 和 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 = “sample.bargraph”/>
                                <Item Type = “sample.piegraph”/>
                < ToolboxItems />
</File>
不同列舉特定控制項在 Blend 和 Visual Studio。
<File Reference = “sample.winmd”>
                < ToolboxItems VSCategory = “Graph”>
                                <item Type = “sample.bargraph”/>
                                <Item Type = “sample.piegraph”/>
                <ToolboxItems/>
                < ToolboxItems BlendCategory = “Controls/sample/Graph”>
                                <Item Type = “sample.piegraph”/>
                <ToolboxItems/>
</File>
列舉特定控制項,並且只將它們放置在 Visual Studio 的共用路徑下或任何控制項群組。
<File Reference = “sample.winmd”>
                < ToolboxItems VSCategory = “Toolbox.Common”>
                                <item Type = “sample.bargraph”/>
                                <Item Type = “sample.piegraph”/>
                < ToolboxItems />
                < ToolboxItems VSCategory = “Toolbox.All”>
                                <Item Type = “sample.datagrid”/>
                                <Item Type = “sample.dataconnection”/>
                < ToolboxItems />
</File>
列舉特定控制項,並在 ChooseItems 只顯示特定集合,而不用它們在工具箱中。
<File Reference = “sample.winmd”>
                < ToolboxItems VSCategory = “Toolbox.ChooseItemsOnly”>
                                <item Type = “sample.bargraph”/>
                                <Item Type = “sample.piegraph”/>
                < ToolboxItems />
</File>

Hh768146.collapse_all(zh-tw,VS.110).gif在 Visual Studio

參考管理員看到目標平台 Moniker (TPM) 然後替代屬性值在 \Program Files\Microsoft SDKs\[TPI]\v[TPV]\ExtensionSDKs, \Users\[使用者名稱]\Microsoft SDKs\[TPI]\v[TPV]\ExtensionSDKs,和 HKLM\Software\Microsoft\Microsoft SDKs\[TPI]\v[TPV]\ExtensionSDKs\ 尋找擴充功能 SDK 的磁碟位置。

參考管理員會開啟每個擴充功能 SDK SDK 資訊清單判斷擴充功能 SDK 是否適用於參考管理員叫用的 Visual Studio 版本,擴充功能 SDK 是根據叫用參考管理員的目標 Framework 適用於專案,因此, AppliesTo 屬性值是否符合叫用參考管理員專案系統的通告的功能。 如果擴充功能 SDK 適用於所有計數,參考管理員會顯示 DisplayName、版本和 SDK 相依性根據擴充功能 SDK 資訊清單正確會填入詳細資訊連結。

擴充功能 SDK 會以參考管理員的單一項目。 一旦加入後,它會為 Windows [方案總管] 中的單一節點 Managed 應用程式和 Windows 市集 應用程式中建立使用 JavaScript。 SDK 也會在屬性頁上的單一項目 Visual C++ 專案中。 使用者現在不需要採取任何其他動作。 使用者提供 IntelliSense、工具箱、設計工具、物件瀏覽器、組建、部署、偵錯和套件設定。

注意事項注意事項
  1. 以專案目標組態,而結構, Visual Studio 中挑選最不特定的參考到最特定的。例如,在中,如果目標的 SDK 組態是偵錯和目標的 SDK 結構 x86, Visual Studio 會列舉所有參考,以 \references\commonconfiguration\neutral,然後 \references\commonconfiguration\x86,然後 references\debug\neutral ,最後 \references\debug\x86。它會移除所有少特定迴圈並傳遞至編譯器的所有參考的 IntelliSense。挑選參考這個方式給 SDK 作者不需要的彈性重複其參考在多個\ CONFIG \結構資料夾下。

  2. 如果專案參考取決於其他 SDK 的 SDK, Visual Studio 不會自動使用第二個 SDK。使用者必須以手動方式加入第二個 SDK 的參考。為了協助使用者推算 SDK 相依性,參考管理員對話方塊中, SDK,當在副檔名指定選項時,詳細資料窗格中列出 SDK 的名稱和版本和 (如果 SDK 取決於其他 SDK) SDK 相依性的名稱。儘管 SDK 相依性不滿意, MSBuild 會提示使用者將相依性的警告。

  3. FrameworkIdentity:Visual Studio 為 FrameworkIdentity- [組態-] [曲拱],然後 FrameworkIdentity- [組態],然後 FrameworkIdentity- [曲拱],然後 FrameworkIdentity 先查看。當找到符合的項目時,會記錄與屬性的值。

  4. AppX:SDK 解析程式嘗試選取最適合的 AppX 屬性對於結構;以遞減順序偏好設定:AppX- [組態-] [曲拱] (或 AppX- [組態] 在中性的情況下),然後 AppX- [曲拱] 和最後 AppX。例如,在中,如果 SDK 資訊清單中指定了下列 AppX 屬性:AppX 「x86」, 「AppX 偵錯 x86」, 「AppX、」, 「AppX ARM」, 「AppX ITA」和「AppX」和專案以進行偵錯和 x86, 「AppX 偵錯 x86」SDK 解析程式的選擇, AppX 「、」, 「AppX ARM」, 「AppX ITA」和「AppX」。

  5. 在 SDK 參考的專案範本,您必須以下列方式指定 SDK 參考:

    <ItemGroup>
    <SDKReference Include="MySDK, Version=1.0">
       <Name>My SDK</Name> 
    </SDKReference>
    </ItemGroup>

請參閱

工作

逐步解說:使用 C++ 建立 SDK

逐步解說:使用 C# 建立 SDK

概念

管理專案參考