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文件,您可以使用。 –