2012-09-01 2 views
3

신사 숙녀 여러분,코드를 단순화하기 위해 작성한 다양한 확장 메서드가 포함 된 몇 가지 다른 프로젝트간에 공유 할 수있는 DLL을 만들려고합니다. 이러한 DLL은 C#과 VB.net 프로젝트간에 공유하는 것이 타당하다는 것을 이해해야합니다. 그러나 지금까지는 DLL을 만들 수 없었습니다. 심지어는 하위 프로젝트를 포함하고 그런 식으로 참조하고 내 확장 프로그램에 액세스 할 수 없게되었습니다.VB.net에서 확장 메서드에 대한 DLL을 만들려면 어떻게해야합니까?

개체 브라우저에서 참조를 볼 수 있지만 가져 오기 문은 내 하위 프로젝트 참조를 옵션으로 가져 오지 않습니다. VB.net에서는 클래스 내에 확장을 배치 할 수 없으며이를 설명 할 수있는 웹 단서를 찾지 못하는 것 같습니다. 미리 감사드립니다.

예 ...

Imports System.Runtime.CompilerServices 
Imports System.Text.RegularExpressions 
Module Extensions 

    <System.Runtime.CompilerServices.Extension()> 
    Public Function ToEnum(Of T)(ByVal value As String) As T 
     Try 
      Return (CType([Enum].Parse(GetType(T), value.Replace(" ", ""), True), T)) 
     Catch ex As Exception 
      Return (CType([Enum].Parse(GetType(T), 0, True), T)) 
     End Try 

    End Function 
End Module 

+0

VS2010을 사용하는 것 같습니다. Enum.TryParse()를 강력하게 선호하십시오. 그리고 현지화가이 코드에 어떤 영향을 미칠지 염두에 두십시오. –

+0

Hans에게 감사드립니다. try/catch는 아마도 내가 상상하는 것보다 덜 효율적일까요? 플러스 타입 변환 지연? 나는 작은 코드가 도움이되도록 많은 코드 변환을 처리한다. 감사! –

답변

6

당신은 공공 키워드와 확장 모듈을 표시해야합니다. 또한 소비 프로젝트의 프로젝트 속성에 참조 용으로 라이브러리 프로젝트가 나열되어 있는지 확인하십시오. 단순히 개체 브라우저에 나타나는 것은 참조를 올바르게 설정했다는 의미는 아닙니다.

+0

와우 ... 그것을 잡기 위해 바보 같은 느낌. Jason 고맙다! –

0

다음 콘솔 응용 프로그램 코드는 아마 무의미하지만 위의 코드를 활용하여 예외적으로 모듈 PublicFriend을 비교했습니다.

내 솔루션에서 ClassLibrary3은 VB 클래스 라이브러리 프로젝트이며 콘솔 응용 프로그램 프로젝트에 참조로 포함됩니다.

Imports ClassLibrary3.Extensions 

Module Module1 

    Sub Main() 
     Dim f As String = "hello" 

     Console.WriteLine(f.ToEnum(Of System.ConsoleColor)()) 
    End Sub 

End Module 
관련 문제