Powershell Nuget-对子文件夹中的内容设置CopyToOutputDirectory

Powershell Nuget-对子文件夹中的内容设置CopyToOutputDirectory,powershell,nuget,Powershell,Nuget,我是Nuget的新手,我正在尝试上传我的第一个软件包。到目前为止,一切进展顺利。但是,我正在尝试对我希望位于Lib子文件夹中的某些内容文件设置CopyToOutputDirectory。我的目录如下所示: │ Readme.txt │ MyPackage.nupkg │ MyPackage.nuspec │ ├───content │ └───Lib │ native1.dll │ native2.dll │ nativ

我是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
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
通过阅读和一些附加阅读,我将Install.ps1整合在一起,如下所示:

│   Readme.txt
│   MyPackage.nupkg
│   MyPackage.nuspec
│
├───content
│   └───Lib
│           native1.dll
│           native2.dll
│           native3.dll
│           native4.dll
│
├───lib
│       MyActualAssembly.dll
│
└───tools
        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脚本中访问子文件夹是否有不同的语法?还是我完全忽略了这些错误消息的要点?

请尝试以下方法:

$project.ProjectItems.Item("Lib").ProjectItems.Item("native1.dll").Properties.Item("CopyToOutputDirectory").Value = 1
我可能错了,但我不认为ProjectItems将允许您查找不是当前项目直接子项的项目。因此,您需要首先找到Lib文件夹项目项,然后在此项目项中查找dll

为了测试这些,我通常打开Package Manager控制台窗口,确保在默认项目下拉列表中选择了正确的项目,然后使用命令行访问项目对象:

$project=获取项目


这提供了与NuGet安装脚本相同的功能,即项目的Visual Studio对象模型。

请原谅最后的评论,我只是重新阅读了您的答案,我遗漏了第一位,您首先获得了库,然后是dll。通过在PM控制台中使用get project的想法,它看起来是正确的。我现在真的要试一试!答对 了在Visual Studio告诉我脚本执行被禁用的错误开始后,我重新启动,现在导入运行顺利,文件的属性设置正确。非常感谢。