将.csproj文件中的所有Nuget依赖项作为DLL提取到指定的目录中



有没有办法将.csproj文件中的所有Nuget依赖项作为DLL提取到指定目录?

有没有办法将.csproj文件中的所有Nuget依赖项作为DLL提取到指定目录?

是否要基于.csproj文件将dll文件提取到指定目录?如果是,NuGet不支持此功能,但您可以使用其他技术来满足此要求,如Power Shell。

要实现这一点,请在项目文件目录下创建一个PowerShell脚本GetDllFiles.ps1,代码如下:

$projectFiles = get-childitem . *.csproj -Recurse 
foreach( $projectFile in $projectFiles )
{
$projectXml = [xml] (get-content $projectFile.FullName)
$projectDir = $projectFile.DirectoryName
Write-Host "# $($projectFile.FullName) #"

foreach( $itemGroup in $projectXml.Project.ItemGroup )
{
if( $itemGroup.Reference.Count -eq 0 )
{
continue
}
foreach( $reference in $itemGroup.Reference )
{
if( $reference.Include -eq $null )
{
continue
}
if( $reference.HintPath -eq $null )
{
Write-Host ("{0}" -f $reference.Include)
}
else
{
$fullpath = $reference.HintPath
if(-not [System.IO.Path]::IsPathRooted( $fullpath ) )
{
$fullPath = (join-path $projectDir $fullpath)
$fullPath = [System.IO.Path]::GetFullPath("$fullPath")
}
Write-Host $fullPath
Copy-Item $fullPath D:Test
}
}
}
Write-Host ''
Start-Sleep –s 10
}

这个PowerShell脚本获取当前目录下的每个.csproj文件,并检查每个引用。对于从GAC引用的程序集,只输出名称。对于GAC之外的程序集,请输出程序集的完整路径,然后可以将它们复制到指定的目录中。

更新评论:

但我想要一个不同的东西-从.csproj获取所有NuGet包,并将它们"解压缩"到指定的目录中,以便拥有我的应用程序所依赖的所有DLL。

如果你想将整个nuget包提取到指定的目录,而不仅仅是dll文件,你可以使用一个简单的nuget命令行来实现它:

nuget restore "xx.csproj" -OutputDirectory "SpecifiedDirectoryPath"

这个命令行将获取整个nuget包,并将它们解压缩到指定的目录中。

最新更新