2017-08-08 82 views
2

我正在構建僅包含一組PowerShell腳本的NuGet包。所需的行爲是將腳本放置在項目和/或解決方案文件夾中,在卸載軟件包時將其刪除,並在更新軟件包時進行更新。這些腳本只需要存在於文件夾中,並複製到輸出文件夾(它們是部署腳本)。使用NuGet在Project文件夾中放置和更新PowerShell文件的選項

我已經在nuspec中使用內容目標之前完成了這項工作,但是這在netstandard/.NET核心應用程序(即任何使用PackageReference的應用程序)中不起作用。 NuGet文檔提到了元數據元素下的contentFiles元素,但它也不適用於PackageReference。我唯一能夠做的就是在tools/init.ps1中複製PowerShell腳本。我有一些部分工作,但它不處理卸載或升級路徑。而DTE從不好玩。

有沒有辦法在netstandard中使用內容文件?

如果沒有,是否存在如何正確管理NuGet生命週期(複製文件,更新文件,刪除文件)的示例或示例?

編輯:這是一個控制檯應用程序,但它也應該在一個asp.net應用程序中工作。

EDIT2:這是我試圖通過contentFiles元素做事的nuspec。當我安裝軟件包時,我沒有看到任何項目或解決方案。

<?xml version="1.0" encoding="utf-8"?> 
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
    <metadata> 
     <id>Test</id> 
     <version>1.0.0</version> 
     <contentFiles> 
      <files include="Build.ps1" buildAction="Content" copyToOutput="true" /> 
     </contentFiles> 
    </metadata> 
    <files> 
     <file src="Build.ps1" target="content" /> 
    </files> 
</package> 

感謝, 埃裏克

回答

1

正如你已經注意到了,包的NuGet通過PackageReference引用安裝時不再修改項目。對於使用這個新功能的.NET Framework項目也是如此(它在VS 2017 15.2中對非核心項目公開了)。

content/someScript.ps1文件仍然是必要的與「經典」 packages.config基於項目的兼容性,但PackageReference項目的一個新特性是contentFiles

包裝時使用nuspec文件手動複製上建立一個文件,可以通過添加contentFiles部分來完成:

<package> 
    <metadata> 
    ... 
    <contentFiles> 
     <files include="**/*.ps1" buildAction="Content" copyToOutput="true" /> 
    </contentFiles> 
    </metadata> 
    <files> 
    <file src="Build.ps1" target="content" /> 
    <file src="Build.ps1" target="contentFiles/any/any" /> 
    </files> 
</package> 

更多細節my example on GitHubdocumentation on contentFiles

+0

我已經嘗試了這種方法,但是當我安裝包時,沒有任何反應。該文件位於nuget包文件夾中,但它不在項目或解決方案中。我粘貼了上面使用的nuspec。它似乎在控制檯或Web應用程序中都不起作用。 –

+0

生成項目時是否將其放入輸出目錄? –

+0

請注意,如果你不增加測試嘗試之間的版本 –

相關問題