Добавление dll файла к проекту C#

Если вы не хотите использовать оператор if в пределах catch областей, в C# 6.0, вы можете использовать синтаксис Exception Filters , который уже поддерживается CLR в предварительных версиях, но существовал только в VB.NET / MSIL:

try
{
    WebId = new Guid(queryString["web"]);
}
catch (Exception exception) when (exception is FormatException || ex is OverflowException)
{
    WebId = Guid.Empty;
}

Этот код будет перехватывать Exception только тогда, когда это InvalidDataException или ArgumentNullException.

На самом деле, вы можете поместить любое условие в это предложение when:

static int a = 8;

...

catch (Exception exception) when (exception is InvalidDataException && a == 8)
{
    Console.WriteLine("Catch");
}

Обратите внимание, что в отличие от оператора if внутри области действия catch, Exception Filters не может throw Exceptions, и когда они делают, или когда условие не true, следующее условие catch будет оцениваться вместо этого:

static int a = 7;

static int b = 0;

...

try
{
    throw new InvalidDataException();
}
catch (Exception exception) when (exception is InvalidDataException && a / b == 2)
{
    Console.WriteLine("Catch");
}
catch (Exception exception) when (exception is InvalidDataException || exception is ArgumentException)
{
    Console.WriteLine("General catch");
}

Вывод: Общий улов.

При наличии более одного true Exception Filter - будет принят первый:

static int a = 8;

static int b = 4;

...

try
{
    throw new InvalidDataException();
}
catch (Exception exception) when (exception is InvalidDataException && a / b == 2)
{
    Console.WriteLine("Catch");
}
catch (Exception exception) when (exception is InvalidDataException || exception is ArgumentException)
{
    Console.WriteLine("General catch");
}

Выход: Catch.

И как вы можете видеть в MSIL, код не переводится в операторы if, но в Filters, и Exceptions не может быть выброшен из областей, отмеченных Filter 1 и Filter 2, но фильтр, выбрасывающий Exception, потерпит неудачу, также последнее значение сравнения, помещенное в стек до того, как команда endfilter определит успех / неудачу фильтра (Catch 1 XOR Catch 2 будет выполняться соответственно):

Exception Filters MSIL

Также, в частности, Guid имеет Guid.TryParse метод.

5
задан Gavin Miller 22 June 2009 в 21:55
поделиться

7 ответов

Нет причин, правда. Может случиться так, что Visual Studio настроена на отображение файлов, не входящих в проект (что трудно сказать по картинке), а DLL находится в основном каталоге. Текст довольно ясен, что дополнительные файлы - это

  • bass.dll
  • bassenc.dll
  • lame.exe

.net-файл находится вместе с другими в том же каталоге, и вам нужно добавить это как ссылка.

3
ответ дан 14 December 2019 в 13:45
поделиться

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

Звучит так, как будто они помещают ссылочные библиотеки DLL в каталог проекта, ссылаются на них оттуда, а также включают их в проект. Таким образом, при копировании каталога проекта ссылочная dll будет скопирована вместе с ним. Кроме того, если ссылочная dll отсутствует, проект будет выдавать жалобу в Visual Studio.

1
ответ дан 14 December 2019 в 13:45
поделиться

Асинхронные серверы, например, более или менее устойчивы к этой конкретной форме атак. Я, например, обслуживаю свои приложения Django с помощью обратного прокси-сервера Nginx, и атака, похоже, никак не повлияла на его работу. Другой популярный асинхронный сервер - lighttpd.

Имейте в виду, что эта атака опасна, потому что она может быть выполнена даже на одной машине с медленным подключением. Однако обычные DDoS-атаки сталкивают ваш сервер с целой армией машин, и вы мало что можете сделать, чтобы защитить себя от них.

или необоснованно огромные запросы как можно быстрее (и регистрировать их для помощи в обнаружении атаки)
  • Не используйте чистый LRU-кеш, если запросы от неаутентифицированных клиентов могут привести к удалению вещей из этого кеша, потому что вы будете подвержены для кэширования атак отравления (когда злонамеренный клиент запрашивает множество разных редко используемых вещей, в результате чего вы вытесняете все полезные вещи из своего кеша и вам нужно выполнять гораздо больше работы для обслуживания своих законных клиентов)
  • Помните, что важно полностью отклонять регулируемые запросы (например, с ответом HTTP 503: Service Unavailable или аналогичным ответом, подходящим для любого используемого вами протокола) вместо постановки в очередь регулируемых запросов. Если вы поставите их в очередь,

    0
    ответ дан 14 December 2019 в 13:45
    поделиться

    В Windows DLL представляет собой библиотеку динамической компоновки , которая объединяет набор программных функций. В этом примере bass.dll предоставляет возможности и функции, относящиеся к обработке звука через этот файл (и любые файлы, от которых он зависит). Чтобы использовать эту функцию, вам понадобится ссылка в решении, чтобы Visual Studio могла связать ее во время компиляции. Затем DLL обычно копируется в выходной каталог при построении приложения.

    Это все, что необходимо для правильной работы кода, остальное на самом деле просто предпочтение или соглашение. Некоторые люди предпочитают, чтобы все файлы, существующие в каталоге проекта, находились в решении, чтобы обозреватель решений отражал файловую систему. Обычно вам нужно иметь библиотеки, от которых ваше приложение зависит где-то в иерархии каталогов вашего решения, чтобы все приложение было упаковано вместе (например, для упрощения управления исходным кодом). Однако вы не захотите помещать эту библиотеку в каталог BIN или любой каталог, созданный Visual Studio, чтобы избежать случайного удаления. В любом случае наличие ссылки является важной частью, файл, находящийся в проекте или решении, не является необходимым.

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

    • Источник: Исходный код и файлы проекта
    • Библиотеки: DLL
    • Поддержка: Разный код или проекты, но фактически не является частью приложения (возможно, сценариями развертывания)
    2
    ответ дан 14 December 2019 в 13:45
    поделиться

    Если сборка (Bass.Net.dll в вашем случае) содержит классы, которые вы хотите использовать, вы должны добавить ссылку на эту сборку в свой проект.

    0
    ответ дан 14 December 2019 в 13:45
    поделиться

    Трудно догадаться, почему кто-то что-то сделал, но если бы мне действительно пришлось угадывать, я бы сказал, что этот парень подумал встроить необходимые DLL в качестве ресурсов, чтобы быть уверенным, что они доступны. к приложению. Я видел эту технику для встраивания шрифтов или звуков и не уверен, работает ли она вообще с DLL; но это всего лишь предположение.
    Конечно, лучший способ убедиться, что файлы доступны, - это создать проект развертывания с помощью Visual Studio или другого инструмента установки, например Wise или InnoSetup, и это лишь некоторые из них.

    0
    ответ дан 14 December 2019 в 13:45
    поделиться

    Это действительно может быть хорошей идеей в множество обстоятельств. На мой взгляд, это 3 типа зависимостей

    1. Сборки из стандартной библиотеки .Net. Никогда не включайте их локально.
    2. Сборки, которые вы ожидаете от других разработчиков для установки как часть установочного пакета MSI или exe. Обычно это означает, что они строго подписаны и имеют копию в GAC.
    3. Сборки, которые вы не ожидаете от других разработчиков для установки через установщик MSI или exe. Может быть, потому что у вас есть сторонняя библиотека или ваша собственная библиотека, которой нет в GAC.

    В третьем случае,

    0
    ответ дан 14 December 2019 в 13:45
    поделиться
    Другие вопросы по тегам:

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