我正在构建一个nuget包,我希望它在任何项目上安装时添加js
脚本。
.js
文件必须将其构建操作设置为嵌入式资源。
我尝试添加Install.ps1
脚本以包含以下内容:
param($installPath, $toolsPath, $package, $project)
$item = $project.projectItems.Item("my_script.js")
$item.Properties.Item("BuildAction").Value = [int]3
但它返回错误:
您无法在空值表达式上调用方法。 + $ item.Properties.Item(" BuildAction")。Value = [int] 3
我认为错误是因为Install.ps1
脚本在将包文件添加到解决方案之前运行,因此没有my_script.js
因此我们无法更改其构建操作......
那么,我们是怎么做到的?
有没有办法在项目中部署文件后运行脚本?
更新
可能存在的另一个问题是my_script.js
不在Content
文件夹的根目录中。我打电话时需要解决它的问题:
$project.projectItems.Item("myfolder/my_script.js")
?
更新2
都能跟得上!即使在解决上述文件夹后问题仍然存在。
答案 0 :(得分:0)
我已经测试了你的.ps1脚本,并在安装NuGet包时将js脚本文件添加为嵌入式资源。请检查您的.nuspec文件,确保 .ps1名为install.ps1 ,将其添加到工具文件夹。
nuget包的.nuspec文件中的节点应该与下面的节目相同,已在我这边测试成功。
<?xml version="1.0"?>
<package >
<metadata>
<id>BuildActionTest</id>
<version>1.0.0</version>
<authors>AuthorName</authors>
<owners>OwnerName</owners>
<description>Test Buid Action</description>
<releaseNotes>Test Buid Action</releaseNotes>
<copyright>Copyright 2017</copyright>
<tags>Build Action</tags>
</metadata>
<files>
<file src="JavaScript1.js" target="Content"/>
<file src="install.ps1" target="tools"/>
</files>
</package>
答案 1 :(得分:0)
问题在于,当您想要访问不在项目根目录中的文件时,您需要执行以下操作:(即使用的代码)
param($installPath, $toolsPath, $package, $project)
$item = $project.ProjectItems.Item("myfolder")
$item2 = $item.ProjectItems.Item("script.js")
$item2.Properties.Item("BuildAction").Value = [int]3
文件夹script.js
中的文件myfolder
,(相对于项目目录的文件的完整路径:myfolder/script.js
)