Превращение исполняемого файла.NET в собственный исполняемый файл

Используя аргументы ключевого слова как присвоения

Иногда каждый хочет создать диапазон из функций в зависимости от одного или нескольких параметров. Однако это могло бы легко привести к закрытиям все обращение к тому же объекту и значению:

funcs = [] 
for k in range(10):
     funcs.append( lambda: k)

>>> funcs[0]()
9
>>> funcs[7]()
9

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

funcs = [] 
for k in range(10):
     funcs.append( lambda k = k: k)

>>> funcs[0]()
0
>>> funcs[7]()
7
15
задан lmsasu 27 July 2009 в 12:52
поделиться

10 ответов

Он пока недоступен, но команда проекта Mono работает над компилятором Ahead of Time , который сделает то, что вы ищете. Предполагается, что Mono будет работать на iPhone (например, Unity), но он должен работать на всех платформах.

Редактировать: Он поддерживает Mono x86, но я не уверен, что они включили функцию, которая объединяет еще в зависимых классах (хотя из интервью, которое я слышал, это планируется)

Редактировать 2: В настоящее время поддерживается включение зависимостей, спасибо Dykam!

12
ответ дан 1 December 2019 в 01:05
поделиться

No, NGen'd code still needs the framework - it only pre-JITs the code in your own assemblies. It also requires the framework for the CLR itself.

I believe Mono has a static compiler which they're planning on using for the iPhone. I don't know whether that will work on Windows as well though.

There used to be a product called Thinstall which some people used for this. It's now called ThinApp - basically it's application virtualisation. It's commercial, but you may well be able to get hold of a trial version.

Personally I'd be somewhat concerned about any such product - when it comes to deployment, veering away from the mainstream way of doing things sounds like a recipe for lots of support calls. There's just an awful lot to go wrong. I'm not saying it doesn't work, just that I'd be wary.

Have you looked at the .NET 3.5 (SP1) Client Profile? That may help to reduce your installation requirements a little.

9
ответ дан 1 December 2019 в 01:05
поделиться

Вы можете использовать NGen, чтобы сделать ваше приложение собственным исполняемым файлом, но оно все равно будет зависеть от инфраструктуры .Net.

3
ответ дан 1 December 2019 в 01:05
поделиться

С помощью .net 3.5 SP1 можно установить меньшее подмножество .net framework. Взгляните на этот снимок экрана: Visual Studio Project properties
(источник: windowsclient.net )

6
ответ дан 1 December 2019 в 01:05
поделиться

NGen компилирует exes в родные exes, поэтому их не нужно компилировать JIT при запуске. Тем не менее, они все еще зависят от фреймворка.

Есть несколько коммерческих компаний, которые действительно предоставляют продукты для компиляции сборок .net в автономные exes. Xenocode и виртуальное ПО Thinapp . Но оба они не из дешевых.

3
ответ дан 1 December 2019 в 01:05
поделиться

Вам нужно будет установить только ту версию .NET, на которую вы нацеливаетесь, например .NET1.1 или .NET2.0

Правка : если вам нужно настроить таргетинг на версию 3.5, вам нужно будет установить и 2.0, и 3.5

ILMerge (бесплатно) может объединить несколько сборок в одну, но я не Я думаю, что он работает с ядром среды выполнения.

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

1
ответ дан 1 December 2019 в 01:05
поделиться

Некоторые обфускаторы делают это, но вам придется сделать это заранее (прежде, чем вы отправите это своим пользователям). Примером может служить Salamander remotesoft .

1
ответ дан 1 December 2019 в 01:05
поделиться

Вот коммерческий продукт, который утверждает, что это делает здесь:

http://www.xenocode.com/Obfuscator/

«Развертывайте приложения .NET безопасно, без установки .NET Framework»

Не знаю, какие у этого могут быть недостатки

1
ответ дан 1 December 2019 в 01:05
поделиться

ThinApp (ранее Thinstall) от vmware. Раньше он был очень дорогим.

http://www.vmware.com/products/thinapp/

1
ответ дан 1 December 2019 в 01:05
поделиться

Единственным продуктом, который мы разработали для решения этой проблемы в 2007 году, был Xenocode Postbuild . С тех пор мы успешно используем этот продукт, а также его неплохие возможности виртуализации.

Единственная проблема заключается в том, что приобретенная нами версия не поддерживает Windows 7 (где вам не нужно устанавливать .NET framework для запуска вашей программы, скомпилированной с версией <4.0). Я написал в Xenocode. Они ответили

. Чтобы получить поддержку Win 7, вам следует перейти на последнюю версию Postbuild (теперь она называется .NET Obfuscator ). Win 7 не поддерживается платформой для Postbuild 2007.

1
ответ дан 1 December 2019 в 01:05
поделиться
Другие вопросы по тегам:

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