在一些大项目需要很多独立的仓库来做,每个仓库之间都会有很多相同的配置,本文告诉大家如何通过 Directory.Build.props 管理多个项目配置

在我的 MVVM 框架需要三个不同的库,一个是 Framework 另外两个是 WPF 和 UWP 这三个库有很多重复的配置,如版本号和作者信息。

在之前,我每次发布的时候,我都需要修改三个不同的仓库的版本号,将几个版本号升级到最新,但是这个方法如大家所见,效率是很低的。

在我的另外的博客 Roslyn 通过 Nuget 管理公司配置 和 Roslyn 通过 nuget 统一管理信息 介绍了统一管理配置的优点。

但是很显然,我暂时无法使用 nuget 的方法统一几个仓库的配置,我需要一个新的方式。

在看到我之前的博客 Roslyn 使用 Directory.Build.props 文件定义编译 可以知道,通过 Directory.Build.props 文件可以修改配置。

于是本渣就使用这个方法统一配置,我在项目的最外面添加了 Directory.Build.props 文件

我创建了 Build 文件夹,这个文件夹里面就放一个文件,这个文件就是管理版本号

Build\Version.props<Project><PropertyGroup><Version>2.1.156</Version></PropertyGroup>
</Project>

现在的问题是如何让 Framework 三个不同的仓库引用这个文件,使用这个文件的版本号

通过 Directory.Build.props 添加下面的代码就可以让 Framework 项目找到版本号

<Project><Import Project="build\Version.props" />
</Project>

这样就可以导入版本号文件,也就是可以让 Framework 等项目引用这个文件

除了版本号也有很多的信息可以通过这个方式配置,如设置作者信息,作者的信息是属性需要使用下面代码

<Project><Import Project="build\Version.props" /><PropertyGroup><Authors>lindexi</Authors></PropertyGroup>
</Project>

除了作者还有很多相同的信息,如仓库的路径,下面我就直接将所有可以用到的属性写出来,这样大家可以复制下面的代码到自己的 Directory.Build.props 通过修改信息定义自己的配置


<Project><Import Project="build\Version.props" /><PropertyGroup><OutputPath>$(MSBuildThisFileDirectory)bin\$(Configuration)</OutputPath><!-- 打包的文件夹 --><PackageOutputPath>$(OutputPath)</PackageOutputPath><!-- 是否包括符号,默认为 false 设置为 true 会创建 xx.symbols.nupkg 文件 --><IncludeSymbols>true</IncludeSymbols><!-- 作者名 --><Authors>lindexi</Authors><!-- 是否在每次重新编译的时候创建 nuget 包 --><GeneratePackageOnBuild>true</GeneratePackageOnBuild><!-- 在 nuget 设置的项目的 url 通过这个 url 可以在 nuget.org 看到项目主页 --><PackageProjectUrl>https://github.com/lindexi/UWP/tree/master/uwp/src/Framework</PackageProjectUrl><!-- 在 nuget 设置项目的仓库,通过这个 url 可以点击到源代码 --><RepositoryUrl>https://github.com/lindexi/UWP/tree/master/uwp/src/Framework</RepositoryUrl><!-- 版权,很多时候都是写 Copyright © 2018 公司, All Rights Reserved. --><Copyright>MIT</Copyright><!-- 让用户安装的时候看到的版权链接 --><PackageLicenseUrl>https://github.com/lindexi/UWP/blob/master/LICENSE</PackageLicenseUrl><!-- 在 nuget 设置标签 --><PackageTags>WPF;MVVM;UWP</PackageTags></PropertyGroup><ItemGroup><!--指定自己的在安装 nuget 时修改编译--><!-- 添加的 README 文件 --><None Include="$(MSBuildThisFileDirectory)README.md" Pack="True" PackagePath="" Visible="false"/></ItemGroup></Project>

上面的代码的 $(MSBuildThisFileDirectory) 就是替换文件所在的文件夹路径,更多请看 项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦) - walterlv:https://blog.walterlv.com/post/known-properties-in-csproj.html

更多关于 Roslyn 请看 手把手教你写 Roslyn 修改编译 :  https://blog.lindexi.com/post/roslyn.html

参见:Roslyn 入门 - CSDN博客

Roslyn 使用 Directory.Build.props 管理多个项目配置相关推荐

  1. 使用 Directory.Build 来消除项目文件中的重复配置

    使用 Directory.Build 来消除项目文件中的重复配置 Intro 如果解决方案里的项目比较多的话,往往会有很多重复的项目属性,通常我们可以使用独立的 props 属性文件来配置公用的属性, ...

  2. AD域管理-Active Directory批量用户管理

    在Microsoft Active Directory中管理用户帐户是对每个IT管理员的公开挑战.使用本地Active Directory工具或类似PowerShell等其它选项对用户属性进行手动配置 ...

  3. Spring管理事务的若干配置形式

    Spring管理事务的若干配置形式 虽说利用Spring来实现配置式事务的基本原理都是AOP,但其配置方法也多种多样,以下从互联网摘抄了一些,希望起一个总结作用(有版权问题的话请留言作者,我将立即删除 ...

  4. 使用Maven管理Eclipse Java项目(多modules编译)

    http://www.blogjava.net/lostfire/archive/2012/03/27/58428.html 使用Maven管理Eclipse Java项目 本文可以任意转载,但请保留 ...

  5. mysql集群多管理节点_项目进阶 之 集群环境搭建(三)多管理节点MySQL集群

    多管理节点MySQL的配置很easy,仅须要改动之前的博文中提高的三种节点的三个地方. 1)改动管理节点配置 打开管理节点C:\mysql\bin下的config.ini文件,将当中ndb_mgmd的 ...

  6. Vue + webpack 项目配置化、接口请求统一管理

    准备工作 需求由来: 当项目越来越大的时候提高项目运行编译速度.压缩代码体积.项目维护.bug修复......等等成为不得不考虑而且不得不做的问题.  又或者后面其他同事接手你的模块,或者改你的bug ...

  7. 在idea中使用git管理你的项目

    起步 idea是十分智能的Java集成开发环境 而我们在用idea写项目的时候经常遇到版本控制的问题,而git工具如果你只会在终端中的git命令来进行控制,可能会使得效率低下 今天小编就教大家在ide ...

  8. linux samba 多个目录,linux7 Samba服务配置,多个部门相应管理自己的项目目录,其他有访问权限...

    多个部门相应管理自己的项目目录,对其他部门项目目录只有访问权限. 1.创建组和用户,使用useradd命令新建系统账户,然后再使用smbpasswd –a建立SMB账户. 2.创建目录文件 3更改目录 ...

  9. 鸟哥的Linux私房菜(基础篇)- 第十四章、Linux 账号管理与 ACL 权限配置

    第十四章.Linux账号管理与 ACL 权限配置 最近升级日期:2009/09/09 要登陆 Linux 系统一定要有账号与口令才行,否则怎么登陆,您说是吧?不过,不同的使用者应该要拥有不同的权限才行 ...

最新文章

  1. linux oracle io 查看,Linux上Oracle是否使用异步io的诊断
  2. 利用Caffe训练模型(solver、deploy、train_val) + python如何使用已训练模型
  3. Linux 上 GDM 登录界面如何适应高分屏
  4. 详解const和#define
  5. tf keras SimpleRNN源码解析
  6. 码栈开发手册(一)---编码方式开发(初级课程②)
  7. defconfig、 .config
  8. arduino智能浇花系统_创新成果 | 养花神器——智能浇花机
  9. 指令重排序及Happens-before法则随笔
  10. shallow clone
  11. DVWA(全级别通关教程详解)
  12. python三菱fx3u通讯mx_[实例]三菱FX3U-485无协议通讯程序(含程序段)
  13. 织梦模板被植入index.html,织梦dedecms百度快照劫持注入代码防范
  14. 小游戏上传分数是怎么实现的_如何利用微信小游戏做公众号吸粉营销活动
  15. 2014春晚小品《扶不扶》台词集锦
  16. Pandorabox(Openwrt) 双宽带(WAN) 叠加网络实战
  17. Lenovo/联想乐Phone S680 root教程_方法
  18. 【android】项目案例(一)之超级课程表
  19. 如何在PC上运行Android系统?
  20. hexo博客如何绑定个人域名

热门文章

  1. .NET中RabbitMQ的使用
  2. [USACO13JAN] Cow Lineup (单调队列,尺取法)
  3. pandas 入门(2)
  4. 笔试题 遗忘点记录 面向对象特点 + 产生死锁条件+ windows内存管理方法
  5. geek_Ask How-To Geek:营救受感染的PC,安装无膨胀iTunes和驯服疯狂的触控板
  6. Object关于属性property的静态方法
  7. 实现网站验证码切换功能
  8. lambda与内置函数
  9. javascript事件之:jQuery事件中实例对象和拓展对象之间的通信
  10. SD卡读写扇区注意事项(转)