【问题标题】:How to share major and minor version of the main application with its DLLs?如何与其 DLL 共享主应用程序的主要和次要版本?
【发布时间】:2017-11-01 16:57:15
【问题描述】:

我有一个大型 WinForms 应用程序(C#、.NET 4.5.2),它有几个自己的 DLL(应用程序的插件),它们都是同一个解决方案中的不同项目。我使用 Visual Studio 2015 社区。​​p>

主应用程序和所有 DLL 在各自的 AssemblyInfo.cs 文件中分配了它们的版本号,如下所示:

[assembly: AssemblyVersion("1.0.*")]

现在我想将应用程序的版本升级到 2.0.。我还希望所有的 DLL 都是 2.0。。按照我目前的方式,我需要进入每个 DLL 并手动将版本更改为 2.0.*。

有没有办法从应用程序继承“2.0”部分,以便将来我只需在一个地方更改主要和次要版本号?

我进行了一些搜索,但无法找到答案。

更新: 我希望我可以替换

[assembly: AssemblyVersion("1.0.*")]

类似:

[assembly: AssemblyVersion(some_string + ".*")]

其中“some_string”是一个包含主要和次要版本号的字符串。但我不知道在哪里可以定义该字符串,或者这是否可能。

【问题讨论】:

  • 如果发生变化,Assembly 版本应该会发生变化。它并不意味着具有相同库的精确副本,而是具有不同的版本号。但除此之外,您可以在 Visual Studio 中执行“预构建”脚本(批处理、exe ..),并且您可以自己编写该脚本并使其编辑 assembly.cs,然后它何时编译新值将是改变了。

标签: c# .net dll


【解决方案1】:

通过项目解决方案资源管理器将指向原始AssemblyInfo.cs 文件的链接添加到另一个项目:

右键单击项目 -> Add -> Existing item -> Add as link(从下拉菜单中)

现在,一旦您更改了原始的 AssemblyInfo.cs,任何更改都将应用于该文件作为链接添加到的所有项目。

编辑:

为避免重复每个程序集应该唯一的属性(例如 GUID),请创建两个文件,一个用于共享属性(如版本号),另一个用于程序集特定属性。没有人强迫您将所有内容放入同一个文件中。它甚至不必命名为AssemblyInfo.cs

【讨论】:

  • 您应该添加一个警告,这也会使所有 DLL 共享所有值,包括程序集和程序集 guid。不仅是版本号
  • 好的,如果我理解正确的话,这将对我添加此链接的所有项目使用相同的 AssemblyInfo.cs 吗?这也意味着 AssemblyInfo.cs 中的所有其他属性都相同吗?我为每个 DLL 使用不同的“AssemblyTitle”、“AssemblyDescription”等值。
  • @yesyes 我们所做的是有一个共享链接SharedAssemblyInfo.cs,它只包含共享信息,如版本号和公司信息。然后我们从 AssemblyInfo.cs 中删除该信息,我们的项目只使用这两个文件
  • 谢谢。这听起来像我需要的。但是,我似乎找不到“添加为链接”选项。我可以做“添加...”->“现有项目...”,然后我得到一个选择文件对话框。当我这样做时,我会得到文件的 copy 并且我可以独立地编辑这两个文件。 VS 2015 中是否还没有“添加为链接”选项?
  • @yesyes 你必须点击添加按钮旁边的小三角箭头
【解决方案2】:

您可以在 Visual Studio 中设置预构建事件。

  • 右键单击项目并选择属性
  • 转到构建事件

然后在预构建事件的第一个框中,您可以启动一个像这样的简单脚本

if $(ConfigurationName) == Release C:\AssemblyChanger.exe $(ProjectDir)

上面的这个示例脚本将启动位于 C 驱动器上的“AssemblyChanger.exe”,并将当前 Visual Studio 项目文件夹作为参数传递。从那里可以非常简单地阅读管理“版本”的特定项目的 Assembly.cs 并编辑作为参数传递的路径中的那个。另外,只有在您处于发布模式时才会调用它(“如果”可以毫无问题地删除)。

您可以创建一个简单的控制台应用程序来执行此操作。

该脚本可以在所有 DLL 预构建事件中设置,因此当他们编译时调用该脚本,他们将在编译器创建 DLL 之前编辑其程序集。

【讨论】:

    猜你喜欢
    • 2016-12-27
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 2013-09-22
    • 2020-10-16
    相关资源
    最近更新 更多