按Solution获取已经引用的NuGet的Package

简介: NuGet是个不错的东西,在项目中,NuGet都会将下载的文件保存在packages文件夹里 很多时候我并不想将所有的Package都上传到源代码管理中去。 但NuGet只提供了按Project去获取NuGet的方法。

NuGet是个不错的东西,在项目中,NuGet都会将下载的文件保存在packages文件夹里

很多时候我并不想将所有的Package都上传到源代码管理中去。

但NuGet只提供了按Project去获取NuGet的方法。于是还是自己写一个工具来完成这个任务吧。

为了日后可以方便地集成到Build的过程中去,所以使用Msbuild的Task去做这件事会具有更好的扩展性。

一、首先,需要一个NuGet的MsBuild的Task包,这个NuGet已经提供了

http://nuget.codeplex.com/SourceControl/list/changesets

下载后编译使用NuGet.MSBuild.dll即可,另外还需要NuGet.Core.dll和NuGet.targets(编译后会和NuGet.MSBuild在一起)

image

二、packages文件夹中有repositories.config文件

image

这里面包含着所有引用有NuGet包的Project的路径,我们要解析这个文件,所以我决定使用MSBuild.Community.Tasks.dll(http://msbuildtasks.tigris.org/

image

三、预备工作OK了,当然我们存放文件得有点规矩

lib\NuGet
lib\msbuild\ICSharpCode.SharpZipLib.dll
lib\msbuild\MSBuild.Community.Tasks.dll
lib\msbuild\MSBuild.Community.Tasks.Targets
lib\NuGet\NuGet.Core.dll
lib\NuGet\NuGet.MSBuild.dll
lib\NuGet\NuGet.targets

 

那么下面我们来搞定一个MsBuild的Project文件

   1: <?xml version="1.0" encoding="utf-8"?>
   2: <Project DefaultTargets="UpdateNuGet" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   3:   <PropertyGroup>
   4:     <LibFolder>$(MSBuildProjectDirectory)\Lib</LibFolder>
   5:     <OnlineSource>$(MSBuildProjectDirectory)</OnlineSource>
   6:     <NuGetRepositoryPath>$(OnlineSource)\packages</NuGetRepositoryPath>
   7:     <NuGetRepositoryConfig>$(NuGetRepositoryPath)\repositories.config</NuGetRepositoryConfig>
   8:     <NuGetSources>http://go.microsoft.com/fwlink/?LinkId=206669</NuGetSources>
   9:   </PropertyGroup>
  10:   <Import Project="$(LibFolder)\msbuild\MSBuild.Community.Tasks.Targets" />
  11:   <Import Project="$(LibFolder)\NuGet\NuGet.targets" />
  12:     <Target Name="UpdateNuGet">
  13:         <XmlRead XPath="//@path" XmlFileName="$(NuGetRepositoryConfig)">
  14:           <Output TaskParameter="Value" PropertyName="NuGetPackageFiles" />
  15:         </XmlRead>
  16:         <ItemGroup>
  17:             <_NuGetPackages Include="$(NuGetPackageFiles.Split(';'))" />
  18:         </ItemGroup>
  19:         <NuGetFetch PackageDir="$(NuGetRepositoryPath)"
  20:         PackageConfigFile="$([System.IO.Path]::GetFullPath($([System.IO.Path]::Combine($(NuGetRepositoryPath),%(_NuGetPackages.Identity)))))" 
  21:         Sources="$(NuGetSources)"/>
  22:     </Target>
  23: </Project>

将之存为UpdateNuGet.proj

四、接下来只有调用的问题了,我们可以通过批处理去调用

   1: @echo Off
   2: set config=%1
   3: if "%config%" == "" (
   4:   set config=debug
   5: )
   6:  
   7: %WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild UpdateNuGet.proj

将之存为UpdateNuGet.bat这样我们就可以在获取代码之后,运行UpdateNuGet.bat来获取所有的NuGet Package了

 

当然我们也可以在Project编辑时设置BeforeBuild的事件来获取

 

下载所有文件(解压到解决方案根目录即可)

目录
相关文章
|
4天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
288 116
|
19天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
6天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
408 38
Meta SAM3开源:让图像分割,听懂你的话
|
13天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
670 220
|
1天前
|
Windows
dll错误修复 ,可指定下载dll,regsvr32等
dll错误修复 ,可指定下载dll,regsvr32等
132 95
|
11天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1664 158
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
912 61