簡體   English   中英

如何僅使用Nuget和nuspec文件添加文件(如果尚不存在)

[英]How to only add a file if it doesn't already exist using Nuget and the nuspec file

創建nuget包並設置nuspec文件時,有沒有辦法僅在不存在的情況下添加該文件?

我不希望每次更新都替換文件。

我已經看到了這個答案 ,但是它似乎並不完整。

假設我希望一個名為“ example.css”的文件包含在一個新項目中,但是僅在首次安裝時,我該如何實現?

在我的nuspec文件中,我將顯示以下行:

<file src="css\example.css" target="content/css" />

但是它會覆蓋那里的所有內容。

如何僅使用Nuget和nuspec文件添加文件(如果尚不存在)

自昨天以來,我一直在為這個問題苦難。 首先,我的想法與您問題中提供的鏈接中的可接受答案相同,使用Tools文件夾中的install.ps1 ,其功能是,如果example.css文件已經存在,則nuget update不會覆蓋它。 因此,我嘗試創建此install.ps1 ,但失敗了。

那是因為:

  1. 在程序包中安裝軟件包之后,將運行文件install.ps1
  2. 更新軟件包將卸載包含內容的舊版本軟件包。

詳細原因1:

根據文檔在安裝和刪除NuGetpackage期間運行PowerShell腳本

在項目中安裝軟件包時,將運行Install.ps1

我們可以獲取隱藏的信息,在安裝軟件包后運行文件Install.ps1

為了驗證它,我使用.nuspec創建了一個測試樣本nuget包:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>MyTestPackage</id>
    <version>1.0.0</version>
    <authors>Tester</authors>
    <owners>Tester</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package description</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2018</copyright>
    <tags>Tag1 Tag2</tags>
  </metadata>
  <files>
    <file src="bin\Debug\MyTestPackage.dll" target="lib\net462" />
    <file src="css\example.css" target="content\css\example.css" />
    <file src="Tools\install.ps1" target="Tools\install.ps1" />
  </files>
</package>

以及install.ps1的內容:

Start-Sleep -Seconds 20
write-host "Hello world!"
Start-Sleep -Seconds 5

然后我將MyTestPackage.nupkg添加到測試項目,發現執行install.ps1之前添加到項目的內容

然后,我在example.css文件中創建了具有不同內容的2.0.0版本(僅供測試),然后將軟件包從1.0.0更新為2.0.0,在執行install.ps1之前將替換example.css

在此處輸入圖片說明

當我們更新nuget軟件包時,nuget將更新該軟件包並首先覆蓋內容,然后執行文件install.ps1 因此,似乎我們不能使用文件install.ps1來防止NuGet覆蓋文件example.css文件。

詳細原因2:

如果你留意上面的動畫升級過程中,你會發現,升級包時,會的NuGet 首先刪除軟件包,包括內容,然后重新安裝新版本的包。 因此,當我們更新軟件包時,nuget會首先刪除該軟件包及其內容,條件判斷文件存在的結果始終為負。 NuGet會將新版本nuget包中的.css文件添加到項目中。

如果您必須防止nuget覆蓋此文件,則可以使用新的nuget包中的此文件,以解決此問題。升級原始程序包時,新的nuget程序包。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM