我确实看到了很多关于此主题的文章,但它们似乎都是针对VS而不是MSBuild。
MinimumRequiredVersion
在解决方案资源管理器中,右键单击项目并选择“卸载项目”。
一旦项目不可用,再次右键单击并选择编辑<project_name>.<lang>
proj。
属性使用键值对来提取信息。
$(OutputPath)
来获取元素<OutputPath>.\bin</OutputPath>
的值。我们将使用以下属性生成ClickOnce部署。
<MinimumRequiredVersion>1.0.0.6</MinimumRequiredVersion>
<ApplicationRevision>7</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
MSBuild任务
可以在项目(*.proj)文件中指定,并在构建事件期间调用。
FormatVersion
是.NET 4.0及更高版本的内置任务,将ApplicationVersion和ApplicationRevision格式化为单个版本号。复制并粘贴以下代码作为根<Project>
元素的子元素到打开的项目文件中。
<Target Name="AutoSetMinimumRequiredVersion" BeforeTargets="GenerateDeploymentManifest">
<FormatVersion Version="$(ApplicationVersion)" Revision="$(ApplicationRevision)">
<Output PropertyName="MinimumRequiredVersion" TaskParameter="OutputVersion" />
</FormatVersion>
<FormatVersion Version="$(ApplicationVersion)" Revision="$(ApplicationRevision)">
<Output PropertyName="_DeploymentBuiltMinimumRequiredVersion" TaskParameter="OutputVersion" />
</FormatVersion>
</Target>
这段代码将以应用程序版本和应用程序修订作为格式版本任务的参数,并通过覆盖最小所需版本与完整发布版本来保存输出。
保存并重新加载您的项目。每次 ClickOnce 部署现在都会自动更新到最近发布的版本。
非常感谢 Kev 的答案,我在这里基本上是对其进行了再解释,以便初学者更容易理解。这是我发表的一篇关于此问题的博客文章(链接),其中更详细地展开了我的答案。
由于您想使用MSBuild而不是Visual Studio进行发布,我假设您是从构建服务器发布或使用某种脚本。您可以使用Set-ProjectFilesClickOnceVersion PowerShell 脚本来设置 ClickOnce 应用程序版本以及强制最低所需版本为最新版本。在运行 MSBuild 之前,您需要执行此操作。我的博客详细描述了如何设置构建服务器以适应发布 ClickOnce 应用程序。
目前,我倾向于通过自定义命令行实用程序更新MinimumRequiredVersion,该实用程序将简单地读取项目文件并递增它。这是我为脚本化构建想到的唯一选项。
我不确定你是否以最佳方式进行此操作。
我建议使用像Team City这样的持续集成(CI)服务器来负责部署。如果需要发布最新版本的源代码,则应将其构建到经过充分测试的CI构建配置中,并从可能会忘记/偶尔出错的用户手中拿走。