2013-02-28 113 views
4

我正在使用新的ASP.Net和Web工具2012.2 发布配置文件的网站(而不是Web应用程序)。如何从Web站点项目中使用发布配置文件(.pubxml)时设置AssemblyVersion?

我已经创建了一个发布配置文件使用在网站的根目录中创建文件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上设置输出程序集的版本号Site当你想将它合并到一个程序集中的项目?

回答

4

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

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

这是由于在将网站装配合并到一个装配体中时该版本的工作方式。

会发生什么情况是在部署过程中生成AssemblyInfo.cs文件,并输入提供的版本号。然后,这个AssemblyInfo.cs文件编译成AssemblyInfo.dll包含您传入的版本号。

然后aspnet_merge.exe被称为与copyattrs参数指向它以前生成的AssemblyInfo.dll

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

OutputPath不能相对。

要解决这个问题,我设置矿:

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

何必设置OutputPath呢?

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

0

我得到类似的问题,但出于不同的原因。

我的项目的MSBuild Options > Output folder路径设置为比我Publish > Connection > Target location路径不同的路径,所以它不是继承了AssemblyInfo.dll

的版本信息,希望这会帮助别人。

相关问题