2010-10-12 1 views
3

У меня есть машина x64, работающая под управлением Windows 7 64 бит. Кажется, у меня очень странная ситуация с начала недели.Установка целевой платформы для x86 на моем ноутбуке x64 не позволяет некоторым типам WPF правильно загружаться

Если я построить и запустить приложение WPF с целевой платформой, установленной в качестве x86, я получил MissingMethodException при попытке создать сетку:

var g = new Grid(); 

Однако создание StackPanel работает отлично:

var s = new StackPanel(); 

Если я переключу цель платформы на x64 или AnyCpu, оба кода работают нормально. Я думал о поврежденной сборке в рамках, но это выглядит совершенно странно ... Любая идея?

Update:

Я был в контакте с людьми внутри команды WPF внутри Microsoft. Однако у них не было времени посмотреть на мою машину, чтобы понять, что случилось. Тем временем мне пришлось переустановить машину, чтобы она работала должным образом. Спасибо за вашу помощь. Я думаю, что проблема связана с функциональностью WOW64, но трудно быть более точным. Я обновлю этот вопрос, если найду дополнительную информацию.

+3

Документируйте свой вопрос лучше. Сообщение * точное * сообщение об исключении и его StackTrace. Опубликуйте след, который вы выберете из fuslogvw.exe. –

+0

Я согласен, было бы полезно увидеть точное сообщение об исключении ... – cplotts

ответ

4

У меня тоже есть эта конфигурация, и у меня не возникло никаких проблем с созданием приложения x86, которое использует сетку.

Я бы удалил используемую версию .NET Framework (выглядит как .NET 4.0) и переустановил ее. Чтобы быть тщательным, вы также можете удалить Visual Studio 2010 и переустановить его (хотя это, вероятно, слишком много).

Проблема должна существовать только на той машине, на которой вы работаете ... в противном случае были бы мобы и вилы и т. Д. ... направлялись в Редмонд, штат Вашингтон. :-) Вы можете попробовать создать образец проекта на другой машине ... просто для вашего здравомыслия. :-)

Update

Я просто хотел бы добавить, что System.Windows.Controls.Grid живет в сборке PresentationFramework. Может быть интересно посмотреть, где этот файл хранится на вашей машине ... чтобы узнать, заметили ли вы что-нибудь. Решение по-прежнему, вероятно, переустанавливается ... но эй, больше информации всегда лучше.

Для .NET 4.0, сборка PresentationFramework живет: C: \ Windows \ Microsoft.NET \ сборка \ GAC_MSIL \ PresentationFramework \ v4.0_4.0.0.0__31bf3856ad364e35

Для .NET 3.0/3.5, то Сборка PresentationFramework работает по адресу: C: \ Program Files \ Reference Assemblies \ Microsoft \ Framework \ v3.0

4

Установка целевой платформы платформы x86 приведет к тому, что приложение будет вызывать версии x86 для неуправляемых сборок и работать в режиме WOW64 , См. this article on platform target и this msdn page on WOW64. Если вы трассируете статический конструктор Grid в Reflector, похоже, что какой-то код инициализации потока вызывает внешнюю неуправляемую функцию RuntimeHelpers.PrepareConstrainedRegions(), которая может вызвать проблему (StackPanel не вызывает этот код). За этим стоит немного размышлений, но вы можете попробовать запустить Windows Update, чтобы убедиться, что у вас есть те же обновления, что и ваш коллега, и убедитесь, что у вас есть все обновления VS/.NET.

В конечном счете, если вы не вызываете какие-либо сторонние неуправляемые DLL из вашего кода, которые доступны только в виде сборок x86, вы, вероятно, должны оставить целевой платформой как любой процессор, чтобы он запускался на основе платформ x86 и x64.

Наконец, если после обновления Windows вы по-прежнему видите проблему, если это возможно, обновите персональный компьютер и посмотрите, не возникла ли проблема. Если это так, может быть ошибка в слое WOW64, и было бы хорошо до file a bug report with Microsoft.

Смежные вопросы