0

我已经读过,如果一个项目被分成多个 DLL,版本控制可能会成为一个问题。我试图引入一个版本控制问题来理解它的含义。我有两个简单的项目,即一个 Windows 窗体应用程序和一个类库。这是表格:

Imports ClassLibrary1

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        Dim c1 As Class1 = New class1
        c1.TEST()
    End Sub
End Class

这是类库:

Public Class Class1
    Public Sub TEST()
        MsgBox("TEST1")
    End Sub
End Class

请参阅下面的 windows 窗体应用程序的版本号:

在此处输入图像描述

请参阅下面的类库版本:

在此处输入图像描述

当我构建项目时,我得到了预期的可执行文件和 DLL。我已按照以下步骤尝试引入版本控制问题:

 1) Build the project
 2) Go to the bin folder and create a copy of debug/WindowsApplication1.exe 
 3) Go into the DLL properties and change the DLL version in Visual Studio
 4) Rebuild the project
 5) Overwrite the .EXE in the BIN folder (debug/WindowsApplication1.exe) with the .EXE copied in step 2
 6) Launch the .EXE in the bin folder

我想我会在第五步看到一个错误,因为旧版本的 .exe 正在使用新的 DLL。但是,程序按预期运行。我错过了什么?我意识到这是一个基本问题。我今天下午用谷歌搜索了它。

4

1 回答 1

2

GUID 是更重要的部分。打开您的 vbproj 文件(或供未来读者使用的 csproj 文件)并查看 .EXE vbproj 如何引用 .DLL 项目。

您正在更改的数字(在版本上)......有点像友好的仅供参考。

如果 GUID 匹配并且没有重大更改,则旧的 exe 可以使用新的 dll,反之亦然。

  <ItemGroup>
    <ProjectReference Include="..\MyDll\MyDll.csproj">
      <Project>{33333333-3333-3333-3333-33333333333}</Project>
      <Name>MyDll</Name>
    </ProjectReference>
  </ItemGroup>

编辑:

您可能想尝试:

更改方法的签名。

Public Sub TEST(s as String)
    MsgBox("TEST1")
End Sub

或更改名称(与删除它相同)

Public Sub TEST1()
    MsgBox("TEST1 Msg")
End Sub

或者在项目属性中更改“DLL”项目的 GUID(您已经从上面的屏幕截图中知道了)

于 2013-05-23T21:12:07.910 回答