14

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

我认为这将是“install.ps1”文件中的某种脚本。

4

2 回答 2

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 文档应该会有所帮助。

于 2012-06-19T17:43:59.830 回答
7

我认为这个 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;
    }
}
于 2012-07-12T00:04:23.687 回答