2012-06-19 19 views
13

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

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

+0

,为什么你不想在本地复制文件? – kiewic

+1

@ kiewic这是一个很好的问题。我希望我的5年前的自己的问题已经被记录下来,因为在这一点上我不知道! –

回答

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

+0

我发现了一个关于在NuGet Powershell脚本中添加引用的Hanselman帖子:$ project.Object.References.Add(“Microsoft.CSharp”);.这使我更接近,但我无法找到文件显示如何选择和修改参考,以更改'复制本地' –

+0

更新了一个更好的例子的答案。 –

+0

当我为此在VS2015我经常与重复结束 <参考包含=“..”>

6

我觉得这install.ps1做什么你问 - 所添加的所有DLL软件包的复制本地值为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; 
    } 
} 
只是出于好奇