nuget覆盖文件
它可以使用PowerShell和软件包的依赖关系来完成...
我有我的ASP.NET MVC创建NuGet包它有所有我想要添加到标准的MVC项目中的文件( DisplayTemplates,EditorTemplate,扩展,BaseController等)。假设它被称为“Company.WebMvc”
我创建了另一个名为“Company.WebMvc-Prep”的NuGet包,它具有Install.ps1脚本,可以从标准Mvc项目中删除任何不需要的内容。下面是删除现有脚本的代码示例文件...
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,准备”“Company.WebMvc”的依赖。为什么?因为在NuGet添加内容文件夹中的文件后,Install.ps1(通常)会运行。我需要它先删除文件然后添加新的文件。所以,当你打电话......
安装,包装Company.WebMvc
Company.WebMvc,准备第一次安装,因为它是一个依赖(运行Install.ps1)
然后安装Company.WebMvc它会添加您的内容。
总之和它是...你可以可以通过NuGet包覆盖项目上的现有内容。
P.S.请记住,您也可以使用部分类来分离NuGet包代码与项目特定代码。
今天不支持覆盖内容文件。
任何想法如果/何时?我们希望使用nuget来协助我们所依赖的共享(第三方)配置的分发/同步。如果
如果没有你应该添加一个 – davidfowl 2013-03-21 21:32:39
http://nuget.codeplex.com/workitem/278-似乎是为vNext(2.3):) – 2013-03-21 22:51:27
正如David福勒建议在本次讨论 http://nuget.codeplex.com/discussions/252305 您可以在临时文件夹部署文件,然后通过使用PowerShell脚本在原来的位置覆盖它们。
尽管您显然无法为该软件包的所有安装指定此选项(根据其他答案),但实际上可以将其指定为单个安装。安装软件包:
Install-Package com.company.mypackage -FileConflictAction Overwrite
这将自动覆盖所有在安装过程中发生冲突的文件。
感谢您的想法,但它不适合我。根据[官方文档](https://docs.microsoft.com/en-us/nuget/tools/ps-ref-update-package)-FileConflictAction将应用于项目中引用的文件。不幸的是,这不是我的情况。 – 2018-02-06 08:42:10
非常感谢。这正是我所期待的。没有想过依赖路线。这也确保我明确指出哪些文件需要删除和更新,哪些文件不太容易出错。 – keeney 2012-02-29 09:27:49
我尝试过这种解决方案,但在我的情况下,每次安装新版本的软件包时,我都想删除旧文件并将新文件放在适当位置。这要求我每次更新主包时都要更新Prep版本...我想知道是否可以避免这种情况。 – rekna 2012-09-07 13:17:18