【发布时间】:2021-06-16 03:29:11
【问题描述】:
我创建了一个 .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 编译器),则会出现错误,因为文件不在应有的位置。
我做错了什么?
编辑:
好的,我已经阅读了一些关于可能发生的事情以及原因。特别是this 的回答给了我很多见识。但是,我想知道我如何才能真正做我需要做的事情。现在看来,我想用 NuGet 做的事情是不可能的,而且我使用了错误的工具来完成这项工作。但除了这一限制之外,NuGet 似乎很理想 - 它能够仅从源项目中选择 .proto 文件并发布该文件,而不是为各种目标系统预先构建的库。
我可能会添加一个预构建操作以将文件复制到项目目录,但我不知道如何引用源 NuGet 包文件夹(尤其是在版本更改时)。知道这个问题是否有解决方案吗?
【问题讨论】:
标签: visual-studio .net-core nuget nuget-package nuspec