Определение типа строки данных при использовании сгенерированных XSD наборов данных
У меня есть файл определения схемы XML (XSD) в Visual Studio 2010. Конструктор DataSet создает строго типизированный набор данных в <name>.designer.vb
файл
В зависимости от ряда ошибочных факторов, оно, по-видимому, время от времени обеспечивает строгую типизацию для перечислимых операций (используется в LINQ или для каждого цикла)
Например, иногда сгенерированная кодовая база способна определить тип, а иногда это не так:
Кажется, что нарушающий код - имеет ли сгенерированный файл функцию:
Public Overridable Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator
Return Me.Rows.GetEnumerator
End Function
Если это так, то вызов перечислителя для функции вернет скучный object
,
Если этого не произойдет, то перечислитель вернет соответствующий тип.
Мой вопрос:
Как я могу заставить его последовательно генерировать соответствующее поведение?
Наш исходный код не содержит сгенерированного кода, поэтому каждый разработчик должен сгенерировать его для себя. Это приводит к тому, что некоторые машины получают ошибки компилятора с неправильной типизацией, в то время как другие не получают... с таким же точным исходным кодом.
Некоторые вещи, которые имеют отношение к этому:
- Версия сборки, предназначенная для.NET 4.0 VS .NET 4.0 Client
- Открыты ли при создании файлы XSD, конструктора или файлы использования
- Другие?
Возможные обходные пути:
- Включите строгую типизацию / приведение ко всем объявлениям
- Включить правильно созданный файл в систему контроля версий
1 ответ
Эта проблема:
Короче говоря, проблема возникает, когда MSDataSetGenerator
инструмент работает, но System.Data.DataSetExtensions
сборка еще не была загружена в текущий процесс Visual Studio.
Решение:
Один из способов загрузить сборку - просто открыть любой файл XSD и затем заново сгенерировать код конструктора.
Следующие шаги должны создать соответствующий файл конструктора:
- Откройте любой XSD-файл в представлении конструктора (это загружает
DataSetExtensions.dll
) - Щелкните правой кнопкой мыши на XSD и выберите
Run Custom Tool
Вот полное пошаговое руководство с фотографиями проблемы и решения
Другие экземпляры:
Microsoft сообщила об этой проблеме в следующих заявках об ошибках:
- # 668724 - MSDataSetGenerator иногда генерирует неправильный вывод
- #733077 - MSDataSetGenerator не создает производные классы TypedTableBase
Это также рассматривается в вопросе SO: