在.NET Core 3.0项目中,我已经安装了Google.Protobuf.Tools
<PackageReference Include="Google.Protobuf" Version="3.10.0" />
<PackageReference Include="Google.Protobuf.Tools" Version="3.10.0" />
应使用protoc
二进制文件
C:\Users\jdphe>dir %USERPROFILE%\.nuget\packages\google.protobuf.tools\3.10.0\tools\windows_x64
Volume in drive C has no label.
Volume Serial Number is 967E-3D8C
Directory of C:\Users\jdphe\.nuget\packages\google.protobuf.tools\3.10.0\tools\windows_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
但是,当尝试在我的csproj中使用protoc
标签调用<Generator>
时,
<None Update="Person.proto">
<Generator>$(NugetPackageRoot)google.protobuf.tools\3.10.0\tools\windows_x64\protoc.exe --csharp_out=Model Person.proto</Generator>
</None>
未找到生成器'C:\ Users \ jdphe.nuget \ packages \ google.protobuf.tools \ 3.10.0 \ tools \ windows_x64 \ protoc.exe --csharp_out = Model Person.proto'。请验证名称。
我已经确认命令可以从命令行的项目文件夹中按预期运行
C:\ Users \ jdphe \ source \ repos \ Phenix.Protobufconcat \ Phenix.Protobufconcat>%USERPROFILE%.nuget \ packages \ google.protobuf.tools \ 3.10.0 \ tools \ windows_x64 \ protoc.exe --csharp_out =模型Person.proto
我可能不了解<Generator>
标签应该如何工作,但是我不确定。
答案 0 :(得分:0)
尝试:
<PackageReference Include="Google.Protobuf.Tools" Version="3.10.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
答案 1 :(得分:0)
根据您的错误消息,找不到Person.proto。尝试使用完整的路径。这可能有效:
$(NugetPackageRoot)google.protobuf.tools\3.10.0\tools\windows_x64\protoc.exe --csharp_out=$(ProjectDir)Model $(ProjectDir)Person.proto
此外,另一种选择(如果您使用的是Visual Studio 2019,则似乎使用的是)是使用MSBuild预构建事件。我在答案here中列出了一个可行的解决方案。