繁体   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