我正在使用VB.Net DLL并将其转换为可移植类库。一旦我将所有类都移到了PCL的新项目中,Visual Studio开始为许多常见的VB语法抛出错误,我认为它仍然可以正常工作。一些例子:
是否有可能只有一些选项或包含我需要让它们起作用?
答案 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
替换“出错”祝你好运