NuGet: Как я могу изменить свойства файлов с файлом Install.ps1? - PullRequest
23 голосов
/ 12 декабря 2011

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

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

Ответы [ 2 ]

38 голосов
/ 17 января 2012

Ваш файл 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
18 голосов
/ 24 июля 2013

Вот несколько подробностей о том, как решить эту проблему из конца в конец:

Вам нужно сделать две вещи, чтобы убедиться, что статус установлен правильно при установке ...

  1. Напишите сценарий install.ps1, чтобы отметить состояние файлов.
  2. Убедитесь, что сценарий install.ps1 находится в каталоге Tools в пакете nuget.

Сценарий Install.ps1

В следующем примере сценария будет рекурсивно отмечаться каждый файл в каталогах «Содержимое» и «Просмотр» как «Копировать в более новую».Обратите внимание, что этот пример сценария написан для того, чтобы его было понятно и понять.Он будет отмечать каждый файл в папках Content и Views в корневом каталоге проекта 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"))

Копировать в инструменты

Необходимо скопировать установкуФайл .ps1 в каталоге Tools для скрипта, который будет выполняться nuget.Для этого вы можете добавить следующее в шаблон nuspec.

<files>
   <file src="install.ps1" target="Tools"/>
</files>

Обратите внимание, в этом случае у меня есть файл install.ps1 в корне моего проекта Visual Studios и помеченный как «Копировать, если новее».

...