Определение типа строки данных при использовании сгенерированных 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 и затем заново сгенерировать код конструктора.

Следующие шаги должны создать соответствующий файл конструктора:

  1. Откройте любой XSD-файл в представлении конструктора (это загружает DataSetExtensions.dll)
  2. Щелкните правой кнопкой мыши на XSD и выберите Run Custom Tool

Вот полное пошаговое руководство с фотографиями проблемы и решения

Другие экземпляры:

Microsoft сообщила об этой проблеме в следующих заявках об ошибках:

Это также рассматривается в вопросе SO:

Другие вопросы по тегам