使用MSBuild进行ClickOnce部署 - >如何传递应用程序版本/或自动增量的当前内部版本号

Ale*_*ski 5 .net msbuild clickonce

我们有一个使用ClickOnce部署的Outlook加载项.

一旦开发人员检查了构建,PC就会对构建进行排队,并将应用程序发布到共享驱动器上的某个位置.

问题是构建不会将发布版本更改为当前程序集版本,因此它会在先前版本的文件夹中发布,这会导致安装程序损坏,说明无法安装该版本.

我读过那篇文章.我设置了[assembly:AssemblyVersion("1.0.*")].依然没有.

我找到了一种方法来通过增加<ApplicationVersion></ApplicationVersion>*.csproj文件来解决这个问题.但我希望它能实现自动化.

另一种解决方法是执行msbuild.exe时:

/target:publish   /property:PublishDir="\\sharedDir\\" /property:GenerateManifests=true
/property:ApplicationVersion=1.0.0.123
Run Code Online (Sandbox Code Playgroud)

它仍然不是自动化的.我真的想将当前的构建号传递给msbuild.exe,或者在每个构建中将值替换<ApplicationVersion></ApplicationVersion>为实际构建号.或者还有另一种方式吗?

Joh*_*arr 7

我遇到了同样的问题,这就是我到达这里的方式.我能够使用您问题中的代码作为基础解决.以下是使用TFS解决的步骤.

打开构建模板,然后打开工作流底部的"参数"选项卡.找到MSBuildArguments并修改默认值.以下是我最终得到的结果:

// Note: You can use /p for /property and /t for /target

"/t:Publish /p:PublishDir=<PublishDirectory> /p:ApplicationVersion="
    + Date.Today.ToString("yyyy") + "."
    + Date.Today.ToString("MMdd") + "."
    + Date.Now.Hour.ToString() + "."
    + Date.Now.Minute.ToString()
Run Code Online (Sandbox Code Playgroud)

当然,现在您需要保存并签入新的构建文件.我在构建定义时使用新值时遇到了问题,因此我只创建了一个新的构建定义.

这将创建一个新的Application文件夹,如:

<ApplicationName>_2013_0315_09_55
Run Code Online (Sandbox Code Playgroud)

我知道这是旧帖子的新答案,所以我相信你已经找到了另一种解决方案,但我希望这可以帮助其他想要使用TFS进行ClickOnce部署的人.


Has*_*ell 0

我使用Hudson作为构建服务器并使用MSBuild来进行构建。Hudson 使用内部版本号设置环境变量。然后,我将该环境变量作为命令行参数传递给我编写的程序,该程序解析文件assemlyinfo.cs并更新程序集版本、文件版本和程序集信息版本。

另一种方法是创建一个自定义任务来执行此操作,而不是可执行文件(现在更容易,因为它现在支持内联任务)。以前版本的TFS在设置环境变量方面做了类似的事情,但在 TFS 2010 中可能有所更改。

以下资源可能会帮助您:

此外,我们还使用Mage命令行来创建ClickOnce应用程序和部署清单。我们将 Mage 称为ExecMSBuild 项目中的一个任务。