构建类型设置为嵌入式资源的 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
)
我正在构建一个 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
)