2013-03-17 15 views
7

Jestem nowy w Nuget i próbuję wymyślić załadowanie mojego pierwszego pakietu. Jak dotąd wszystko poszło gładko. Jednak próbuję ustawić CopyToOutputDirectory na niektórych plikach zawartości, które chcę żyć w podfolderze Lib. Mój katalog wygląda następująco:Nuget - Ustawianie CopyToOutputDirectory dla zawartości w podfolderach

│ Readme.txt 
│ MyPackage.nupkg 
│ MyPackage.nuspec 
│ 
├───content 
│ └───Lib 
│   native1.dll 
│   native2.dll 
│   native3.dll 
│   native4.dll 
│ 
├───lib 
│  MyActualAssembly.dll 
│ 
└───tools 
     Install.ps1 

Od czytania this StackOverflow question i jakiegoś dodatkowego czytania, mam ułożyła Install.ps1, który wygląda tak:

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

$project.ProjectItems.Item("Lib\native1.dll").Properties.Item("CopyToOutputDirectory").Value = 1 
$project.ProjectItems.Item("Lib\native2.dll").Properties.Item("CopyToOutputDirectory").Value = 1 
$project.ProjectItems.Item("Lib\native3.dll").Properties.Item("CopyToOutputDirectory").Value = 1 
$project.ProjectItems.Item("Lib\native4.dll").Properties.Item("CopyToOutputDirectory").Value = 1 

I 1 wysadzanej różne operacje Sprawdź, czy pomogło mi to zrozumieć problem, ale w rzeczywistości jest tak samo, jak w przypadku tej odpowiedzi.

Z moich testów Install.ps1 ma problem ze znalezieniem samych plików. Kiedy biegnie po zainstalowaniu pakietu, otrzymuję następujące błędy:

Exception calling "Item" with "1" argument(s): "The parameter is incorrect. (Exception from HRESULT: 0x80070057 
(E_INVALIDARG))" 
At C:\...\tools\Install.ps1:3 char:1 
+ $project.ProjectItems.Item("Lib\native1.dll").Properties.Item("CopyToOutputDirect ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : ComMethodTargetInvocation 

Exception calling "Item" with "1" argument(s): "The parameter is incorrect. (Exception from HRESULT: 0x80070057 
(E_INVALIDARG))" 
At C:\...\tools\Install.ps1:4 char:1 
+ $project.ProjectItems.Item("Lib\native2.dll").Properties.Item("Copy ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : ComMethodTargetInvocation 

Exception calling "Item" with "1" argument(s): "The parameter is incorrect. (Exception from HRESULT: 0x80070057 
(E_INVALIDARG))" 
At C:\...\tools\Install.ps1:5 char:1 
+ $project.ProjectItems.Item("Lib\native3.dll").Properties.Item("CopyToOutputDirec ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : ComMethodTargetInvocation 

Exception calling "Item" with "1" argument(s): "The parameter is incorrect. (Exception from HRESULT: 0x80070057 
(E_INVALIDARG))" 
At C:\...\tools\Install.ps1:6 char:1 
+ $project.ProjectItems.Item("Lib\native4.dll").Properties.Item("CopyToOut ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : ComMethodTargetInvocation 

I, jak można się spodziewać, wszystkie pliki mają ich ustawienie CopyToOutputDirectory ustawiony jako nie kopiuj, domyślny.

Jak rozwiązać ten problem? Czy istnieje inna składnia dostępu do podfolderów w skryptach ps? Czy całkowicie brakuje mi punktu tych komunikatów o błędach?

Odpowiedz

10

Wypróbuj następujące zamiast:

$project.ProjectItems.Item("Lib").ProjectItems.Item("native1.dll").Properties.Item("CopyToOutputDirectory").Value = 1 

mogę się mylić, ale nie sądzę, że ProjectItems pozwoli na zlokalizowanie przedmiotów, które nie są bezpośrednimi dzieci bieżącego elementu. Musisz więc najpierw znaleźć element projektu folderu Lib, a następnie zajrzeć do tego elementu projektu dla swojej biblioteki dll.

Aby przetestować te zazwyczaj otworzyć okno Pakiet konsoli Menedżer, upewnij się, że prawidłowy projekt zostanie wybrany w projekcie domyślnej listy rozwijanej, a następnie uzyskać dostęp do obiektu projektu za pomocą wiersza poleceń:

$ projektu = Get-Project

Daje to to, co robi skrypt instalacyjny NuGet, który jest modelem obiektu Visual Studio dla projektu.

+0

Przepraszam za ten ostatni komentarz, po prostu ponownie przeczytałem twoją odpowiedź i przegapiłem pierwszy kawałek, w którym najpierw dostałeś Lib, a potem dll po. Od grania w konsolę PM za pomocą tego projektu typu "get-project", wygląda na to, że jest poprawny. Spróbuję teraz naprawdę! –

+0

Bingo! Po fałszywym uruchomieniu programu Visual Studio informującym, że wykonanie skryptu zostało wyłączone, uruchomiłem ponownie i teraz import działa płynnie, a pliki mają poprawnie ustawioną właściwość. Dziękuję Ci. –

Powiązane problemy