我的项目目前正在引用一些表示夜间构建的预发布包。我想确保我总是建立在最新的版本。我在我的项目中添加了一个预构建事件:
.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无法更新包版本。有趣的是,如果我从packages控制台运行update-package,它会自动检出packages.config文件并更新解决方案的所有包。
是否有办法让NuGet在使用命令行接口时自动签出packages.config文件?或者,是否可以作为预构建事件在PM控制台中运行更新包命令(因为它已经具备了我需要的行为)?
发布于 2015-02-03 23:23:28
我最近一直在处理这件事。不幸的是,nuget.exe更新本身不会检出这些文件,而且包管理器控制台只在Visual中运行(显然它会链接到Visual环境中来执行枚举项目之类的操作)。
如果您愿意使用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) | iex2.将该powershell脚本放在与解决方案相同的文件夹中
3.从构建前的事件调用powershell脚本
powershell -file $(SolutionDir)nuget-update.ps1 "$(SolutionPath)"若要撤消对项目和配置文件的任何未更改的更改,请在上述操作之后运行tfpt uu noget。
发布于 2015-02-04 07:59:20
您使用的是服务器工作区(为服务器模式配置的工作区)。您应该更改为本地工作区。
在本地工作区中,文件不标记为只读,可以在Visual之外编辑。
最新的Nuget -如果您编辑Nuget项目文件中的包引用,您可以只删除版本号。Nuget将始终加载最新版本的构建。
编辑package.config --您应该将/packages/文件夹排除在源代码管理之外。在的最新版本中,这是不必要的。
https://stackoverflow.com/questions/28308149
复制相似问题