Я нахожусь в процессе миграции веб-приложения VB.NET из Visual Studio 2005 (.NET 2.0) в Visual Studio 2008 (.NET 3.5), и хотя это было в основном просто, я столкнулся с проблемой, которая заняла некоторое время, чтобы решить.
Код, о котором идет речь, гласит:
Dim serviceArray = New SecurityLayer.Model.Service()
serviceArray = new SecurityLayer.SecurityBusinessController.GetServices(userId)
Компилируется в VS2005 / .NET2.0, но не работает в VS2008 / .NET3.5 со следующей ошибкой:
Значение типа «одномерный массив SecurityLayer.Model.Service» не может быть преобразовано в «SecurityLayer.Model.Service»
Это указывает на то, что serviceArray не объявлен как массив, и при чтении документации MSDN не похоже, что синтаксис изменился между версиями, но в нем говорится, что фигурные скобки необходимы независимо от того, передаются ли какие-либо значения или нет. Конечно, добавление фигурных скобок к его объявлению решает проблему (и компилятор переходит к следующему экземпляру!).
Dim serviceArray = New SecurityLayer.Model.Service(){}
serviceArray = new SecurityLayer.SecurityBusinessController.GetServices(userId)
После обновления всех экземпляров этого объявления код теперь создается и работает, как и ожидалось.
Option Explicit и Option Strict одинаковы в обеих IDE, поэтому этого не может быть (или, по крайней мере, это то, что я предполагаю).
Итак, мой вопрос: почему эта сборка была в VS2005 / .NET2.0, а не в VS2008 / .NET3.5?
Заранее спасибо