.NET секретам
Спецвыпуск: Хакер, номер #066, стр. 066-058-3 Жаль, но Reflector не учитывает эту особенность. Если есть время, можешь написать Аисту баг-репорт :). В результате эта строка кода должна выглядеть так: panel1.Height = (int)((PanelHeaderSize)((PanelHeaderSize)((PanelHeaderSize)((PanelHeaderSize)this.m_NicePanel.Height) - this.m_NicePanel.Style.HeaderStyle.Size) - this.m_NicePanel.Style.FooterStyle.Size) - ((PanelHeaderSize)2)); Остаются еще две проблемы, связанные с этим несчастным перечислением :). Компилятор сообщает: PureComponents.NicePanel\NicePanel.cs: Оператор '/' не может применяться к операндам типа 'PureComponents.NicePanel.PanelHeaderSize' и 'PureComponents.NicePanel.PanelHeaderSize' Это происходит в строках 1704 и 1900. Вот правильный вид этих строк: Первая: int num2 = (int)(PanelHeaderSize)((((PanelHeaderSize) (this.Height - num1)) - this.Style.FooterStyle.Size) + ((int)this.Style.FooterStyle.Size / 2)); И вторая: int num3 = (int) (((PanelHeaderSize) num1) + ((this.Style.HeaderStyle.Size - ((PanelHeaderSize) 2)) / 2)); Далее следуют более каверзные ошибки (синтаксические). Например, в классе NicePanelDesigner строка 135: if(<PrivateImplementationDetails>.$$method0x60000d2-1 == null) Тут запрятались сразу несколько ошибок. Знаки (>), ($) и (-) не могут использоваться в названиях методов, классов и т.д. Открыв эту сборку в Reflector’е, обнаружим, что метод $$method0x60000d2-1 действительно существует: кликнем на название этого метода и попадем в интересный класс (листинг 1). internal class <PrivateImplementationDetails> { // Fields internal static $$struct0x6000067-1 $$method0x6000067-1; // data size: 176 bytes internal static Hashtable $$method0x60000d2-1; internal static Hashtable $$method0x60000d2-2; internal static $$struct0x6000157-1 $$method0x6000157-1; // data size: 512 bytes // Nested Types [StructLayout(LayoutKind.Explicit, Size=0xb0, Pack=1)] private struct $$struct0x6000067-1 { } [StructLayout(LayoutKind.Explicit, Size=0x200, Pack=1)] private struct $$struct0x6000157-1 { } } Этот класс находится в пространстве имен ("-"), которое создается компилятором автоматически, в него входят глобальные поля, методы и классы, что, правда, не поддерживается в C# и наводит на мысли о присутствии некого защитного механизма. Кстати, из этого класса в проекте используется только одно поле $$method0x60000d2-1. Чтобы исправить глюки, создадим класс Helper, а в нем — одно поле. Еще подправим все обращения к нему в строках 228, 148 и 135 (листинг 2). using System; using System.Collections; namespace PureComponents.NicePanel.Design { public class Helper { public static Hashtable Hashtable1; } } И последняя ошибка, которая должна быть исправлена: Сбой криптографических служб при создании подписи сборки 'nicePanelKey.snk' -- Не удается найти указанный файл. Этот закрытый ключ использован для цифровой подписи данного компонента. Чтобы исправить неприятность, заходим в файл AssemblyInfo.cs и смотрим на всякие атрибуты сборки, среди которых указаны: |