Как получить содержимое файла во время установки пакета NuGet - PullRequest
0 голосов
/ 01 мая 2018

У меня есть пакетное решение nuget, которое отлично устанавливается. Теперь мне нужно изменить файл Properties\AssemblyInfo.cs целевого проекта, чтобы добавить код.

У меня есть сценарий Install.ps1, поэтому я добавляю к нему свой скрипт powershell. Пока я строю это, я делаю следующее:

param($installPath, $toolsPath, $package, $project)
$content = Get-Content $project.ProjectItems.Item("Properties\AssemblyInfo.cs")

Ошибка, которую он мне дает, такова:

Value does not fall within the expected range.At 
C:\git\Testing\packages\Standards.Testing.1.0.6694.30974-beta\tools\Install.ps1:2
char:1
+ $content = Get-Content $project.ProjectItems.Item("Properties\Assembl ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException

Цель состоит в том, чтобы загрузить содержимое файла AssemblyInfo.cs и проверить его на наличие определенного содержимого, затем изменить его и записать обратно.

Чего я не понимаю, так это того, почему он не будет читать содержимое этого файла в переменную.

1 Ответ

0 голосов
/ 02 мая 2018

Проблема заключалась в том, что я неправильно пытался указать путь к файлу AssemblyInfo.cs. Я не осознавал, что параметры сценария предоставляют все, что мне нужно, и что другие посты ссылаются на страшно выглядящий класс, который содержит всю необходимую информацию.

SO, содержащий информацию о параметрах скрипта: Требуется PowerShell Script в NuGet для установки выбранных DLL из пакета в проект VS

С этого поста связана эта страница с подробной информацией об установке Nuget: https://docs.microsoft.com/en-us/dotnet/api/envdte.dte?redirectedfrom=MSDN&view=visualstudiosdk-2017

Мой скрипт теперь выглядит так:

param($installPath, $toolsPath, $package, $project)

#Update the AssemblyInfo.cs if it has not been updated before
function Get-Append-String {
    $text = ''
    $args[0] | ForEach-Object -Process {
        $text += $_ + "`n"
    }
    return $text
}

function Get-Append {
    $text = ''
    $args | ForEach-Object -Process {
        $text += $_
    }
    return $text
}

function Get-Contains {
    $text = Get-Append-String $args[0]
    return ($text -like $args[1])
}

$query = "*using Xunit;*"
$xunit = "using Xunit;`n"
$comment = "`n// xUnit configuraiton...`n// MaxParallelThreads limits the number of threads which xUnit will use to run tests`n[assembly: CollectionBehavior(MaxParallelThreads = 8)]`n"

$path = $project.FullName + '\..\Properties\AssemblyInfo.cs'
$content = Get-Content -Path $path
$content = Get-Append-String $content

if ( ($content -like $query) -eq $false ) {
    $content = $xunit + $content + $comment
    Set-Content -Path $path -Value $content
}
...