Version control 将解决方案相对包文件夹与NuGet和project.json一起使用

Version control 将解决方案相对包文件夹与NuGet和project.json一起使用,version-control,visual-studio-2015,nuget,nuget-package-restore,project.json,Version Control,Visual Studio 2015,Nuget,Nuget Package Restore,Project.json,我有一个解决方案,其中一个packages文件夹已签入源代码管理。我将一些项目更改为使用project.json文件而不是packages.config来定义依赖项。这些项目都是正常的.csproj项目,而不是DNX.xproj项目。一切似乎都正常工作,但在更新一个软件包后,我注意到新版本没有添加到解决方案的软件包文件夹中。相反,它被添加到用户配置文件文件夹中NuGet的新共享包文件夹中 所以问题是,我如何让NuGet使用解决方案的包文件夹而不是共享文件夹 到目前为止,我尝试过的方法都没有成功:

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

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

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

  • 在解决方案文件夹中添加
    global.json
    文件,指定
    “包”:“包”
  • .nuget\nuget.config
添加了对使用环境变量指定共享全局包文件夹的支持,
NUGET\u packages
。您可以将完整路径设置为可选的全局包文件夹,但是我发现,如果您只需将变量设置为“packages”,那么VisualStudio中的NuGet工具就会将其视为解决方案文件夹下的相对路径。这使我能够使用解决方案的
packages
文件夹安装和恢复NuGet软件包

不幸的是,构建项目在Microsoft.NuGet.targets中给了我错误,无法找到NuGet包。msbuild中的
NugetPackagesDirectory
属性似乎未设置。为了解决这个问题,我在
C:\ProgramFiles(x86)\MSBuild\Microsoft\NuGet\Microsoft.NuGet.props
文件中添加了以下行:

<PropertyGroup Condition="'$(NugetPackagesDirectory)' == ''">
  <NugetPackagesDirectory>$(SolutionDir)packages</NugetPackagesDirectory>
</PropertyGroup>

$(SolutionDir)包
这将影响计算机上的所有解决方案,因此另一种方法是在每个项目文件中添加相同的行,或在导入到每个项目的解决方案中的自定义
props
文件中添加这些行。构建服务器也可能需要这样做

尽管这样做有效,但缺点是软件包文件夹的结构不同,
packages\\\\\
packages\\\\\\
相比,旧版本或未使用版本的软件包在更新或卸载后不会被删除。手动清除packages目录,然后在任何更改后恢复所需的包将实现相同的效果


就个人而言,这感觉真的很糟糕,因为它需要为某些东西设置全局设置,而这些设置应该基于每个解决方案进行设置。NuGet将在某个时候进行更新,以支持带有
project.json
的每个解决方案包目录,但在此期间,您可以使用上述解决方案,或者暂时只使用
packages.config

另一种选择是在调用msbuild时在命令行上传递
/p:NuGetPackageDirectory=c:\my\new\dir\
(假设调用了
nuget restore-PackageDirectory c:\my\new\dir\
“NuGet将在某个时候进行更新,以支持每个解决方案包目录的
project.json
…”您是否碰巧有GitHub问题或其他可以引用的URL?我搜索了NuGet的GitHub问题,但找不到任何相关信息。