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