8

私はNugetを初めて使用し、最初のパッケージのアップロードを理解しようとしています。これまでのところ、すべてが順調に進んでいます。ただし、Libサブフォルダーに配置したい一部のコンテンツファイルにCopyToOutputDirectoryを設定しようとしています。私のディレクトリは次のようになります。

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

このStackOverflowの質問といくつかの追加の読み物を読んで、次のようなInstall.ps1をまとめました。

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

問題を理解するのに役立つかどうかを確認するために、さまざまな操作を1行に並べましたが、それ以外の場合は、その回答と実質的に同じです。

私のテストによると、Install.ps1はファイル自体を見つけるのに問題があります。パッケージのインストール後に実行すると、次のエラーが発生します。

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

また、ご想像のとおり、すべてのファイルのCopyToOutputDirectory設定はデフォルトの[コピーしない]に設定されています。

これを解決するにはどうすればよいですか?psスクリプトのサブフォルダーにアクセスするための別の構文はありますか?それとも、これらのエラーメッセージの要点を完全に見逃していますか?

4

1 に答える 1

11

代わりに次を試してください。

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

私は間違っている可能性がありますが、ProjectItemsを使用すると、現在のアイテムの直接の子ではないアイテムを見つけることができるとは思いません。したがって、最初にLibフォルダープロジェクトアイテムを見つけてから、このプロジェクトアイテム内でdllを探す必要があります。

これらをテストするには、通常、パッケージマネージャーコンソールウィンドウを開き、[デフォルトプロジェクト]ドロップダウンリストで正しいプロジェクトが選択されていることを確認してから、コマンドラインを使用してプロジェクトオブジェクトにアクセスします。

$ project = Get-Project

これにより、プロジェクトのVisualStudioオブジェクトモデルであるNuGetインストールスクリプトと同じことができます。

于 2013-03-17T20:56:48.040 に答える