Posso usare C # 4.0 con il framework di destinazione impostato su .NET 3.5 per sviluppare un'estensione per ArcMap 9.3? O deve essere C # 3.0 o precedente?
Posso usare C # 4.0 con il framework di destinazione impostato su .NET 3.5 per sviluppare un'estensione per ArcMap 9.3? O deve essere C # 3.0 o precedente?
Risposte:
Risposta breve: Nella mia esperienza, non dovrebbe esserci assolutamente alcun problema nello sviluppo di codice basato su .NET 3.5 per ArcGIS 9.3 in Visual Studio 2010 (con linguaggio C # versione 4), purché si scelga esplicitamente il .NET Framework 3.5. La versione in linguaggio C # è per lo più irrilevante qui.
PS: Questa risposta non va nelle differenze esistenti tra lo sviluppo di un'estensione ArcGIS per le versioni 9.3 e 10. (ESRI ha apportato alcune modifiche importanti al modello di componente aggiuntivo, ma suppongo che tu ne sia consapevole .)
Risposta più lunga: è necessario distinguere tra la versione del linguaggio C # e la versione del framework di destinazione.
Puoi pensare a .NET Framework come costituito da due parti principali: CLR (Common Language Runtime) e BCL (Base Class Library). La prima è la "macchina virtuale", mentre la seconda è la libreria di classi (contenente tutti i tipi che è possibile cercare su MSDN).
.NET Frameworks 2 fino alla 3.5 utilizzano tutti lo stesso CLR (versione 2), ovvero l'ambiente di esecuzione non si è davvero evoluto. Ciò che si è evoluto, tuttavia, è il BCL. Se stai eseguendo un'applicazione .NET 3.5 su una macchina .NET 2, il problema principale non sarà che il "bytecode" (CIL) sarà incompatibile (non lo farà), ma che l'applicazione potrebbe fare riferimento e utilizzare tipi che non erano ancora disponibili in .NET 2 BCL.
Ora, quando dici a Visual Studio 2010 come target di .NET Framework 3.5, ti assicurerai che non utilizzerai i tipi BCL da nessuna versione successiva di Framework. Si assicurerà inoltre che il codice generato dal compilatore C # non richieda funzionalità disponibili solo nella versione 4 di CLR.
La versione in linguaggio C # ha ben poco a che fare con tutto questo. Cosa fa davvero il compilatore C # per prendere il tuo codice sorgente e tradurlo in un linguaggio di programmazione di livello molto basso chiamato CIL (Common Intermediate Language). Alcuni costrutti del linguaggio C # non saranno più riconoscibili in CIL: ad esempio, yield return
e yield break
non esistono in CIL. Sono semplicemente tradotti in implementazioni IEnumerator<T>
dell'interfaccia.
Per riassumere: la versione del linguaggio C # diventa irrilevante non appena il codice viene compilato. Ciò che è importante è ...
se l'output CIL / "bytecode" è compatibile con .NET Framework di destinazione (se si sceglie .NET 3.5, sarà compatibile anche con .NET 2 per i motivi sopra menzionati); e
se il codice fa riferimento / utilizza i tipi disponibili nel framework di destinazione.
Una notevole eccezione (nel senso che un costrutto del linguaggio C # richiede una versione particolare del framework; questo è stato l'ultimo caso in cui sono stati introdotti i generici IIRC) potrebbe essere la parola chiave C # dynamic
. Potrebbe essere compilato per codice che richiede tipi dallo System.Dynamic
spazio dei nomi, che è disponibile solo da .NET 4. Ma non preoccuparti: se hai impostato il tuo progetto Visual Studio 2010 per targetizzare .NET 3.5, dovresti ottenere un errore del compilatore se si sta tentando di utilizzare elementi non disponibili o compatibili con quella particolare versione di .NET Framework.
Tenere presente che VS2010 non è un IDE supportato per lo sviluppo 9.3. Non otterrai riferimenti di assemblaggio, aiuto o integrazione di modelli.
Puoi comunque farlo funzionare: http://forums.arcgis.com/threads/29935-VS2010-with-version-9.3.1