0

プロジェクトが複数の DLL に分割されている場合、バージョン管理が問題になる可能性があることを読みました。バージョン管理の問題を導入して、その意味を理解しようとしています。Windows フォーム アプリケーションとクラス ライブラリの 2 つの単純なプロジェクトがあります。フォームは次のとおりです。

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 を使用しているため、手順 5 でエラーが表示されると思いました。ただし、プログラムは期待どおりに実行されます。私は何が欠けていますか?これは基本的な質問だと認識しています。私は今日の午後それをググった。

4

1 に答える 1

2

GUID はより重要な部分です。vbproj ファイル (または将来の読者のために csproj ファイル) を開き、.EXE vbproj が .DLL プロジェクトを参照する方法を確認します。

あなたが変更している(バージョン上の)数字は....フレンドリーなFYIのようなものです。

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 に答える