Nuget перезаписывать файлы

Можно ли заставить пакеты nuGet перезаписывать существующие файлы? Мне нужен хороший способ применения патчей (файлов, dll, ресурсов) в трех подобных проектах, и это может быть хорошим решением.

Ответы

Ответ 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

Это автоматически перезапишет все файлы, конфликтующие в процессе установки.