目前建立nupkg檔的方式有二種,使用NuGet命令列工具或NuGet Package Explorer GUI工具,個人是覺得先用NuGet Package Explorer建立nuspec,之後在用NuGet命令列與MSBuild編譯後自動上傳,會比較方便。
以下為個人的作法,不一定比較好用。
產生nuspec
我會用NuGet Package Explorer設定好nuspec,按工具的File > Save Metadata as,將檔案存到專案的NuGet資料夾下。
建立bat檔
在專案下的NuGet資料夾下建立NuGetPush.bat 檔案,每次版本有變動時也要改NuGetPush.bat(想要自動找dll版本,但不好寫)。
NuGet SetApiKey 776BA4C5-9081-4F06-90A1-C61C0E06E664 -Source http://127.0.0.1
NuGet Pack Common.Logging.Elmah.nuspec -Version 1.0.0.1
NuGet Push Common.Logging.Elmah.1.0.0.1.nupkg -Source http://127.0.0.1
Exit 0
修改.csproj檔
在.csproj最下方處增加下列文字,讓MSBuild在Release Build後執行bat檔,或是建立新的Build Configuration ,不讓Release Build做太多事。
<PropertyGroup Condition=" '$(Configuration)' == 'Release(or NuGet)' ">
<PostBuildEvent>
CD $(ProjectDir)NuGet
NuGetPush.bat
</PostBuildEvent>
</PropertyGroup>
建立NuGet用的Build Configuration
在工具列的Build的下來選單可以看到預設會有Debug與Release二個Build Configuration,這二個的主要差異只有設定值不同(也可以打開專案屬性視窗,把二個設定值設成一樣),我們可以建立新的Build Configuration來因應不同的情況來改變設定,像常見控件項的專案會增加WPF、Silverlight二種Build Configuration,因為WPF與Silverlight只有少種差異,可以使用不同的Build Configuration來切換不同點,讓一個專案可以有多種產出(但Code中可能會增加#if #endif等編譯用的語法)。
開啟Configuration Manager後,在Action solution configuration的下拉選單上選擇<new>,建議是複制Release的設定。
可以使用Batch Build來做編譯,不同一直切換Build Configuration。
當使用Release(or NuGet) Build時可以從輸出視窗看到執行結果。