我有一个 packages
的解决方案文件夹已 checkin 源代码管理。我将一些项目更改为使用 project.json
文件而不是 packages.config
用于定义依赖项。项目一切正常.csproj
项目,而不是 DNX .xproj
项目。一切似乎都正常工作,但是在更新软件包后,我注意到新版本没有添加到解决方案的 packages
中。文件夹。相反,它被添加到用户配置文件文件夹中 NuGet 的新共享包文件夹中。
所以问题是,如何让 NuGet 使用解决方案的 packages
文件夹而不是共享文件夹?
到目前为止我尝试过的方法没有成功:
global.json
解决方案文件夹中的文件指定 "packages": "packages"
<add key="disableSourceControlIntegration" value="false" />
在 .nuget\nuget.config
最佳答案
NuGet 3.2添加了对使用环境变量指定共享全局包文件夹的支持,NUGET_PACKAGES
.您可以将完整路径设置为备用全局包文件夹,但是我发现如果您只是将变量设置为“包”,那么 Visual Studio 中的 NuGet 工具会将其视为解决方案文件夹下的相对路径。这使我能够使用解决方案的 packages
安装和恢复 NuGet 包。文件夹。
不幸的是,构建项目在 Microsoft.NuGet.targets
中给了我错误,无法找到 NuGet 包。 NugetPackagesDirectory
msbuild 中的属性似乎没有设置。为了解决这个问题,我在 C:\Program Files (x86)\MSBuild\Microsoft\NuGet\Microsoft.NuGet.props
中添加了以下几行文件:
<PropertyGroup Condition="'$(NugetPackagesDirectory)' == ''">
<NugetPackagesDirectory>$(SolutionDir)packages</NugetPackagesDirectory>
</PropertyGroup>
这将影响机器上的所有解决方案,因此另一种方法是在每个项目文件或自定义
props
中添加相同的行。导入到每个项目的解决方案中的文件。构建服务器也可能需要这样做。虽然这有效,但缺点是包文件夹具有不同的结构,
packages\<package_name>\<version>\
与 packages\<package_name>.<version>\
相比,并且旧版本或未使用版本的包在更新或卸载后不会被删除。手动清除包目录,然后在任何更改后恢复所需的包将达到同样的效果。就个人而言,这感觉真的很hacky,因为它需要为应该在每个解决方案基础上设置的东西设置全局设置。 NuGet 将在某个时候更新以支持每个解决方案包目录
project.json
但与此同时,您可以使用上述解决方法,或者坚持使用 packages.config
暂且。
关于version-control - 将解决方案相关包文件夹与 NuGet 和 project.json 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35307155/