標籤:cli project 配置 rpc 自動編譯 for 修改 script toc
前段時間研究一個java程式,增加一些功能。其中用到java和C#的通訊。自然,有多種辦法,後來實際上是用javascript調用C#的REST WCF服務實現的。但是在查資料的過程中,發現有個Protocol Buffers的東東,Google開發的,也可以用。出於好奇,試了下。Java那頭用Maven編譯,C#這頭,可用MSBuild編譯,但需要做些配置。
假設工程中有這些檔案:test.proto,testClient.cs(調用gRPC用戶端),希望按一下F5就編譯好,怎麼做呢?
1. 下載和安裝NuGet包:Grpc, Grpc.Tools, Grpc.Tools.MSBuild.Unofficial, Google.Protobuf (注意,還有個Google.ProtocolBuffers的包,不要混起來)
2. 修改Grpc.Tools.MsBuild.Unofficial.props檔案,把GrpcToolsVersion的值改成實際使用的值(目前最新版是1.15.0)
3. 修改Grpc.Tools.MsBuild.Unofficial.targets檔案
1)把_GrpcOutputFolder的值改為$(IntermediateOutputPath) 當然,改成其他值也行,但是若目錄不存在需要增加一個建目錄的過程,比較麻煩。$(IntermediateOutputPath)的位置是obj\Debug,系統預設就有了,比較方便,放在這個地方也比較合適
2)把GrpcToolsPath的值改為$(MSBuildThisFileDirectory)..\..\grpc.tools.$(GrpcToolsVersion)\tools\,原來的路徑不對,編譯時間會報錯。
3)將 <Target Name="GenerateGrpcFiles" 後面的屬性BeforeTargets的值改成PrepareForBuild
4. 修改工程檔案,假設檔案名稱為testGRPC.csproj:
1)將
<Import Project="..\packages\Grpc.Tools.MsBuild.Unofficial.1.0.51\build\Grpc.Tools.MsBuild.Unofficial.targets" Condition="Exists(‘..\packages\Grpc.Tools.MsBuild.Unofficial.1.0.51\build\Grpc.Tools.MsBuild.Unofficial.targets‘)" /> 這一行移到
<Import Project="..\packages\Grpc.Core.1.15.0\build\net45\Grpc.Core.targets" Condition="Exists(‘..\packages\Grpc.Core.1.15.0\build\net45\Grpc.Core.targets‘)" />的後面一行
2)將<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />移到最後一個<Target>的後面一行
現在,按F5,就會一步編譯好。
Visual Studio自動編譯gRPC工程的設定