NuGet: Как я могу изменить свойство файлов с файлом Install.ps1?
Я создаю пакет NuGet, и для этого я создал файл манифеста Nuspec. В папке content
у меня есть два файла, test.exe
и test.config
. Теперь я хотел бы изменить свойство "Copy To Output Directory" этих файлов в "Copy Always" в проекте, когда любой пользователь устанавливает этот пакет.
Я нашел связанный вопрос NuGet, как применить свойства к файлам, который показывает, что это может сделать с помощью PowerShell install.ps1
script, но я понятия не имею, как создайте этот файл.
Ответы
Ответ 1
Ваш файл install.ps1 должен выглядеть примерно так.
param($installPath, $toolsPath, $package, $project)
$file1 = $project.ProjectItems.Item("test.exe")
$file2 = $project.ProjectItems.Item("test.config")
# set 'Copy To Output Directory' to 'Copy if newer'
$copyToOutput1 = $file1.Properties.Item("CopyToOutputDirectory")
$copyToOutput1.Value = 2
$copyToOutput2 = $file2.Properties.Item("CopyToOutputDirectory")
$copyToOutput2.Value = 2
Ответ 2
Ниже приводится более подробная информация о том, как решить эту проблему до конца:
Вам нужно сделать две вещи, чтобы убедиться, что статус установлен правильно при установке...
- Запишите файл install.ps1 script, чтобы отметить статус файлов.
- Убедитесь, что install.ps1 script находится в каталоге "Инструменты" в пакете nuget.
Install.ps1 Script
Следующий пример script будет рекурсивно отмечать каждый файл в каталоге "Содержимое" и "Вид" как "Копировать в новое". Обратите внимание, что этот пример script написан, чтобы было ясно читать и понимать. Он будет отмечать каждый файл в папках "Контент и виды" в корневом каталоге проекта Visual Studios.
param($installPath, $toolsPath, $package, $project)
function MarkDirectoryAsCopyToOutputRecursive($item)
{
$item.ProjectItems | ForEach-Object { MarkFileASCopyToOutputDirectory($_) }
}
function MarkFileASCopyToOutputDirectory($item)
{
Try
{
Write-Host Try set $item.Name
$item.Properties.Item("CopyToOutputDirectory").Value = 2
}
Catch
{
Write-Host RecurseOn $item.Name
MarkDirectoryAsCopyToOutputRecursive($item)
}
}
#Now mark everything in the a directory as "Copy to newer"
MarkDirectoryAsCopyToOutputRecursive($project.ProjectItems.Item("Content"))
MarkDirectoryAsCopyToOutputRecursive($project.ProjectItems.Item("Views"))
Копировать в инструменты
Вы должны скопировать файл install.ps1 в каталог "Инструменты" для script, который должен выполняться nuget. Вы можете добавить к шаблону nuspec следующее:
<files>
<file src="install.ps1" target="Tools"/>
</files>
Обратите внимание, что в этом случае у меня есть файл install.ps1 в корне моего проекта Visual Studios и помечен как "Копировать, если новый".