nuget覆盖文件

时间:2012-02-01 17:31:33

标签: nuget nuget-package

是否可以强制nuGet包覆盖现有文件?我需要一个很好的方法来应用3个类似项目的补丁(文件,DLL,资源),这可能是一个很好的解决方案。

4 个答案:

答案 0 :(得分:12)

可以使用powershell和包依赖项来完成...

我有一个为ASP.NET MVC创建的NuGet包,它包含我想要添加到标准Mvc项目的所有文件(DisplayTemplates,EditorTemplate,Extensions,BaseController等)。我们称之为“Company.WebMvc”

我创建了另一个名为“Company.WebMvc-Prep”的NuGet包,它有一个Install.ps1脚本,可以删除标准Mvc项目中我不想要的任何内容。以下是删除现有Scripts文件的代码示例...

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

#Remove Script Files

$scripts = $project.ProjectItems | Where-Object { $_.Name -eq "Scripts" }

if ($scripts) {

    $scripts.ProjectItems | ForEach-Object { $_.Delete() }

}

然后我将“Company.WebMvc-Prep”设为“Company.WebMvc”的依赖项。为什么?因为在NuGet添加内容文件夹中的文件后运行Install.ps1(通常)。我需要它先删除文件然后添加新文件。所以当你打电话......

Install-Package Company.WebMvc

首先安装Company.WebMvc-Prep,因为它是依赖项(运行Install.ps1)

然后安装了Company.WebMvc,用于添加您的内容。

它的长短是......你可以通过NuGet包覆盖项目中的现有内容。

P.S。请记住,您也可以使用部分类来隔离NuGet包代码和项目特定代码。

答案 1 :(得分:5)

目前不支持覆盖内容文件。

答案 2 :(得分:4)

正如David Fowler在本次讨论中所说的那样 http://nuget.codeplex.com/discussions/252305 您可以将文件部署在临时文件夹中,然后使用PowerShell脚本在原始位置覆盖它们。

答案 3 :(得分:1)

虽然您显然无法为软件包的所有安装指定此项(根据其他答案),但实际上可以为单个安装指定它。使用以下命令安装软件包:

Install-Package com.company.mypackage -FileConflictAction Overwrite

这将自动覆盖安装过程中发生冲突的所有文件。