我遇到了一个有趣的问题,它可能是我目前对NuGet不了解的东西,但我正在创建一个NuGet包,我将称之为Project,它依赖于 Grpc ,在扩展中,它依赖于有问题的包: Grpc.Core 。
Grpc
Grpc.Core
Grpc.Core ,通过 Grpc 在project中安装良好,并且不向Project的项目添加新的文件。而项目Beta则依赖于Project,以及扩展 Grpc.Core 。当我安装Project时, Grpc.Core 的安装会导致项目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个二进制文件,我不希望它们包含在项目中,或者安装在项目根目录中。
在查看 Grpc.Core.nupkg 之后,我发现这6个二进制文件来自一个 runtimes 文件夹;然而,只有一个 .targets 文件引用它们并明确要求复制到输出目录。应该指出,它将通过将这些文件复制到输出目录来正确构建。
Grpc.Core.nupkg
runtimes
.targets
如需更多参考:
项目α依赖树
Project Alpha |- Grpc | |- Grpc.Core |- Google.Protobuf
运行 nuget pack ProjectAlpha.csproj -Properties Configuration=Release 后的以下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 |- net452 |- ProjectAlpha.dll
最终,我似乎需要弄清楚如何处理这些二进制文件,这样它们就不再被打包为 content 文件了,但我不确定是什么导致了这个问题。理想情况下,我希望有一个解决方案,不只是“为什么不直接删除文件,因为它的构建?”如果这是唯一的解决方案,那么我会这么做;然而,我不认为这是一个真正的解决方案。
content
有什么想法吗?有什么建议吗?黑客?
发布于 2017-02-01 15:20:33
我找到了解决这个问题的办法。我曾尝试使用 .nuspec 并排除二进制文件,但这不起作用,实际上我只安装NuGet包就遇到了问题。
.nuspec
我发现的最好的方法(因为它对我有用)是为 nuget pack 使用命令行参数,这是我之前忽略的,也就是 -Exclude 。
nuget pack
-Exclude
所以我用来打包 .csproj 的最后一个命令是
.csproj
nuget pack ProjectAlpha.csproj -Exclude **\*.x86.*;**\*.x64.*
如果解决方案不明确, nuget pack 将打包在输出目录( bin\Debug 或 bin\Release )中找到的所有内容,并且出现了这个问题,因为有6个二进制文件NuGet不知道它的来源。我知道它们是通过 Grpc.Core 's NuGet包中的NuGet文件复制的。因此,需要排除它们,因为 .targets 文件将在包含 Grpc.Core 的后续项目中正确地复制它们。因此, -Exclude 工作正常。
bin\Debug
bin\Release
我仍然不知道为什么在这种情况下它比 .nuspec 排除属性更有效,但是我很高兴它已经解决了!
发布于 2017-01-31 06:24:19
在打包直接安装.csproj包的Grpc.Core文件时,我也会遇到同样的问题。然后检查.nuspec文件,找不到会导致内容文件添加到消费项目中的节点。
因此,我为nuget包项目创建了一个.nuspec文件,然后按如下方式修改.nuspec文件,该文件只包含包基本信息和依赖项信息。
<?xml version="1.0"?> <package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd"> <metadata> <id>MyPackage</id> <version>1.0.0</version> <title>MyPackage</title> <authors>My Name</authors> <owners>My Name</owners> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>Description</description> <dependencies>