zoukankan      html  css  js  c++  java
  • 2018-8-10-VisualStudio-2017-项目格式-自动生成版本号

    title author date CreateTime categories
    VisualStudio 2017 项目格式 自动生成版本号
    lindexi
    2018-08-10 19:16:52 +0800
    2018-06-10 11:33:35 +0800
    VisualStudio

    最近我把很多项目都使用了 VisualStudio 2017 新项目格式,在使用的时候发现一些比较好用的功能。 本文告诉大家如何使用 VisualStudio 2017 项目格式自动生成版本号

    在看本文之前,我认为大家都不是第一次接触 VisualStudio 2017 项目格式。新的项目格式是比较简单的,但是也有一些设置项是比较复杂。

    创建一个 UWP 使用 VisualStudio 2017 项目格式请看将 WPF、UWP 以及其他各种类型的旧样式的 csproj 文件迁移成新样式的 csproj 文件 - walterlv

    请看最简单创建一个 UWP 项目的代码

    <Project Sdk="MSBuild.Sdk.Extras/1.5.4">
      <PropertyGroup>
        <TargetFrameworks>uap10.0.16299;</TargetFrameworks>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="MSBuild.Sdk.Extras" Version="1.5.4" />
      </ItemGroup>
    </Project>

    这里是使用多个平台,使用最低版本 16299 的原因是需要支持 dotnet standard

    如果创建的项目是用来发布 nuget 的,那么就需要做一些设置,在继续阅读文本,我希望大家先看项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦) - walterlv

    添加注释

    如果需要在发布的 dll 添加 文档注释,那么请加下面代码

       <PropertyGroup>
        <DocumentationFile>bin$(Configuration)$(TargetFramework)$(AssemblyName).xml</DocumentationFile>
      </PropertyGroup>

    所有的下面的代码都是放在 Project 标签里

    <Project Sdk="MSBuild.Sdk.Extras/1.5.4">
      <PropertyGroup>
        <TargetFrameworks>uap10.0.16299;</TargetFrameworks>
      </PropertyGroup>
    
      <PropertyGroup>
        <DocumentationFile>bin$(Configuration)$(TargetFramework)$(AssemblyName).xml</DocumentationFile>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="MSBuild.Sdk.Extras" Version="1.5.4" />
      </ItemGroup>
    </Project>

    因为 bin$(Configuration)$(TargetFramework) 可以使用 $(OutputPath) 替换,上面的代码可以修改为

       <PropertyGroup>
        <DocumentationFile>$(OutputPath)$(AssemblyName).xml</DocumentationFile>
      </PropertyGroup>

    防止警告生成的文件

    一些生成的文件会让 VisualStudio 编译时警告,使用下面代码可以让 VisualStudio 不分析生成的文件

    <Target Name="PragmaWarningDisablePrefixer" AfterTargets="MarkupCompilePass2">
    	<ItemGroup>
    		<GeneratedCSFiles Include="***.g.cs;***.g.i.cs" />
    	</ItemGroup>
    	<Message Text="CSFiles: @(GeneratedCSFiles->'&quot;%(Identity)&quot;')" />
    	<Exec Command="for %%f in (@(GeneratedCSFiles->'&quot;%(Identity)&quot;')) do echo #pragma warning disable &gt; %%f.temp &amp;&amp; type %%f &gt;&gt; %%f.temp &amp;&amp; move /y %%f.temp %%f" />
    </Target>

    自动添加版本

      <PropertyGroup>
        <Build>$([System.DateTime]::op_Subtraction($([System.DateTime]::get_Now().get_Date()),$([System.DateTime]::new(2000,1,1))).get_TotalDays())</Build>
        <Revision>$([MSBuild]::Divide($([System.DateTime]::get_Now().get_TimeOfDay().get_TotalSeconds()), 2).ToString('F0'))</Revision>
        <Version>2.1.0.$(Revision)</Version>
      </PropertyGroup>

    这样就可以自动添加版本号,虽然生成的版本号是用时间生成

    这样的用法请看项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦) - walterlv

    如果只是想添加打包的版本号,请使用下面的代码

     <PropertyGroup>
        <Build>$([System.DateTime]::op_Subtraction($([System.DateTime]::get_Now().get_Date()),$([System.DateTime]::new(2000,1,1))).get_TotalDays())</Build>
        <Revision>$([MSBuild]::Divide($([System.DateTime]::get_Now().get_TimeOfDay().get_TotalSeconds()), 2).ToString('F0'))</Revision>
        <Version>2.1.0</Version> 
        <PackageVersion>2.1.5.$(Revision)</PackageVersion>
      </PropertyGroup>
    

    打包的版本号是 PackageVersion ,项目版本号是 Version ,在打包的时候,找不到 PackageVersion 会自动使用 Version ,所以如果需要项目版本号和打包版本号不相同,就定义 Version 和 PackageVersion 使用不同的值。

    但是很多小伙伴都是设置打包的版本号和项目版本号相同,这样如果有人说某个nuget出现问题,可以很快找到是哪里的问题。或者发布出去的包,可以通过查看 dll 的版本号就知道是哪个 Nuget 发布,因为 dll 的版本号和 nuget 的相同。

    参见:Roland Weigelt - How to Disable Warnings in Generated C# Files of UWP Apps

  • 相关阅读:
    echo和重定向
    grep命令
    重温JSP学习笔记--JSP动作标签
    重温JSP学习笔记--El表达式
    重温JSP学习笔记--El函数库
    重温JSP学习笔记--JSTL标签库
    重温JSP学习笔记
    Android 用 camera2 API 自定义相机
    从零开始用 Flask 搭建一个网站(一)
    从零开始用 Flask 搭建一个网站(二)
  • 原文地址:https://www.cnblogs.com/lindexi/p/12085803.html
Copyright © 2011-2022 走看看