是否可以强制 nuGet 包覆盖现有文件?我需要一种在 3 个类似项目中应用补丁(文件、dll、资源)的好方法,这可能是一个很好的解决方案。
最佳答案
它可以通过powershell和一个包依赖来完成......
我有一个为 ASP.NET MVC 创建的 NuGet 包,它包含我想添加到标准 Mvc 项目的所有文件(DisplayTemplates、EditorTemplate、Extensions、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-Prep”成为“Company.WebMvc”的依赖项。为什么?因为 Install.ps1(通常)在 NuGet 添加内容文件夹中的文件后运行。我需要它先删除文件,然后添加新文件。所以当你打电话...
安装包 Company.WebMvc
Company.WebMvc-Prep 首先安装,因为它是一个依赖项(运行 Install.ps1)
然后安装 Company.WebMvc 来添加您的内容。
总而言之...你可以通过 NuGet 包覆盖项目中的现有内容。
附言请记住,您还可以使用部分类来隔离 NuGet 包代码与项目特定代码。
关于nuget 覆盖文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9100410/