c# - 如何以编程方式将 AssemblyInfo.cs 更新为预构建事件 (Visual Studio / msbuild)
问题描述
我希望在我的项目中定义一个位置来存储版本字符串。我正在寻找的行为是将版本存储在项目目录中的文本文件 (version.txt) 中,然后我的预构建事件更新 Properties/AssemblyInfo.cs 中的内容。
[assembly: AssemblyVersion("<Version>")]
[assembly: AssemblyFileVersion("<Version>")]
是的,我知道只有两个字段并且它们彼此相邻,但我仍然想知道这是否可能。
我编写并测试了执行此功能的 Powershell 脚本。
$assemblyInfoPath = "Properties\AssemblyInfo.cs"
$versionText = (Get-Content -Path version.txt -ReadCount 0)
$assemblyInfoText = (Get-Content -Path $assemblyInfoPath -ReadCount 0)
$assemblyInfoText = $assemblyInfoText -replace '\[assembly: AssemblyVersion\("((\d)+|(\.))*"\)\]', "[assembly: AssemblyVersion(`"$versionText`")]"
$assemblyInfoText -replace '\[assembly: AssemblyFileVersion\("((\d)+|(\.))*"\)\]', "[assembly: AssemblyFileVersion(`"$versionText`")]" | Set-Content -Path $assemblyInfoPath
失败的(我认为)是预构建步骤中的调用:
预构建事件命令行:
powershell $(ProjectDir)set_assembly_version.ps1
我没有尝试使用 msbuild 运行它,仅通过 Visual Studio 2017。这是否可能,因为 AssemblyInfo.cs 是一个项目文件?
解决方案
我试图做同样的事情,但发现我的系统没有配置为允许我通过这样的命令执行 powershell 脚本。我本可以解决这个问题,但不是要求每个人都对他们的机器进行相同的编辑,我想我会构建一个不需要执行外部脚本文件的完整预构建命令。主要的“挑战”是确保我已经正确地逃脱了一切。
由于我的项目的性质,我的版本有很多变化。我试图准确地重新创建您在命令中尝试执行的操作,您应该能够将其插入到您的预构建事件中:
powershell $assemblyInfoPath = \"$(projectDir)Properties\AssemblyInfo.cs\";$versionText = (Get-Content -Path \"$(projectDir)version.txt\" -ReadCount 0);$assemblyInfoText = (Get-Content -Path $assemblyInfoPath -ReadCount 0);$assemblyInfoText = $assemblyInfoText -replace \"^\[assembly: AssemblyVersion\(".*"\)\]$\", \"[assembly: AssemblyVersion(`\"$versionText`\")]\";$assemblyInfoText = $assemblyInfoText -replace \"^\[assembly: AssemblyFileVersion\(".*"\)\]$\", \"[assembly: AssemblyFileVersion(`\"$versionText`\")]\";Set-Content -Path $assemblyInfoPath -Value $assemblyInfoText;
推荐阅读
- sql - T-SQL 检查文件是否存在
- go - YAML Unmarshal map[string]struct
- c# - 我正在尝试读取我创建的文本文件中的最后一行,并在程序退出之前将最后一行添加到我的文件名中
- list - 遍历有序对列表
- python - 如何使用给定的新信息保存和更新 excel 文件
- java - Java DataInputStream 转换为字节数组?
- php - 如何使用 between 语句从两个不同的表中获取数据?
- javascript - 如何将 Excel 公式转换为 html/javascript,结果四舍五入为整欧元?
- python - 如何将此网络浏览器代码集成到 tkinter 中?
- javascript - 有没有办法限制过滤组合框 onChange API 调用?