Как я могу создать DLL для методов расширения в VB.net?

Дамы и господа, я пытаюсь создать библиотеку DLL, которую можно использовать в нескольких разных проектах и ​​которая включает множество методов расширения, которые я написал для упрощения своего кода. Насколько я понимаю, такие библиотеки DLL можно совместно использовать в проектах C# и VB.net. Однако до сих пор мне не удалось создать DLL или даже включить подпроект и ссылаться на него таким образом, чтобы получить доступ к моим расширениям.

Я могу видеть ссылку в обозревателе объектов, но операторы импорта не отображают ссылку на мой подпроект в качестве опции. VB.net не позволяет мне размещать расширения в классах, и я не могу найти в Интернете никаких подсказок, которые могли бы это объяснить. Заранее спасибо.

Example...

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


person Christopher Richmond    schedule 01.09.2012    source источник
comment
Похоже, вы используете VS2010. Настоятельно отдайте предпочтение Enum.TryParse(). И имейте в виду, что локализация сделает с этим кодом.   -  person Hans Passant    schedule 01.09.2012
comment
Спасибо, Ганс, думаю, попытка/поймать, вероятно, менее эффективна? Плюс задержка преобразования типа? Я имею дело с большим количеством преобразований enum в своем коде, поэтому каждая мелочь помогает. Спасибо!   -  person Christopher Richmond    schedule 01.09.2012


Ответы (2)


Вам необходимо пометить модуль Extensions ключевым словом Public. Кроме того, убедитесь, что в свойствах вашего проекта в проекте-потребителе ваш библиотечный проект указан в качестве ссылки; просто появление в обозревателе объектов не означает, что вы правильно настроили ссылку.

person Jason Malinowski    schedule 01.09.2012
comment
Вау... чувствую себя немного глупо из-за того, что не уловил этого. Спасибо Джейсон! - person Christopher Richmond; 01.09.2012

Следующий код консольного приложения, возможно, не имеет смысла, но использует ваш точный код выше, за исключением того, что я сделал ваш модуль Public вместо модуля по умолчанию Friend.

В моем решении 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
person Jim O'Neil    schedule 01.09.2012