在典型的.NET应用程序中,产品和版本信息存储在{Properties“文件夹下的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可以支持吗?
答案 0 :(得分:4)
是的,您可以; o)
向每个项目根目录添加一个名为 Properties 的文件夹,并将链接添加到 AssemblyInfo_Shared.cs 。
之后,您必须在每个.Net Standard / Core项目配置中进行设置
<PropertyGroup>
...
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
找到完整的解决方案
答案 1 :(得分:0)
Rufo先生的解决方案非常好,但是通过新的项目格式,这是另一种可能。这使您可以自定义自动装配生成。
您可以将Directory.Build.props
文件放在项目的父目录中,该文件将自动包含在内。参见the documentation:
但是,现在您可以在包含源的根文件夹中的一个名为 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
属性可能没有标签,但是您将拥有组装信息所需的一切,以及其他一些东西。 Here是与NuGet相关的属性的文档,但不幸的是,目前,汇编信息属性的唯一“文档”是the source code here(至少解决了this issue)。>
然后,您可以覆盖每个项目中想要的任何属性。