可移植类库不支持许多VB方法

时间:2012-09-14 13:46:41

标签: vb.net dll portable-class-library

我正在使用VB.Net DLL并将其转换为可移植类库。一旦我将所有类都移到了PCL的新项目中,Visual Studio开始为许多常见的VB语法抛出错误,我认为它仍然可以正常工作。一些例子:

  • LCASE
  • InStr函数
  • On Error GoTo 0
  • ERR

是否有可能只有一些选项或包含我需要让它们起作用?

4 个答案:

答案 0 :(得分:3)

您必须使用Portable Class Libraries支持的程序集方法(请参阅“程序集”部分)。你将能够找到不适合你的方法的等价物(ex = SubString,ToUpper,ToLower,IndexOf等)。

答案 1 :(得分:2)

使用portable来定位下层平台(.NET 4.0,Silverlight,Windows Phone,Xbox)时,我们不支持Microsoft.VisualBasic.dll中公开的大多数功能。

相反,我们使用嵌入式运行时功能。这将传统上在Microsoft.VisualBasic.dll中找到的某些功能嵌入到生成的二进制文件中。支持的功能在此页面的 / vbruntime * 部分下调出:http://msdn.microsoft.com/en-us/library/bb531259.aspx

定位.NET 4.5&仅限Windows应用商店应用,然后您执行即可访问传统的Microsoft.VisualBasic.dll。

作为一种解决方法,为了帮助您移动到便携式,您可以定义自己的模块,将旧的VB函数桥接到它们的.NET等价物:

Public Module VisualBasicBridge
    Public Function LCase(value As String) As String

        Return value.ToLower()
    End Function
End Module

就On Error而言,如果不提供自己的Microsoft.VisualBasic实现,并通过/ vbruntime switch / msbuild属性传递它,我就不知道有什么好的方法来弥合它。

答案 2 :(得分:2)

您可以创建这些方法,这样就不必更新大量遗留代码。其中大部分内容非常简单,最大的区别在于字符串函数,其中旧版VB函数使用基于1的索引,而.Net使用0索引。举个例子,这里重新创建的Mid函数就像VB一样(在这里像扩展方法一样创建):

        ''' <summary>
    ''' Simulates the same functionality provide by the traditional 1 based index Mid function.
    ''' </summary>
    ''' <param name="str"></param>
    ''' <param name="startPos"></param>
    ''' <param name="length"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    <Extension()> _
    Public Function Mid(ByVal str As String, ByVal startPos As Integer, ByVal length As Integer) As String
        Return str.Substring(startPos - 1, length)
    End Function

以下是您的清单和/或常用名单中的一些内容:

    ''' <summary>
    ''' Extension to the Visual Basic Left function
    ''' </summary>
    ''' <param name="str"></param>
    ''' <param name="length"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    <Extension()> _
    Public Function [Left](ByVal str As String, ByVal length As Integer) As String
        Return str.Substring(0, length)
    End Function

    ''' <summary>
    ''' Extension to the Visual Basic Right function
    ''' </summary>
    ''' <param name="str"></param>
    ''' <param name="length"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    <Extension()> _
    Public Function [Right](ByVal str As String, ByVal length As Integer) As String
        Return str.Substring(str.Length - length, length)
    End Function

    ''' <summary>
    ''' Determines whether a string is a numeric value.  This implementation uses Decimal.TryParse to produce it's value.
    ''' </summary>
    ''' <param name="str"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    <Extension()> _
    Public Function [IsNumeric](str As String) As Boolean
        Dim result As Decimal = 0
        Return Decimal.TryParse(str, result)
    End Function

    <Extension()> _
    Public Function LCase(str As String) As String
        Return str.ToLower
    End Function

答案 3 :(得分:1)

所有人都认为这些方法在Microsoft.VisualBasic命名空间中。您可以用标准替换它们:

LCase =&gt; string.ToLower() InStr =&gt; string.IndexOf() ....

使用常规try / catch

替换“出错”

祝你好运

相关问题