2009-02-15 8 views

risposta

37

Fai una domanda caricata. C# è semplicemente un linguaggio e non richiede .NET Framework. Il processo di compilazione richiede un compilatore, che può o non può di per sé prendere una dipendenza da .NET Framework (il compilatore C# di Microsoft non lo fa - è scritto in codice nativo). Il tuo programma dovrà fare riferimento ad alcuni assembly in cui tipi, classi e metodi possono essere trovati per il tuo uso. È possibile can rimuovere system.dll e mscorlib.dll dall'elenco dei riferimenti e fare riferimento ai propri assembly. In questo modo è possibile evitare le dipendenze da .NET Framework se si lavora veramente su di esso. Ma alla fine, a meno che tu non abbia un compilatore C# che compila programmi in codice nativo, hai ancora una dipendenza dal CLR.

Questo è un modo molto tecnico di dire ... quasi nulla. Ma risponde alla tua domanda. :) Più praticamente utile, tuttavia, è come far funzionare i programmi C# con un minimo di dipendenze. mkbundle da mono in realtà ti consente di compilare tutto in un exe con praticamente nessuna dipendenza.

Ma se si vuole rimanere con il Microsoft .NET Framework, è possibile ottenere un ingombro molto più leggero e più veloce l'installazione delle dipendenze che sono comunemente utilizzate utilizzando il profilo del client di .NET 3.5 SP1. Puoi leggere qui: http://msdn.microsoft.com/en-us/library/cc656912.aspx

+0

molto informativo - grazie –

+0

Sto provando a fare la stessa cosa con Visual Studio, e mi viene detto che è impossibile. – muttley91

+0

Cos'è "questa stessa cosa"? Parlo di diverse opzioni qui. –

13

Vedere mkbundle utilizzando Mono.

+0

fresco Penso im gonna seguire questa strada - grazie! –

+0

Sono sicuro che c'era uno strumento per Windows che ho usato per farlo, un * lungo * tempo fa. Forse ILMerge? – configurator

+0

c'è un programma di installazione di Windows per il mono ide? ho trovato la fonte ma sto avendo difficoltà a localizzare un binario. avrei potuto semplicemente compilarlo ma mi dà più possibilità di rovinare qualcosa ... –

2

Non possibile. La tua applicazione C# compilata è un linguaggio che interpreta il .Net CLR (dovrebbe aver detto JIT, legge l'IL, compila il codice nativo e poi invoca il codice nativo compilato) in fase di runtime.

FYI .net 2.0 è un'installazione standard su xp SP2 e vista, quindi non pagherai più di una penalità.

Si potrebbe cercare in mono, ma ciò implica ancora l'esecuzione di una sorta di framework sul computer di destinazione.

+3

"La tua applicazione C# compilata è una lingua che il CLR .Net interpreta in fase di esecuzione." - spazzatura, non è vero La prima volta che un codice gestito viene eseguito su una determinata macchina, è JIT compilato nel codice nativo per quella macchina. C# non è mai interpretato. – tomfanning

+3

Qualcosa non va sugli internet. – Spence

+1

@tomfanning Ma hai ancora bisogno del CLR per eseguire il codice compilato, giusto? Quindi, se la prima volta che si esegue il bytecode, viene compilato JIT e anche nelle esecuzioni successive è gestito da CLR, cosa c'è di sbagliato nel dire che il CLR "interpreta (il codice) in fase di runtime"? –

5

Dai un'occhiata al profilo del client .NET. Ciò consentirà di impacchettare un'installazione minima sul computer client, che verrà successivamente aggiornata dall'aggiornamento di Windows all'intero framework.

Ciò dipende, naturalmente, dalla vostra applicazione utilizzando solo le librerie che sono contenuti nel profilo del cliente ...

Alcune informazioni qui: http://blogs.windowsclient.net/trickster92/archive/2008/05/21/introducing-the-net-framework-client-profile.aspx

5

Si dice che è possibile, utilizzando strumenti di terze parti come http://www.remotesoft.com/linker/

+0

Per un sito così orribilmente brutto che sembra un prodotto fantastico, specialmente se sei preoccupato per il furto di origine poiché l'offuscamento è quasi banale per un vero cracker. –

-2

Alcune funzionalità di C# sono legate alle interfacce del framework .NET.

Ad esempio:

yield return richiede l'interfaccia IEnumerable

using (x) {} richiede l'interfaccia IDisposable

+1

Questo non ha nulla a che fare con ciò che l'OP chiedeva. Ha chiesto informazioni sulla compilazione * statica * delle librerie .NET insieme al programma. –

+0

Bene, il titolo originale era "Puoi compilare C# senza usare il framework .Net?" – Rauhotz

0

Questa dipendenza che rompe purtroppo frequentemente o manca nel mondo reale è un grande motivo per cui C# non ha ha avuto un'adozione più ampia. Il rovescio della medaglia è che la maggior parte dello sviluppo ha delle dipendenze. Per esempio, guarda C++ & Java.

Non penso che in futuro dovremmo davvero scappare da questi problemi di dipendenza, quindi raccomando che se si desidera utilizzare C#, si crea un wrapper per l'installazione che verifica la dipendenza dalla versione di framework .net necessaria e se manca, informa l'utente che ne ha bisogno per eseguire la tua app.

6

Ora è possibile compilare C# in codice nativo utilizzando Microsoft .NET nativo: https://msdn.microsoft.com/en-us/library/dn584397(v=vs.110).aspx

Si compila automaticamente la versione di rilascio di applicazioni che sono scritti nel codice gestito (C# o Visual Basic) e che indirizzare .NET Framework e Windows 10 al codice nativo.

...

Per gli utenti delle tue applicazioni, .NET nativo offre questi vantaggi:

• tempi di esecuzione rapidi

• tempi di avvio veloci Coerentemente

• Bassi costi di implementazione e aggiornamento

• utilizzo della memoria ottimizzata app

Questo funziona solo con Visual Studio .NET 2015.

+0

Funziona solo in UWP – Cooper

Problemi correlati