title author date CreateTime categories
Roslyn 使用 Directory.Build.props 管理多个项目配置
lindexi
2019-05-21 11:35:52 +0800
2018-9-20 15:9:3 +0800
Roslyn MSBuild 编译器

在一些大项目需要很多独立的仓库来做,每个仓库之间都会有很多相同的配置,本文告诉大家如何通过 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

更多关于 Roslyn 请看 手把手教你写 Roslyn 修改编译

参见:Roslyn 入门 - CSDN博客

2019-5-21-Roslyn-使用-Directory.Build.props-管理多个项目配置的更多相关文章

  1. Roslyn 使用 Directory.Build.props 管理多个项目配置

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

  2. 2019-11-29-Roslyn-使用-Directory.Build.props-文件定义编译

    title author date CreateTime categories Roslyn 使用 Directory.Build.props 文件定义编译 lindexi 2019-11-29 08 ...

  3. 2018-10-19-Roslyn-使用-Directory.Build.props-文件定义编译

    title author date CreateTime categories Roslyn 使用 Directory.Build.props 文件定义编译 lindexi 2018-10-19 18 ...

  4. 2019.3.18考试&2019.3.19考试&2019.3.21考试

    2019.3.18 C O D E T1 树上直接贪心,环上for一遍贪心 哇说的简单,码了将近一下午终于码出来了 感觉自己码力/写题策略太糟糕了,先是搞了一个细节太多的写法最后不得不弃疗了,然后第二 ...

  5. vue-cli脚手架build目录中check-versions.js的配置

    转载自:https://www.cnblogs.com/ye-hcj/p/7074363.html 本文介绍vue-cli脚手架build目录中check-versions.js的配置 本文件是用来检 ...

  6. 2019年9月Github上最热门的JavaScript开源项目

      2019年9月Github上最热门的JavaScript开源项目 前端开发 前端开发 微信号 qianduan1024 功能介绍 专注于Web前端技术文章分享,包含JavaScript.HTML5 ...

  7. 2019.01.21 洛谷P3919 【模板】可持久化数组(主席树)

    传送门 题意简述:支持在某个历史版本上修改某一个位置上的值,访问某个历史版本上的某一位置的值. 思路: 用主席树直接维护历史版本即可. 代码: #include<bits/stdc++.h> ...

  8. 2019.01.21 bzoj3674: 可持久化并查集加强版(主席树+并查集)

    传送门 题意:维护可持久化并查集,支持在某个版本连边,回到某个版本,在某个版本 询问连通性. 思路: 我们用主席树维护并查集fafafa数组,由于要查询历史版本,因此不能够用路径压缩. 可以考虑另外一 ...

  9. 2019.01.21 bzoj1758: [Wc2010]重建计划(01分数规划+长链剖分+线段树)

    传送门 长链剖分好题. 题意简述:给一棵树,问边数在[L,R][L,R][L,R]之间的路径权值和与边数之比的最大值. 思路: 用脚指头想都知道要01分数规划. 考虑怎么checkcheckcheck ...

随机推荐

  1. AndroidStudio 搜索导入自己需要的库

    前言 在Androidx的库应用后,导致有需多系统组件库需要重新 implementation 升级为Androidx, 但是你可能会发现不知道怎么导入他们.  当然除了导入Android的组件库,还 ...

  2. webstorm安装与破解

    1.下载webstorm和补丁文件 链接:https://pan.baidu.com/s/1aiHxPExAbDCcHxKtB82_vg 提取码:jo07 链接:https://pan.baidu.c ...

  3. vue mounted组件的使用

    1.钩子函数  钩子函数是Windows消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息.事件进行过滤,访问在正常情况下无法访问的消息.钩子的本质是一段用以处理系统消息的程序,通 ...

  4. C语言进阶学习第二章

    本章重点记录指针的各种概念: 1.地址与内容 2.非法的赋值 3.NULL指针:NULL指针作为一个特殊的指针变量,表示不指向任何东西,在对指针进行解引用操作之前,首先必须 确保它并非NULL指针. ...

  5. PAT甲级——A1125 Chain the Ropes【25】

    Given some segments of rope, you are supposed to chain them into one rope. Each time you may only fo ...

  6. substring常用的两种方法

    1.public String substring(int beginIndex, int endIndex) 第一个参数int为开始的索引,对应String数字中的开始位置, 第二个参数是截止的索引 ...

  7. 03_mybatis配置文件详解

    1. SqlMapConfig.xml mybatis全局配置文件SqlMapConfig.xml,配置内容如下: *properties(属性) setting(全局配置参数) typeAliase ...

  8. <随便写>进程基本知识

    from multiprocessing import Process, Queue,Pool import time import os def producer(q): for i in rang ...

  9. vue表格之tableHeaderColor(修改表头背景色)

    <el-table :header-cell-style="tableHeaderColor"></el-table> // 更改表头样式 tableHea ...

  10. Python全栈开发:json与pickle

    #!/usr/bin/env python # -*- coding;utf-8 -*- """ 正解(序列化):将Python数据类型转换成json或者pickle格式 ...