考虑一个大的现有代码库。 150多个解决方案和800多个C#项目。许多是使用NUnit编写的单元测试。所有这些项目都从签入的“lib”文件夹中引用“nunit.framework.dll”。“lib”文件夹中还有许多第三方程序集,它们具有相应的NuGet包。
我可以手动打开150多个解决方案并将每个引用迁移到NuGet。然而,这被证明是乏味且容易出错的。我编写了一个C#控制台应用程序来解析csproj文件,并确定需要为各个项目安装哪些软件包。所以我知道300多个项目需要安装NUnit包。
如何以编程方式自动化解决方案中的软件包安装,与在Visual Studio 2013中手动完成相同的行为?我到处寻找,但只发现了一个extension,但它没有执行带依赖关系等的完整安装。
答案 0 :(得分:3)
创建一个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
答案 1 :(得分:2)
您可以使用以下代码段:
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
中运行代码段。