0

我正在构建nuget包,我希望它在任何项目上安装时添加js脚本。 .js文件必须将其构建操作设置为嵌入式资源。构建类型设置为嵌入式资源的Nuget文件

我曾尝试加入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的”)。值= [INT] 3

我认为错误是因为Install.ps1脚本添加软件包文件的解决方案之前运行,因此没有my_script.js所以我们可以不会改变它的构建行动...

那么,我们该怎么做呢?

有没有什么办法可以在项目中部署文件后运行脚本?这可能是问题

更新

一件事是,my_script.jsContent文件夹的根。我打电话时是否需要解决它的路径:

$project.projectItems.Item("myfolder/my_script.js")

更新2

都能跟得上!即使在解决上述文件夹后仍存在问题。

+1

install.ps1脚本最后运行。在文件添加到项目之前它不运行。我会在包管理器控制台中检查PowerShell脚本以查看它是否有效。你的my_script.js文件也被添加到项目的根目录吗? –

+0

是的!尽管它会抛出异常,但它会添加文件... – AmiNadimi

回答

0

的问题是,当你要访问一个文件,该文件是不是在项目的根目录下,你需要做的是象下面这样:(即在问题中使用代码)

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

$item = $project.ProjectItems.Item("myfolder") 
$item2 = $item.ProjectItems.Item("script.js") 
$item2.Properties.Item("BuildAction").Value = [int]3 

文件夹myfolder(文件相对于项目目录的完整路径:myfolder/script.js)内的文件为script.js

0

我已经测试了您的.ps1脚本,并且在安装NuGet包时将js脚本文件添加为Embedded资源。请检查您的.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> 
+0

我的脚本被命名为Install.ps1,可能是真正问题的一件事是我没有定义我的文件。nuspec清单像你所做的那样,是否必须将清单中的所有文件命名?有太多了! – AmiNadimi

+0

可能是问题的另一件事是my_script.js不在内容文件夹的根目录中。当我打电话时,是否需要解决它的路径: '$ project.projectItems.Item(“myfolder/my_script.js”)'? – AmiNadimi

+0

@Amin Nadimi您不需要将文件路径添加到您的ps1文件中。所以你仍然可以使用“$ project.projectItems.Item(”myfolder/my_script.js“)”来获取my_script.js文件。您可以用“*”将所有文件添加到清单文件中。例如,您可以添加所有js文件,您可以使用。 –