Posso usar o C # 4.0 com a estrutura de destino definida como .NET 3.5 para desenvolver uma extensão para o ArcMap 9.3? Ou precisa ser C # 3.0 ou anterior?
Posso usar o C # 4.0 com a estrutura de destino definida como .NET 3.5 para desenvolver uma extensão para o ArcMap 9.3? Ou precisa ser C # 3.0 ou anterior?
Respostas:
Resposta curta: Na minha experiência, não deve haver absolutamente nenhum problema no desenvolvimento de código baseado no .NET 3.5 para ArcGIS 9.3 no Visual Studio 2010 (com linguagem C # versão 4), desde que você tenha como alvo explícito o .NET Framework 3.5. A versão da linguagem C # é principalmente irrelevante aqui.
PS: Esta resposta não entra nas diferenças existentes entre o desenvolvimento de uma extensão do ArcGIS para as versões 9.3 e 10. (A ESRI fez algumas mudanças importantes no modelo de suplemento, mas presumo que você esteja ciente disso). .)
Resposta mais longa: você precisa distinguir entre a versão do idioma C # e a versão do Framework direcionada.
Você pode pensar no .NET Framework como sendo composto de duas partes principais: o CLR (Common Language Runtime) e o BCL (Base Class Library). A primeira é a "máquina virtual", enquanto a segunda é a biblioteca de classes (contendo todos os tipos que você pode procurar no MSDN).
Todos os .NET Frameworks 2 até 3.5 usam o mesmo CLR (versão 2), ou seja, o ambiente de execução realmente não evoluiu. O que evoluiu, no entanto, é o BCL. Se você estiver executando um aplicativo .NET 3.5 em uma máquina .NET 2, o principal problema não será que o "bytecode" (CIL) seja incompatível (não será), mas que o aplicativo poderá se referir e usar tipos que ainda não estavam disponíveis no .NET 2 BCL.
Agora, quando você instruir o Visual Studio 2010 a direcionar para o .NET Framework 3.5, ele garantirá que você não use tipos de BCL de nenhuma versão posterior do Framework. Ele também garantirá que o código gerado pelo compilador C # não exija recursos disponíveis apenas na versão 4 do CLR.
A versão da linguagem C # tem muito pouco a ver com tudo isso. O que o compilador C # realmente faz para pegar seu código-fonte e traduzi-lo para uma linguagem de programação de nível muito mais baixo chamada CIL (Common Intermediate Language). Determinadas construções de linguagem C # não serão mais reconhecíveis no CIL: por exemplo, yield return
e yield break
não existem no CIL. Eles são simplesmente traduzidos para implementações da IEnumerator<T>
interface.
Para resumir: A versão da linguagem C # se torna irrelevante assim que seu código é compilado. O que é importante é ...
se a saída CIL / "bytecode" é compatível com o .NET Framework de destino (se você direcionar o .NET 3.5, será compatível mesmo com o .NET 2 pelos motivos mencionados acima); e
se o seu código se refere / faz uso dos tipos disponíveis na estrutura de destino.
Uma exceção notável (no sentido de que uma construção da linguagem C # requer uma versão específica da estrutura; esse foi o último caso em que os genéricos foram introduzidos no IIRC) pode ser a palavra-chave C # dynamic
. Pode ser compilado para código que requer tipos do System.Dynamic
namespace, disponível apenas desde o .NET 4. Mas não se preocupe: se você configurou seu projeto do Visual Studio 2010 para direcionar o .NET 3.5, você deve obter um erro do compilador se você estiver tentando usar coisas que não estão disponíveis ou são compatíveis com essa versão específica do .NET Framework.
Lembre-se de que o VS2010 não é um IDE suportado para o desenvolvimento 9.3. Você não receberá referências de montagem, ajuda ou integração de modelos.
No entanto, você pode fazê-lo funcionar: http://forums.arcgis.com/threads/29935-VS2010-with-version-9.3.1