如何通过Makefile为Blazor WASM程序集设置自定义格式版本?
解决方案:通过Makefile+dotnet build参数实现自定义版本号
方案1:直接在Makefile中生成版本并传递给dotnet build
这种方式无需修改项目文件,直接通过命令行参数注入版本号,适用于大多数场景。
在Makefile中编写版本生成逻辑:
- 用
date生成YEAR.MONTH.DAY部分 - 修订号可以用Git提交次数(如果用Git管理代码),或者自定义递增逻辑
示例Makefile代码:
# 生成版本号:YYYY.MM.DD.提交次数 VERSION := $(shell date +%Y.%m.%d).$(shell git rev-list --count HEAD) build: dotnet build YourSolution.sln /p:Version=$(VERSION) /p:FileVersion=$(VERSION) /p:AssemblyVersion=$(VERSION)- 如果不用Git,可通过维护一个版本文件来递增修订号:
# 读取当前修订号,默认0 REV_FILE := .revision REVISION := $(shell cat $(REV_FILE) 2>/dev/null || echo 0) VERSION := $(shell date +%Y.%m.%d).$(REVISION) build: dotnet build YourSolution.sln /p:Version=$(VERSION) /p:FileVersion=$(VERSION) /p:AssemblyVersion=$(VERSION) # 递增修订号并保存 $(shell echo $$(($(REVISION)+1)) > $(REV_FILE))
- 用
执行构建:
运行make build即可完成带自定义版本的编译,所有项目的程序集版本、文件版本都会被设置为指定格式。
方案2:修改项目文件统一接收版本参数
如果需要更灵活的版本控制(比如部分项目单独设置版本),可以修改.csproj文件,让它支持从命令行接收自定义版本:
在所有需要设置版本的项目的
.csproj中添加以下配置:<PropertyGroup> <!-- 当传递CustomVersion参数时,覆盖默认版本 --> <Version Condition="'$(CustomVersion)' != ''">$(CustomVersion)</Version> <FileVersion Condition="'$(CustomVersion)' != ''">$(CustomVersion)</FileVersion> <AssemblyVersion Condition="'$(CustomVersion)' != ''">$(CustomVersion)</AssemblyVersion> </PropertyGroup>在Makefile中生成版本并传递参数:
VERSION := $(shell date +%Y.%m.%d).$(shell git rev-list --count HEAD) build: dotnet build YourSolution.sln /p:CustomVersion=$(VERSION)
注意事项
- 确保项目文件中没有硬编码的
Version、FileVersion或AssemblyVersion,否则命令行参数会被覆盖。 - Blazor WASM的客户端项目和服务器项目(如果有的话)都会继承这个版本设置,无需单独配置。
- 若需要区分程序集版本和文件版本(比如程序集版本只保留YYYY.MM.DD,文件版本带修订号),可拆分参数传递:
VERSION_BASE := $(shell date +%Y.%m.%d) REVISION := $(shell git rev-list --count HEAD) ASSEMBLY_VERSION := $(VERSION_BASE) FILE_VERSION := $(VERSION_BASE).$(REVISION) build: dotnet build YourSolution.sln /p:AssemblyVersion=$(ASSEMBLY_VERSION) /p:FileVersion=$(FILE_VERSION) /p:Version=$(FILE_VERSION)
内容的提问来源于stack exchange,提问作者ImZac
相关产品推荐
相关产品推荐

