问题描述
在 .NET Core 3.0 项目中,我安装了 Google.Protobuf.Tools
,
<PackageReference Include="Google.Protobuf.Tools" Version="3.10.0"/>
protoc
二进制文件是预期的,
C:Usersjdphe>dir %USERPROFILE%.nugetpackagesgoogle.protobuf.tools3.10.0 oolswindows_x64驱动器 C 中的卷没有标签.卷序列号为 967E-3D8CC:Usersjdphe.nugetpackagesgoogle.protobuf.tools3.10.0 oolswindows_x64 的目录10/14/2019 07:36 PM <DIR>.10/14/2019 07:36 PM <DIR>..10/02/2019 06:08 PM 3,611,120 protoc.exe1 个文件 3,611,120 字节2 目录 152,718,581,760 字节空闲
但是,当尝试在我的 csproj 中使用 <Generator>
标记调用 protoc
时,
<Generator>$(NugetPackageRoot)google.protobuf.tools3.10.0 oolswindows_x64protoc.exe --csharp_out=Model Person.proto</Generator></无>
未找到生成器C:Usersjdphe.nugetpackagesgoogle.protobuf.tools3.10.0oolswindows_x64protoc.exe --csharp_out=Model Person.proto".请验证名称.
我已验证该命令在命令行上的项目文件夹中按预期运行,
C:UsersjdphesourceeposPhenix.ProtobufconcatPhenix.Protobufconcat> %USERPROFILE%.nugetpackagesgoogle.protobuf.tools3.10.0oolswindows_x64protoc.exe --csharp_out=Model Person.proto
我可能不明白 标签应该如何工作,但我不确定.
根据您的错误消息,它找不到 Person.proto.尝试将完整的路径放到它.这可能有效:
$(NugetPackageRoot)google.protobuf.tools3.10.0 oolswindows_x64protoc.exe --csharp_out=$(ProjectDir)Model $(ProjectDir)Person.proto
此外,另一种选择(如果您使用的是 Visual Studio 2019 并且看起来像您一样)是使用 MSBuild 预构建事件.我在此处的答案中列出了一个可行的解决方案.
In a .NET Core 3.0 project, I've installed Google.Protobuf.Tools
,
<PackageReference Include="Google.Protobuf" Version="3.10.0" />
<PackageReference Include="Google.Protobuf.Tools" Version="3.10.0" />
The protoc
binary is where it is expected,
C:Usersjdphe>dir %USERPROFILE%.nugetpackagesgoogle.protobuf.tools3.10.0 oolswindows_x64
Volume in drive C has no label.
Volume Serial Number is 967E-3D8C
Directory of C:Usersjdphe.nugetpackagesgoogle.protobuf.tools3.10.0 oolswindows_x64
10/14/2019 07:36 PM <DIR> .
10/14/2019 07:36 PM <DIR> ..
10/02/2019 06:08 PM 3,611,120 protoc.exe
1 File(s) 3,611,120 bytes
2 Dir(s) 152,718,581,760 bytes free
However, when attempting to invoke protoc
with the <Generator>
tag in my csproj,
<None Update="Person.proto">
<Generator>$(NugetPackageRoot)google.protobuf.tools3.10.0 oolswindows_x64protoc.exe --csharp_out=Model Person.proto</Generator>
</None>
I've verified that the command runs as expected from the project folder on the command line,
I may not be understanding how the <Generator>
tag is supposed to work, but I'm not sure.
Based on your error message, it can't find Person.proto. Try putting the complete path to it. This might work:
$(NugetPackageRoot)google.protobuf.tools3.10.0 oolswindows_x64protoc.exe --csharp_out=$(ProjectDir)Model $(ProjectDir)Person.proto
Also, another option (if you are using Visual Studio 2019 and it seems like you are) is to use a MSBuild pre-build event. I have a working solution listed at the answer here.
这篇关于使用 <Generator> 调用 NuGet 包中的工具,意外“未找到"错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!