2013-09-27 13 views
9

Mam problem ze skryptem ps w init.ps1 pakietu nuget. Próbuję utworzyć folder rozwiązania po zainstalowaniu pakietu ORAZ następnie skopiować bibliotekę dll/pdbs do tego folderu (i usunąć plik dll/pdbs źródłowy instalowany przez pakiet w projekcie). Jestem w stanie utworzyć folder rozwiązania, ale mam problemy z kopiowaniem plików z katalogu \ content \ temp do folderu rozwiązania. Rzeczywiście, naprawdę chcę, aby prawdziwy folder w systemie plików i folder rozwiązania pasowały, więc kopia powinna skopiować pliki do rzeczywistego folderu systemu plików, a następnie zostać dodana do folderu rozwiązania.
Część kopii nie działa i nie otrzymuję żadnych błędów wyjściowych. Bit stracony.Skopiuj pliki do folderu rozwiązania za pomocą init.ps1 i nuget

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

# Get the open solution. 
$solution = Get-Interface $dte.Solution ([EnvDTE80.Solution2]) 

# Create the parent solution folder. 
$parentProject = $solution.AddSolutionFolder("MyDlls") 

# Create a child solution folder. 
$parentSolutionFolder = Get-Interface $parentProject.Object ([EnvDTE80.SolutionFolder]) 

$fileName = (Join-Path $installPath "\temp\mydll") 
$projectFile = $parentSolutionFolder.AddFromFile($fileName) 

Write-Host "" 
Write-Host $sourcePath 
Write-Host $parentSolutionFolder 
+0

Z odsetek, jakie są drogi jesteś przejazdem do $ INSTALLPATH i $ toolsPath – mitchimus

+0

@mitchimus nich ścieżki są przekazywane przez środowisko NuGet Powershell i odpowiadają absolutnej ścieżce, w której jest zainstalowany pakiet (katalog w katalogu "packages", który znajduje się w tym samym katalogu, co plik rozwiązania) i ścieżka do folderu "tools" w $ installPath, odpowiednio. – ygormutti

Odpowiedz

7

miałem ten sam problem i znaleźć skrypt PowerShell w projekcie BuildDeploySupport że zrobił dokładnie to. Wszystko, co musisz zrobić, to zaktualizować nazwę folderu, do którego chcesz skopiować (Deploy \ Support w ps1 linkowanym poniżej) w kilku miejscach.

Zobacz BuildDeploySupport Solution Folder Copy Init.ps1

z linku (od 30/11/2017):

param($installPath, $toolsPath, $package) 

# find out where to put the files, we're going to create a deploy directory 
# at the same level as the solution. 

$rootDir = (Get-Item $installPath).parent.parent.fullname 
$deployTarget = "$rootDir\Deploy\Support\" 

# create our deploy support directory if it doesn't exist yet 

$deploySource = join-path $installPath 'tools/deploy' 

if (!(test-path $deployTarget)) { 
    mkdir $deployTarget 
} 

# copy everything in there 

Copy-Item "$deploySource/*" $deployTarget -Recurse -Force 

# get the active solution 
$solution = Get-Interface $dte.Solution ([EnvDTE80.Solution2]) 

# create a deploy solution folder if it doesn't exist 

$deployFolder = $solution.Projects | where-object { $_.ProjectName -eq "Deploy" } | select -first 1 

if(!$deployFolder) { 
    $deployFolder = $solution.AddSolutionFolder("Deploy") 
} 

# add all our support deploy scripts to our Support solution folder 

$folderItems = Get-Interface $deployFolder.ProjectItems ([EnvDTE.ProjectItems]) 

ls $deployTarget | foreach-object { 
    $folderItems.AddFromFile($_.FullName) > $null 
} > $null 
+1

Okazuje się, że skrypt nie jest rekursywny, ale uczynienie go rekurencyjnym jest łatwe. Zmodyfikuj wiersz 36, aby przeczytać: 'ls -recurse $ deployTarget | foreach-object {' – mshish

+3

Proszę skopiować odpowiednie fragmenty (pozostawienie linku jako atrybucji). Strony internetowe są znane z tego, że znikają, a nawet zmieniają się z czasem. – Crisfole

Powiązane problemy