Visual Studio 2019我有一个.NET Core解决方案,它需要引用单个.NET Framework包,目的只是为了将包内容展开到packages文件夹中,以便可以使用一些工具。
在我的.csproj中有这样一行:
<PackageReference Include="roundhouse" Version="1.1.0" TargetFramework="net472" />我发现,当我构建我的解决方案时(无论是在本地开发的Visual Studio中,还是在TeamCity中),有时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包文件夹结构相关的配置设置。
有人知道吗?
发布于 2019-12-06 16:19:14
我找不到任何控制使用哪种文件夹结构的配置设置。
我认为这种行为与nuget包的格式packages.config和PackagesReference.有关
全局包文件夹(%userprofile%\.nuget\packages)是NuGet安装所有下载的包的位置。每个包都会完全展开到与包标识符和版本号匹配的子文件夹中。使用PackageReference格式的项目始终直接使用此文件夹中的包。使用packages.config时,包将安装到全局包文件夹,然后复制到项目的包文件夹中。来自here的提示。
结论
当您使用PackageReference时,全局包文件夹中的nuget的路径类似于结构2。
\packages\roundhouse\1.1.0\roundhouse.1.1.0.nupkg此外,从全局包文件夹复制的解决方案中的包已将路径更改为structure 1。
\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中更改初始引用格式,如下所示
<ItemGroup>
<PackageReference Include="roundhouse" Version="1.1.0" />
</ItemGroup>然后,您可以确定恢复路径是否不同。
希望能对你有所帮助。
https://stackoverflow.com/questions/59206214
复制相似问题