我的项目目前正在引用一些代表夜间构建的预发布包。我想确保我总是反对最新版本。我在项目中添加了一个预构建事件:
.nuget\nuget.exe update -safe -noninteractive -prerelease -source "My-Package-Repo/nuget" $(SolutionPath)
这会在构建期间生成以下输出:
Scanning for projects...
Found 1 projects with a packages.config file. (MyProject)
Looking for installed packages in '..\..\packages'.
Updating 'MyProject'...
EXEC : warning : Access to the path 'C:\workspace\mainline\MyProject\packages.config' is denied.
问题是packages.config文件仍然被源代码控制锁定,因此NuGet无法更新软件包版本。有趣的是,如果我从软件包管理器控制台运行update-package
,它会自动检出packages.config文件并更新解决方案的所有软件包。
使用命令行界面时,有没有办法让NuGet自动检出packages.config文件?或者,是否可以在PM控制台中运行update-package命令作为预构建事件(因为它已经具有我需要的行为)?
答案 0 :(得分:2)
我最近自己一直在处理这个问题。遗憾的是,nuget.exe更新不会自行检出文件,并且包管理器控制台只能在Visual Studio中运行(它显然会挂钩到Visual Studio环境中来执行枚举项目之类的操作)。
如果您愿意使用PowerShell,我建议如下:
<强> 1。制作一个Powershell脚本来处理从解决方案中解析项目文件
$sln = $args[0]
$projects = ((ss '= (\S+.csproj)' $sln -All) `
| % {$_.Matches.Groups[1].Value -replace "\\\\","\"})
$configFiles = $projects -replace '(?<=\\)[^\\]+?\.csproj', 'packages.config'
'tf checkout ' + ($projects -join ' ') | iex
'tf checkout ' + ($configFiles -join ' ') | iex
('.nuget\nuget.exe update -safe -noninteractive -prerelease -source "My-Package-Repo/nuget"' `
+ $sln) | iex
<强> 2。将powershell脚本放在与解决方案相同的文件夹中
第3。从预构建事件中调用powershell脚本
powershell -file $(SolutionDir)nuget-update.ps1 "$(SolutionPath)"
要撤消对未更改的项目和配置文件的任何更改,请在上述后面运行tfpt uu noget
。
答案 1 :(得分:0)
您正在使用服务器工作区(为服务器模式配置的工作区)。您应该更改为本地工作区。
在本地工作区中,文件未标记为只读,可以在Visual Studio外部进行编辑。
最新Nuget - 如果在Nuget项目文件中编辑包引用,则只需删除版本号即可。 Nuget将始终在构建时加载最新版本。
编辑package.config - 您应该从源代码管理中排除/ packages /文件夹。在最新版本的Nuget Package Manager中,这不是必需的。