我们有一个使用ClickOnce部署的Outlook加载项。
开发人员检查构建后,PC会对构建进行排队,并将应用程序发布到共享驱动器上的某个位置。
问题是构建不会将发布版本更改为当前程序集版本,因此它会在先前版本的文件夹中发布,导致安装程序损坏,说明无法安装该版本。
我看过that article。我设置了[assembly:AssemblyVersion(“1.0。*”)]。仍然没有。
通过增加* .csproj文件中的<ApplicationVersion></ApplicationVersion>
,我找到了解决此问题的方法。但我希望它能实现自动化。
其他解决方法是执行msbuild.exe:
/target:publish /property:PublishDir="\\sharedDir\\" /property:GenerateManifests=true
/property:ApplicationVersion=1.0.0.123
仍然没有自动化。我真的想将当前的内部版本号传递给msbuild.exe,或者在每个构建中将<ApplicationVersion></ApplicationVersion>
中的值替换为实际内部版本号。或者还有另一种方式吗?
答案 0 :(得分: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()
当然,您现在需要保存并签入新的构建文件。我在构建定义时使用新值时遇到了问题,因此我只创建了一个新的构建定义。
这将创建一个新的Application文件夹,如:
<ApplicationName>_2013_0315_09_55
我知道这是对旧帖子的新答案,所以我确定您已经找到了另一种解决方案,但我希望这可以帮助其他想要使用TFS进行ClickOnce部署的人。
答案 1 :(得分:0)
我使用Hudson作为构建服务器,使用MSBuild来构建。 Hudson使用内部版本号设置环境变量。然后我将该环境变量作为命令行参数传递给我编写的程序,该程序解析assemlyinfo.cs
文件并更新程序集版本,文件版本和程序集信息版本。
另一种方法是创建一个自定义任务来代替可执行文件(现在更容易,因为它现在支持inline tasks)。先前版本的TFS在设置环境变量时做了类似的事情,但在TFS 2010中可能已经改变了。
以下资源可以帮助您:
此外,我们使用Mage命令行来创建ClickOnce应用程序和部署清单。我们将Mage称为MSBuild项目中的Exec
任务。