最近在做一个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. TiDB之mac上搭建及调试技巧

    此文目的 由于本人最近已经成为TiDB的粉丝,所以就开始各种研究TiDB的源码,研究源码这个事情,首先就需要在自己电脑上不断的调试及修改.TiDB本身的代码是非常容易编译和调试的,但是要把PD.TiK ...

  2. 前端笔记之Canvas

    一.Canvas基本使用 Canvas是HTML5的画布,Canvas算是“不务正业”的面向对象大总结,将面向对象玩极致. 算法为王!就是说canvas你不会,但是算法好,不怕写业务,不怕代码量,只要 ...

  3. Java面试前需要了解的东西

    一.前言 只有光头才能变强 回顾前面: 广州三本找Java实习经历 上一篇写了自己面试的经历和一些在面试的时候遇到的题目(笔试题和面试题). 我在面试前针对Java基础也花了不少的时间,期间也将自己写 ...

  4. 如何让div中的table水平居中

    <div style="text-align:center"> <table border="1" cellpadding="3&q ...

  5. fab 菜单实现—圆形、半圆、扇形、直线、射线

    前段时间记录一下fab 菜单实现之前传-钟表表盘,今天终于弄正文了. 本文基于上篇文章的布局方式和位置计算,并参考35 Cool Floating Action Button Animations(h ...

  6. 【原】无脑操作:Centos 7后台运行及终止jar包程序

    1.后台运行jar包程序,输入:nohup java -jar /路径/程序.jar & 2.后台终止jar包程序,输入:ps -ef | grep java,查看使用java命令的进程,再输 ...

  7. Hexo + GitHub 搭建个人博客

    对于程序员来说,搭建和维护一个个人博客十分必要​,写博客既是对所学知识的整理和总结,同时也能向他人展现自己的学习成果.这篇教程就是基于 Hexo 和 GitHub 来搭建属于自己的个人博客,简单快捷, ...

  8. equals方法和==的区别--用实例简单说明

    首先我们创建一个类 public class People { private String name; private String address; public String getName() ...

  9. markdown 基本操作

    无序列表:输入-之后输入空格有序列表:输入数字+“.”之后输入空格任务列表:-[空格]空格 文字标题:ctrl+数字表格:ctrl+t生成目录:[TOC]按回车选中一整行:ctrl+l选中单词:ctr ...

  10. softmax函数详解

    答案来自专栏:机器学习算法与自然语言处理 详解softmax函数以及相关求导过程 这几天学习了一下softmax激活函数,以及它的梯度求导过程,整理一下便于分享和交流. softmax函数 softm ...