1
Visual Studio 2019

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

在我的.csproj我有这一行:

<PackageReference Include="roundhouse" Version="1.1.0" TargetFramework="net472" />

我发现当我构建我的解决方案(在本地开发Visual StudioTeamCity)时,有时NuGet会将我的包恢复到这个文件夹结构:

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

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

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

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

注意细微的差别。

我无法弄清楚可能导致这些不同的行为。我找不到任何与NuGet包文件夹结构相关的配置设置。

有人知道吗 ?

4

1 回答 1

1

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

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

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

结论

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

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

此外,从 global-packages 文件夹复制的解决方案中的包已将路径更改为结构 1。

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

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

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

更新1:

我发现你添加<PackageReference Include="roundhouse" Version="1.1.0" TargetFramework="net472" />到一个核心项目的 xxx.csproj 中。这种格式就像框架项目的 packages.config 中的内容。我猜你只是将packages.config中的内容复制到核心项目的xxx.csproj中,尽管你使用了packageReference。另外,TargetFramework="net472"意味着它会在 上安装包framework4.7.2,所以它不会出现在核心项目中。

我做了这些测试;</p>

1)带有 packages.config 的框架项目

包.config

在此处输入图像描述

xxx.csproj

在此处输入图像描述

它加载 packages.config 以加载 nuget 包

2)带有 PackageReference 的框架项目

xxx.csproj

在此处输入图像描述

3)核心项目

在此处输入图像描述

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

解决方案

1)清理nuget缓存

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

<ItemGroup>
    <PackageReference Include="roundhouse" Version="1.1.0" />
</ItemGroup>

然后你可以看看恢复路径是否不同。

希望它可以帮助你。

于 2019-12-06T08:19:14.100 回答