programing

NuGet: Install.ps1 파일로 파일의 속성을 변경하려면 어떻게 해야 합니까?

sourcetip 2023. 8. 20. 18:31
반응형

NuGet: Install.ps1 파일로 파일의 속성을 변경하려면 어떻게 해야 합니까?

NuGet 패키지를 만들고 있으며 이를 위해 Nuspec 매니페스트 파일을 만들었습니다.content나는 2개의 파일을 가지고 있습니다.test.exe그리고.test.config이제 사용자가 이 패키지를 설치할 때 프로젝트에서 이러한 파일의 "Copy To Output Directory" 속성을 "Copy Always"로 변경하려고 합니다.

관련 질문을 찾았습니다. NuGet 속성을 파일에 적용하는 방법, PowerShell을 사용하여 이를 수행할 수 있는 프로그램입니다.install.ps1스크립트입니다. 하지만 그 파일을 만드는 방법을 모르겠습니다.

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

다음은 이 문제를 엔드 투 엔드로 해결하는 방법에 대한 약간 더 자세한 내용입니다.

설치 시 상태가 올바르게 설정되도록 하려면 두 가지 작업을 수행해야 합니다.

  1. install.ps1 스크립트를 작성하여 파일의 상태를 표시합니다.
  2. install.ps1 스크립트가 nuget 패키지의 Tools 디렉토리에 있는지 확인합니다.

Install.ps1 스크립트

다음 예제 스크립트는 "내용" 및 "보기" 디렉토리의 모든 파일을 "새로 복사"로 재귀적으로 표시합니다.이 예제 스크립트는 명확하게 읽고 이해할 수 있도록 작성되었습니다.Visual Studios 프로젝트의 루트 디렉터리에 있는 Content 및 Views 폴더의 모든 파일에 표시됩니다.

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"))

도구로 복사

nuget에서 스크립트를 실행하려면 install.ps1 파일을 Tools 디렉토리에 복사해야 합니다.nusspec 템플릿에 다음을 추가하여 이 작업을 수행할 수 있습니다.

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

이 경우 Visual Studios 프로젝트 루트에 install.ps1 파일이 있으며 "Copy if newer"로 표시되어 있습니다.

언급URL : https://stackoverflow.com/questions/8474253/nuget-how-can-i-change-property-of-files-with-install-ps1-file

반응형