以往做nuget包我們一般要么用命令行,要么用nuget的圖形化界面去做,但是一些操作比較麻煩.比如引入命名空間,引入第三方nuget包.今天,我們來講解下一種全新的構建方式.
環境:
win10
VS2015 企業版
.net 全家桶(.net framework,dnx,.NET core)
Why:
運用.net core+官方這種特殊類庫項目,一切都可以用代碼編輯完成,不需要做一些對我們來講非常額外的工作,於是乎,構建變得無比簡單.本人強烈建議以后做nuget類庫的時候都用這樣的方法.
步驟:
環境搭建好后,我們在visual C#里面,新建一個類庫(程序包)

關於項目結構,參考參考鏈接,這里不做贅述.
目前.net core尚不完善,system.web 都沒了,於是我們要對默認的項目設置進行調整.
打開project.json.這是項目描述,相當於以前nuget構建期間的xml,在框架節點,刪除dotnet5.4
{ "version": "1.0.0-*", "description": "FantasticCommonLibrary.Mvc.Core Class Library", "authors": [ "Z" ], "tags": [ "" ], "projectUrl": "", "licenseUrl": "", "frameworks": { "net45": { "dependencies": { "UAParser": "2.1.0" }, "frameworkAssemblies": { "System.ComponentModel.DataAnnotations": "4.0.0.0", "System.configuration": "4.0.0.0", "System.Net.Http": "4.0.0.0", "System.Web": "4.0.0.0", "System.Web.Extensions": "4.0.0.0" } }, "dotnet5.4": { "dependencies": { "Microsoft.CSharp": "4.0.1-beta-23516", "System.Collections": "4.0.11-beta-23516", "System.Linq": "4.0.1-beta-23516", "System.Runtime": "4.0.21-beta-23516", "System.Threading": "4.0.11-beta-23516" } } }, "dependencies": { "FluentValidation": "6.1.0", "Microsoft.AspNet.Mvc": "5.2.3", "Newtonsoft.Json": "8.0.2" } }
保存以后,就會發現引用下面少了最新的那個框架.由於沿用舊的4.5.1點框架,生成也不再有意外.
然后我們使用.net core的如下命令
cd <.xproj所在的那個目錄>
:還原依賴項
dotnet restore
:打包
dotnet pack
之后在項目,bin/debug里面會看到2個文件:.nupkg和.symbols.nupkg.第一個文件就是我們想要的nuget包.至此,構建完成
.nupkg是一個壓縮包,用7z解壓后打開里面的自述文件.nuspec.可以看到引用的nuget包和系統引用完好的在那里.
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"> <metadata> <id>FantasticCommonLibrary.Mvc.Core</id> <version>1.0.0</version> <requireLicenseAcceptance>false</requireLicenseAcceptance> <developmentDependency>false</developmentDependency> <authors>Z</authors> <owners>Z</owners> <description>FantasticCommonLibrary.Mvc.Core Class Library</description> <tags></tags> <dependencies> <group targetFramework=".NETFramework4.5"> <dependency id="FluentValidation" version="[6.1.0, )" /> <dependency id="Microsoft.AspNet.Mvc" version="[5.2.3, )" /> <dependency id="Newtonsoft.Json" version="[8.0.2, )" /> <dependency id="UAParser" version="[2.1.0, )" /> </group> </dependencies> <frameworkAssemblies> <frameworkAssembly assemblyName="System.ComponentModel.DataAnnotations" targetFramework=".NETFramework4.5" /> <frameworkAssembly assemblyName="System.Configuration" targetFramework=".NETFramework4.5" /> <frameworkAssembly assemblyName="System.Net.Http" targetFramework=".NETFramework4.5" /> <frameworkAssembly assemblyName="System.Web" targetFramework=".NETFramework4.5" /> <frameworkAssembly assemblyName="System.Web.Extensions" targetFramework=".NETFramework4.5" /> </frameworkAssemblies> </metadata> </package>
bug:
- 目前.net core不支持中文目錄,會亂碼,導致找不到路徑
- 項目有時生成失敗,此時要刪除project.lock.json.重新生成
- 引用System.Configuration的時候不知為何變成System.configuration(c變成小寫),會導致構建失敗.這時需要自己修改project.json的frameworkAssemblies節點.然后重新生成.
關於nuget一些文法的問題,請參見官方文檔
參考鏈接:
Create a New NuGet Package with DNX
