Visual Studio自动编译gRPC工程的设置
前段时间研究一个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工程的设置的更多相关文章
- 使用 Visual Studio 2015 编译 QT 工程
简单进行一下几步就可以了 1.下载源代码 qt-everywhere-opensource-src-5.6.0-alpha.7z .解压到 D:\ToolKits\5.6.0\src 目录下2.网站 ...
- 开发者说 | 使用Visual Studio Code编译、调试Apollo项目
转载地址:https://mp.weixin.qq.com/s?__biz=MzI1NjkxOTMyNQ==&mid=2247484266&idx=1&sn=d6bcd4842 ...
- Windows下使用Visual Studio 2010编译ffmpeg全过程
在visual studio 2010中调用ffmpeg http://blog.sina.com.cn/s/blog_4178f4bf01018wqh.html Windows下使用Visual S ...
- Cocos开发中Visual Studio下libcurl库开发环境设置
我们介绍一下win32中Visual Studio下libcurl库开发环境设置.Cocos2d-x引擎其实已经带有为Win32下访问libcurl库,Cocos2d-x 3.x中libcurl库文件 ...
- Visual Studio下SQLite数据库开发环境设置
由于我们介绍的内容都是基于微软的Visual Studio下开发的Win32平台,所以下边我们介绍Visual Studio下SQLite数据库开发环境设置.具体而言我们有两种方式可以在Visual ...
- Visual Studio 2012下Box2D开发环境设置
Cocos2d-x 3.x默认情况下采用的物理引擎是Chipmunk,如果我们要使用Box2D引擎,需要进行一些设置和调整,而且不同的开发平台下这些设置也有所不同.由于本书在此之前介绍的都是基于微软的 ...
- Visual Studio 2013 编译 64 位 Python 的 C 扩展 (使用 PyObject 包装)
对于 32 位 Python 的 C 扩展,以前用过 mingW32 编译, 但是 mingW32 不支持 64 位 Python 的 C 扩展编译,详情可见 stackoverflow,这位前辈的大 ...
- Visual Studio 2013编译Tesseract 3.04
文章目录 去年时候使用了VS2008编译了Tesseract 3.02版本,主要是参考了一份官方文档,但是对于目前的最新版本并没有给出说明. 本文主要参考了Paul Vorbach的How to bu ...
- Visual Studio 中 Tab 转换为空格的设置
Visual Studio 中 Tab 转换为空格的设置 在 Visual Studio 中写代码时,按 Tab 键,会自动进行缩进.有时希望实现按 Tab 键,出现多个空格的效果.Visual St ...
随机推荐
- 【JVM之内存与垃圾回收篇】StringTable
StringTable String的基本特性 String:字符串,使用一对 "" 引起来表示 String s1 = "Nemo"; // 字面量的定义方式 ...
- Spark入门(第1讲)
一.Spark是什么 引用官方文档的一句话 Apache Spark is a unified analytics engine for large-scale data processing. Ap ...
- Cordova iPhone 刘海屏 和 安卓瀑布屏 等异形屏幕的适配处理
1. 在cordova项目的config.xml中指定StatusBarOverlaysWebView(需要cordova-plugin-statusbar插件支持),表示应用界面是否覆盖状态栏(系 ...
- Git常用命令及方法大全
下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 本地 ...
- DOM事件操作
DOM事件:对事件做出反应 当事件发生时,可以执行 JavaScript,比如:点击时 onClick="" 例:当用户点击时,会改变 <h1> 元素的内容: < ...
- 了不起的Node.js 5/16
Chapter 1 安装 1.Node.js的设计理念之一,只维护较少量的依赖,这使得安装node.js变得非常简单. 2.执行文件console.log没问题,但是node执行http静态服务器的时 ...
- Python异常及异常处理
Python异常及异常处理: 当程序运行时,发生的错误称为异常 例: 0 不能作为除数:ZeroDivisionError 变量未定义:NameError 不同类型进行相加:TypeError 异常处 ...
- PHP 中的字符串变量
PHP 字符串变量 字符串变量用于存储并处理文本. PHP 中的字符串变量 字符串变量用于包含有字符的值. 在创建字符串之后,我们就可以对它进行操作了.您可以直接在函数中使用字符串,或者把它存储在变量 ...
- PHP array_merge_recursive() 函数
实例 把两个数组合并为一个数组: <?php$a1=array("a"=>"red","b"=>"green&q ...
- Python File close() 方法
概述 close() 方法用于关闭一个已打开的文件.高佣联盟 www.cgewang.com 关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误. close() 方法允许调用多 ...