首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是什么原因导致NuGet将包恢复到略有不同的文件夹结构?

是什么原因导致NuGet将包恢复到略有不同的文件夹结构?
EN

Stack Overflow用户
提问于 2019-12-06 10:57:17
回答 1查看 385关注 0票数 0
代码语言:javascript
复制
Visual Studio 2019

我有一个.NET Core解决方案,它需要引用单个.NET Framework包,目的只是为了将包内容展开到packages文件夹中,以便可以使用一些工具。

在我的.csproj中有这样一行:

代码语言:javascript
复制
<PackageReference Include="roundhouse" Version="1.1.0" TargetFramework="net472" />

我发现,当我构建我的解决方案时(无论是在本地开发的Visual Studio中,还是在TeamCity中),有时NuGet会将我的包恢复到以下文件夹结构:

代码语言:javascript
复制
\packages\roundhouse.1.1.0\roundhouse.1.1.0.nupkg

这就是它目前正在做的事情。

但是在另一台开发机器上(在TeamCity Build Agent上),构建创建了这个文件夹结构:

代码语言:javascript
复制
\packages\roundhouse\1.1.0\roundhouse.1.1.0.nupkg

请注意其中的细微差别。

我还没能弄清楚是什么导致了这些不同的行为。我找不到任何与NuGet包文件夹结构相关的配置设置。

有人知道吗?

EN

回答 1

Stack Overflow用户

发布于 2019-12-06 16:19:14

我找不到任何控制使用哪种文件夹结构的配置设置。

我认为这种行为与nuget包的格式packages.configPackagesReference.有关

全局包文件夹(%userprofile%\.nuget\packages)是NuGet安装所有下载的包的位置。每个包都会完全展开到与包标识符和版本号匹配的子文件夹中。使用PackageReference格式的项目始终直接使用此文件夹中的包。使用packages.config时,包将安装到全局包文件夹,然后复制到项目的包文件夹中。来自here的提示。

结论

当您使用PackageReference时,全局包文件夹中的nuget的路径类似于结构2。

代码语言:javascript
复制
\packages\roundhouse\1.1.0\roundhouse.1.1.0.nupkg

此外,从全局包文件夹复制的解决方案中的包已将路径更改为structure 1。

代码语言:javascript
复制
\packages\roundhouse.1.1.0\roundhouse.1.1.0.nupkg

当您使用package.config格式时,Nuget会修改由于某些特定原因从全局包文件夹复制到解决方案的nuget的路径。

这只是package.config和PackagesReference的正常行为,它就是由它设计的。

Update1:

我发现您在核心项目的xxx.csproj中添加了<PackageReference Include="roundhouse" Version="1.1.0" TargetFramework="net472" />。该格式类似于框架项目的packages.config中的内容。我猜您只是将内容从packages.config复制到核心项目的xxx.csproj中,尽管您使用的是packageReference。此外,TargetFramework="net472"意味着它将在framework4.7.2上安装包,因此它不会出现在核心项目中。

我做了这些测试;

1)使用packages.config的框架项目

packages.config

xxx.csproj

它加载packages.config以加载nuget包

2)使用PackageReference的框架项目

xxx.csproj

3)核心项目

所以我认为是你导入nuget包的方式导致了这种奇怪的行为。请不要在核心项目( PackageReference )中使用packages.config格式(如TargetFramework="net472" ).If,请确保在解决方案中的所有项目中使用PackageReference,您可以尝试以下步骤:

解决方案

1)清理nuget缓存

2)在xxx.csproj中更改初始引用格式,如下所示

代码语言:javascript
复制
<ItemGroup>
    <PackageReference Include="roundhouse" Version="1.1.0" />
</ItemGroup>

然后,您可以确定恢复路径是否不同。

希望能对你有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59206214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档