构建类型设置为嵌入式资源的 Nuget 文件

Nuget file with build type set to Embedded Resource

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

我尝试添加一个 Install.ps1 脚本来打包以下内容:

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

$item = $project.projectItems.Item("my_script.js")
$item.Properties.Item("BuildAction").Value = [int]3

但是 returns 错误:

You cannot call a method on a null-valued expression. + $item.Properties.Item("BuildAction").Value = [int]3

我认为错误是因为 Install.ps1 脚本 运行s 在将包文件添加到解决方案之前因此没有 my_script.js 所以我们无法更改其构建操作.. .

那么,我们是怎么做到的?

在项目中部署文件后,有什么方法可以 运行 编写脚本吗??

更新

还有一件事可能是问题所在,即 my_script.js 不在 Content 文件夹的根目录中。我打电话时是否需要解决它的路径:

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

更新 2

不!即使像上面那样处理文件夹后问题仍然存在。

我已经测试了你的 .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>

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

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