Можете ли вы скомпилировать C#, чтобы он не нуждался в.NET Framework во время выполнения?
Можно ли заставить компилятор C# извлечь все ссылочные вызовы из фреймворка и упаковать их в dll или даже в один исполняемый файл?
Мне нравится писать быстрые "одноразовые" приложения на C#, однако я не хочу устанавливать весь фреймворк на целевой машине, когда она будет готова к работе.
8 ответов
Вы задаете загруженный вопрос. C# - просто язык и не требует.NET Framework. Процесс его компиляции требует компилятора, который может или не может сам зависеть от.NET Framework (компилятор Microsoft C# этого не делает - он написан на нативном коде). Ваша программа должна ссылаться на некоторую сборку, где можно найти типы, классы и методы для вашего использования. Вы можете удалить system.dll и mscorlib.dll из списка ссылок и ссылаться на свои собственные сборки. Таким образом, вы можете избежать зависимостей от.NET Framework, если вы действительно работаете над этим. Но, в конце концов, если у вас нет компилятора C#, который компилирует программы в нативный код, у вас все еще есть зависимость от CLR.
Это очень технический способ сказать... почти ничего. Но это отвечает на ваш вопрос.:) Практически более полезным, однако, является то, как заставить ваши программы на C# работать с минимумом зависимостей. mkbundle из mono фактически позволит вам скомпилировать все это в.exe практически без каких-либо зависимостей.
Но если вы хотите придерживаться Microsoft .NET Framework, вы можете добиться гораздо меньших размеров и более быстрой установки зависимостей, которые вам обычно нужны, используя профиль клиента.NET 3.5 SP1. Вы можете прочитать об этом здесь: http://msdn.microsoft.com/en-us/library/cc656912.aspx
Теперь можно скомпилировать C# в собственный код с помощью Microsoft.NET Native: https://msdn.microsoft.com/en-us/library/dn584397(v=vs.110).aspx
Он автоматически компилирует выпускную версию приложений, написанных в управляемом коде (C# или Visual Basic) и предназначенных для.NET Framework и Windows 10, в собственный код.
...
Для пользователей ваших приложений.NET Native предлагает следующие преимущества:
• Быстрое время выполнения
• Постоянно быстрое время запуска
• Низкие затраты на развертывание и обновление
• Оптимизированное использование памяти приложения
Это работает только с Visual Studio .NET 2015.
Говорят, что это возможно, используя сторонние инструменты, такие как http://www.remotesoft.com/linker/
Взгляните на профиль клиента.NET. Это позволит вам упаковать минимальную установку на клиентском компьютере, которая позже будет обновлена обновлением Windows до полной платформы.
Это зависит, конечно, от того, что ваше приложение использует только библиотеки, содержащиеся в профиле клиента...
Некоторая информация здесь: http://blogs.windowsclient.net/trickster92/archive/2008/05/21/introducing-the-net-framework-client-profile.aspx
Невозможно. Ваше "скомпилированное" C# -приложение - это язык, который интерпретирует.Net CLR (должен был сказать JITed, читает IL, компилируется в собственный код и затем вызывает скомпилированный собственный код) во время выполнения.
FYI.net 2.0 - это стандартная установка на XP SP2 и Vista, так что вы не будете платить так много штрафа.
Вы можете рассмотреть моно, но это все еще включает запуск какой-то платформы на вашей целевой машине.
Эта зависимость, которая, к сожалению, часто нарушается или отсутствует в реальном мире, является большой причиной того, почему C# не получил более широкого распространения. С другой стороны, у большинства разработок есть зависимости.. посмотрите на C++ и Java, например.
Я не думаю, что мы действительно избавимся от этих проблем с зависимостями в ближайшее время, поэтому я рекомендую, чтобы, если вы хотите использовать C#, вы создали обертку для установки, которая проверяет наличие необходимой вам версии.net Framework и, если она отсутствует уведомите пользователя, что ему это нужно для запуска вашего приложения.
Некоторые функции C# связаны с интерфейсами.NET Framework.
Например:
yield return
требуется интерфейс IEnumerable
using (x) {}
требуется интерфейс IDisposable