4

我正在使用新的 ASP.Net 和 Web Tools 2012.2 Publish Profiles for Web Sites(不是 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 文件,但这也没有效果。

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

4

3 回答 3

5

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

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

这是由于在将网站程序集合并为一个程序集时此版本控制的工作方式。

发生的情况是在部署期间生成了一个AssemblyInfo.cs文件并输入了提供的版本号。然后这个AssemblyInfo.cs文件被编译成一个AssemblyInfo.dll包含你传入的版本号的文件。

然后使用指向它之前生成aspnet_merge.exe的参数调用。copyattrsAssemblyInfo.dll

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

OutputPath不能是相对的。

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

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

为什么要费心设置OutputPath呢?

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

于 2013-03-01T08:21:22.930 回答
0

我遇到了类似的问题,但原因不同。

我的项目MSBuild Options > Output folder路径设置为与我的路径不同的路径Publish > Connection > Target location,因此它没有从AssemblyInfo.dll

希望这会对其他人有所帮助。

于 2014-07-02T22:57:01.970 回答
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>
于 2020-10-16T16:58:39.287 回答