【问题标题】:C# projects, proper versioning, company, etc on deployment部署中的 C# 项目、正确的版本控制、公司等
【发布时间】:2023-12-23 00:47:01
【问题描述】:

我的公司正在努力将我们的开发从 C++.net 转移到 C#。我们的产品有标准的月度版本(例如,5.0.19.2...)。

在 C++.net 中,我们有一个通用的 app.rc 文件,它标准化了公司信息以及版本号。由于解决方案中的每个项目都会包含一次相同的 app.rc 文件,因此更改 200 多个项目的版本信息非常容易。

这个解决方案如何转化为 C# 世界?我在写这篇文章之前检查的问题是通过解决方案资源管理器中的属性窗口提到的,但这不是我想要的。

我知道 assemblyinfo.cs 包含我要修改的信息,但我不认为我可以拥有一个主文件。我需要将其拆分为多个文件吗?

提前致谢!

【问题讨论】:

    标签: c# .net visual-studio version versioning


    【解决方案1】:

    您可以将文件添加为链接而不是实际文件。例如,我的解决方案可能是:

    Solution
        - My Project
            - Properties
                - AssemblyInfo.cs
                - SharedAssemblyInfo.cs (Linked)
        - Solution Items
            - SharedAssemblyInfo.cs
    

    将现有项目添加到解决方案时,可以使用Add 链接上的下拉箭头,然后选择Add as LinkSharedAssemblyInfo.cs 文件可以包含通用/共享程序集属性,例如:

    [assembly: AssemblyVersion("2.0.*")]
    [assembly: AssemblyFileVersion("2.0.0.0")]
    
    [assembly: AssemblyCompany("My Company")]
    

    ...等项目本地可以包含项目特定的属性:

    [assembly: AssemblyTitle("My Assembly")]
    

    ...等等

    【讨论】:

      【解决方案2】:

      在 C# 解决方案中的常见做法是注释掉每个项目的 assemblyinfo.cs 中的版本信息,然后有一个包含版本信息并在所有项目之间共享的单个公共“shared_assemblyinfo.cs”(以口味命名)。 ..

      【讨论】:

        【解决方案3】:

        您可以拥有一个程序集信息文件,并且只在其中指定程序集版本:

        using System;
        using System.Reflection;
        
        [assembly: AssemblyVersion("1.0.0.0")]
        

        然后,您只需将file as a link 添加到每个其他项目中(不过,您必须手动从每个Properties\AssemblyInfo.cs 文件中删除AssemblyVersion 属性)。当他们构建时,他们都会使用这个文件。

        【讨论】:

          【解决方案4】:

          主程序集.cs 是可能的 - 只需删除项目的 assembly.cs 文件,然后使用“添加文件”对话框中的“作为链接”选项将主程序集.cs 重新添加到每个项目。

          http://www.tigraine.at/2009/01/22/sharing-a-common-assemblyinfo-between-projects-in-a-solution/

          【讨论】:

            【解决方案5】:

            我建议为每个项目提供版本信息,考虑到它们有 400 个或可能很大,了解每个新的大型设置中哪些程序集版本构成该设置的一部分非常重要。每个程序集都是由不同的人开发的,就像一个单独的项目,最后他们在你的主应用程序的一个大马赛克中完成,它是 MainVersion。

            问候。

            【讨论】: