Отражение .NET, ожидая, что System.String получит System.Object - PullRequest
0 голосов
/ 23 ноября 2011

Я надеюсь, что кто-то может указать мне правильное направление.У меня есть метод (A), который возвращает результат другого метода, который вызывается с помощью отражения (B).A возвращает тип Object, однако метод, вызванный с помощью (B), возвращает строку.

Когда я запускаю свое приложение локально и выполняю:

    object x = A(); 
    string y = x.GetType().ToString(); 

Значение 'y' равно System.String, как и ожидалось.Когда я запускаю точно такой же код в производственном режиме (и да, это точно такой же код / ​​библиотеки / исполняемый файл / и т.д.Это в конечном итоге вызывает ошибку вниз по течению.

Может кто-нибудь дать мне представление о том, что вызывает эту разницу?Локально я использую физическую копию Windows 7 Professional.На производстве я использую виртуализированный стандарт Windows Server 2008.Это приложение написано в .NET 3.5.Методы A и B написаны на библиотеке VB.NET.Вызывающее приложение написано на C #.

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

Не должно быть очевидным, но это не должен быть тот же код. Если бы это был один и тот же код, он, скорее всего, имел бы тот же результат.

Работаете ли вы с источником библиотеки VB.NET? Если вы это сделаете, поскольку у вас есть источник, он вызывает источник метода, поэтому он может автоматически определить тип, тогда как в «рабочей» версии он не может определить тип, потому что он вызывает сборку или что-то в этом роде.

Существует простое исправление:

object x = A();
object xCasted = x as string;
if(x == null) ; //you have issues
0 голосов
/ 23 ноября 2011

Спасибо за вашу помощь. Я решил проблему. Оказывается, возвращение System.Object в производственную среду было точным. Метод, вызываемый A, использует переменную ByRef Object, переменная устанавливается в строку и возвращается.

Когда эта переменная была запущена в производство, генерировалось исключение, и она проглатывалась. Когда метод завершил выполнение, ByRef никогда не присваивалось строковое значение, и, следовательно, он все еще оставался System.Object.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...