【发布时间】:2017-06-15 22:41:47
【问题描述】:
我遇到了一个有趣的问题,它可能是我目前对 NuGet 不了解的事情,但我正在创建一个 NuGet 包,我将其称为 Project Alpha,它有一个对Grpc 的依赖,扩展后,它依赖于有问题的包:Grpc.Core。
Grpc.Core,通过 Grpc 在 Project Alpha 中安装良好,并且没有向 Project Alpha 的项目添加新文件。另一方面,Project Beta 依赖于 Project Alpha,并扩展为 Grpc.Core。当我安装 Project Alpha 时,Grpc.Core 的安装会导致 Project Beta
ProjectBeta
|- Properties/
|- References/
|- App.config
|- grpc_csharp_ext.x64.dll
|- grpc_csharp_ext.x86.dll
|- libgrpc_csharp_ext.x64.dylib
|- libgrpc_csharp_ext.x64.so
|- libgrpc_csharp_ext.x86.dylib
|- libgrpc_csharp_ext.x86.so
|- packages.config
|- Program.cs
您会注意到它安装了 6 个我不希望 1) 包含在项目中或 2) 在项目根目录中的二进制文件。
查看Grpc.Core.nupkg后发现这6个二进制文件来自一个runtimes文件夹;但是,只有.targets 文件引用了它们并明确表示要复制到输出目录。需要注意的是,通过将这些文件复制到输出目录,它将正确构建。
更多参考:
项目 Alpha 依赖树
Project Alpha
|- Grpc
| |- Grpc.Core
|- Google.Protobuf
运行nuget pack ProjectAlpha.csproj -Properties Configuration=Release后产生以下nupkg
content
|- grpc_csharp_ext.x64.dll
|- grpc_csharp_ext.x86.dll
|- libgrpc_csharp_ext.x64.dylib
|- libgrpc_csharp_ext.x64.so
|- libgrpc_csharp_ext.x86.dylib
|- libgrpc_csharp_ext.x86.so
lib
|- net452
|- ProjectAlpha.dll
最终,我似乎需要弄清楚如何处理这些二进制文件,以便它们不再被打包为content 文件,但我不确定首先是什么导致了这个问题。理想情况下,我希望有一个解决方案,而不仅仅是“为什么不删除文件,因为它构建了?”。如果这最终成为唯一的解决方案,那么我会这样做;但是,我认为这不是一个真正的解决方案。
有什么想法吗?建议?黑客?
【问题讨论】:
-
为什么会有 .targets 文件?目的是什么;只复制文件?您应该创建 2 个包;一个用于 x64,一个用于 x86。
-
这不是我的包裹。我的包中没有
.targets文件;它位于Grpc.Core,我无法控制。.targets文件的目的似乎是将适当的二进制文件复制到输出目录。我认为您对 x86 与 x64 的担忧没有任何相关性。 -
这里是来自实际
.targets文件的 sn-p,以防这对某人很重要<Content Include="$(MSBuildThisFileDirectory)..\..\runtimes\win\native\grpc_csharp_ext.x86.dll"><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <Link>grpc_csharp_ext.x86.dll</Link> </Content>
标签: .net visual-studio nuget grpc