zoukankan      html  css  js  c++  java
  • 2019-5-21-Roslyn-使用-Directory.Build.props-管理多个项目配置

    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 文件夹,这个文件夹里面就放一个文件,这个文件就是管理版本号

    BuildVersion.props
    
    <Project>
      <PropertyGroup>
        <Version>2.1.156</Version>
      </PropertyGroup>
    </Project>
    

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

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

    <Project>
      <Import Project="buildVersion.props" />
    </Project>
    

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

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

    <Project>
      <Import Project="buildVersion.props" />
      <PropertyGroup>
        <Authors>lindexi</Authors>
      </PropertyGroup>
    </Project>
    

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

    
    <Project>
      <Import Project="buildVersion.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博客

  • 相关阅读:
    思维导图
    Delphi 之弹出气泡消息提示
    delphi 响应鼠标进入控件消息
    Delphi 获取当前鼠标下的控件内容
    delphi TTBXToolBar 增加外部控件
    delphi button 实现下拉列表
    delphi 设置多屏幕
    电脑双屏改单屏后看不到文件问题的解决
    delphi ListView 设置固定列宽
    数字孪生(Digital twin)
  • 原文地址:https://www.cnblogs.com/lindexi/p/12085786.html
Copyright © 2011-2022 走看看