asp.net - 使用网站项目中的发布配置文件 (.pubxml) 时如何设置 AssemblyVersion?

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

我正在使用新的 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 中的相对路径文件,然后是 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到更浅的路径。

关于asp.net - 使用网站项目中的发布配置文件 (.pubxml) 时如何设置 AssemblyVersion?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15147036/

相关文章:

asp.net - 插入多行的最佳方法 (ADO.NET)

javascript - 更改持有 web 方法的 aspx 页面的 url 后,Jquery .ajax 不起作用

msbuild - 如何忽略相应 csproj 文件中命令行上给出的属性值?

javascript - 将 Html/Css/JS 导入 CMS?

c# - 如何以标准格式转换日期时间

asp.net - 如何将 asp.net 应用程序部署到 Linux 服务器上的 docker 容器?

c# - 如何将 ruby​​ gem 嵌入到 C# 项目中并从嵌入式 IronRuby 脚本中获取它?

msbuild proj 文件创建器/msbuild proj 文件工具

asp.net - 如何在 CI 服务器上的 ASP.NET 网站中使用 NuGet 包

asp.net - 单元测试 ASP.net 网站项目代码存储在 App_Code 中