有沒有辦法配置nuGet包,以便在項目中安裝文件時,只有在項目中不存在該文件時?只有當文件不在項目中時,是否有辦法告訴nuGet將文件安裝到項目中?
具體來說,我的nuGet包中包含一個自定義配置文件。一旦安裝,用戶將對文件進行修改。問題在於,當用戶安裝我的nuGet軟件包的新版本時,配置文件被替換 - 因此失去了它們的更改。我想阻止這一點。
有沒有辦法配置nuGet包,以便在項目中安裝文件時,只有在項目中不存在該文件時?只有當文件不在項目中時,是否有辦法告訴nuGet將文件安裝到項目中?
具體來說,我的nuGet包中包含一個自定義配置文件。一旦安裝,用戶將對文件進行修改。問題在於,當用戶安裝我的nuGet軟件包的新版本時,配置文件被替換 - 因此失去了它們的更改。我想阻止這一點。
我們假設您正在使用Visual Studio,如果缺少它,需要部署log4net.config。
添加到nuspec文件:
<file src="tools/**/*.*" target="\" />
</files>
</package>
這將包括在工具文件夾中的文件進入包
放置在工具文件夾裏面文件install.ps1類似於一些代碼:
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
如果你想看看生成的包內,將其重命名爲* 。壓縮。然後,您可以使用任何檔案管理器查看內部內容。
大概是一個老問題,但在這裏不言而喻反正我也有過這樣的問題:
這可以通過手動更新使用命令行的包來完成,如圖in the PowerShell reference:
Update-Package [-Id] <string> [-IgnoreDependencies] [-ProjectName <string>] [-Version <string>] [-Source <string>] [-Safe] [-IncludePrerelease] [-Reinstall] [-FileConflictAction] [-WhatIf]
的您需要使用的參數是-FileConflictAction
,您必須將其設置爲Ignore
。
編輯:問題是,這不適用於只有一個特定的文件,所以你可能不得不考慮重命名包中包含的配置文件。