最近在作一个Xamarin for android的项目,有个需求是一次能够从相册中选择多张图片,可是 android API<19 的版本还不支持一次选择多张图片,在网上找了一下,发现原生的组件有不少而且都很是好用,也找到了不少原生的经过Binding 技术生成的 Xamarin for android的组件可是,都很差使,有的是Glide 版本冲突,我自己项目也是使用了Glide的(Glide 的每个版本的升级,API的变化都很剧烈,上一个版本的方法在下一个版本里甚至没有过分就直接去掉了), 还有就是V4包和V7包冲突,搞得人很郁闷, 后来想将java原生的Binding一个来用,从网上直接下载下来的jar 或者 aar包,经过Binding项目建立出来dll后引进去全部设置都完成了,发现仍是出现了各类包依赖的问题,用不了。 若是要想建立出来能用的Binding项目就须要对原项目使用的依赖和本身项目当前用的依赖包进行对比,并从新编译生成新的jar或者arr文件而后再Binding才能够, 可是一个问题来了,若是之后个人项目的相关依赖包升级了,那么相关的包又会和如今Binding的包有冲突。 最后决定将Java原生的组件移植一个.Net 的版本。因而就将AwesomeImagePicker 这个组件移植了一份。源码能够在这里下载, 下面是几张screenshot,java
我想把我写的这个组件分享给他人使用,最好的方法就是放在www.nuget.org上,那么下面就进入正题:怎么建立一个.nupkg?android
在https://www.nuget.org/downloads下载最新的NuGet.exe, 放到本地机器的某个位置。而后在环境变量Path 。git
好比我将nuget.exe 刚在 C:\nuget\nuget.exe. 那么Path环境变量里配置是这样子的:github
而后在命令行中输入nuget 输入以下信息则说明nuget已经安装配置成功.ide
打开VS 2017, 选择 File->New->Project…打开项目建立窗口。而后在该窗口选择 Installed->Visual C# –> Android –> Android Class Library(Xamarin).测试
而后给项目起个名字:Xamarin.Droid.ImagePicker, 以下图所示:ui
点击 OK 按钮建立项目,成功后,在VS2017中看到的项目长这样子:this
这下就能够在这里封装你的类库了。spa
打开Package Manager Console 窗口输入以下命令:命令行
PM> nuget spec Xamarin.Droid.ImagePicker
提示:
在当前的solution中建立一个soluton 文件夹,而后把刚刚建立的 文件 Xamarin.Droid.ImagePicker.nuspec 包含进来,便于进行编辑, 双击nuspec文件,初始的文件长这样:
<?xml version="1.0"?> <package > <metadata> <id>Xamarin.Droid.ImagePicker</id> <version>1.0.0</version> <authors>michael</authors> <owners>michael</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>Package description</description> <releaseNotes>Summary of changes made in this release of the package.</releaseNotes> <copyright>Copyright 2018</copyright> <tags>Tag1 Tag2</tags> <dependencies> <dependency id="SampleDependency" version="1.0" /> </dependencies> </metadata> </package>
编辑文件,将相应的信息替换成实际的信息以下:
<?xml version="1.0"?> <package > <metadata> <id>Xamarin.Droid.ImagePicker</id> <version>1.0.0</version> <authors>michael</authors> <owners>michael</owners> <licenseUrl>https://github.com/Xushlin/xamarin-ImagePicker/blob/master/LICENSE</licenseUrl> <projectUrl>https://github.com/Xushlin/xamarin-ImagePicker</projectUrl> <iconUrl>https://visualstudio.microsoft.com/wp-content/uploads/2016/05/xamarin-3-562x309@2xOP.png</iconUrl> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description> Xamarin android image picker, support picker one or more images at once.</description> <releaseNotes>First relase only support picker picker image from Album.</releaseNotes> <copyright>Copyright 2018</copyright> <tags>xamarin android image-picker</tags> <dependencies> <dependency id="Glide.Xamarin" version="4.0.0" /> <dependency id="Newtonsoft.Json" version="11.0.2" /> <dependency id="Xamarin.Android.Support.Design" version="25.4.0.2" /> <dependency id="Xamarin.Android.Support.v7.AppCompat" version="25.4.0.2" /> </dependencies> </metadata> </package>
这里加上了相关的依赖包,以及一些做者的相关信息。
上面的设置都作好之后,在Package Manager Console 窗口输入以下命令:
PM> nuget pack Xamarin.Droid.ImagePicker.nuspec
可是报下面一个错误:
因而在网上找了一下,发如今NuGet的官方Github WIKI https://github.com/NuGet/Home/issues/7020下面发现了一个OPEN的 Issues, 看来这个还真是有Bug,可是也有收获,有位开发者的回复中说在VS 外面运行命令是能够的。
因而启动了一个命令行,在命令行下运行下面的命令:
G:\git\xamarin-ImagePicker\src\Xamarin.Droid.ImagePicker>nuget pack Xamarin.Droid.ImagePicker.csproj
这下成功了:
G:\git\xamarin-ImagePicker\src\Xamarin.Droid.ImagePicker>nuget pack Xamarin.Droid.ImagePicker.csproj
Attempting to build package from 'Xamarin.Droid.ImagePicker.csproj'.
MSBuild auto-detection: using msbuild version '15.7.179.6572' from 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\bin'.
Packing files from 'G:\git\xamarin-ImagePicker\src\Xamarin.Droid.ImagePicker\bin\Debug'.
WARNING: NU5115: Description was not specified. Using 'Description'.
WARNING: NU5115: Author was not specified. Using 'michael'.
Successfully created package 'G:\git\xamarin-ImagePicker\src\Xamarin.Droid.ImagePicker\Xamarin.Droid.ImagePicker.1.0.0.nupkg'.
在Xamarin.Droid.ImagePicker 目录下面生成了 Xamarin.Droid.ImagePicker.1.0.0.nupkg
可是注意命令中有几个重要参数要注意:
Xamarin.Droid.ImagePicker.1.0.0.nupkg
Xamarin.Droid.ImagePicker.1.0.0.symbols.nupkg
因此我使用 的命令是:
nuget pack Xamarin.Droid.ImagePicker.csproj -IncludeReferencedProjects -properties Configuration=Release -symbols
包建立好了就要作一些测试工做,先将包存放在电脑上的一个位置, 我是存在 C:\LocalPackage 中。
而后建立测试项目,我建立的测试项目:
建立完测试项目后开始进行包的引用, 使用NuGet package 管理器。右键单击测试项目-> Manage NuGet Packages…
打开包管理器界面,而后点击包管理器右上角的设置
打开包管理器的选项设置界面,在这个界面上点击添加按钮,会在Package Resouce 列表里新添加一项:
选中新添加的那一项,修改Name 为“LocalPackage”(这个名字随便起)。 并将Source 改成你本地存储.nupkg 的路径,我这里是C:\LocalPakage
以下图:
而后点击“Update'”按钮:
最后点击 “OK”按钮回到包管理器界面,在右上角 选择Package resource 为刚刚配置的LocalPackage,这样左边窗口就出现了本地的.nupkg
点解Install按钮将包就添加到项目中来了:
测试完成后就能够将包发布到nuget.org 了,其余的开发人员就能够在包管理器中查找到你开发的组件或者类库了。进而使用到项目中。