将构建类型设置为Embedded Resource

时间:2017-01-27 20:38:48

标签: c# visual-studio nuget nullreferenceexception nuget-package

我正在构建一个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

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

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