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. redis随记

    CONFIG REWRITE  将config文件  将服务器当前所使用的配置记录到 redis.conf 文件中.

  2. windows2012 日志查看过程

    Windows2012界面修改好造成有些人不知道在哪里查找windows 日志 我这边截图描述一下 1. 2.输入 命令  eventvwr.msc 3.弹出 windows 事件查看器 4.若需要  ...

  3. thinkphp 标签嵌套

    模板引擎支持标签的多层嵌套功能,可以对标签库的标签指定可以嵌套. 直线电机价格 系统内置的标签中,volist.switch.if.elseif.else.foreach.compare(包括所有的比 ...

  4. 暴力剪枝——cf1181C

    暴力求长度为len时,以i,j为左上角的旗子的数量 不剪枝的话复杂度是n*n*m*n,必定超时 两个可以剪枝的地方:如果格子[i,j]可以作为长度为len的旗子的左上角,那么其必定不可以作为长度> ...

  5. flink提交文件出现java.io.IOException:unable to close file because the last block does not have enough number of replicas异常

    当提交已经打包好的jar包时候,控制台出现以下的错误.

  6. C# .net async await 学习

    async/await简单介绍 在处理比较耗时的操作(如图片处理.数据压缩.http请求等)传统的异步方法是直接使用Thread或者Task进行操作,在复杂的应用编写中可能会出现回调的问题,因此C#目 ...

  7. 02-python 学习第二天

    今天学习了以下几个方面的内容,虽然部分内容不能理解,跟着老师写出了代码. 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 程序练习1:购物车程序 请闭眼写出以下程序. 程序: ...

  8. PyInstaller打包Python源文件为可执行程序exe

    1. 安装PyInstaller 使用命令:pip install PyInstaller时可能会由于网络的问题出现以下问题: pip._vendor.urllib3.exceptions.ReadT ...

  9. webservice、httpClient、dubbo的区别

    在开发中,对于同一个war包中的对象方法我们可以直接调用,但是很多情况下需要在不同项目或者不同服务器进行相互调用 webservice webservice技术可以实现不同服务器项目直接的调用和交换数 ...

  10. LeetCode 28.实现strStr()(Python3)

    题目: 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存 ...