簡體   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