繁体   English   中英

可以在.NET Standard库之间共享版本信息吗?

[英]Can you share version information between .NET Standard libraries?

在典型的.NET应用中,产品和版本信息存储在AssemblyInfo.cs文件夹下的AssemblyInfo.cs文件中,如下所示:

DLL Project
 - Properties Folder
    - AssemblyInfo.cs

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

为此,我们首先从每个项目的AssemblyInfo.cs文件中删除所有共享值,仅保留特定于该特定项目的那些值。

然后,我们将所有共享值放在名为AssemblyInfo_Shared.cs的第二个文件中,该文件存储在项目的同级文件夹中。 然后,我们通过链接将该文件添加到每个项目的“属性”文件夹(添加按钮时,按钮上的小“向下”箭头。)

这样,所有相关的DLL共享相同的版本信息,同时仍然保留特定于程序集的属性。 当我们编辑一个文件并且所有11个DLL的版本都立即更新时,这使得保持一组版本化的DLL同步变得轻而易举。

这是它的样子...

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)

项目A中AssemblyInfo.cs的内容如下所示:

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)]

通过上面的操作,两个DLL共享相同的版本信息,因为在构建时,公共文件与项目特定的文件“合并”了。 希望这是有道理的。

但是,在.NET Standard项目中,似乎版本信息直接放在<PropertyGroup>部分下的Project文件中,因此我不确定如何实现相同的功能。

.NET Standard是否有任何支持此功能的东西?

是的,你可以; o)

向每个项目根目录添加一个名为Properties的文件夹,并将链接添加到AssemblyInfo_Shared.cs

之后,您必须在每个.Net Standard / Core项目配置中进行设置

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

您可以在https://github.com/SirRufo/SharedVersionTest中找到完整的解决方案

Rufo爵士的解决方案非常好,但是通过新的项目格式,这是另一种可能。 这使您可以自定义自动装配生成。

您可以将Directory.Build.props文件放在项目的父目录中,该文件将自动包含在内。 请参阅文档

但是,现在您可以通过在包含源的根文件夹中的单个名为Directory.Build.props的文件中对其进行定义,从而一步一步将新属性添加到每个项目中。 运行MSBuild时, Microsoft.Common.props在目录结构中搜索Directory.Build.props文件( Microsoft.Common.targets查找Directory.Build.targets )。 如果找到一个,它将导入该属性。 Directory.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属性可能没有标签,但是您将拥有组装信息所需的一切,以及其他一些东西。 是与NuGet相关的属性的文档,但是不幸的是,现在汇编信息属性的唯一“文档”是此处的源代码 (至少解决了此问题 )。

然后,您可以覆盖每个项目中所需的任何属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM