tux*_*n91 6 .net visual-studio nuget grpc
我遇到一个有趣的问题,目前可能对NuGet尚不了解,但是我正在创建一个NuGet包,我将其称为Project Alpha,它依赖于Grpc
,从扩展上讲,它具有对有问题的软件包的依赖:Grpc.Core
。
Grpc.Core
,可以Grpc
在Project Alpha中正常安装,并且不向Project Alpha的项目添加任何新文件。另一方面,Project Beta依赖于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
Run Code Online (Sandbox Code Playgroud)
您会注意到它安装了6个我不希望1)包含在项目中或2)在项目根目录下的二进制文件。
查看之后Grpc.Core.nupkg
,我发现这6个二进制文件来自一个runtimes
文件夹。但是,只有.targets
文件引用了它们,并明确表示要复制到输出目录。应该注意的是,通过将这些文件复制到输出目录中,它将正确构建。
有关更多参考:
项目Alpha依赖树
Project Alpha
|- Grpc
| |- Grpc.Core
|- Google.Protobuf
Run Code Online (Sandbox Code Playgroud)
运行后导致以下nupkg nuget pack ProjectAlpha.csproj -Properties Configuration=Release
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
Run Code Online (Sandbox Code Playgroud)
最终,似乎我需要弄清楚这些二进制文件的处理方法,以便不再将它们打包为content
文件,但是我不确定是什么首先导致了此问题。理想情况下,我希望有一种解决方案,而不仅仅是“为什么不建立文件就不删除文件?”。如果那最终是唯一的解决方案,那么我会这样做。但是,我认为这不是真正的解决方案。
有任何想法吗?有什么建议吗?骇客?
我找到了解决这个问题的办法。我曾尝试使用.nuspec
和排除二进制文件,但这不起作用,实际上我在安装 NuGet 包时遇到了问题。
我发现的最好的方法(因为它对我有用)是使用我之前错过的命令行参数nuget pack
,即-Exclude
.
所以我用来打包的最后命令.csproj
是
nuget pack ProjectAlpha.csproj -Exclude **\*.x86.*;**\*.x64.*
Run Code Online (Sandbox Code Playgroud)
如果解决方案不清楚,nuget pack
将打包在输出目录(bin\Debug
或bin\Release
)中找到的所有内容,并且出现问题是因为有 6 个二进制文件 NuGet 不知道其来源。我知道它们是通过NuGet 包.targets
中的文件复制的。Grpc.Core
因此,需要排除它们,因为该.targets
文件将在任何包含Grpc.Core
. 这样,-Exclude
工作了。
我仍然不知道为什么它在这种情况下比.nuspec
排除属性效果更好,但我很高兴它已经解决了!
归档时间: |
|
查看次数: |
1753 次 |
最近记录: |