我正在嘗試編寫一個單元測試來強制整合Nuget包(我們有一個構建要求,所有單元測試都會通過,所以這樣可以保持未通過合併的PR),而我試圖使用Nuget.Core
來做到這一點。然而,我似乎無法通過他們的圖書館找到我的出路,也沒有人問過這個問題。那麼,如何以編程方式獲得給定解決方案引用的所有Nuget包?獲取解決方案中的所有nuget包
0
A
回答
0
這是最終的解決方案(與單元測試一起)。關鍵是使用Directory
庫遍歷解決方案中的所有項目,然後使用NuGet.Core
分析每個項目中的NuGet包。
using Microsoft.VisualStudio.TestTools.UnitTesting;
using NuGet;
using Shouldly;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace UnitTests
{
[TestClass]
public class NugetConsolidationTest
{
private List<string> _ignoredPackages = new List<string>();
[TestMethod]
public void AllNugetPackagesAreConsolidated()
{
var packageVersionMapping = new Dictionary<string, List<string>>();
var parentDir = (Directory.GetParent(Directory.GetCurrentDirectory()).Parent).Parent.FullName;
var files = Directory.GetFiles(parentDir, "packages.config", SearchOption.AllDirectories);
foreach (var packageFile in files)
{
var file = new PackageReferenceFile(packageFile);
var refs = file.GetPackageReferences(true);
foreach (var packageRef in refs)
{
if (_ignoredPackages.Contains(packageRef.Id))
continue;
if (!packageVersionMapping.ContainsKey(packageRef.Id))
packageVersionMapping[packageRef.Id] = new List<string>() { packageRef.Version.ToFullString() };
else
{
if (packageVersionMapping[packageRef.Id].All(x => !x.Equals(packageRef.Version.ToFullString(),
StringComparison.InvariantCultureIgnoreCase)))
packageVersionMapping[packageRef.Id].Add(packageRef.Version.ToFullString());
}
}
}
var errors = packageVersionMapping.Where(x => x.Value.Count > 1)?.
Select(x => $"Package {x.Key} has {x.Value.Count} separate versions installed! Current versions are {string.Join(", ", x.Value)}");
errors.ShouldBeEmpty();
}
}
}
+0
這是輝煌謝謝。我用它來創建項目中使用的開源軟件的CSV文件....但我也將從現在開始在所有項目中使用此測試:) –
1
您可以隨時閱讀package.config文件並解析它們。
解決方案中包含的每個項目都包含一個參考其他packages.config文件的解決方案目錄。
相關問題
- 1. 如何恢復解決方案中的所有nuget包?
- 2. Nuget在解決方案中打包所有子項目
- 3. 從解決方案的NuGet安裝包
- 4. 整個Habitat解決方案的Nuget包
- 5. 安裝Nuget軟件包解決方案
- 6. 刪除NuGet包從解決方案
- 7. 獲取解決方案中所有方法參數的方法
- 8. 整個解決方案中的NuGet update_package
- 9. 爲具有多個項目的解決方案創建nuget包
- 10. 獲取解決方案中的所有主題
- 11. 在Google或工具中獲取所有解決方案
- 12. NuGet中的包依賴性解決方案和命名衝突
- 13. 包含在TFS中的解決方案NuGet構建
- 14. 的NuGet和多種解決方案
- 15. 在VS 2010解決方案中重複使用nuget軟件包
- 16. 在NuGet包中添加解決方案級項目
- 17. 在visual studio中更新解決方案級nuget包
- 18. Scipy fsolve:沒有解決方案使所有有效的解決方案失效
- 19. 獲取所有項目fron解決方案拋出錯誤
- 20. Visual Studio 2015 RC1 - 管理解決方案的Nuget包
- 21. 如何成功恢復整個解決方案的nuget包?
- 22. Nuget C++包充斥了我的解決方案和文件
- 23. 如何使用VS的git子模塊解決nuget包解決方案
- 24. 在nuget中有多種解決方案的開發過程
- 25. 從vs 2008中的解決方案中提取所有類名
- 26. 包含多個解決方案的Visual Studio解決方案
- 27. 添加整個解決方案到nuspec創建Nuget包
- 28. Nuget包只適用於默認解決方案配置
- 29. Nuget並將軟件包添加到解決方案
- 30. 根據解決方案配置指定nuget包版本
檢查如何使用NuGet.Core這個答案讀packages.config https://stackoverflow.com/a/33046897/920557 –