为解决方案中的每个csproj生成版本并从代码中访问它

时间:2019-05-10 12:02:36

标签: c# asp.net-core .net-core

我的解决方案基本上包含10个csproj文件

我想对每个版本进行版本控制,然后在某个页面上的我的应用程序(asp netcore mvc)中显示它。它会列出所有csproj名称及其版本(可以由应用或其他方式生成)

例如

  

服务2019.05.01

我考虑过要在.csproj中制作public static Dictionary<string, string>,而其他所有csproj都在“ csproj入口点”之类的东西上进行引用,它将执行.Add("name of csproj", "some version based on data")

有人有更好的主意如何实现这样的目标吗?

1 个答案:

答案 0 :(得分:0)

原始答案:https://stackoverflow.com/a/50607951/10522960

备份:

对于.NET Core项目,我改编了Postlagerkarte的答案以使用生成日期更新程序集版权字段。

直接编辑csproj

以下内容可以直接添加到csproj中的第一个PropertyGroup

<Copyright>Copyright © $([System.DateTime]::UtcNow.Year) Travis Troyer ($([System.DateTime]::UtcNow.ToString("s")))</Copyright>

替代:Visual Studio项目属性

或将内部表达式直接粘贴到Visual Studio中项目属性的“包”部分的“版权”字段中:

Copyright © $([System.DateTime]::UtcNow.Year) Travis Troyer ($([System.DateTime]::UtcNow.ToString("s")))

这可能有点令人困惑,因为Visual Studio会评估表达式并在窗口中显示当前值,但也会在幕后适当地更新项目文件。

通过Directory.Build.props在整个解决方案范围内

您可以将上面的<Copyright>元素放入解决方案根目录下的Directory.Build.props文件中,并假设每个项目没有提供自己的版权值,则将其自动应用于目录中的所有项目。

<Project>
 <PropertyGroup>
   <Copyright>Copyright © $([System.DateTime]::UtcNow.Year) Travis Troyer ($([System.DateTime]::UtcNow.ToString("s")))</Copyright>
 </PropertyGroup>
</Project>

Directory.Build.props:Customize your build

输出

该示例表达式将为您提供这样的版权:

Copyright © 2018 Travis Troyer (2018-05-30T14:46:23)

检索

您可以在Windows的文件属性中查看版权信息,或在运行时获取版权信息:

var version = FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly().Location);

Console.WriteLine(version.LegalCopyright);