我创建了一个.nuspec文件,用于打包一堆.proto文件以供项目之间共享。这很好。不幸的是,为了构建.proto文件,它们需要被实际复制到项目目录中,而不仅仅是被引用。请注意,这是一个.NET Core项目。
目前,我的定义创建了一个包,在使用时引用项目中的文件,但这些文件仍然驻留在原始的.Nuget文件夹中,这不是我真正需要的。
以下是我现在拥有的.nuspec定义:
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>GRPCProtoFiles</id>
<version>1.0.0</version>
<authors>Author</authors>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>.proto files NuGet package.</description>
<dependencies>
<dependency id="Google.Protobuf" version="3.14.0"/>
<dependency id="Grpc" version="2.35.0"/>
</dependencies>
<contentFiles>
<files include="any/any/Protos/**/*.proto" buildAction="None" copyToOutput="false" />
</contentFiles>
</metadata>
<files>
<file src="**\*.proto" target="contentFiles\any\any\Protos" exclude="google\**" />
</files>
</package>
我知道目前"构建操作"设置为"无", 但是一旦文件在包安装时落到正确的文件夹中,我可以解决这个问题。如果我尝试将.proto文件的构建操作设置为正确的操作(即Protobuf编译器),那么我会收到错误提示,因为文件不在它们应该在的位置。
我做错了什么?
编辑:
好的,我已经查阅了一些可能发生的情况以及原因。具体来说,这篇回答提供了很多见解。然而我仍然想知道该如何实际操作。现在似乎我想做的事情在NuGet上是不可能实现的,我正在使用错误的工具。但除了这个限制之外,NuGet看起来非常理想 - 它能够从源项目中选择只有.proto文件,并把它们发布,而不是为各种目标系统预先构建的库。
我可以添加一个预构建操作来复制文件到项目目录,但我不知道如何引用源NuGet包文件夹(特别是版本改变的情况下)。你们有任何想法是否这个问题有解决办法?