2014-12-14 1 views
0

저는 VB.net에서 새롭고 여전히 배우고 있습니다. 두 개의 프로젝트, Windows Application Forms 프로젝트 및 클래스 라이브러리 프로젝트로 솔루션을 만들려고합니다. System.Windows.Forms 클래스를 라이브러리 프로젝트에 추가하려고 할 때까지 모든 것이 잘 진행됩니다. 그 코드는 나에게 오류를 줄 메시지 클래스클래스 라이브러리의 Sub에 대한 인수로 TextBox 컨트롤을 가져 오는 방법은 무엇입니까?

Namespace MyLibraries 

    Public Class Message 

     Public Property box As System.Windows.Forms.TextBox 
     Public Property msg As String 

     Sub New(ByRef txtBox As System.Windows.Forms.TextBox, Optional ByVal txtMsg As String = "") 
      msg = txtMsg 
     End Sub 

     Public Sub showMessage() 
      txtBox.Text = txtMsg 
     End Sub 

    End Class 

End Namespace 

:

Windows 응용 프로그램 폼 프로젝트에서

: MainForm 클래스 클래스 라이브러리 프로젝트에서

Public Class MainForm 

    Private Sub btnMessage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMessage.Click 
     Dim msg As New Message(txtMessage, "Testing") 
     msg.showMessage() 
    End Sub 

End Class 

내 코드는 다음과 같다 :

Could not load type 'MyLibraries.Message' from assembly 'MyLibraries, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

메시지 클래스를 주 프로젝트에 넣거나 해당 클래스의 상자 속성을 제거하면 프로그램이 정상적으로 작동합니다. 하지만, 내가 달성하고자하는 것은 Forms 나 Controls를 인수로 취할 수있는 클래스를 만들고 나중에이 클래스를 라이브러리에 저장하여 나중에 다른 프로젝트에서 사용할 수 있도록하는 것입니다.

내가 찾은 제안의 대부분은 내가 이해할 수없는 무엇이든지간에 어셈블리에 대해 말하고 있으며 제안을 단계별로 따르면서도 작동 할 수는 없습니다.

아마도 일부 숙련 된 프로그래머가이 문제를 이해하기 쉽게 만들 수 있습니까? 누군가가 저에게 의회 서명 또는 기본 개념을 제공 할 수 있다면 고마워요.

(내 나쁜 영어. 영어 죄송합니다 내 모국어가 아닌.)

UPDATE JRLambert 말한 내가했던

. 두 개의 프로젝트로 새로운 솔루션을 만들고 거기에 모든 코드를 복사했습니다. 그리고 나서 Olivier Jacot-Descombes가 말한 것과 같은 각 프로젝트에 대한 언급을 추가합니다. 감사합니다. 제 프로그램이 작동합니다. 그러나 나는 아직도 무엇이 잘못되었고 그것이 일어나는 지 이해하지 못한다. 누구든지 간단한 설명을 줄 수 있습니까?

+0

InnerException이 있습니까? – SLaks

+0

No TypeLoadException –

+0

클래스 라이브러리의 TextBox로 무엇을 할 것인가? 왜 Text 속성을 전달하지 않는가? –

답변

1

프로젝트를 빌드 할 때 클래스 라이브러리는 양식 응용 프로그램과 다른 폴더에 있습니다. 클래스 라이브러리 프로젝트의 빌드 속성을 변경하여 동일한 폴더로 만들거나 해당 dll을 양식 앱이 실행되는 폴더로 복사하십시오.

+0

이것만으로는 도움이되지 않습니다.두 프로젝트가 같은 솔루션에 있다면이 DLL에 대한 참조 또는 더 나은 프로젝트 참조가 필요합니다. 그러면 Visual Studio가 dll을 적절한 위치에 자동으로 복사합니다. –

+0

이미 프로젝트에 대한 참조가 있습니다. 그렇지 않으면 클래스 라이브러리의 클래스를 참조하기 때문에 컴파일되지 않습니다. – JRLambert

1

응용 프로그램 프로젝트에서 라이브러리 프로젝트에 대한 프로젝트 참조를 추가해야합니다. . 특히 프로젝트 - 투 - 프로젝트 참조 처리에 관한 부분을보십시오.

솔루션의 프로젝트가 격리되어 있습니다. 즉, 그들은이 솔루션이나 다른 솔루션에서 다른 프로젝트에 대해 알지 못합니다. 코드 편집기, 양식 디자이너 및 컴파일러가 다른 솔루션에 정의 된 유형에 대해 알기 위해서는이 솔루션이 동일한 솔루션에 있거나 프로젝트가 다른 솔루션에있는 경우 dll에 대한 참조를 추가해야합니다 솔루션 (또는 솔루션 또는 프로젝트가없는 단일 DLL이있는 경우).

관련 문제