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

本文关键字:引用 百个 项目 NuGet 替换 二进制 | 更新日期: 2023-09-27 18:36:34

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

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

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

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

创建一个 packages.config 文件,其中只有一个 NUnit 包
的条目 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运行代码段。