在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 ...
随机推荐
- javascript深入理解-从作用域链理解闭包
一.概要 红宝书(P178)对于闭包的定义:闭包就是有权访问另外一个函数作用域中变量的函数. MDN,对于闭包的定义:闭包就是指能够访问自由变量的函数. 那么什么是自由变量?自由变量就是在函数中使用, ...
- .NET Core微服务系列基础文章索引(目录导航Final版)
一.为啥要总结和收集这个系列? 今年从原来的Team里面被抽出来加入了新的Team,开始做Java微服务的开发工作,接触了Spring Boot, Spring Cloud等技术栈,对微服务这种架构有 ...
- BootStrap:轮播插件
前述 利用 BootStrap 实现图片轮播,包括 基本轮播.带标题的轮播.设置轮播速度的轮播.控制前后的轮播 实例 基本轮播 代码 1.引入bootstrap和jQuery文件 <!-- jQ ...
- Redis - NoSQL数据库技术(一)
NoSQL入门概述(一) 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 什么是NoSQL NoSQL(NoSQL - Not Only SQL),意“不仅仅是SQL”: 泛指非关系 ...
- Spring Boot入门(四):开发Web Api接口常用注解总结
本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 在程序员的日常工作中,Web开发应该是占比很重的一部分,至少我工作以来,开发的系统基本都是Web端访问的 ...
- Android版数据结构与算法(三):基于链表的实现LinkedList源码彻底分析
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. LinkedList 是一个双向链表.它可以被当作堆栈.队列或双端队列进行操作.LinkedList相对于ArrayList来说,添加,删除元素效 ...
- Spring Boot入门(一):使用IDEA创建Spring Boot项目并使用yaml配置文件
由于公司最近在做技术转型(从.Net转Java),因此自己也开启了学习Java之路.学习Java怎么能不学习这几年这么火的Spring Boot框架,由于自己有总结的习惯,因此会把学习的过程以博客的形 ...
- maven私服上传jar包
将一下脚本保存在.bat文件执行,红色部分按实际情况修改: @echo off set groupId=com.xxxset artifactId=xxxset version=0.0.1set ja ...
- Angular(03)-- lint风格规范和WebStorm小技巧
在开始讲 Angular 各个核心知识点之前,想先来讲讲开发工具 WebStorm 的一些配置以及相应配置文件如 tslint.json 的配置. 因为我个人比较注重代码规范.代码风格,而对于这些规范 ...
- ArcGIS API for JavaScript 入门教程[4] 代码的骨架
[回顾与本篇预览] 上篇简单介绍了JsAPI中的数据与视图,并告诉大家这两部分有什么用.如何有机连接在一起. 这一篇快速介绍一下前端代码的骨架.当然,假定你已经熟悉HTML5.CSS3和JavaScr ...