Condividi tramite


Scelta di versioni specifiche di .NET Framework con MSBuild

Aggiornamento: novembre 2007

Visual Studio 2008 e MSBuild 3.5 consentono l'indirizzamento a più versioni di .NET Framework (versioni 2.0, 3.0 e 3.5) quando si creano o si compilano progetti. Questa funzionalità viene denominata destinazione multipla. In MSBuild, la destinazione multipla è resa possibile dall'utilizzo di un nuovo attributo denominato ToolsVersion in Elemento Project (MSBuild).

Set di strumenti, framework di destinazione e ToolsVersion

Per comprendere il funzionamento di MSBuild con Visual Studio 2008, è necessario conoscere la differenza tra un set di strumenti e un framework di destinazione e il rapporto tra ciascuno e il nuovo attributo ToolsVersion. Tali strumenti vengono utilizzati per determinare come vengono compilati i progetti da MSBuild 3.5.

Set di strumenti

Un set di strumenti è un insieme corrispondente di attività di MSBuild, destinazioni MSBuild e strumenti installati con MSBuild e .NET Framework. Un set di strumenti include compilatori come csc.exe e vbc.exe, il file di destinazioni comuni (microsoft.common.targets) e il file delle attività comuni (microsoft.common.tasks). Il set di strumenti 3.5 può essere utilizzato con il set di strumenti di .NET Framework versioni 2.0 e 3.0. Il set di strumenti 2.0, tuttavia, può essere utilizzato solo con .NET Framework di destinazione versione 2.0.

Visual Studio 2008 installa .NET Framework 3.5 che include due set di strumenti predefiniti: uno per .NET Framework 2.0 e uno per .NET Framework 3.5. Per .NET Framework 3.0, incluso in Windows Vista, non è definito alcun set di strumenti. Il set di strumenti di .NET Framework 2.0 può avere come destinazione solo .NET Framework 2.0, mentre il set di strumenti di .NET Framework può avere come destinazione .NET Framework versioni 2.0, 3.0 o 3.5.

È inoltre possibile creare set di strumenti personalizzati. Per ulteriori informazioni, vedere Configurazioni standard e personalizzate del set di strumenti.

Framework di destinazione

Un framework di destinazione è una versione particolare di .NET Framework per la quale il progetto è stato compilato appositamente. È necessario perché attiva funzionalità del compilatore esclusive per la versione di .NET Framework 2.0 o fa riferimento ad assembly disponibili solo in quella versione del framework.

Attualmente sono disponibili tre versioni di .NET Framework utilizzabili in Visual Studio 2008:

  • .NET Framework 2.0 (incluso in Visual Studio).

  • .NET Framework 3.0 (incluso in Windows Vista).

  • .NET Framework 3.5 (incluso in Visual Studio 2008).

Anche se sono disponibili tre versioni di .NET Framework diverse, tutte sono basate sullo stesso Common Language Runtime (CLR) sottostante versione 2.0 incluso in Visual Studio 2005.

La versione del framework di destinazione è specificata nel file di progetto tramite la proprietà TargetFrameworkVersion. In Visual Studio questo valore viene impostato quando si passa dalla versione del framework di destinazione tramite l'ambiente di sviluppo integrato (IDE). Per ulteriori informazioni, vedere Procedura: scegliere una versione specifica di .NET Framework. I valori possibili per TargetFrameworkVersion sono v2.0, v3.0 e v3.5. È specificata come proprietà di MSBuild, ad esempio:

<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

Attributo ToolsVersion

La versione del set di strumenti può essere specificata dall'attributo ToolsVersion in Elemento Project (MSBuild) nel file di progetto. Nell'esempio riportato di seguito viene indicato che il progetto deve essere compilato utilizzando il set di strumenti di .NET Framework 2.0 2.0:

<Project ToolsVersion="2.0" ... </Project>

Quando si compila una soluzione o un progetto dalla riga di comando, la specifica di ToolsVersion per msbuild.exe comporta che tutti i progetti e le dipendenze tra progetti siano compilati secondo tale ToolsVersion, anche se ogni progetto nella soluzione indica un ToolsVersion specifico in Elemento Project (MSBuild).

Differenze tra le versioni di .NET Framework

Tutte e tre le versioni di .NET Framework sono basate sulla versione 2.0 di CLR. Le versioni di .NET Framework differiscono l'una dall'altra nell'elenco di assembly disponibile in ciascuna come riferimento per i progetti. Ad esempio, LINQ è una tecnologia nuova inclusa in Visual Studio 2008. ..NET Framework 3.5 è l'unica versione di .NET Framework che dispone di assembly correlati a LINQ. Pertanto, non è possibile utilizzare LINQ a meno che il progetto non sia specificamente destinato a .NET Framework 3.5. Analogamente, Windows Presentation Foundation (WPF) è incluso in Windows Vista. Non è possibile compilare applicazioni WPF a meno che il progetto non sia destinato a .NET Framework 3.0 e versioni più recenti di .NET Framework.

Per ulteriori informazioni, vedere Configurazioni standard e personalizzate del set di strumenti.

Individuazione del set di strumenti per i progetti

Per creare un progetto, Visual Studio 2008 richiede un set di strumenti. MSBuild individua destinazioni e attività utilizzando la proprietà $(MSBuildToolsPath). Ad esempio, MSBuild trova il file Microsoft.CSharp.targets utilizzando l'elemento XML seguente:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 

Microsoft.CSharp.targets è un esempio di un processo di compilazione specifico del linguaggio utilizzato da Visual Studio 2008 per la compilazione di progetti Visual C#. $(MSBuildToolsPath) viene risolto al percorso della versione appropriata di .NET Framework dove Microsoft.CSharp.targets viene installato (ad esempio, C:\Windows\Microsoft.Net\Framework\v2.0.50727).

Prima che il set di strumenti di MSBuild 3.5 possa compilare il progetto, è necessario risolvere $(MSBuildToolsPath) al percorso di installazione di MSBuild 3.5 in modo che il set di strumenti importi la versione Visual Studio 2008 di Microsoft.CSharp.targets.

A seconda di ToolsVersion, $(MSBuildToolsPath) ottiene un valore diverso, in modo che venga importato un set di strumenti diverso in base al valore di ToolsVersion. Questo sistema flessibile consente al progetto, all'host MSBuild, o all'utente di specificare il set di strumenti da utilizzare per la compilazione di un progetto e anche di specificare l'utilizzo delle informazioni sul percorso da parte di MSBuild per scegliere il set di strumenti corretto.

Funzionamento dell'attributo ToolsVersion

Quando si crea un progetto nuovo, o si aggiorna un progetto esistente in Visual Studio 2008, nel file di progetto viene incluso automaticamente un attributo denominato ToolsVersion che viene impostato su un valore predefinito di "3.5". Per ulteriori informazioni, vedere Scelta di una versione specifica di .NET Framework.

Un valore ToolsVersion definito in un file di progetto viene utilizzato da MSBuild per determinare i valori per $(MSBuildToolsPath) (o $(MSBuildBinPath)) che è il percorso degli strumenti di MSBuild. Se non viene definito un valore ToolsVersion, MSBuild continua a utilizzare il percorso del set di strumenti precedente perché si presuppone che si tratti di un progetto di Visual Studio 2005.

Se si apre un progetto Visual Studio 2005 esistente in Visual Studio 2008, il progetto viene fisicamente aggiornato in modo che includa "ToolsVersion=3 .5" poiché Visual Studio 2008 supporta solo la compilazione con il set di strumenti 3.5. Di conseguenza, quando si compila il progetto in Visual Studio 2008, verrà utilizzato il set di strumenti (3.5) di Visual Studio 2008 anziché il set di strumenti (2.0) di Visual Studio.

I progetti creati utilizzando il set di strumenti 2.0 possono essere destinati a .NET Framework 2.0 e i progetti creati utilizzando il set di strumenti 3.5 possono essere destinati alle versioni 2.0, 3.0 o 3.5 di .NET Framework. Anche se è stata eseguita la migrazione di un progetto di Visual Studio a Visual Studio 2008 ed è stato aggiornato per l'utilizzo del set di strumenti 3.5, il framework di destinazione per il progetto continuerà a essere .NET Framework 2.0. In tal modo si garantisce che quando si esegue la migrazione del progetto a Visual Studio 2008, non verranno introdotte nuove dipendenze. Il progetto continua a essere compilato esattamente come in Visual Studio.

Nota:

Se ToolsVersion è già definito in un progetto, Visual Studio 2008 non modificherà il valore. Il valore ToolsVersion può essere sottoposto a override. Per ulteriori informazioni, vedere Override delle impostazioni ToolsVersion.

Compatibilità di Visual Studio 2005 e MSBuild 3.5

In Visual Studio 2005 non è possibile aprire o compilare progetti Visual Studio 2008, o progetti aggiornati a Visual Studio 2008. Il set di strumenti di MSBuild 2.0, tuttavia, è forse in grado di compilare il progetto Visual Studio 2008 se non sono state utilizzate nuove funzionalità specifiche del set di strumenti di Visual Studio 2008, ad esempio LINQ, nuove funzionalità di sintassi di Visual C# 2008 o Visual Basic 2008 e così via.

Vedere anche

Concetti

Override delle impostazioni ToolsVersion

Configurazioni standard e personalizzate del set di strumenti