繁体   English   中英

用数百个项目的NuGet引用替换二进制引用

[英]Replacing binary references with NuGet References for hundreds of projects

考虑使用大约现有的大型代码库。 150多个解决方案和800多个C#项目。 许多是使用NUnit编写的单元测试。 所有这些项目都从签入的“lib”文件夹中引用“nunit.framework.dll”。“lib”文件夹中还有许多第三方程序集,它们具有相应的NuGet包。

我可以手动打开150多个解决方案并将每个引用迁移到NuGet。 然而,这被证明是乏味且容易出错的。 我编写了一个C#控制台应用程序来解析csproj文件,并确定需要为各个项目安装哪些软件包。 所以我知道300多个项目需要安装NUnit包。

如何以编程方式自动化在解决方案中安装包,与在Visual Studio 2013中手动完成相同的行为? 我到处寻找,但只找到了一个扩展 ,但它没有执行带有依赖项的完整安装等。

创建一个只包含NUnit包条目的packages.config文件
package.config应该看起来像这样检查正确的包名,版本和目标信息

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="nunit.framework" version="2.6.3" targetFramework="net45" requireReinstallation="true" />
</packages>

扩展您编写的实用程序以解析.csproj文件
编辑csproj文件并添加以下标记

  <ItemGroup>
    <None Include="packages.config" />
  </ItemGroup>

packages.config应该复制到所有项目文件夹; 否则,如果您的项目具有相同的引用,您可以选择添加packages.config作为链接

 <ItemGroup>
    <None Include="$(SolutionDir)packages.config">
       <Link>$(SolutionDir)packages.config</Link>
    </None>
  </ItemGroup>

完成后,在visual studio中打开解决方案,然后转到NuGet控制台并输入以下命令; NuGet将解决缺少的依赖项并添加它们。

update-package

您可以使用以下代码段:

Get-Project -All | foreach-object {IF (Get-Content $_.FullName | Select-String 'Reference Include="XXX"') {Install-Package XXX -ProjectName $_.FullName}}

XXX替换为所需的软件包名称,然后在Visual Studio中的Tools->NuGet Package Manager->Package Manager Console运行代码段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM