Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 是什么导致NuGet将包还原到稍微不同的文件夹结构?_Visual Studio_Package_Nuget_Restore_Roundhouse - Fatal编程技术网

Visual studio 是什么导致NuGet将包还原到稍微不同的文件夹结构?

Visual studio 是什么导致NuGet将包还原到稍微不同的文件夹结构?,visual-studio,package,nuget,restore,roundhouse,Visual Studio,Package,Nuget,Restore,Roundhouse,我有一个.NET Core解决方案,它需要引用一个.NET Framework包,只是为了将包内容扩展到包文件夹中,以便提供一些工具 在my.csproj中,我有一行: Visual Studio 2019 这就是它目前正在做的事情 但在另一台开发人员机器上(以及在TeamCity Build Agent上),构建会创建以下文件夹结构: \packages\roundhouse.1.1.0\roundhouse.1.1.0.nupkg 请注意细微的区别 我还不知道是什么导致了这些不同的行为。

我有一个
.NET Core
解决方案,它需要引用一个
.NET Framework
包,只是为了将包内容扩展到
文件夹中,以便提供一些工具

在my
.csproj
中,我有一行:

Visual Studio 2019
这就是它目前正在做的事情

但在另一台开发人员机器上(以及在
TeamCity Build Agent
上),构建会创建以下文件夹结构:

\packages\roundhouse.1.1.0\roundhouse.1.1.0.nupkg
请注意细微的区别

我还不知道是什么导致了这些不同的行为。我找不到任何与
NuGet
package文件夹结构相关的配置设置

有人知道吗

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

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

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

结论

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

\packages\roundhouse\1.1.0\roundhouse.1.1.0.nupkg
此外,从全局包文件夹复制的解决方案中的包已将路径更改为结构1

\packages\roundhouse\1.1.0\roundhouse.1.1.0.nupkg
使用package.config格式时,由于某些特定原因,Nuget会修改Nuget的路径,该路径会从全局packages文件夹复制到解决方案

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

更新1:

我发现您在一个核心项目的xxx.csproj中添加了
。这种格式类似于框架项目的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”
。如果您确保在解决方案中的所有项目中使用PackageReference,则可以尝试以下步骤:

解决方案

1) 清除nuget缓存

2) 在xxx.csproj中更改初始参考格式,如

\packages\roundhouse.1.1.0\roundhouse.1.1.0.nupkg

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


希望它能帮助您。

谢谢您提供的信息。我已经扩展了我的帖子以包含更多的细节-特别是我正在使用
PackageReference
作为
.NET Framework
包,该包位于
.NET Core
解决方案中,但仍然看到
roundhouse.1.1.0
文件夹。我认为在两台计算机上还原nuget的方式不同导致了这个问题。请检查在您的机器中,将
Packages.config
更改为
PackageReference
管理格式。正如我已经提到并编辑了我的原始帖子,其中包括:我在我的
.csproj
项目中专门使用
PackageReference
。我没有任何
packages.config
。通常,我们不应该使用net core项目来引用框架nuget包,这将导致不兼容项的警告。我不确定这是否是这种奇怪行为的原因。如果您想使其与net core项目兼容,我建议您可以将nuget更改为适合框架和核心项目的版本。嗨,BaltoStar,这个问题有更新吗?我检查了上面的行,发现这不是正常的PackageReference格式。它看起来像是package.config和packageReference的组合。。。我认为这可能是您遇到的奇怪行为的原因,如果您删除`TargetFramework=“net472”`并运行重建,结果会是什么,它能使奇怪行为消失吗?请随时让我们知道,如果它仍然阻碍你,我们将尽最大努力帮助,并希望它可以帮助其他成员与类似的问题。Thx:)嗨,波托斯塔,你试过兰斯的建议来解决你的问题吗?顺便说一下,
TargetFramework=“net472”
意味着将包安装到属于framework 4.7.2的项目中,因此它根本不适合.net核心项目。如果您有任何问题,请随时通知我们。我知道在
netcore
项目中包含
net472
包是不正常的,但我需要这样做,以强制将此包的文件解压缩并放在
文件夹中,因为我需要将它们用作工具。据我所知,这不会引起任何问题。我一直不明白为什么有时候它会被解包到一个稍微不同的文件夹结构。
\packages\roundhouse.1.1.0\roundhouse.1.1.0.nupkg
<ItemGroup>
    <PackageReference Include="roundhouse" Version="1.1.0" />
</ItemGroup>