有没有人有使用Maven管理基于C#的项目的经验?
如果是的话,请告诉我一些关于它的话,创建这样的设置有多奇怪。
谢谢
Maven与语言无关,应该可以将它与Java之外的其他语言一起使用,包括C#。例如,Maven Compiler Plugin可以配置为使用csharp
编译器。还有一个.NET Maven plugin,在javaforge.com上有一个maven-csharp(似乎死了)。
但是Java受到了最多的关注和人力,而其他语言并没有做太多。因此,虽然在理论上使用Maven和C#是可能的,但我不希望社区提供太多的支持和反馈(即如果遇到问题,你会独自一人)。我不知道是否使用Maven for C#是个好主意。我实际上不推荐它(当然我可能是错的)。
我使用一套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的价值。
对于.NET Core,您可以使用驱动dotnet-maven-plugin和dotnet
命令的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命令,例如清理,编译,测试,安装等。
您也可以查看NMaven(这是我参与的项目)。虽然它仍然需要一些工作来更紧密地与Maven的最佳实践保持一致,但它现在是最完整和最活跃的替代方案。它独有的一个特性是存在一个Visual Studio外接程序,用于从IDE生成正确的maven for .NET。
在codeplex有一个DroidIn.net项目,但似乎没有活跃或流行。另见这些问题:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<compilerId>csharp</compilerId>
<fork>true</fork>
<executable>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe</executable>
<outputFileName>myDLL</outputFileName>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-compiler-csharp</artifactId>
<version>2.2</version>
</dependency>
</dependencies>
</plugin>
使用plexus-compiler-csharp的maven-compiler-plugin可以正常使用以下配置。当然,您必须使用“executable”参数指向计算机上的实际C#编译器。
qazxswpoi
看看这个:qazxswpoi
当我开发那些脚本/解决方案时,我不知道这样的csharp支持来自Maven,但我建议使用Maven进行构建,因为它使您能够自动化/编排所有内容,例如IIS + ActiveMQ + MongoDB启动预集成测试阶段,然后我们可以使用vstest运行测试。更不用说您可以将它与Jenkins集成并在远程计算机上运行构建。
我个人推荐它,但请记住,有时你会面临一些挑战。