Атрибуты в C#

У меня была та же проблема сегодня с обновлением Drupal, и следующий процесс помог мне решить эту проблему.

  • Запустите команду обновления композитора, используя конкретную версию, до которой вы пытаетесь обновить. В этом случае это будет composer require drupal/core:8.6.12 --update-with-dependencies. Если есть проблема, блокирующая обновление, это должно показать вам список проблем. в моем случае я попытался обновить его до версии 8.6.11, и он вывел следующее.

Задача 1

. Запрос на установку drupal / core 8.6.11 -> выполняется с помощью drupal / core [8.6.11].

. Можно установить только одно из: twig / twig [1.x-dev, v1.35.3].

. Можно установить только одно из: twig / twig [v1.35.3, 1.x-dev].

. Можно установить только одно из: twig / twig [1.x-dev, v1.35.3].

. Для drupal / core 8.6.11 требуется ветка / ветка ^ 1.38.2 -> выполнимая веткой / веткой [1.x-dev, v1.38.2].

. Вывод: не устанавливайте twig / twig v1.38.2

. Запрос на установку ветки / ветки (заблокирован в v1.35.3, требуется как ^ 1.35.0) -> выполняется веткой / веткой [v1.35.3].

  • Если в списке нет проблем, попробуйте очистить кэш композитора composer clearcache, а затем повторите команду обновления.
  • Вы также можете попробовать запустить команду Why-Not Composer, чтобы увидеть, выделяет ли это какие-либо проблемы composer why-not drupal/core:8.6.12

В моем случае проблема заключалась в том, что компонент ветки, необходимый для 8.6.12, был v1 .38.2, но был ограничен более низкой версией 1.35 в файле композитора. Я использовал следующую команду для обновления версии ветки, и это позволило мне обновиться до Drupal 8.6.12, используя мой обычный процесс обновления.

composer require twig/twig:1.35.2

Надеюсь, это поможет.

36
задан Michael Myers 7 April 2009 в 14:33
поделиться

7 ответов

От Pro C# 2008 и.NET 3.5 платформы, четвертый выпуск Andrew Troelsen

Понимание программирования с атрибутами

Одна роль компилятора.NET состоит в том, чтобы генерировать описания метаданных для всех определенных и типов, на которые ссылаются. В дополнение к этим стандартным метаданным, содержавшим в рамках любого блока, позволяет платформа.NET, чтобы программисты встроили дополнительные метаданные в блок с помощью атрибутов. Короче говоря атрибуты являются не чем иным как кодируют аннотации, которые могут быть применены к данному типу (класс, интерфейс, структура, и т.д.), участник (свойство, метод, и т.д.), блок или модуль. Идея аннотировать код с помощью атрибутов не является новой. IDL COM обеспечил многочисленные предопределенные атрибуты, которые позволили разработчикам описывать типы, содержавшие в данном сервере COM. Однако атрибуты COM были немного больше, чем ряд ключевых слов. Если бы разработчик COM должен был создать пользовательский атрибут, то он мог бы сделать так, но на него сослалось в коде 128-разрядное число (GUID), который был громоздким в лучшем случае В отличие от атрибутов IDL COM (которые снова были просто ключевыми словами), атрибуты.NET являются типами классов, которые расширяют абстрактную Систему. Припишите базовый класс. Поскольку Вы исследуете пространства имен.NET, Вы найдете много предопределенных атрибутов, которые Вы можете использовать в своих приложениях. Кроме того, Вы свободны создать пользовательские атрибуты для дальнейшей квалификации поведения типов путем создания нового типа, происходящего из Атрибута. Поймите, что при применении атрибутов в коде встроенные метаданные чрезвычайно бесполезны, пока другая часть программного обеспечения явно не отражается по информации. Если дело обстоит не так, аннотация метаданных, встроенных в рамках блока, проигнорирована и абсолютно безопасна.

Потребители атрибута

Как Вы предположили бы.NET 3.5 Платформы поставки SDK с многочисленными утилитами, которые являются действительно в поисках различных атрибутов. Компилятор C# (csc.exe) сам был предварительно запрограммирован для обнаружения присутствия различных атрибутов во время цикла компиляции. Например, если компилятор C# встретится [CLSCompliant] с атрибутом, то он автоматически проверит приписанный объект, чтобы гарантировать, что он выставляет только CLS-совместимые конструкции. Посредством другого примера, если компилятор C# обнаруживает объект, приписанный с [Устаревшим] атрибутом, он отобразит предупреждение компилятора в окне Visual Studio 2008 Error List. В дополнение к средствам разработки многочисленные методы в библиотеках базовых классов.NET предварительно запрограммированы для отражения по определенным атрибутам. Например, если Вы хотите сохранить состояние объекта зарегистрировать, все, что Вы обязаны делать, аннотируют Ваш класс [сериализуемым] атрибутом. Если Сериализирование () метод класса BinaryFormatter встречается с этим атрибутом, объект автоматически сохраняется в файл в компактном двоичном формате. CLR.NET также рыщет для присутствия определенных атрибутов. Возможно, самый известный атрибут.NET [WebMethod]. Если Вы хотите выставить метод с помощью Запросов HTTP и автоматически закодировать возвращаемое значение метода XML, просто применяться [WebMethod] к методу, и CLR обрабатывает детали. Вне разработки веб-сервиса атрибуты очень важны для операции системы безопасности.NET, Windows Communication Foundation и совместимости COM/.NET (и так далее). Наконец, Вы свободны создать приложения, которые программируются для отражения по собственным атрибутам, а также любому атрибуту в библиотеках базовых классов.NET. Таким образом Вы по существу можете создать ряд “ключевых слов”, которые поняты под определенным набором блоков.

Применение атрибутов в C#

Библиотека базовых классов.NET обеспечивает много атрибутов в различных пространствах имен. Ниже снимок некоторых — но абсолютно никакими средствами все — предопределенные атрибуты.

Крошечная выборка предопределенных атрибутов

[CLSCompliant]

Осуществляет аннотируемый объект для приспосабливания правилам Общеязыковой спецификации (CLS). Вспомните, что CLS-совместимые типы, как гарантируют, будут использоваться беспрепятственно через все языки программирования.NET.

[DllImport]

Позволяет коду.NET выполнять вызовы к любому неуправляемому C-или основанной на С++ библиотеке кода, включая API базовой операционной системы. Обратите внимание, что [DllImport] не используется при общении с основанным на COM программным обеспечением.

[Устаревший]

Отмечает тип устаревший или участника. Если другие программисты попытаются использовать такой объект, то они получат предупреждение компилятора, описывающее ошибку их путей.

[Сериализуемый]

Отмечает класс или структуру, как являющуюся “сериализуемым”, означая, что она может сохранить свое текущее состояние в поток.

[Несериализированный]

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

[WebMethod]

Отмечает метод, как являющийся invokable с помощью Запросов HTTP, и дает CLR команду сериализировать возвращаемое значение метода как XML.

Создание пользовательских атрибутов

Первый шаг в создании пользовательского атрибута должен создать новый класс, происходящий из Системы. Атрибут. Пример:

// A custom attribute.
public sealed class VehicleDescriptionAttribute : System.Attribute
{
    private string msgData;

    public VehicleDescriptionAttribute(string description)
    {
        msgData = description;
    }

    public VehicleDescriptionAttribute() { }

    public string Description
    {
        get { return msgData; }
        set { msgData = value; }
    }
}

Как Вы видите, VehicleDescriptionAttribute поддерживает частную внутреннюю строку (msgData), который может быть установлен с помощью пользовательского конструктора и управлял использованием свойства типа (Описание). Вне того, что этот класс, полученный из Системы. Атрибут, нет ничего уникального для этого определения класса.

Из соображений безопасности это считают лучшей практикой.NET для разработки всех пользовательских атрибутов, как изолировано. На самом деле, Visual Studio, которую 2008 обеспечивает фрагменту кода под названием Атрибут, который разгрузит новую Систему. Производный класс атрибута в Ваше окно кода.

33
ответ дан Ronnie Overby 27 November 2019 в 06:08
поделиться

Атрибуты получают больше использования в коде, предназначенном другим программистам или между отличными частями программы, вместо того, чтобы кодировать предназначенный для конечных пользователей.

Например, Вы могли использовать атрибуты, чтобы импортировать dll, указать, как типы взаимодействовали бы с Visual Studio (видимый разработчик, intellisense помогает, отладчик неродной через, и т.д.), как сериализировать их, укажите, что тип является устаревшим, опишите значения по умолчанию, описания, обработайте доступ COM и т.д.

Это - вещи, которые в основном невидимы конечному пользователю и что единственный программист мог поместить в другом месте в исходный код. Но они полезны, когда только скомпилированный двоичный файл доступен а не источник.

7
ответ дан Joel Coehoorn 27 November 2019 в 06:08
поделиться

Мне нравится использовать атрибуты в качестве метаданных к моему коду. Мы создали некоторые простые атрибуты, которые позволяют нам отметить, кто записал что код, когда, и почему. Это позволяет нам и зарегистрировать изменения в коде и во времени выполнения. Если существуют какие-либо исключения во время времени выполнения, мы можем осмотреть стек вызовов, посмотреть на любые атрибуты на методах по пути и разыскать ответственных людей:

[Author("Erich", "2009/04/06", Comment = "blah blah blah")]
public void MyFunction()
{
...
}

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

4
ответ дан tversteeg 27 November 2019 в 06:08
поделиться

Атрибуты являются формой декларативного программирования, 'подобного' созданию Вашего UI в XAML. Это 'отмечает' части кода (классы, методы, свойства, безотносительно) с атрибутом так, чтобы можно было позже собрать все те части, отмеченные в особенном методе, и затем сделать что-то стандартное со всеми ними.

Например, Рассмотрите сценарий, где у Вас есть определенные разделы кода, который Вы хотите выполнить однажды каждый раз, когда Ваше приложение запускается. В одной модели программирования (неатрибута) Вы переходите к своему основному методу и явно называете те init методы. С атрибутами Вы просто собираете все методы, которые Вы отметили со своим атрибутом 'init' и называете их через отражение.

Тот же шаблон содержит для действий как сериализация, персистентность и этажерка...

2
ответ дан Pieter Breed 27 November 2019 в 06:08
поделиться

Я полагаю, что Вы подразумеваете, что не используете (или часто используете), пользовательские определенные атрибуты?

В моем текущем проекте я делаю интенсивное использование пользовательских атрибутов, но, то, что необходимо сохранить подсознательно, то, что использование атрибутов не должно быть целью на себе.

Это - инструмент / цель добраться до данного решения.

Я иногда использую пользовательские атрибуты в сочетании с ткачом как PostSharp, для украшения методов, где к некоторому переплетению нужно относиться во время компиляции.

В моем текущем проекте я также использую атрибуты для украшения определенных типов дополнительной информацией, Но я полагаю, что отправил об этом здесь прежде: Прохладное использование Атрибутов или Аннотаций (CLR или Java)?

1
ответ дан Community 27 November 2019 в 06:08
поделиться

Атрибуты очень хороши в описании некоторого поведения во время выполнения Вашего кода, который является orthoganal к рассматриваемому коду. Например, в классе под названием Клиент Вы смоделировали бы клиента, правильно? Но Вы не могли бы хотеть моделировать или описывать способ, которым сериализируется Клиентский объект.

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

MSTest и NUnit используют атрибуты для сообщения среды тестирования, как это должно использовать классы, которые определяют тестовые приспособления.

MVC ASP.NET использует атрибут для сообщения mvc платформы, какие методы на классах она должна рассматривать как действия контроллера.

Так, любое место, где у Вас есть поведение во время выполнения, что Вы хотите смоделировать атрибуты, может быть полезным.

0
ответ дан Martin Peck 27 November 2019 в 06:08
поделиться

I используйте атрибуты для следующего:

  • Связь с архитектурой плагина
  • Указание другой платформе, что делать с кодом (например, NUnit)
  • Добавление метаданных для использования с другим кодом (см. PropertyGrid)
  • Отображение объектов в базы данных (см. Castle ActiveRecord)
  • При написании собственных API-интерфейсов, позволяющих пользователям обмениваться метаданными
  • В коде платформы, чтобы отладчик пропускал их

, это не в моей голове. Я использую их во многих других местах

1
ответ дан 27 November 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: