1

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

  • LCase
  • InStr
  • 剩下
  • 错误转到 0

是否有可能只有一些选项或包括我需要让这些工作?

4

4 回答 4

3

您必须使用可移植类库支持的程序集方法(请参阅程序集部分)。您将能够找到不适合您的方法的等价物(例如 = SubString、ToUpper、ToLower、IndexOf 等)。

于 2012-09-14T14:05:29.603 回答
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
于 2012-10-08T15:42:59.413 回答
2

当使用可移植面向下级平台(.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 属性传递它的情况下桥接该问题的好方法。

于 2012-09-25T19:41:27.580 回答
1

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

LCase => string.ToLower() InStr => string.IndexOf() ....

用常规的 try/catch 替换“on error”

此致

于 2012-09-14T13:51:16.627 回答