使用Maven进行C#项目管理

问题描述 投票:19回答:7

有没有人有使用Maven管理基于C#的项目的经验?

如果是的话,请告诉我一些关于它的话,创建这样的设置有多奇怪。

谢谢

c# maven-2
7个回答
26
投票

Maven与语言无关,应该可以将它与Java之外的其他语言一起使用,包括C#。例如,Maven Compiler Plugin可以配置为使用csharp编译器。还有一个.NET Maven plugin,在javaforge.com上有一个maven-csharp(似乎死了)。

但是Java受到了最多的关注和人力,而其他语言并没有做太多。因此,虽然在理论上使用Maven和C#是可能的,但我不希望社区提供太多的支持和反馈(即如果遇到问题,你会独自一人)。我不知道是否使用Maven for C#是个好主意。我实际上不推荐它(当然我可能是错的)。


14
投票

我使用一套C#和C ++组件以及通过maven依赖管理的应用程序。一般规则“如果它可以通过命令行完成,它可以在maven中完成”持有,所以我们最终有很多.bat,.exe和powershell“粘合”来让所有部分一起玩。

将maven用于Microsoft堆栈的最大问题是完全不熟悉任何新开发人员的构建/部署/ ALM周期。您可以找到许多具有MSBuild,TFSBuild,ANT等经验的开发人员,但是在纯粹的微软商店中找到与maven合作的C#或C ++开发人员是一件罕见的事情。因此,推出依赖管理和构建过程的maven是非常困难的,因为你最终花了很多时间培训开发人员(快照和发布之间有什么区别?),过度组件化产品然后缩小它以获得它是正确的等等

我还发现,我们必须围绕maven工作,做一些类似于持续集成和持续交付的事情。我们大约70%的技术堆栈是C#(其余的是C ++),我们希望每晚都使用最新和最好的代码将大部分技术部署到QA服务器上。为了通过快照平衡发布版本与开发生产力的价值,我们最终构建了一个构建过程,我们每晚创建每个组件的发布版本,然后创建快照。这让开发人员不必担心在早上碰到POM以消耗快照。总的来说,这是一个皇家的痛苦,至少对于那些来自强大的持续集成,“构建和部署一切”环境的人来说。

Maven在依赖管理和隔离突破性变化方面拥有很多承诺(特别是在消费者和生产者必须同意的界面组件中)。这些问题已经通过其他方式解决(svn externs,部署版本,界面版本管理等)。但下载任何组件,运行“mvn compile”,并查看代码编译(假设基本级别的构建可移植性)相对比较好。但对我来说,关于获得正确构建的开销和元对话(而不是关注客户价值)可以最大限度地降低整个maven的价值。


6
投票

对于.NET Core,您可以使用驱动dotnet-maven-plugindotnet命令的nuget,以及添加对例如<project> [...] <packaging>dotnet</packaging> [...] <build> <plugins> <plugin> <groupId>org.eobjects.build</groupId> <artifactId>dotnet-maven-plugin</artifactId> <version>0.11</version> <extensions>true</extensions> </plugin> </plugins> </build> [...] </project> NPanday命令的支持。以“Maven方式”清洁,释放等。

这是一个示例插件配置:

pom.xml

(注意包装类型设置为dotnet)。

然后,这将从project.json文件中读取并根据maven生命周期阶段运行dotnet和nuget命令,例如清理,编译,测试,安装等。


4
投票

您也可以查看NMaven(这是我参与的项目)。虽然它仍然需要一些工作来更紧密地与Maven的最佳实践保持一致,但它现在是最完整和最活跃的替代方案。它独有的一个特性是存在一个Visual Studio外接程序,用于从IDE生成正确的maven for .NET


0
投票

在codeplex有一个DroidIn.net项目,但似乎没有活跃或流行。另见这些问题:


0
投票

使用plexus-compiler-csharp的maven-compiler-plugin可以正常使用以下配置。当然,您必须使用“executable”参数指向计算机上的实际C#编译器。

qazxswpoi

0
投票

看看这个:qazxswpoi

当我开发那些脚本/解决方案时,我不知道这样的csharp支持来自Maven,但我建议使用Maven进行构建,因为它使您能够自动化/编排所有内容,例如IIS + ActiveMQ + MongoDB启动预集成测试阶段,然后我们可以使用vstest运行测试。更不用说您可以将它与Jenkins集成并在远程计算机上运行构建。

我个人推荐它,但请记住,有时你会面临一些挑战。

© www.soinside.com 2019 - 2024. All rights reserved.