我正在为网站(而不是网络应用程序)使用新的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 站点项目上设置输出程序集的版本号?
答案 0 :(得分:4)
我设法解决了这个问题。我认为这是工具的一个错误。
如果您将OutputPath
属性设置为website.publishproj
文件中的相对路径,则不会尊重AssemblyVersion
和AssemblyFileVersion
属性。
这是因为在将网站程序集合并为一个程序集时,此版本控制的工作原理。
在部署期间会生成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
,则它会在环境变量中使用临时目录。在我的情况下,这将导致构建失败,因为一些文件的文件长度超过了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>