NuGet 使用自定义本地类库目录
NuGet 使用自定义本地类库目录
在项目中使用 NuGet 作为第三方类库管理器是非常方便的, NuGet 默认会在解决方案的目录下建立一个名为 packages 的目录, 把解决方案所需的第三方类库都放到 packages 目录下, 解决方案下所有的项目都引用 packages 目录内的类库, 对于单个解决方案来说, 非常不错。
如果要在多个解决方案之间共享类库的话, NuGet 默认的设置明显就不能满足需要了, 解决方案可能位于不同的目录, 如果每个解决方案目录内都再都有一个 packages 目录的话, 就会重复下载很多类库, 大家自然会想到将所有的第三方资源都放到一个统一的目录内, 这个特性在早期的 NuGet 版本下是不支持的, 随着 NuGet 2.x 系列版本的发布, 这个功能可以通过 NuGet 配置文件来实现。
我计算机上的项目目录如下, 所有的解决方案都位于 ~/MyProjects 目录内, 每个解决方案一个目录, 将所有的 nuget 包都放到一个 packages 目录, 而不是在每个解决方案目录内都建一个这样的目录。
~/MyProjects
|-- SoluationA
|-- SoluationA
|-- SoluationA
|-- (Other soluations)...
|-- packages
为了达到这样的效果, 需要现在 MyProjects 目录下新建一个 NuGet.config 文件, 文件的内容如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
<!-- 默认不将 packages 提交到源代码管理 -->
<add key="disableSourceControlIntegration" value="true" />
</solution>
<config>
<!-- 指定这个目录下默认的 packages 目录 -->
<add key="repositorypath" value="~/MyProjects/packages/" />
</config>
<packageRestore>
<!-- 默认启用 packages 还原 -->
<add key="enabled" value="True" />
</packageRestore>
</configuration>
这样, 在这个目录内的项目中使用 nuget 时, nuget 会检测的这个配置文件, 并读取里面的配置信息, 如果子目录内也有 NuGet.config 文件, 那么 NuGet 会自动将子目录内的配置与上级目录的配置合并, 存在相同的配置时, 以子目录内的配置优先。
还需要修改一下 VS 的配置, 允许 NuGet 自动下载 package , 如下图所示:
最终的目录结构看起来是这样子的:
~/MyProjects
|-- SoluationA
|-- SoluationA
|-- SoluationA
|-- (Other soluations)...
|-- NuGet.config
|-- packages
有了这样的 NuGet 一个配置文件, 在 MyProjects 目录下所有的解决方案将会公用一个 packages 目录, 并且自动下载缺失的 package 。
当然, NuGet 的配置远不止这些, 像深入挖掘的话, 需要好好看看NuGet 提供的文档。
- 3856: Monster
- BZOJ4753: [Jsoi2016]最佳团体
- 3101: N皇后
- 算法模板——线性欧拉函数
- jdbc基础 (一) MySQL的简单使用
- 小白博客 爆破内网mysql数据库root密码脚本代码
- 2818: Gcd
- 1688: [Usaco2005 Open]Disease Manangement 疾病管理
- 通过MySQL自动同步刷新Redis
- 13.MySQL(一) 数据库简介mysql安装数据库操作Mysql数据类型存储引擎
- 3314: [Usaco2013 Nov]Crowded Cows
- BZOJ4766: 文艺计算姬
- 14.MySQL(二) 数据之表操作表内容操作Mysql 连接事务外键
- 3450: Tyvj1952 Easy
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 新浪微博IPAD客户端XSS(file域) + 构造Worm
- Firefox 31~34远程命令执行漏洞的分析
- emlog绕过验证码刷评论
- cmseasy最新注入+360webscan的绕过分析
- 新型任意文件读取漏洞的研究
- Chrome XSS Auditor Bypass Using SVG
- ngx_lua_waf针对性改写
- Wordpress < 4.1.2 存储型XSS分析与稳定POC
- 重构Sec-News之路
- ThinkPHP留后门技巧
- 『三个白帽』某题的writeup
- 创造tips的秘籍——PHP回调后门
- Joomla远程代码执行漏洞分析(总结)
- 那些年我拿下的demo站之方维O2O
- emlog自动备份插件泄露整站数据库备份漏洞