为什么.NET中不需要Maven?

jba*_*ndi 72 .net build-automation build-process maven-2 build

我的印象是,在.NET世界中,并不需要像Maven这样的工具.

我知道有Byldan和NMaven(它还活着吗?),但我还没有看到使用它们的真实项目.

同样在我工作的大多数.NET项目中,从未有人表示需要类似Maven的工具.Maven maven正在解决的问题(自动依赖解析,基于约定的构建结构......)似乎在.NET中并不那么重要.

我的看法是否正确?

为什么会这样?

人们在.NET中真正使用的是什么?根本没有自动依赖解决方案?

他们在编写自己的构建工具吗?

是否有人使用Maven来管理他们的.NET项目?这是一个不错的选择吗?

你有什么经历?

8DH*_*8DH 37

对于工件依赖性解析,我会说Nuget现在是首选替代方案.它支持并促进构建时间解析,即无需将二进制依赖项工件检入vcs.请参阅这些 文章.

从Nuget的2.7版本开始,构建时间解析具有更好的支持,命令Nuget restore是其中一个选项.

更新: 现在有一个替代的,nuget兼容的包管理器可用 - Paket在处理瞬态依赖关系和协调同一解决方案中项目之间的依赖关系时比vanilla nuget客户端更好.工具似乎也很成熟(用于CI的VS集成和命令行工具)

  • Nuget是必经之路。毫无疑问。 (2认同)

kro*_*old 23

Maven正在被apache项目推动,这是巨大的 Java开源基础架构的核心部分.maven的广泛采用必须与此相关,目前的成熟度(质量)也非常好.

我不认为.NET开源世界有任何非常大的开源参与者来推动这样一个概念.不知怎的,.NET似乎总是等待redmond来做这些事情.

  • 那是因为在MS世界中,如果你建立自己的工具并且它很好,那么MS很可能会在一两年内推出类似的工具,人们将停止使用你的工具.(正如乔尔·斯波尔斯基所说的那样,"如果你能写出起飞的东西,你可能会发现你只是在为微软做市场研究.") (44认同)
  • 如果一个开源项目已经构建了一个社区需要的工具,那么不,MS构建一个等效的工具来替换它并不是所需要的.在最坏的情况下,除了确保MS拥有所有东西之外,这是一个重复的努力,没有明显的目的.更合适的是,MS指派一些付费开发人员为开源项目做出贡献.但是,自从我之前发表评论之后,看起来MS已经认真努力在开源社区中发挥更好的作用,我对此表示赞赏.我希望这种关系在未来几年会继续改善. (9认同)
  • @ NateC-K,这不是一件好事吗?这样一个残酷的世界.如果ms没有做这样的事情,有一个教派抱怨它没有做,而当ms实际上采取了适当的有意义的项目并开始投入努力和资源,即使它被嘲笑,也不是社区需要的,适当的工具通过这些东西,开发生态系统将集体增长 (5认同)

Tin*_*nku 19

虽然问题很老,但这是我的想法.Maven不仅仅是一个构建工具,它比存储库管理,项目管理,依赖管理,构建管理等更多......

但在我看来,主要的吸引力是依赖管理.JAR地狱从一开始就是Java Land中的一个大问题,你需要一些工具来应对它.在.Net世界中没有这样的问题(实际上没有DLL地狱被宣传为.Net的最初几天的主要吸引力)所以大多数人都对MSBuild很好.后来由于许多第三方库的可用性,存在管理问题.为了摆脱这个问题,他们现在有了Nuget.

所以简而言之,MsBuild + Nuget在.Net世界中对于大部分项目来说已经足够了,Maven对他们来说太过分了.


小智 14

我同意这里的很多答案..NET没有大量的独立IDE,您使用Visual Studio编写代码,管理依赖项等.VS中的解决方案对于MSBuild来说已经足够了,因此您可以从构建服务器中使用它.

另一方面,Java发展了许多IDE,而Java则从IDE管理外部项目.释放开发人员以使用他们选择的IDE.我最近开始从C#到Java的交叉培训,我可以告诉你maven构建概念是非常陌生的,但过了一段时间我喜欢它,更重要的是我看到repo概念为我提供了什么.

现在,VS托管依赖项如何要求您添加项目引用或对DLL的引用.添加DLL引用是有缺陷的.如何管理版本的更改,如何构建来自外部和内部源的第三方dll以及您希望从您自己的团队中包含但不作为项目参考的dll.我已经基于文件的目录结构做了很多解决方案,但是没有一个是优雅的,或者在版本更改时很好.也使分支变得困难,因为这会成为构建目录的一个考虑因素.

现在我已经使用Java和公共mavan repos,非常酷.我已经使用Python和pip安装有效地再次从公共回购中提取.最后我在VS 2015中再次使用C#做了一些东西,与Nuget的集成正是缺少的.

现在在企业环境中,公共回购并不总是可以直接访问,因此您需要企业回购.非Microsoft生态系统再次领先于此.

基本上总结Java是从一个更加开放的源环境演变而来的,在这个环境中没有使用IDE项目维护,而.NET是从管理项目的Visual Studio发展而来的,而这些不同的路径意味着repo后来将进入Visual Studio.

最后,这是我的观察,Java社区倾向于使用其他人的框架,因为Java基础库提供的更少.而.NET的人会编写更多自己的代码.java社区有一个更大的模式和实践生态系统,而.NET再次编写自己的代码或等待微软.这种情况正在发生变化,但再次表明为什么.NET在repos的需求方面落后于Java.


Kam*_*oij 5

我们正在使用NAnt,因为没有成熟的替代方案.同时处理多个项目,我们已经解决了多个版本的库以及如何处理它们的问题.Maven主张非常有前途,但还不够成熟,无法在.NET平台上发挥作用.

我认为需求不那么明显,因为大多数.NET项目都使用Visual Studio,它自动建议/强制执行目录结构,依赖项等.这是一种误导性的"解决方案",因为依赖于这些约定的IDE限制了开发团队的灵活性,并锁定了特定的解决方案和供应商.这显然不是Java世界中的情况,因此明显需要类似Maven的工具.