我们有一个NAnt脚本,可以从CVS签出,然后运行MSBuild来发布应用程序。问题是我们必须记住在Visual Studio中始终增加版本。
我们可以选择在发布时自动增加它,但是这会在下一次结账时被删除,我宁愿不必让构建脚本检查项目文件。
有一种简单的方法吗?
答案 0 :(得分:10)
MinimumRequiredVersion
在Solution Explorer中,右键单击您的项目并选择卸载项目。
项目不可用后,再次右键点击并选择修改 <project_name>.<lang>
项目。
属性使用键/值对提取信息
$(OutputPath)
获取元素<OutputPath>.\bin</OutputPath>
我们将使用为ClickOnce部署生成的以下属性
<MinimumRequiredVersion>1.0.0.6</MinimumRequiredVersion>
<ApplicationRevision>7</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
MSBuild Tasks
可以在项目(* .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>
此代码将ApplicationVersion和ApplicationRevision作为Format Version任务中的参数,并通过使用完整发布版本覆盖MinimumRequiredVersion来保存输出。
保存并重新加载项目。现在,每个ClickOnce部署都将自动更新到最近发布的版本。
非常感谢Kev for their answer我已经基本上重新对这里做了一些补充说明。这是blog post我提出的问题在这里我的答案进一步扩展。
答案 1 :(得分:2)
最后我使用NAnt xmlpoke做了这个,所以对于版本我们最终得到20.0.dayofyear.hourminute - 它在构建中大多是唯一的。
不需要自定义任务 - 而且新版本的MSBuild也有一个pokexml,所以它可以使用它。
<target name="pokerevision" depends="init">
<property name="projectname" value="MyProject.GUI" />
<!-- This is a bit flawed because 231 could mean 02:31 or 23:01, but we never build before 3 am. -->
<property
name="app.revision"
value="${datetime::get-hour(datetime::now())}${datetime::get-minute(datetime::now())}" />
<echo message="revision: ${app.revision}" />
<xmlpoke
file="${Solution.Path}\${projectname}\${projectname}.csproj"
xpath="//x:Project/x:PropertyGroup[1]/x:ApplicationRevision"
value="${app.revision}"
>
<namespaces>
<namespace prefix="x" uri="http://schemas.microsoft.com/developer/msbuild/2003" />
</namespaces>
</xmlpoke>
<property
name="app.version"
value="20.0.${datetime::get-day-of-year(datetime::now())}.${app.revision}" />
<echo message="version: ${app.version}" />
<xmlpoke
file="${Solution.Path}\${projectname}\${projectname}.csproj"
xpath="//x:Project/x:PropertyGroup[1]/x:ApplicationVersion"
value="${app.version}"
>
<namespaces>
<namespace prefix="x" uri="http://schemas.microsoft.com/developer/msbuild/2003" />
</namespaces>
</xmlpoke>
</target>
答案 2 :(得分:1)
您有几种选择,这里有两种选择:
指定星号代替构建版本号以使其自动递增
http://msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.aspx
[assembly:AssemblyVersion(“1.0。*”)]
使用MSBuild扩展包中的AsssemblyInfo msbuild任务
http://msbuildextensionpack.codeplex.com
例如:
http://www.msbuildextensionpack.com/help/4.0.4.0/html/d6c3b5e8-00d4-c826-1a73-3cfe637f3827.htm
修改强>
对不起,我误解了你的问题。
请参阅Jason Stangroome接受的答案:
How do I get the ClickOnce Publish version to match the AssemblyInfo.cs File version?