Странное поведение с Microsoft.Windowsce в.Формы

У меня есть приложение Windows Mobile, в котором я хочу проверить ориентацию устройства. Поэтому я написал следующее свойство в одной из моих форм:

internal static Microsoft.WindowsCE.Forms.ScreenOrientation DeviceOriginalOrientation { get; private set; }

странно то, что после этого всякий раз, когда я открываю UserControl, конструктор показывает это предупреждение, даже если этот UserControl не использует свойство:

не удалось загрузить файл или сборку 'Microsoft.Windowsce в.Формы, версия=3.5.0.0, культура=нейтральный, PublicKeyToken=969db8053d3322ac ' или один из свои зависимости. Определение манифеста сборки расположены не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

комментируя вышеуказанное свойство отклонит предупреждение и снова покажет пользовательский элемент управления. Приложение создано и успешно работает без каких-либо проблем в обоих случаях.

кто-нибудь знает, почему это происходит и как я могу это исправить?

3 ответов


эта проблема стоила мне пары часов. Я решил это, добавив Microsoft.Windowsce в.Формы.dll в GAC с помощью gacutil. Надеюсь, это поможет. Робин!--1-->


Да, это в значительной степени ожидалось. Поскольку это статическое свойство (с которым я бы не согласился в первую очередь), дизайнер должен инициализировать его, что означает загрузку Microsoft.Windowsce в.Бланки, что означает загрузочные устройства-конкретные точки входа. По общему признанию, сообщение об ошибке отстой, но тогда поддержка конструктора для устройства имеет много интересных вопросов которые трудно угадать причины.

Я бы попытался переместить его в другой класс или обернуть его чеком чтобы посмотреть, в модельере ли ты. Что-то вроде этого работает для нас:

protected bool IsDesignTime
{
    get
    {
        // Determine if this instance is running against .NET Framework 
        // by using the MSCoreLib PublicKeyToken
        System.Reflection.Assembly mscorlibAssembly = typeof(int).Assembly;
        if ((mscorlibAssembly != null))
        {
            if (mscorlibAssembly.FullName.ToUpper().EndsWith("B77A5C561934E089"))
            {
                return true;
            }
        }
        return false;
    }
}

Если вы копируете Microsoft.Windowsce в.Формы.dll в подпапку в вашем проекте, например, а затем добавьте следующее к событиям предварительной сборки вашего проекта, он также будет работать нормально, если вы, например. переустановите компьютер:

"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /i "$(ProjectDir)SubFolder\Microsoft.WindowsCE.Forms.dll"