Roslyn 将构建时间写入到输出文件
我期望在每次构建完成之后,创建一个文件,在这个文件里面写入是什么时间构建的。这个需求实现非常简单,只需要使用 Target 在构建完成,使用 WriteLinesToFile 方法写入时间到输出文件即可
先写一个 Target 设置在 Build 之后执行
<Target Name="WriteBuildInfoTarget" AfterTargets="Build">
</Target>
在 Target 里面执行 WriteLinesToFile 将当前时间写入到文件。例如写入到输出文件夹的 BuildTime.txt 里面
<Target Name="WriteBuildInfoTarget" AfterTargets="Build">
<WriteLinesToFile File="$(OutputPath)\BuildTime.txt" Lines="$([System.DateTimeOffset]::get_Now().ToString())" Overwrite="true"/>
</Target>
尝试构建一下项目,可以在输出文件夹找到 BuildTime.txt 文件,在这个文件里面可以看到当前的构建时间,大概内容如下
2022/10/29 16:12:53 +08:00
如果提示 error MSB4185: 类型“System.DateTimeOffset”上的函数“get_Now”无法作为 MSBuild 属性函数执行 那么可以将 DateTimeOffset 降级使用 DateTime 代替。或者更新 Visual Studio 到最新版本
更改之后的代码如下
<Target Name="WriteBuildInfoTarget" AfterTargets="Build">
<WriteLinesToFile File="$(OutputPath)\BuildTime.txt" Lines="$([System.DateTime]::get_Now().ToString())" Overwrite="true"/>
</Target>
使用 DateTimeOffset 在这里会比 DateTime 更优,因为 DateTimeOffset 能写入时区
如果担心遇到语言文化的问题,也就在其他的国家里面的对日期的格式化和中国不同,导致行为的不同。可以强行给定格式,例如对应的这样写
<Target Name="WriteBuildInfoTarget" AfterTargets="AfterBuild">
<!--
编译完成之后,自动生成 BuildTime.txt 文件到输出文件夹,用来给业务端判断构建时间,决定某些功能的执行。例如埋点模块,判断距离实际运行时间太过久远,就不上报信息,减少流量占用
放在 Startup 程序集,可以减少在其他程序集构建导致增量构建失效
-->
<WriteLinesToFile File="$(OutputPath)\BuildTime.txt" Lines="$([System.DateTime]::get_Now().ToString('yyyy-MM-dd HH:mm:ss,fff'))" Overwrite="true"/>
</Target>
以上输出的就是格式如 2022-10-20 10:56:02,123 的字符串
在业务代码里面,可以使用如下代码进行解析
var buildTime = DateTime.ParseExact(text, "yyyy-MM-dd HH:mm:ss,fff", null);
采用此方法可以解决多语言文化的问题,也就是此应用放在其他国家的机器上运行,也可以符合预期使用
可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码
git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 2d9b071c62ae6d47c0b88d4b5abccb1bf4b60778
以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码
git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin 2d9b071c62ae6d47c0b88d4b5abccb1bf4b60778
获取代码之后,进入 YearkelbeneaqeahaicoChurinocechu 文件夹
更多关于 WriteLinesToFile 的使用,请参阅 Roslyn 使用 WriteLinesToFile 解决参数过长无法传入
更多编译相关请看手把手教你写 Roslyn 修改编译
Roslyn 将构建时间写入到输出文件的更多相关文章
- loadrunner脚本中写入脚本输出log到外部文件,分析参数取值方式
loadrunner脚本中写入脚本输出log到外部文件,分析参数取值方式 分类: 心得 loadrunner 我的测试 2012-04-01 12:52 2340人阅读 评论(0) 收藏 举报 脚本l ...
- 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\106f9ae8\cc0e1
在本地开发环境没问题,但是发布到服务器出现:未能写入输出文件"c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.Ne ...
- CS0016: 未能写入输出文件“c:\WINDOWS\Microsoft.NET\Framework\.。。”--“拒绝访问
aspx 常见错误 CS0016: 未能写入输出文件“c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/... ...
- C# iis 错误配置信息( CS0016: 未能写入输出文件 )
IIS发布时,编译器错误消息: CS0016: 未能写入输出文件 "c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.N ...
- 转发 win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 解决方案
win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NE ...
- 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。 编译器错误消息: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\41c191fd\ff9345c5\App_Web_login.cshtml.65793277
本地开发环境没问题,但是发布到服务器出现问题或则直接在IIS上修改东西就给我抛出以下错误: 未能写入输出文件"c:\Windows\Microsoft.NET\Framework64 \v4 ...
- ls按时间排序输出文件列表
文件转自:http://www.2cto.com/os/201303/197829.html ls按时间排序输出文件列表 首先,ls --help查看ls相关的与时间排序相关的参数: > ...
- System.Web.HttpCompileException (0x80004005): (0): error CS0016: 未能写入输出文件
重新系统后,iis asp.net站点老是出现: System.Web.HttpCompileException (0x80004005): (0): error CS0016: 未能写入输出文件“c ...
- Win7下:编译器错误信息: CS0016: 未能写入输出文件
错误如下: "/"应用程序中的服务器错误. 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误消息: CS ...
- 编译器错误消息: CS0016: 未能写入输出文件“c:/Windows/Microsoft.NET/Framework/v2.0.50727/....dll”--“拒绝访问。
错误如下: “/”应用程序中的服务器错误. 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误消息: CS0016: 未能写入 ...
随机推荐
- 深入解析C#中的第三方库NPOI:Excel和Word文件处理的利器
一.引言 在.NET开发中,操作Office文档(特别是Excel和Word)是一项常见的需求.然而,在服务器端或无Microsoft Office环境的场景下,直接使用Office Interop可 ...
- .NET周刊【3月第2期 2024-03-17】
国内文章 开源.NET8.0小项目伪微服务框架(分布式.EFCore.Redis.RabbitMQ.Mysql等) https://www.cnblogs.com/aehyok/p/18058032 ...
- 更智能的广告素材生成!看A/B测试如何驱动AIGC素材调优
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 前言:AIGC大爆发,引发广告营销行业变革 ChatGPT等AI产品引发的AIGC大爆发引起了各行业的震动,其中以 ...
- vue项目 nginx部署
nginx.conf中的server配置片段 server { listen 8080 ;#默认端口是80,如果端口没被占用可以不用修改 server_name localhost; #charset ...
- C++设计模式 - 享元模式(Flyweight)
对象性能模式 面向对象很好地解决了"抽象"的问题,但是必不可免地要付出一定的代价.对于通常情况来讲,面向对象的成本大都可以忽略不计.但是某些情况,面向对象所带来的成本必须谨慎处理. ...
- #背包#洛谷 4026 [SHOI2008]循环的债务
题目 分析 设\(dp[t][n][m]\)表示前\(t\)种钞票\(\text{Alice,Bob}\)分别拥有\(n,m\)元所需最小交换钞票数, 枚举\(\text{Alice,Bob}\)最后 ...
- go~istio加载wasm的步骤
参考 https://github.com/higress-group/proxy-wasm-go-sdk/tree/main/proxywasm https://github.com/tetrate ...
- OpenHarmony支持HDMI接口声卡适配说明
高清多媒体接口(High Definition Multimedia Interface,HDMI )是一种全数字化视频和声音发送接口,可以发送未压缩的音频及视频信号.HDMI可用于机顶盒.DV ...
- 基于新版宝塔Docker部署在线客服系统过程小记
我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户.对我来说,只要能获得用户的认可,就是我最大的动力. 客服系统开发过程中,最让我意外的是对 TCP/IP 协议的认识.过去一直认 ...
- 深入理解 Java 多线程、Lambda 表达式及线程安全最佳实践
Java 线程 线程使程序能够通过同时执行多个任务而更有效地运行. 线程可用于在不中断主程序的情况下在后台执行复杂的任务. 创建线程 有两种创建线程的方式. 扩展Thread类 可以通过扩展Threa ...