NuGet 3.2添加了对使用环境变量指定共享全局包文件夹的支持,NUGET_PACKAGES
. 您可以将完整路径设置为备用全局包文件夹,但是我发现如果您只是将变量设置为“包”,那么 Visual Studio 中的 NuGet 工具会将其视为解决方案文件夹下的相对路径。这允许我使用解决方案的packages
文件夹安装和恢复 NuGet 包。
不幸的是,构建项目然后给了我错误Microsoft.NuGet.targets
,无法找到 NuGet 包。msbuild 中的NugetPackagesDirectory
属性似乎没有设置。为了解决这个问题,我在C:\Program Files (x86)\MSBuild\Microsoft\NuGet\Microsoft.NuGet.props
文件中添加了以下几行:
<PropertyGroup Condition="'$(NugetPackagesDirectory)' == ''">
<NugetPackagesDirectory>$(SolutionDir)packages</NugetPackagesDirectory>
</PropertyGroup>
这将影响机器上的所有解决方案,因此另一种方法是将这些相同的行添加到每个项目文件中或添加到props
您导入到每个项目中的解决方案中的自定义文件中。这也可能需要构建服务器。
尽管这可行,但缺点是 packages 文件夹packages\<package_name>\<version>\
与 相比具有不同的结构packages\<package_name>.<version>\
,并且旧版本或未使用版本的包在更新或卸载后不会被删除。手动清除包目录,然后在任何更改后恢复所需的包将实现相同的效果。
就个人而言,这感觉真的很hacky,因为它需要为应该在每个解决方案基础上设置的东西设置全局设置。NuGet 将在某个时候更新以支持每个解决方案包目录,project.json
但与此同时,您可以使用上述解决方法,或者packages.config
暂时坚持使用。