Можно ли использовать DLL (написанную на C#) на компьютере без .net framework

331
19 октября 2017, 08:01

Я попытался использовать библиотеку Unmanaged Exports (.NET DllExport) в надежде что с ее помощью получится использовать свою DLL без .net framework.

Пример:

[return: MarshalAs(UnmanagedType.LPWStr)]
[DllExport("Test", CallingConvention = CallingConvention.Cdecl)]
public static string Test(
    [MarshalAs(UnmanagedType.LPWStr)] string firstName, 
    [MarshalAs(UnmanagedType.LPWStr)] string lastName)
{
    return string.Format("Hello {0} {1}", firstName, lastName);
}

Подключил свою DLL к программе на Delphi, но при вызове метода вышла ошибка что отсутствует .net framework

Насколько я понял моя DLL должна стать (unmanaged code) и работать без .net framework. Я прав, или я не до конца понимаю суть?

Answer 1

Код написанный на C# компилируются в промежуточный код IL для виртуальной машины .NET и может быть выполнен только ей. Поэтому когда вы запускаете свое приложение на другой машине, то она никаким образом не может выполнится без .NET фреймворка.

Если я правильно понял, библиотека Unmanaged Exports (.NET DllExport) выполняет всего лишь добавление имен для экспорта, но на сам код IL она не влияет. Поэтому ее использование никак не поможет запустить ее на машине без фреймворка.

Что бы данный подход сработал, надо заставить компилятор перевести IL код для виртуальной машины в нативный код для процессора. Мне не встречалась подобная функциональность, но на EnSO пишут про .NET Native который умеет это делать и включен в VS2015.

READ ALSO
Задание значения в textbox из других классов, MVVM

Задание значения в textbox из других классов, MVVM

Есть классическое MVVM приложение VIEW содержит textbox, где Text="{Binding Message}" во ViewModel

307
Является ли строка временем, проверка с помощью регулярного выражения

Является ли строка временем, проверка с помощью регулярного выражения

Имеется паттерн /d/d:/d/d:/d/d для времениМетоды Regex

287
Переадрессация и фильтры в ASP.NET MVC

Переадрессация и фильтры в ASP.NET MVC

Возникла проблема с выполнением блокировки пользователей на сайтеА именно, нет понимания как сделать автоматическое открытие страницы...

233
Дублирование в базе данных Entity Framework

Дублирование в базе данных Entity Framework

ПриветВозникла проблема

213