Расширение и CodeDomProvider

У меня проблемы с CodeDomProvider. Когда я компилирую код VB, ошибки нет. Но если этот код имеет расширения (например: string().contains(), char().count, char().AsEnumerable и т. Д.) В момент, когда я вызываю эти функции, он возвращает исключение, равное для всех этих расширений:

'Public Member' Count 'в типе' Char () 'not found'

'Public Member' Contains 'типа' String () 'not found'


Dim refs() As String = {"mscorlib.dll", "System.dll", "Microsoft.VisualBasic.dll","system.xml.dll", "system.core.dll", "system.data.dll"}

oCParams.ReferencedAssemblies.AddRange(refs)

Это сборка, на которую ссылается компиляция, и она также настроена для запуска в Framework 4.0.


    Dim Param As New Dictionary(Of String, String)

    Param.Add("CompilerVersion", "v4.0")

    Dim oCodeProvider = CodeDomProvider.CreateProvider("VisualBasic", Param)

Этот код находится внутри строки:

Imports System
Imports System.Xml
Imports System.Data
Imports System.Collections
Imports System.Linq.Expressions
Imports System.Linq
Imports System.String
Imports System.Linq.Enumerable
Imports System.Collections.Generic
Imports System.Runtime.CompilerServices
Imports System.Runtime.CompilerServices.ExtensionAttribute

Namespace Teste
Class Classe
Public Shared Function ProcessarLink(ByVal URL As System.Uri) As Boolean
Dim QueryString = URL.Query.Remove(0, 1).Split("&"c).tolist

If QueryString.Contains("xxx") Then
...
End If

End Function 
Public Shared Function Personalizar(ByRef Vetor() As Char) As System.Collections.Generic.Dictionary(Of String,Object) 
...
Dim Total As Integer = Vetor.Count
...
End Function 
End Class 
End Namespace

После того, как я использую его для компиляции своей сборки.

Код компилируется без ошибок, но когда я вызываю функцию «ProcessarLink», она возвращает мне исключение в «Contains», или когда я вызываю функцию «Personalizar», ошибки появляются с «Count». То же самое происходит и с другими расширениями, такими как AsEnumerable и т. Д.

В чем проблема?


person Marcos Haenisch    schedule 24.07.2011    source источник
comment
Как вы создаете код? Как будет выглядеть код, если его скомпилировать в строку?   -  person svick    schedule 25.07.2011


Ответы (1)


Похоже, ваш кодовый файл должен импортировать методы расширения, то есть он не включает:

Imports System.Linq

Вы это сделали? Если нет, можете ли вы опубликовать пример файла кода vb, в котором вы видите ошибки?

person Stuart    schedule 24.07.2011
comment
Пример есть в исходном посте. Ошибка возникает даже при импорте System.Linq. - person Marcos Haenisch; 25.07.2011
comment
Можете ли вы попробовать включить Option Strict для компиляции - это может помочь определить ошибку - person Stuart; 25.07.2011
comment
Это устранило проблему. Я объявлял переменные без использования «Как». Используя Visual Studio 2010, у меня не было проблем, но когда я создал свою собственную компиляцию, строгий вынудил меня объявить переменные, используя 'As', и с этим проблема исчезла. Я просто не понимал, почему в VS 2010 проблемы не возникает. Большое тебе спасибо! - person Marcos Haenisch; 25.07.2011