在制作 .NET 应用程序时,我经常发现自己使用多种编程语言。通常 C++/CLI 用于与遗留代码的互操作,而 C# 用于其余代码。
随着对 F# 作为一流语言的支持,我可以看到自己也将其混入其中。
但是使用多种语言的唯一方法仍然是为每种语言设置一个项目吗?Visual Studio 2010 对此有什么改进的支持吗?还有其他解决方案吗?
在制作 .NET 应用程序时,我经常发现自己使用多种编程语言。通常 C++/CLI 用于与遗留代码的互操作,而 C# 用于其余代码。
随着对 F# 作为一流语言的支持,我可以看到自己也将其混入其中。
但是使用多种语言的唯一方法仍然是为每种语言设置一个项目吗?Visual Studio 2010 对此有什么改进的支持吗?还有其他解决方案吗?
我不相信 VS2010 在单个项目中支持多种语言,如果这是您的要求。老实说,我认为这将相当棘手。您可能在不同语言之间存在循环依赖关系,因此您不能只调用一个又一个编译器 - 我怀疑它们必须在相当深的层次上进行合作。虽然我敢说这在技术上是可行的,但我认为这将比附加值更多。
我真的很想知道通过为一个产品混合如此多的语言,您实际上获得了什么。C# 有一些非常好的互操作能力,通常只有在最极端的情况下才需要 C++。在 .NET 1.1 时代的一个实例中,我需要在我的应用程序中使用 Windows XP 主题,但我从来不需要使用 C++ 进行互操作。
至于 F#,它是一门很棒的语言,但我认为它仍然有一席之地。多年来,C# 已经发展到囊括了所有领域中的佼佼者,包括函数式和动态语言特性。除非您真的需要 F# 的原始功能,否则我认为从一般编程的角度来看,C# 提供了足够的功能来满足您的需求。
确保您真正从混合多种语言中受益。一个好处超过了增加项目复杂性的成本、开发人员理解所有三种语言的要求、使用三种语言的额外维护成本等等。我认为总的来说这是一个很难卖的东西。如果可以,请使用一种语言,并且仅在 C# 确实、确实无法为您提供解决方案的极端情况下使用替代语言。如果您正在编写一个真正需要 F# 的应用程序,请用 F# 编写整个内容。
至于VS2010每个项目支持多语言,我没听说过这个功能。我认为在 UI 中支持这样的东西是非常困难的,而且启动起来很混乱。我也没有听说过任何提供该功能的插件,我使用过 ReSharper、SlickEdit 等。
对此有一个功能请求。在实现之前,Scott Hanselmann 描述的 hack值得考虑。TL;DR:您为每种语言创建单独的项目,然后使用ILMerge(通过 MSBuild)将它们组合成一个程序集文件。