NuGet 命令行结帐 packages.config

NuGet command line checkout packages.config

我的项目目前正在引用一些代表夜间构建的预发布包。我想确保我始终针对最新版本进行构建。我在我的项目中添加了预构建事件:

.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 命令作为预构建事件(因为它已经具有我需要的行为)?

我最近也在处理这个问题。不幸的是,nuget.exe 更新不会自行检出文件,包管理器控制台只会在 Visual Studio 内检出 运行s(它显然挂接到 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 在上述之后。

您正在使用服务器工作区(为服务器模式配置的工作区)。您应该更改为本地工作区。

在本地工作区中,文件未标记为只读,可以在 Visual Studio 之外进行编辑。

Latest Nuget - 如果您编辑 Nuget 项目文件中的包引用,您只需删除版本号即可。然后 Nuget 将始终在构建时加载最新版本。

编辑 package.config - 您应该从源代码管理中排除 /packages/ 文件夹。在最新版本的 Nuget 包管理器中,这不是必需的。