代码之家  ›  专栏  ›  技术社区  ›  Mark A. Donohoe

您能在.NET标准库之间共享版本信息吗?

  •  8
  • Mark A. Donohoe  · 技术社区  · 6 年前

    在典型的.NET应用程序中,产品和版本信息存储在 AssemblyInfo.cs

    DLL Project
     - Properties Folder
        - AssemblyInfo.cs
    

    在我们的例子中,我们有一个解决方案,需要在11个dll之间保持版本信息的同步。

    为了实现这一点,我们首先从每个项目的 装配信息.cs 文件,只保留特定于特定项目的值。

    AssemblyInfo_Shared.cs 我们将其存储在项目的同级文件夹中。然后,我们通过一个链接将该文件添加到每个项目的“Properties”文件夹中(这是添加时按钮上的小向下箭头)

    Common Folder
      - AssemblyInfo_Shared.cs (Actual)
    
    DLL Project A
     - Properties Folder
        - AssemblyInfo.cs // Only values specific to A
        - AssemblyInfo_Shared.cs (Link)
    
    DLL Project B
     - Properties Folder
        - AssemblyInfo.cs // Only values specific to B
        - AssemblyInfo_Shared.cs (Link)
    

    内容装配信息.cs在项目A中看起来像这样。。。

    using System.Reflection;
    
    [assembly: AssemblyTitle("SomeApp.LibA")]
    [assembly: AssemblyDescription("This is the code for  A")]
    

    这是B项目的

    using System.Reflection;
    
    [assembly: AssemblyTitle("SomeApp.LibB")]
    [assembly: AssemblyDescription("This is the code for Project B")]
    

    这是共享的。。。

    using System;
    using System.Reflection;
    using System.Resources;
    using System.Runtime.InteropServices;
    
    [assembly: AssemblyProduct("SomeApp")]
    [assembly: AssemblyVersion("1.4.3.0")]
    [assembly: AssemblyFileVersion("1.4.3.0")]
    [assembly: AssemblyCompany("MyCo")]
    [assembly: AssemblyCopyright("Copyright (c) 2010-2018, MyCo")]
    [assembly: ComVisible(false)]
    [assembly: NeutralResourcesLanguage("en-US")]
    
    [assembly: CLSCompliant(true)]
    

    <PropertyGroup> 所以我不确定我们怎样才能达到同样的能力。

    .NET标准是否有支持此功能的内容?

    2 回复  |  直到 6 年前
        1
  •  9
  •   Sir Rufo    6 年前

    属性 并将链接添加到 程序集信息_共享.cs .

    之后,您必须在每个.Net标准/核心项目配置中设置

    <PropertyGroup>
      ...
      <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    </PropertyGroup>
    

    你会在下面找到一个完整的解决方案 https://github.com/SirRufo/SharedVersionTest

        2
  •  4
  •   Lucas Trzesniewski    6 年前

    你可以放一个 Directory.Build.props 文件,它将自动包含在项目的父目录中。看到了吗 the documentation :

    但是,现在您可以通过在一个名为 目录.Build.props 在目录结构中搜索 目录.Build.props Microsoft.Common.targets目标 寻找 目录.Build.targets 目录.Build.props

    <?xml version="1.0" encoding="utf-8"?>
    <Project>
      <PropertyGroup>
        <Version>1.4.3.0</Version>
        <Product>SomeApp</Product>
        <Company>MyCo</Company>
        <Copyright>Copyright (c) 2010-2018, MyCo</Copyright>
      </PropertyGroup>
    </Project>
    

    可能没有标签 CLSCompliant 属性,但您将拥有程序集信息和其他一些内容所需的一切。 Here 是与NuGet相关的属性的文档,但不幸的是,目前唯一用于程序集信息属性的“文档”是 the source code here (直到 this issue 至少已经解决了)。