我有一个将packages
文件夹签入源代码管理的解决方案。我更改了一些项目,以使用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
。您可以将完整路径设置为备用全局软件包文件夹,但是我发现,如果仅将变量设置为“ 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>\
,packages文件夹具有不同的结构,并且在更新或卸载之后,不会删除旧版本或未使用的软件包。手动清除程序包目录,然后在进行任何更改后还原所需的程序包将实现相同的目的。
就个人而言,这确实很麻烦,因为它需要为应基于每个解决方案设置的内容设置全局设置。NuGet将在某个时候进行更新,以支持每个解决方案包目录,project.json
但与此同时,您可以使用上面的解决方法,或者packages.config
暂时坚持使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句