有没有办法创建一个NuGet包,当包安装到项目中时,它将“Copy Local”设置为false的引用添加到dll中?创建NuGet包,其中安装引用与复制本地设置为假
我认为这将是'install.ps1'文件中的某种脚本。
有没有办法创建一个NuGet包,当包安装到项目中时,它将“Copy Local”设置为false的引用添加到dll中?创建NuGet包,其中安装引用与复制本地设置为假
我认为这将是'install.ps1'文件中的某种脚本。
是的,你可以用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文档应该有所帮助。
Object
Hanselman的使用解析为VSProject Interface.$project
变量的NuGet给你解析为Project Interface.我发现了一个关于在NuGet Powershell脚本中添加引用的Hanselman帖子:$ project.Object.References.Add(“Microsoft.CSharp”);.这使我更接近,但我无法找到文件显示如何选择和修改参考,以更改'复制本地' –
更新了一个更好的例子的答案。 –
当我为此在VS2015我经常与重复结束 <参考包含=“..”>
我觉得这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;
}
}
只是出于好奇
,为什么你不想在本地复制文件? – kiewic
@ kiewic这是一个很好的问题。我希望我的5年前的自己的问题已经被记录下来,因为在这一点上我不知道! –