c#能否和c++一样快乐的多渠道编译呢?宏定义全局研究

作为一名安卓开发者,对于多渠道 渠道指定debug release,以及不同渠道引用不同模块,不同渠道编译不同代码是通过gradle实现的,在c#里很多经验多年的人也对此表示陌生,他们都沉浸在业务的代码中,不知道优化代码,也不知道高效的管理代码。 甚至连git都不使用。
我决定打破这一点,于是进行的仔细的研究。

经过研究发现,要多个文件识别同一个宏定义只能在编译设置csproject里面操作 ,太麻烦了点,而后发现界面也是可以设置的,至于release和debug可以勾选单独优化。


image.png
image.png
image.png

我要的是模块划分+ 项目划分

如果在项目设置里面设置ACHANNEL ,那么所有文件这样判断,太啰嗦了

我要把每个模块归类到一个模块, 然后父级别控制这个整个模块 是否编译

[图片上传中...(image.png-17c6f5-1661394956949-0)]

也就是说ACHANNEL里面包含A1,A2,A3 单独这样就难搞了,在c++里面可以渠道包含模块,这样控制渠道 渠道就控制模块。

由于只能单一控制,渠道编译虽然可以,但是毕竟麻烦,具体的麻烦就是要全部改成命令,改成命令就没那么麻烦了,如下图,可以单独设置 全局生效的宏定义,另外有一个DefineConstants也是一个关键的东西,通过控制它也可以控制一些渠道。


image.png

最后命令 传递p:DefineConstants
msbuild ConsoleApplication1.sln /p:DefineConstants="DEV" /t:Rebuild

理论上可以在开发工具里面直接可以显示出来,但是需要研究csproject的语法
学习相关知识各位朋友可以搜索关键词csproj文件中的DefineConstants 应该可以找到灵感。


image.png

通过添加这个item,我认为可以实现安卓的渠道生产功能。
为了方便,我直接用开发工具本来自带的新建功能。
最后的效果如下,多了一个VIPCHANNEL


image.png

最后

参考资料

https://www.bing.com/search?q=c%20sharp%20%20other%20file%20%20define&qs=n&form=QBRE&=%25eManage%20Your%20Search%20History%25E&sp=-1&pq=c%20sharp%20other%20file%20define&sc=7-25&sk=&cvid=D955EA55B480444AAF4BA68E6236BBA4&ghsh=0&ghacc=0&ghpl=

https://stackoverflow.com/questions/10916280/how-to-use-define-from-another-file

image.png

http://blog.walterlv.com/post/known-properties-in-csproj.html
https://blog.csdn.net/WPwalter/article/details/80371271
https://blog.walterlv.com/post/how-to-define-preprocessor-symbols.html
https://www.796t.com/post/MWdiejI=.html
https://www.google.com/search?q=csproj%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84DefineConstants+&sxsrf=ALiCzsYzIP8qtbA25kLRENhkrjuXYtfCmg%3A1661389645718&source=hp&ei=TcsGY9vWKdfy-Qb057mgBw&iflsig=AJiK0e8AAAAAYwbZXVx_BfHd4o8G4a2-NZ1ZBlIt3hPM&ved=0ahUKEwibsajd5uD5AhVXed4KHfRzDnQQ4dUDCAc&uact=5&oq=csproj%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84DefineConstants+&gs_lcp=Cgdnd3Mtd2l6EANQAFgAYI4EaABwAHgAgAFhiAFhkgEBMZgBAKABAqABAQ&sclient=gws-wiz

你可能感兴趣的:(c#能否和c++一样快乐的多渠道编译呢?宏定义全局研究)