5

我有一个将packages文件夹签入源代码管理的解决方案。我更改了一些项目以使用project.json文件而不是packages.config定义依赖项。项目都是普通.csproj项目,不是DNX.xproj项目。一切似乎都正常工作,但是在更新包后我注意到新版本没有添加到解决方案的packages文件夹中。相反,它被添加到用户配置文件夹中 NuGet 的新共享包文件夹中。

所以问题是,如何让 NuGet 使用解决方案的packages文件夹而不是共享文件夹?

到目前为止我尝试过的方法没有成功:

  • 在解决方案文件夹中添加global.json文件指定"packages": "packages"
  • 设置<add key="disableSourceControlIntegration" value="false" />_.nuget\nuget.config
4

1 回答 1

2

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暂时坚持使用。

于 2016-02-16T11:30:00.847 回答