我正在使用新的 ASP.Net 和 Web 工具 2012.2 发布个人资料 用于网站(不是 Web 应用程序)。
我创建了一个 发布简介 使用创建文件 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 上设置输出程序集的版本号网站当您希望将其合并为单个程序集时进行项目?
最佳答案
我已经设法解决了这个问题。我认为这是工具的错误。
如果您设置了 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
到更浅的路径。
关于asp.net - 使用网站项目中的发布配置文件 (.pubxml) 时如何设置 AssemblyVersion?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15147036/