创建NuGet包,其中将Copy Local设置为false来安装引用

时间:2012-06-19 16:27:32

标签: nuget

有没有办法创建一个NuGet包,当包安装到项目中时,它会添加对“复制本地”设置为false的dll的引用?

我认为它会是'install.ps1'文件中的某种脚本。

2 个答案:

答案 0 :(得分:20)

是的,您可以使用install.ps1执行此操作,正如您所猜测的那样。

这是一个示例install.ps1,它会在每次运行时翻转System.dll上的标志。您应该能够使用此示例了解如何执行所需操作:

param($installPath, $toolsPath, $package, $project)

foreach ($reference in $project.Object.References)
{
    if($reference.Name -eq "System")
    {
        if($reference.CopyLocal -eq $true)
        {
            $reference.CopyLocal = $false;
        }
        else
        {
            $reference.CopyLocal = $true;
        }
    }
}

但是这个MSDN文档应该会有所帮助。

答案 1 :(得分:6)

我认为这个install.ps1符合您的要求 - 包中添加的所有DLL都被赋予Copy Local值false。请注意,这里我没有对AssemblyReferences列表做任何事情,除了从中获取所有名称 - 如果你想要基于目标框架的条件等,你可能需要做更多的事情。

param($installPath, $toolsPath, $package, $project)

$asms = $package.AssemblyReferences | %{$_.Name}

foreach ($reference in $project.Object.References)
{
    if ($asms -contains $reference.Name + ".dll")
    {
        $reference.CopyLocal = $false;
    }
}