是否有一种方法可以告诉nuGet仅当文件不在项目中时才将文件安装到项目中?
是否有一种方法可以配置nuGet包,以便仅当项目中不存在文件时,才在项目中安装该文件是否有一种方法可以告诉nuGet仅当文件不在项目中时才将文件安装到项目中?,nuget,nuget-spec,Nuget,Nuget Spec,是否有一种方法可以配置nuGet包,以便仅当项目中不存在文件时,才在项目中安装该文件 具体来说,我的nuGet包包含一个自定义配置文件。安装后,用户将对文件进行修改。问题是,当用户安装新版本的my nuGet软件包时,配置文件会被替换,从而丢失更改。我想防止出现这种情况。可能是一个老问题,但不管怎么说,我也遇到了这个问题: 这可以通过使用命令行手动更新包来完成,如图所示: 更新包[-Id][-IgnoreDependencies][-ProjectName][-Version][-Source]
具体来说,我的nuGet包包含一个自定义配置文件。安装后,用户将对文件进行修改。问题是,当用户安装新版本的my nuGet软件包时,配置文件会被替换,从而丢失更改。我想防止出现这种情况。可能是一个老问题,但不管怎么说,我也遇到了这个问题: 这可以通过使用命令行手动更新包来完成,如图所示:
更新包[-Id][-IgnoreDependencies][-ProjectName][-Version][-Source][-Safe][-IncludePrerelease][重新安装][-FileConflictAction][-WhatIf]
您需要使用的参数是-FileConflictAction
,必须将其设置为忽略
<>编辑:问题是,这对于一个特定的文件不起作用,所以您可能需要考虑重命名包中包含的配置文件。假设您正在使用VisualStudio,如果缺少它,需要部署Log4NET.CONFIG。
- 使用*.nuspec文件在文件夹下创建“工具”文件夹
- 添加到nuspec文件:
<file src="tools/**/*.*" target="\" /> </files> </package>
如果要查看生成的包,请将其重命名为*.zip。然后,您可以使用任何存档管理器查看其中的内容。什么是$filesToMove?
<file src="tools/**/*.*" target="\" />
</files>
</package>
param($installPath, $toolsPath, $package, $project)
$log4netInProjectFolder = $project.ProjectItems | Where-Object { $_.Properties.Item("Filename").Value -eq "log4net.config" }
if ($log4netInProjectFolder -eq $null)
{
Write-Host "File with path $deployTarget doesn't exist, deploying default log4net.config"
foreach($item in $filesToMove)
{
Write-Host "Moving " $item.Properties.Item("FullPath").Value
(Get-Interface $project.ProjectItems "EnvDTE.ProjectItems").AddFromFileCopy($item.Properties.Item("FullPath").Value)
(Get-Interface $item "EnvDTE.ProjectItem").Delete()
}
}
else
{
Write-Host "File $deployTarget already exists, preserving existing file."
}
nuget pack PackageWithMyLogConfig.nuspec -Version 1.0.0