最近在做一个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的更多相关文章

  1. vs 2017 无法安装任何 nuget package,提示“库没有注册。。。”

    vs 2017 无法安装任何 nuget package,提示“库没有注册(异常来自 HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED))” 各种百度谷歌都没有 ...

  2. Xamarin nuget package update 错误

    update xamarin.Forms包时出现错误: 'The specified path, file name, or both are too long. The fully qualifie ...

  3. 使用 dotnet CLI 来打包和发布 .NET Core nuget package

    原文链接:使用 dotnet CLI 来打包和发布 .NET Core nuget package 如何使用 visual studio 2015/2017 打包和发布 Nuget package, ...

  4. NuGet Package Explorer使用教程下载

    1.下载NuGet Package Explorer http://www.pc0359.cn/downinfo/91514.html 2.双击NuGet Package Explorer出现启动界面 ...

  5. 用 NuGet Package Explorer 管理你的攻城武器

    缘由:每次新建一个工程,总是要从自己的“弹药库”或者之前的工程里面手动引用一些类库和脚本插件,难免有些繁琐和遗漏.想起经常用到的NuGet,跑到NuGet主页一看,发现有 NuGet Package ...

  6. Visual Studio 2010 更新NuGet Package Manager出错解决办法

    在Visual Studio 2010的扩展管理器中发现NuGet Package Manger有最新版本更新提示,选择更新安装提示以下错误信息: 2013/4/25 1:11:48 - Micros ...

  7. IDEA下创建Maven项目,并整合使用Spring、Spring MVC、Mybatis框架

    项目创建 本项目使用的是IDEA 2016创建. 首先电脑安装Maven,接着打开IDEA新建一个project,选择Maven,选择图中所选项,下一步. 填写好GroupId和ArtifactId, ...

  8. vs2017中生成.Net Standard Libarary的Nuget Package

    场景: Project A 对Project B存在 project to project reference.这种场景下必须为两者都生成nuget package.这样在load Project A ...

  9. 【.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 ...

随机推荐

  1. Java8新特性之四:接口默认方法和静态方法

    在JDK1.8以前,接口(interface)没有提供任何具体的实现,在<JAVA编程思想>中是这样描述的:"interface这个关键字产生了一个完全抽象的类,它根本就没有提供 ...

  2. SQL优化指南

    慢查询日志 开启撒网模式 开启了MySQL慢查询日志之后,MySQL会自动将执行时间超过指定秒数的SQL统统记录下来,这对于搜罗线上慢SQL有很大的帮助. SHOW VARIABLES LIKE 's ...

  3. Dotnet全平台下APM-Trace探索

    背景 随着支撑的内部业务系统越来越多,向着服务化架构进化,在整个迭代过程中,会逐渐暴露出以下问题. 传统依赖于应用服务器日志等手段的排除故障原因的复杂度越来越高,传统的监控服务已经无法满足需求. 终端 ...

  4. canvas实现画板

    canvas实现画板 主要用到知识点: 鼠标事件onmousedown() onmousemove() onmouseup() onmouseleave() 事件委托 canvas的一些方法 如:绘制 ...

  5. 关于ios的光标和键盘回弹问题

    最近再做项目的时候(移动端),遇到了两个小问题,一个是ios端键盘不回弹的问题(微信浏览器),另一个是ios输入光标位置问题.首先看第二个问题: 就是点击一个按钮,要把输入框里面原来的内容加上一些固定 ...

  6. 实验二 request、out对象使用

    request.out对象使用 一.实验目的 1.掌握代码片段中的注释的应用: 2.掌握JSP脚本标示---Java代码片段的应用. 二.实验内容 1.设计教师与学生不同登陆界面,如下图: 2.验证码 ...

  7. June 29th. 2018, Week 26th. Friday

    Real love is always worth waiting for. 真爱永远值得等待. From Westworld. Real love is rare, but it does exis ...

  8. hdfs一直处于safemode模式

    目前来看,导致hdfs一直处于safemode模式最直接的原因是已成功复制的块的比例没有达到默认值,块的损坏也会造成一直处于安全模式. 1)文件系统中有损坏的文件,使用fsck命令来查看 hadoop ...

  9. JAVA类的继承之多态特性

    父类可以接收子类的实例,方法的覆盖,属性的隐藏,这些都使我非常疑惑,今天有点时间记录之. 话不多说,直接上代码上结果 1. public class TestDto{ public static vo ...

  10. springcloud之config配置中心-Finchley.SR2版

    本篇和大家分享的是springcloud-config配置中心搭建,写到这里突然想起自己曾今开源过基于Redis发布订阅编写的一个配置中心,刚看了git星数有点少哈哈,这里顺势发个连接欢迎大侠们点赞: ...