是否可以将C#4.0与目标框架设置为.NET 3.5一起开发ArcMap 9.3的扩展?还是必须是C#3.0或更早版本?
是否可以将C#4.0与目标框架设置为.NET 3.5一起开发ArcMap 9.3的扩展?还是必须是C#3.0或更早版本?
Answers:
简短的答案:根据我的经验,只要您明确地将.NET Framework 3.5作为目标,那么在Visual Studio 2010(使用C#语言版本4)中为ArcGIS 9.3开发基于.NET 3.5的代码就绝对没有问题。C#语言版本在这里几乎无关紧要。
PS:这个答案并没有解决为版本9.3和10开发ArcGIS扩展之间存在的差异。(ESRI对加载项模型进行了许多重大更改,但是我假设您已经意识到了这一点。 )
更长的答案:您需要区分C#语言版本和目标Framework版本。
您可以认为.NET Framework由两个主要部分组成:CLR(公共语言运行时)和BCL(基类库)。前者是“虚拟机”,而后者是类库(包含您可以在MSDN上查找的所有类型)。
直到3.5的.NET Framework 2都使用相同的CLR(版本2),也就是说,执行环境尚未真正演变。但是,已经发展了BCL。如果您在.NET 2机器上运行.NET 3.5应用程序,则主要问题不是“字节码”(CIL)不兼容(不会),而是该应用程序可能引用并使用.NET 2 BCL中尚不可用的类型。
现在,当您告诉Visual Studio 2010以.NET Framework 3.5为目标时,它将确保您不会使用任何更高版本的Framework中的BCL类型。它还将确保C#编译器输出的代码将不需要仅在CLR版本4中可用的功能。
C#语言版本与此无关。C#编译器实际上所做的是获取源代码并将其转换为称为CIL(通用中间语言)的底层编程语言。某些C#语言结构将不再是识别在CIL:例如,yield return
并且yield break
不要在CIL不存在。它们可以简单地转换为实现IEnumerator<T>
接口。
总结一下:编译代码后,C#语言版本就变得无关紧要。什么是重要的是...
输出的CIL /“字节码”是否与目标.NET Framework兼容(如果目标为.NET 3.5,则由于上述原因,它甚至与.NET 2也兼容);和
您的代码是否引用/利用了目标框架中可用的类型。
一个显着的例外(就某种意义上来说,C#语言构造需要特定版本的框架;这是IIRC引入泛型的最后一种情况)可能是C#关键字dynamic
。它可能会被编译为需要System.Dynamic
名称空间中的类型的代码,该名称空间仅从.NET 4开始可用。但是不用担心:如果您已将Visual Studio 2010项目设置为以.NET 3.5为目标,则应该获得一个。如果您尝试使用特定的.NET Framework版本不可用或不兼容的东西,则会发生编译器错误。
请记住,VS2010不支持9.3开发的IDE。您将不会获得任何程序集引用,帮助或模板集成。
您可以通过某种方式使其起作用:http : //forums.arcgis.com/threads/29935-VS2010-with-version-9.3.1