Posts

NuGet Spec格式

套件的.nuspec檔案,預設是包括這些內容 <?xml version=”1.0”?> <package > <metadata> <id>$id$</id> <version>$version$</version> <title>$title$</title> <authors>$author$</authors> <owners>$author$</owners> <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl> <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl> <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>$description$</description> <releaseNotes>Summary of changes made in this release of the package.</releaseNotes> <copyright>Copyright 2012</copyright> <tags>Tag1 Tag2</tags> </metadata> </package> $id對應的是這個套件的檔名 $version$對應的是AssemblyInfo.cs中的AssemblyVersionAttribute $author$對應的是AssemblyInfo.cs中的AssemblyCompanyAttribute $description$對應的是AssemblyInfo.cs中的AssemblyDescriptionAttribute $title是套件的顯示名稱 requireLicenseAcceptance是安裝的時後要不要跳授權對話方塊 $licenseUrl是使用條款的網址 $projectUrl是專案資訊的網址 $iconUrl是套件icon的網址 除了這幾個用來設定套件資訊的項目之外,還可以在這個檔案中包含相依性 例如要在這個套件中,使用到log4net套件,那只要加一行dependencies資料就行了 <dependencies> <dependency id=”log4net” version=”2.0.0” /> </dependencies> 除了相依性,還可以指定GAC裡面的Assembly,例如System.ServiceModel <frameworkAssemblies> <frameworkAssembly assemblyName=”System.ServiceModel” targetFramework=”net40” /> </frameworkAssemblies> 如果要額外打包檔案的話,就要用files這個tag了 src指定檔案所在的相對路徑,target指定檔案在套件中的位置 也可以萬用字元和exclude來排除特定檔案 <files> <file src=”bin\Debug*.dll” target=”lib” /> <file src=”bin\Debug*.pdb” target=”lib” /> <file src=”tools*\.


建立NuGet套件

首先下載NuGet命令列工具,請按此下載 為了方便起見,把這個檔案丟到系統資料夾中,例如%WinDir%或System32 ](http://2.bp.blogspot.com/-Iq1IYY5A7CA/UIPU0e78XoI/AAAAAAAAAMs/7ptcekOJkQQ/s1600/00.download.png) 接下來建立一個測試用的dll專案 ](http://4.bp.blogspot.com/-HMrws61C34M/UIPTGsi4x9I/AAAAAAAAALE/1ymW04Gppqs/s1600/00.NewProject.png) 為了方便起見,請先安裝PowerCommands擴充元件 ](http://2.bp.blogspot.com/-nJj9KyxiAaM/UIPTHOayBDI/AAAAAAAAALM/Nq0S4oy1bwI/s1600/01.PowerCommands.png) 在專案上按右鍵,就會出現Open Command Prompt這個功能,按下後會打開一個cmd視窗,並把路徑切換到專案下面 ](http://2.bp.blogspot.com/-crRkZcmDMRw/UIPTH93kj0I/AAAAAAAAALU/mbkQ15Lmx5I/s1600/02.OpenCommandPrompt.png) 輸入nuget spec,就會產生一個副檔名nuspec的檔案 P.S. 如果該目錄下不只一個專案檔(csproj),請明確指定你要產生的專案檔是那一個 ](http://3.bp.blogspot.com/-Jz-baDzNlGc/UIPTIeo4bBI/AAAAAAAAALc/ZKcIqAgN_3w/s1600/03.NugetSpec.png) 在專案總管上面按下顯示所有檔案,就可以看到這個檔案 ](http://3.bp.blogspot.com/-lCpZOlgjhkU/UIPTJZ-ApfI/AAAAAAAAALk/FW-o1ID1r_A/s1600/04.ShowAllFile.png) 產生的nuspec檔案的內容如下 <package> <metadata> <id>$id$</id> <version>$version$</version> <title>$title$</title> <authors>$author$</authors> <owners>$author$</owners> <licenseurl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseurl> <projecturl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projecturl> <iconurl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconurl> <requirelicenseacceptance>false</requirelicenseacceptance> <description>$description$</description> <releasenotes>Summary of changes made in this release of the package.</releasenotes> <copyright>Copyright 2012</copyright> <tags>Tag1 Tag2</tags> </metadata> </package> $id對應的是這個套件的名稱 $version$對應的是AssemblyInfo.cs中的AssemblyVersionAttribute $author$對應的是AssemblyInfo.cs中的AssemblyCompanyAttribute $description$對應的是AssemblyInfo.cs中的AssemblyDescriptionAttribute 當然也可以手動輸入,下次再來更詳細地說明這個檔案的格式 接下來打包這個dll成一個套件,命令是nuget pack,參數說明如下 -sym:會一起產生包含偵錯符號的套件 -prop:用來額外指定一些特性,例如configuration=relase是編譯release這個組態 -build:是在打包前先編譯專案,以取得最新編譯的檔案 更詳細的說明,可以用nuget pack /?取得Help 因為有下-sym這個參數,所以除了會把元件打包成{id}.{version}.nupkg這樣格式的檔案之外 還會產生一個{id}.{version}.symbols.nupkg的檔案 ](http://1.bp.blogspot.com/-jVtaJ-nk4ls/UIPTLSt43zI/AAAAAAAAAL8/dQai5gRgPZY/s1600/07.Pkg.png) 接下來把這兩個檔案發佈到之前建立的nuget server和symbol server 發佈到nuget server nuget push *.


架設SymbolSource.Server

首先要先安裝Debugging Tools for Windows ](http://1.bp.blogspot.com/-KzKeCG8zNjk/UIO4-cYGgII/AAAAAAAAAKU/wGhW5z4HeaQ/s1600/00.download.png) 記住這個安裝路徑,等下會用到 ](http://3.bp.blogspot.com/-QKH8P_Fpovo/UIO4J4JlA_I/AAAAAAAAAJk/5Yxs5DDK09I/s1600/00.Path.png) 選擇安裝Debugging Tool for Windows,一直按下一步就好了 ](http://4.bp.blogspot.com/-eQQb6sjiNqE/UIO4JNm7ZzI/AAAAAAAAAJc/ClovhmG2kzU/s1600/00.DebuggingTool.png) 接下來開始安裝SymbolSource.Server 先開一個MVC專案 ](http://3.bp.blogspot.com/-weYfPMU9dLY/UIO4Koyl5eI/AAAAAAAAAJs/6Jp_tUUv1eQ/s1600/01.NewProject.png) 選擇空白範本 ](http://2.bp.blogspot.com/-2fqKnGX6JNA/UIO4LMBQMSI/AAAAAAAAAJ0/sBdNebIBvDo/s1600/02.ProjectSetting.png) 用Nuget安裝SymbolSource.Server.Basic套件 ](http://2.bp.blogspot.com/-vAS8yuexXc4/UIO4Lr-AvLI/AAAAAAAAAJ8/AqZbH0BG-mg/s1600/03.SymbolSourceServer.png) 打開web.config,找到SrcSrvPath,修改成剛安裝的路徑 <add key="SrcSrvPath" value="C:\Program Files (x86)\Windows Kits\8.0\Debuggers\x64\srcsrv" /> 按F5執行,就會看到如下的畫面 一個是Symbol的位置,一個是套件發佈用的位置 ](http://1.bp.blogspot.com/-3aEpzPPQ66g/UIO4MDpaxbI/AAAAAAAAAKE/qXzukxnN2mU/s1600/04.DefaultPage.png) 設定一下偵錯選項 取消「啟用Just My Code的勾勾」 勾選「啟用來源伺服器支援」 把套件和Symbol發佈之後就可以偵錯了 ](http://2.bp.blogspot.com/-dypoFu3nhYk/UIO4Ms8TdjI/AAAAAAAAAKM/eC0J2y1De5Q/s1600/05.Setting.png) 再新增一個Symbol位置,指向到伺服器路徑,之後發佈套件和Symbol就可以偵錯了 ](http://4.bp.blogspot.com/-7qcGV2EU9d8/UIO9MgH6h1I/AAAAAAAAAKs/huq9yb8Emso/s1600/06.Symbol.png) 參考資料 Setting it up your own symbol and source server Setting up your own SymbolSource Server: step-by-step