从Web站点项目使用发布配置文件(.pubxml)时如何设置AssemblyVersion?

时间:2013-02-28 22:38:00

标签: asp.net msbuild web-site-project publish-profiles

我正在为网站(而不是网络应用程序)使用新的ASP.Net和Web Tools 2012.2 发布配置文件

我使用在网站根目录中创建文件website.publishproj的工具创建了发布配置文件

website.publishproj文件包含以下内容:

<AssemblyAttributes Include="AssemblyFileVersion">
    <Value>$(AssemblyFileVersion)</Value>
</AssemblyAttributes>
<AssemblyAttributes Include="AssemblyVersion">
    <Value>$(AssemblyVersion)</Value>
</AssemblyAttributes>

这表示您可以将属性传递给MSBuild以设置输出dll的版本。

但是,网站的单个输出程序集(它已编译然后合并到单个程序集中)始终具有版本号1.0.0.0

我试过传递/p:AssemblyFileVersion=2.1.0.0;AssemblyVersion=2.1.0.0,但这没有效果。

我甚至尝试直接编辑website.publishproj文件,但这也没有效果。

当您希望将输出程序集合并到单个程序集中时,是否有人知道如何在Web 站点项目上设置输出程序集的版本号?

3 个答案:

答案 0 :(得分:4)

我设法解决了这个问题。我认为这是工具的一个错误。

如果您将OutputPath属性设置为website.publishproj文件中的相对路径,则不会尊重AssemblyVersionAssemblyFileVersion属性。

这是因为在将网站程序集合并为一个程序集时,此版本控制的工作原理。

在部署期间会生成AssemblyInfo.cs文件并输入提供的版本号。然后将此AssemblyInfo.cs文件编译为AssemblyInfo.dll,其中包含您传入的版本号。

然后调用aspnet_merge.execopyattrs参数指向先前生成的AssemblyInfo.dll

如果将OutputPath设置为相对路径,则此copyattrs参数指向不存在的dll。这是因为它是从aspnet_merge.exe工具所在的路径运行的。因此,返回AssemblyInfo.dll程序集的相对路径找不到它的真实位置。

OutputPath不能是相对的。

为解决这个问题,我将其设置为:

<PropertyGroup>
    <OutputPath>$(MSBuildProjectDirectory)\..\..\TempPackageBuildDir\</OutputPath>
</PropertyGroup>

为什么还要设置OutputPath

如果未设置OutputPath,则它会在环境变量中使用临时目录。在我的情况下,这将导致构建失败,因为一些文件的文件长度超过了260个字符的窗口限制(我有一个非常大的网站)。我完全可以构建它的唯一方法是将OutputPath设置为更浅的路径。

答案 1 :(得分:0)

我遇到了类似的问题,但出于其他原因。

我的项目的MSBuild Options > Output folder路径设置为与Publish > Connection > Target location路径不同的路径,因此它不会继承AssemblyInfo.dll <的版本信息/ p>

希望这会帮助别人。

答案 2 :(得分:0)

对我来说,解决方案是将属性添加到我的.pubxml文件中。

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <AssemblyVersion>2.3.0.0</AssemblyVersion>
    <AssemblyFileVersion>2.3.0.0</AssemblyFileVersion>
    ... rest of properties ...
  </PropertyGroup>
</Project>