在VS 2017 下创建 Xamarin NuGet Package
最近在做一个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,



我想把我写的这个组件分享给他人使用,最好的方法就是放在www.nuget.org上,那么下面就进入正题:怎么创建一个.nupkg?
1. 安装NuGet环境
在https://www.nuget.org/downloads下载最新的NuGet.exe, 放到本地机器的某个位置。然后在环境变量Path 。
比如我将nuget.exe 刚在 C:\nuget\nuget.exe. 那么Path环境变量里配置是这样子的:

然后在命令行中输入nuget 输入如下信息则说明nuget已经安装配置成功.

2、创建需要打包的Xamarin 类库项目
打开VS 2017, 选择 File->New->Project…打开项目创建窗口。然后在该窗口选择 Installed->Visual C# –> Android –> Android Class Library(Xamarin).
然后给项目起个名字:Xamarin.Droid.ImagePicker, 如下图所示:

点击 OK 按钮创建项目,成功后,在VS2017中看到的项目长这样子:

这下就可以在这里封装你的类库了。
3、创建 .nuspec file
打开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>
这里加上了相关的依赖包,以及一些作者的相关信息。
4、生成 .nupkg
上面的设置都做好以后,在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
但是注意命令中有几个重要参数要注意:
-IncludeReferencedProjects 表示当前打包的项目的所有引用项目也会一起打包到当前的nupkg中来。
-properties Configuration=Release 表示当前是在Release 环境中打包,如果不带这个参数选项默认情况下是在Debug环境中打包。
-symbols 这个参数选项表示你打的这个包,使用者可以在调试Debug环境下进入你的源码,带这个参数后会生成两个包:一个带-symbols后缀的。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
5、测试 nupkg
包创建好了就要做一些测试工作,先将包存放在电脑上的一个位置, 我是存在 C:\LocalPackage 中。

然后创建测试项目,我创建的测试项目:

创建完测试项目后开始进行包的引用, 使用NuGet package 管理器。右键单击测试项目-> Manage NuGet Packages…

打开包管理器界面,然后点击包管理器右上角的设置

打开包管理器的选项设置界面,在这个界面上点击添加按钮,会在Package Resouce 列表里新添加一项:

选中新添加的那一项,修改Name 为“LocalPackage”(这个名字随便起)。 并将Source 改为你本地存储.nupkg 的路径,我这里是C:\LocalPakage
如下图:

然后点击“Update'”按钮:

最后点击 “OK”按钮回到包管理器界面,在右上角 选择Package resource 为刚刚配置的LocalPackage,这样左边窗口就出现了本地的.nupkg

点解Install按钮将包就添加到项目中来了:

6、分享.nupkg
测试完成后就可以将包发布到nuget.org 了,其他的开发人员就可以在包管理器中查找到你开发的组件或者类库了。进而使用到项目中。
在VS 2017 下创建 Xamarin NuGet Package的更多相关文章
- vs 2017 无法安装任何 nuget package,提示“库没有注册。。。”
vs 2017 无法安装任何 nuget package,提示“库没有注册(异常来自 HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED))” 各种百度谷歌都没有 ...
- Xamarin nuget package update 错误
update xamarin.Forms包时出现错误: 'The specified path, file name, or both are too long. The fully qualifie ...
- 使用 dotnet CLI 来打包和发布 .NET Core nuget package
原文链接:使用 dotnet CLI 来打包和发布 .NET Core nuget package 如何使用 visual studio 2015/2017 打包和发布 Nuget package, ...
- NuGet Package Explorer使用教程下载
1.下载NuGet Package Explorer http://www.pc0359.cn/downinfo/91514.html 2.双击NuGet Package Explorer出现启动界面 ...
- 用 NuGet Package Explorer 管理你的攻城武器
缘由:每次新建一个工程,总是要从自己的“弹药库”或者之前的工程里面手动引用一些类库和脚本插件,难免有些繁琐和遗漏.想起经常用到的NuGet,跑到NuGet主页一看,发现有 NuGet Package ...
- Visual Studio 2010 更新NuGet Package Manager出错解决办法
在Visual Studio 2010的扩展管理器中发现NuGet Package Manger有最新版本更新提示,选择更新安装提示以下错误信息: 2013/4/25 1:11:48 - Micros ...
- IDEA下创建Maven项目,并整合使用Spring、Spring MVC、Mybatis框架
项目创建 本项目使用的是IDEA 2016创建. 首先电脑安装Maven,接着打开IDEA新建一个project,选择Maven,选择图中所选项,下一步. 填写好GroupId和ArtifactId, ...
- vs2017中生成.Net Standard Libarary的Nuget Package
场景: Project A 对Project B存在 project to project reference.这种场景下必须为两者都生成nuget package.这样在load Project A ...
- 【.Net Core】Assets file project.assets.json not found. Run a NuGet package restore
问题起因 添加 .net core的Project build失败. 提示以下error: Assets file project.assets.json not found. Run a NuGet ...
随机推荐
- .net core 并发下的线程安全问题
抱歉,其实内容并不如题!!!真正的题目应该为<.net core 并发下由于注入模式引起的线程安全问题> 背景(写测试demo所出现的异常,供大家学习与拍砖): .net core web ...
- 『取巧』VS2015试用期过后 继续试用
背景: 个人电脑 安装的 VS2015 Community 社区版. 一直用得挺好,都忘了要登录. 直到近来,30天试用期过 —— VS弹窗:要登录用户名.密码 才能继续使用. 但是,输入了无数次 邮 ...
- Maven构建Struts2项目
1.添加Struts2依赖 这里主需要在pom.xml中添加一个struts-core的依赖即可: <project xmlns="http://maven.apache.org/PO ...
- 如何定义开发完成?(Definition of Done)
最近在拜读郑晔的10x程序员工作法,收益良多,文中提出一个概念叫DoD(Definition of Done)给我的感触颇深.这让我联想到实际工作过程中,经常遇到的扯皮.争吵等各种场景,其实就和这个D ...
- JavaSE:数据类型之间的转换(附常见面试题)
数据类型之间的转换 分为以下几种情况: 1)低级到高级的自动类型转换: 2)高级到低级的强制类型转换(会导致溢出或丢失精度): 3)基本类型向类类型转换: 4)基本类型向字符串的转换: 5)类类型向字 ...
- 瑞芯微发布最新旗舰应用处理器-RK3588
在瑞芯微电子第四届“开发者之春”大会上,瑞芯微推出了新一代8nm旗舰处理器-RK3588 这个芯片将采用8nm 制程工艺.基于A76+A55 内核组合,具备4K UI性能.8K VPU,拥有NPU2. ...
- MySQL找不到msvcp140.dll”
没有安装VC++2015(Microsoft Visual C++ 2015 Redistributable), 下载地址 点击download,一个64位的一个32位的.
- cmd实现cab文件的压缩与解压
压缩(makecab): 1.单文件压缩 makecab ip2.txt ip2.txt.cab 2.多文件压缩 makecab /f c:\list.txt /d expresstype=mszip ...
- 积极拥抱.NET Core开源社区
潘正磊在上海的Tech Summit 2018 大会上给我们的.NET Core以及开源情况带来了最新信息. .Net Core 开源后取得了更加快速的发展,目前越活跃用户高达400万人,每月新增开发 ...
- 【WebGIS系列】Typescript+WebGL+Webpack开发环境搭建
目前Web实现矢量渲染的主流技术包括SVG.VML和WebGL.相对而言,VML是一种较古老的技术,虽然未成为W3C标准,但被早期的IE浏览器(IE9以下)和微软Office广泛使用,目前已经远离了浏 ...