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->'"%(Identity)"')" />
<Exec Command="for %%f in (@(GeneratedCSFiles->'"%(Identity)"')) do echo #pragma warning disable > %%f.temp && type %%f >> %%f.temp && 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
2018-8-10-VisualStudio-2017-项目格式-自动生成版本号的更多相关文章
- 新版本ADT创建Android项目无法自动生成R文件解决办法
本人使用的是ADT是Version 23.0.2,支持Android 6.0之后的系统环境,最高版本23,在创建Android项目的时候,每次创建项目选择“Compile With”低于6.0版本的时 ...
- Jenkins持续部署-自动生成版本号
目录 Jenkins持续部署-自动生成版本号 目录 前言 目的 详细流程 获取SVN Reversion 获取需求号 设置编译前读取版本号 总结 参考文献 Jenkins持续部署-自动生成版本号 目录 ...
- 最好的 Xcode 自动生成版本号技术
在 bloglovin ,我们使用自动生成版本号来设置Xcode,使当前的版本号为在Git活跃的分支上 的提交数.它一直正常工作着,但我们的技术也不是一帆风顺的. 糟糕的老方法 我们使用的技术是来自一 ...
- 使用私有gitlab发布自动生成版本号和标签(version和tag)(骚)
设置 semantic ,自动生成版本号和标签 FROM node:14-buster-slim LABEL maintainer="wangyunpeng" COPY sourc ...
- Visual Studio 2017 怎么将自动生成属性设置为旧版格式
工具:Visual Studio 2017 1.点击工具,进入选项 2.选项窗口左侧找到C#--代码样式,点击 3.找到表达式首选项中:使用属性的表达式主体.使用索引器的表达式主体和使用访问器的表达式 ...
- 结对项目 实现自动生成四则运算题目的程序 (C++)
本次作业由 陈余 与 郭奕材 结对完成 零.github地址: https://github.com/King-Authur/-Automatically-generate-four-arithmet ...
- eclipse或adt-bundle创建的android项目没有自动生成MainActivity.java和activity_main.xml等文件解决办法
以前我电脑一直以来都是用的eclipse3.7来开发android项目的,创建android项目也能正常生成MainActivity.java和activity_main.xml等文件.后来不知道什么 ...
- 修改AssemblyInfo.cs自动生成版本号
一. 版本号自动生成方法 1.把 AssemblyInfo.cs文件中的[assembly:AssemblyVersion("1.0.0.0")]改成[assembly:Assem ...
- .net 程序集自动生成版本号
一. 版本号自动生成方法 只需把 AssemblyInfo.cs文件中的 [assembly:AssemblyVersion("1.0.0.0")]改成 [assembly:Ass ...
随机推荐
- Android源码的git下载地址
git clone https://android.googlesource.com/device/common.git git clone https://android.googlesour ...
- NX二次开发-UFUN获取工程图的数量和tag UF_DRAW_ask_drawings
NX9+VS2012 #include <uf.h> #include <uf_draw.h> #include <uf_part.h> #include < ...
- NX二次开发-UFUN和NXOpen结合开发中Tag_t对象与TaggedObject对象转换方法
本文通过举四个例子来告诉大家在NX二次开发过程中会经常用到UFUN和NXOpen结合去开发,在UFUN中我们得到的是Tag_t对象,在NXOpen中得到的是TaggedObject对象,这两个是需要进 ...
- 7 Scatter-loading Features
7.1 About scatter-loading The scatter-loading mechanism enables you to specify the memory map of an ...
- 剑指offer——13矩阵中的路径
题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中 ...
- 案例 查询QC(query_cache)
案例: 数据库版本 5.7.23 16c 64g 按月分区表,做压力测试 开启QC之前: select * from a where aa=xxx; QPS:每秒处理查询的数量 3000+ 开启之后 ...
- fastReport.net 初了解
delphi 中fastReport rmReport都很好用,转到.net了,第一想法也是这两个,好在这里有个fastReport; 这个安装呢 找个破解的 有个4.x版 安完建一个winForm ...
- hive sparksession查询只显示defalt库问题
1.spark环境记得拷贝进hive.xml 2.SparkSession.builder().enableHiveSupport()记得加上enableHiveSupport 3.window记得w ...
- 基于Mina的Http Server以及简单的Http请求客户端
目的: Java平台下的内部组件之间的通信. 1.WebService 由于感觉本身Java平台下的Web Service标准就不够统一,相互之间的调用就会有一些问题,更不用说与.net等 ...
- 为什么学习JavaScript
为什么学习JavaScript 一.你知道,为什么JavaScript非常值得我们学习吗? 1. 所有主流浏览器都支持JavaScript. 2. 目前,全世界大部分网页都使用JavaScript. ...