Какова действительная функция настройки проекта C# "Разрешить небезопасный код"

Мне было интересно, если параметр проекта C# "Разрешить небезопасный код" применяется только к небезопасному коду C# в самом проекте, или необходимо установить этот параметр при связывании в нативной C++ DLL? Как насчет ссылок в управляемой DLL, которая сама ссылается на собственную DLL? Что на самом деле делает этот вариант, под капотом?

4 ответа

Решение

Это связано с ключевым словом "unsafe" в C#. "unsafe" отключает все проверки, которые обычно происходят, и позволяет вам получить прямой доступ к памяти. это не относится к вызову собственных C++ DLL или интерфейсов.

Это позволяет использовать "небезопасный" блок.

unsafe(...)
{
}

Это относится только к использованию unsafe блоки (где можно использовать указатели). Это не регулирует P/Invoke.

Необходимо использовать небезопасный контекст { }. Раньше требовалось использовать sizeof(), но в более поздних версиях это уже не так.

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

Другие вопросы по тегам