OneClick项目中如何同步PublishVersion/MinimumRequiredVersion与程序集版本?
解决OneClick程序同步PublishVersion与MinimumRequiredVersion的问题
你的问题核心在于AfterCompile目标的执行时机太晚——OneClick发布流程中的版本参数(PublishVersion、MinimumRequiredVersion)在编译完成前就已经被确定,所以在AfterCompile阶段修改这两个属性不会影响最终的发布配置。要实现同步,需要调整以下配置:
1. 调整目标执行时机
将自定义目标的触发时机从AfterCompile改为PrepareForPublish或BeforePublish,这两个阶段处于发布流程前期,此时修改版本属性仍能生效。示例配置如下:
<Target Name="SyncPublishVersions" BeforeTargets="PrepareForPublish"> <!-- 复用SubWCRev生成的完整程序集版本号(假设已通过预构建事件存入$(FullAssemblyVersion)属性) --> <PropertyGroup> <PublishVersion>$(FullAssemblyVersion)</PublishVersion> <MinimumRequiredVersion>$(FullAssemblyVersion)</MinimumRequiredVersion> </PropertyGroup> <Message Text="已同步发布版本:$(PublishVersion),最低要求版本:$(MinimumRequiredVersion)" Importance="High" /> </Target>
2. 确保版本号的正确传递
如果预构建事件中已经通过SubWCRev生成了完整版本号,需要将这个版本号存入MSBuild可识别的属性中(比如$(FullAssemblyVersion)),而非仅写入AssemblyInfo.cs。可以在预构建事件里添加命令,将版本号输出到临时属性文件,再导入到项目中:
subwcrev . AssemblyInfo.cs.tpl AssemblyInfo.cs /f /r %temp%\version.tpl rem 假设version.tpl内容为:<PropertyGroup><FullAssemblyVersion>$WCREV$</FullAssemblyVersion></PropertyGroup>
然后在项目文件中导入这个临时文件:
<Import Project="%temp%\version.tpl" Condition="Exists('%temp%\version.tpl')" />
3. 移除项目文件中的硬编码版本
检查项目文件(.csproj/.vbproj)或发布配置文件(.pubxml),如果存在硬编码的PublishVersion或MinimumRequiredVersion,需要替换为动态属性引用,避免覆盖自定义目标的设置:
<!-- 替换硬编码值为动态属性 --> <PublishVersion>$(FullAssemblyVersion)</PublishVersion> <MinimumRequiredVersion>$(FullAssemblyVersion)</MinimumRequiredVersion>
4. 验证执行顺序
可以添加Message标签输出MSBuild目标的执行顺序,确认自定义目标在PrepareForPublish之前运行:
<Target Name="CheckTargetOrder" BeforeTargets="PrepareForPublish"> <Message Text="当前执行目标:SyncPublishVersions" Importance="High" /> </Target>
内容的提问来源于stack exchange,提问作者Drees
相关产品推荐
相关产品推荐

