Visual Studio Nuget包安装在项目解决方案之外

uemypmqf  于 2022-11-17  发布在  其他
关注(0)|答案(3)|浏览(163)

假设我有一个名为MyFirstSolution的解决方案,里面有一个名为MyFirstProject的项目,我在这个项目里面安装了一些nuget包,比如Dapper,EntityFramework等等...
工作方式:packages文件夹应创建到文件夹MyFirstSolution中,并应在其中下载和安装项目中引用的所有nuget包。
我遇到的问题是packages文件夹没有创建,nuget包被下载到MyFirstSolution文件夹上一级的某个名为XYZHelper的文件夹中。
当我从一些存储库下载解决方案时,nuget包被恢复到同一个文件夹,而不是恢复到解决方案本身,csproj文件中的引用说明它们应该在solutionFolder\packages中,这样我的所有项目都不会构建。
如果我手动将包复制到它们应该在的文件夹中,这一切都很好,但在每次构建后,都会在XYZHelper文件夹中制作一个副本。
我没有在项目中配置任何构建后事件或类似的东西。我猜是Visual Studio的一些东西,但我不知道是什么。

sxpgvts3

sxpgvts31#

工作方式:packages文件夹应创建到文件夹MyFirstSolution中,并应在其中下载和安装项目中引用的所有nuget包。
嗨Stdfan,不确定你的VS版本。但是对于VS2015和更早的版本,nuget包是由packages.config文件控制的。事情应该像你提到的那样工作。
但对于VS2017和VS2019,他们有两种方法来管理nuget:对于PackageReference格式,包存储在C:\Users\xxx\.nuget\packages中。因此,如果您的vs版本是VS2017或VS2019,您可以尝试将格式更改为PackageReference是否有助于解决此问题。
我遇到的问题是packages文件夹没有创建,nuget包被下载到MyFirstSolution文件夹上一级的某个名为XYZHelper的文件夹中。

方向1:

就像zivkan建议的那样,我也认为有些东西会影响恢复过程。正常的Packages.config格式,文件夹会存储在packages文件夹中。但是根据这篇文档,我们可以自定义nuget.config文件来控制nuget的行为。所以请检查nuget.config存在的位置,可能是计算机的nuget.config中的某些更改或用户的nuget.config中的某些设置导致了此问题。(除非我们在那里创建用户的nuget.config,否则它将不存在)

方向2:

当我从某些存储库下载解决方案时,nuget软件包被还原到同一文件夹
由于恢复过程在构建输出中不可见,因此可能nuget恢复工作正常,但构建过程中的某些操作将packages文件夹的内容移动到XYZhelper中。
检查自定义您的生成。请检查您的目录结构中是否存在Directory.build.xx文件,如果该文件存在于该结构的任何文件夹中,则可能会影响您的生成过程:C:\xxx\lancel\source\repos\
我没有在项目中配置任何构建后事件或类似的东西。我猜是Visual Studio的一些东西,但我不知道是什么。
这不是关于VS的正常设置。我认为是一些自定义文件导致了这个问题(无论是nuget.config还是directory.build.xxx),请检查您是否安装了任何第三方软件或vs扩展。尝试关闭vs,删除.vs,bin和obj文件夹,然后以safe mode运行vs。

mftmpeh8

mftmpeh82#

也可以使用环境变量NUGET_PACKAGES设置nuget包的目标文件夹。
您可以在现有的项目文件中执行此操作,如下所示:

<Project Sdk="Microsoft.NET.Sdk">
   ...
   <Target Name="NugetPublicfolder" BeforeTargets="PreBuildEvent">
      <Exec Command="SET NUGET_PACKAGES=C:\MyProjectA\libraries\"/>
   </Target>
   ...
</Project>

现在,当您构建/发布项目时,库将放置在C:\MyProjectA\libraries\
实际上,nuget软件包首先下载到所谓的http-cache文件夹(%userprofile%\AppData\Local\NuGet\v3-cache),在那里它将被提取到上述文件夹(称为globalPackagesFolder文件夹)

fykwrbwg

fykwrbwg3#

可以使用nuget.config(设定名称称为repositoryPath)变更方案套件文件夹。因此,请检查可能设定此值的nuget.config档案。您可以从www.example.com下载nuget.exe并执行nuget restore MyFirstSolution.sln,以取得还原所使用的nuget.config档案的精确清单nuget.org/downloads。在输出的末尾,它将列出读取的每个nuget.config文件。
如果没有配置文件更改解决方案包文件夹(存储库路径),它总是默认到与.sln文件位于同一目录中的名为packages的子目录。我所知道的更改packages.config项目的此位置的唯一方法是使用nuget.config文件,因此我相信您应该能够通过找到正确的配置文件来解决此问题。

相关问题