[英]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.