Подтвердить что ты не робот

NuGet: Как я могу изменить свойство файлов с файлом Install.ps1?

Я создаю пакет NuGet, и для этого я создал файл манифеста Nuspec. В папке content у меня есть два файла, test.exe и test.config. Теперь я хотел бы изменить свойство "Copy To Output Directory" этих файлов в "Copy Always" в проекте, когда любой пользователь устанавливает этот пакет.

Я нашел связанный вопрос NuGet, как применить свойства к файлам, который показывает, что это может сделать с помощью PowerShell install.ps1 script, но я понятия не имею, как создайте этот файл.

4b9b3361

Ответ 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 и помечен как "Копировать, если новый".