这个让我头疼。我们过去常常把项目属性放在[assembly: AssemblyVersion("1.0.0.0")]
下面。我对变化完全没问题,所以我不在乎它在哪里。我知道他们也会为版本制定一个新标准,也完全没问题。
那里有大量文档指向project.json
文件,这显然是一种浪费,因为这不再是一个合法的文件。更近期的说法将以下内容添加到您的.csproj
文件中:
<PropertyGroup>
<VersionPrefix>1.2.3</VersionPrefix>
<VersionSuffix>alpha</VersionSuffix>
</PropertyGroup>
也是一种浪费。只是因为我似乎无法阅读它。以下内容总是给我1.0.0.0
。
PlatformServices.Default.Application.ApplicationVersion
更何况当我在File Explorer
中右键单击并点击Properties
,然后Details
标签也始终显示1.0.0.0
。
那么,我如何在我的解决方案中设置每个程序集的版本,然后在运行时读取它们呢?
答案 0 :(得分:4)
On方法是在项目文件中设置以下任一值:
<PropertyGroup>
<Version>1.3.5.7</Version>
<FileVersion>2.4.6.8</FileVersion>
</PropertyGroup>
并按照以下方式阅读:
var fileVersion = Assembly.GetEntryAssembly()
.GetCustomAttribute<AssemblyFileVersionAttribute>()
.Version;
var informationalVersion = Assembly.GetEntryAssembly()
.GetCustomAttribute<AssemblyInformationalVersionAttribute>()
.InformationalVersion;
值得注意的是,在.csproj文件中设置这些值会自动生成(因此不要尝试编辑它)类似于包含以下内容的遗留AssemblyInfo.cs
的文件:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
//snip
[assembly: System.Reflection.AssemblyFileVersionAttribute("2.4.6.8")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.2.3")]
// Generated by the MSBuild WriteCodeFragment class.
答案 1 :(得分:0)
当.Net Core 2.0 问世时,结果就开始了。当您右键单击项目然后单击属性时,会有一个用户界面,如下所示:
Package Version
,Assembly Version
和Assembly File Version
对应Version
文件中的AssemblyVersion
,FileVersion
和.csproj
设置分别为:
<PropertyGroup>
<Version>1.1.0</Version>
<AssemblyVersion>1.1.0.9</AssemblyVersion>
<FileVersion>1.1.0.9</FileVersion>
</PropertyGroup>
然后我在我的解决方案的每个项目中创建了一个实用程序方法,它执行以下操作:
public static VersionInformationModel GetVersionInformation() {
var Result = new VersionInformationModel {
Version = Assembly.GetExecutingAssembly().GetName().Version.ToString(),
BuildDate = System.IO.File.GetLastWriteTime(Assembly.GetExecutingAssembly().Location),
Configuration = Assembly.GetExecutingAssembly().GetCustomAttribute<AssemblyConfigurationAttribute>().Configuration,
TargetFramework = Assembly.GetExecutingAssembly().GetCustomAttribute<System.Runtime.Versioning.TargetFrameworkAttribute>().FrameworkName,
};
return Result;
}
因此,在我网站的管理页面上,我可以知道每个项目的版本和其他详细信息,因为它位于我正在查看的任何服务器上。