Можно ли заставить пакеты nuGet перезаписывать существующие файлы? Мне нужен хороший способ применения патчей (файлов, dll, ресурсов) в трех подобных проектах, и это может быть хорошим решением.
Nuget перезаписывать файлы
Ответ 1
Это может быть выполнено с помощью powershell и зависимостей пакетов...
У меня есть пакет NuGet, который я создаю для ASP.NET MVC, у него есть все файлы, которые я хочу добавить в стандартный проект Mvc (DisplayTemplates, EditorTemplate, Extensions, BaseController и т.д.). Скажем, его назвали "Company.WebMvc"
Я создал еще один пакет NuGet под названием "Company.WebMvc-Prep". У него есть Install.ps1 script, который удаляет все, что я не хочу, из стандартного проекта 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". Зачем? потому что Install.ps1 (обычно) запускается после того, как NuGet добавляет файлы из папки содержимого. Мне нужно сначала удалить файлы, а затем добавить новые. Поэтому, когда вы звоните...
Install-Package Company.WebMvc
Компания. WebMvc-Prep устанавливается сначала, потому что это зависимость (выполняется Install.ps1)
Затем устанавливается Company.WebMvc, который добавляет ваш контент.
Длинные и короткие, это... Вы можете перезаписать существующий контент в своем проекте через пакет NuGet.
P.S. Помните, что вы также можете выполнять частичные классы, чтобы изолировать код пакета NuGet от конкретного кода проекта.
Ответ 2
Перезапись файлов содержимого сегодня не поддерживается.
Ответ 3
Как полагает Дэвид Фаулер в этом обсуждении http://nuget.codeplex.com/discussions/252305 вы можете развернуть свои файлы в папке temp, а затем перезаписать их в исходном месте с помощью PowerShell script.
Ответ 4
Хотя вы, видимо, не можете указать это для всех установок пакета (в соответствии с другими ответами), на самом деле можно указать его для одной установки. Установите пакет с помощью:
Install-Package com.company.mypackage -FileConflictAction Overwrite
Это автоматически перезапишет все файлы, конфликтующие в процессе установки.