In questo articolo sono spiegate le funzionalità del compilatore C# 2. Le novità son poche, molte delle opzioni c'erano già prima. Tra questi una cosa non la conoscevo: i file .rsp.
Sono normalissimi files di testo che contengono tutti gli argomenti che normalmente passeremmo al compilatore. In questo modo possiamo fornire questi file insieme al nostro progetto e ber la compilazione basterà lancare:
csc @progetto.rsp
E' qualcosa di utile e comunque molto lontano da msbuild ma in alcuni può servire. Esiste già un file csc.rsp nella stessa directory del compilatore che viene "incluso" automaticamente e che referenzia quelli che sono i normali assembly solitamente usati.
Si può disattivare queste inclusione con l'opzione /noconfig.
La novità sono alias per gli assembly. Avrete senz'altro visto leggendo articoli su C# 2 l'uso del prefisso global::namespace.tipo per poter cercare un tipo partendo dal namespace di root e non da quello corrente. Per esempio:
using System;
class MyApp
{
public class System { }
const int Console = 7;
const int myInt = 66;
static void Main()
{
System.Console.WriteLine(myInt);
}
}
In questo caso sono presenti due tipi con il medesimo nome. System.Console dell'assembly System.dll che tutti conosciamo e System.Console dell'assembly corrente. Il compilatore prenderà come riferimento l'assembly corrente. Se volessimo accedere a System.dll dovremmo usare
global::System.Console.WriteLine(myInt);
Certo, bisogna evitare casi omonimia ma non si sa mai che possa servire. Queste funzionalità è più ampia però di quanto viene illustrata perché :: è un nuovo operatore per sfruttare gli alias.
Possiamo infatti dichiare nel nostro codice dei nomi per mappare un certo tipo ad un certo assembly:
extern alias tipo1;
extern alias tipo2;
tipo1::miaClasse.Qualcosa();
tipo2::miaClasse.Qualcosa();
In questo caso abbiamo un tipo miaClasse col medesimo namespace e metodo. Quindi sfruttiamo gli alias per riferirci ad uno o all'altro assembly.
Ovviamente in fase di compilazione dovremo dire di che assemblies si trattano:
csc /r:tipo1:assembly1.dll /r:tipo2:assembly2.dll
In pratica si può dire che global è un alias predefinito che mappa tutti gli assemblies.
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- LINQ, lazy loading e architettura, l'11 marzo 2011 alle 18:42
- MetadataDiffViewer: aggiornato al .NET Framework 4.0, Silverlight 4.0 e Sharepoint 2010, il 7 gennaio 2010 alle 13:58
- .NET Framework 4.0 beta 1: Windows Communication Foundation, il 18 maggio 2009 alle 16:00
- Parallelizzare in Silverlight 2.0, il 21 aprile 2009 alle 00:25
- Silverlight: performance dell'isolated storage, il 16 aprile 2009 alle 17:38
- MetadataDiffViewer: differenze tra i framework, il 15 aprile 2009 alle 18:56