【发布时间】:2010-02-17 13:42:03
【问题描述】:
任何人都有使用 Maven 管理基于 C# 的项目的经验?
如果是,请告诉我几句话,创建这样的设置会有多奇怪。
谢谢
【问题讨论】:
任何人都有使用 Maven 管理基于 C# 的项目的经验?
如果是,请告诉我几句话,创建这样的设置会有多奇怪。
谢谢
【问题讨论】:
Maven 与语言无关,它应该可以与 Java 以外的其他语言一起使用,包括 C#。例如,Maven Compiler Plugin 可以配置为使用csharp 编译器。在 javaforge.com 上还有一个 .NET Maven plugin 和一个 maven-csharp(似乎已经死了)。
但是 Java 得到了最多的关注和人力,而其他语言并没有做太多的事情。因此,虽然理论上可以将 Maven 与 C# 一起使用,但我不希望社区提供太多支持和反馈(即,如果出现问题,您将独自一人)。我不知道将 Maven 用于 C# 是否是一个好主意。实际上我不会推荐它(当然我可能错了)。
【讨论】:
我使用一组通过 maven 进行依赖管理的 C# 和 C++ 组件和应用程序。 “如果可以通过命令行完成,则可以在 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 和 nuget 命令的 dotnet-maven-plugin,并添加对例如以“Maven 方式”进行清理、释放等。
这是一个示例插件配置:
<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>
(注意打包类型设置为 dotnet)。
然后这将从 project.json 文件中读取并根据 maven 生命周期阶段(例如清理、编译、测试、安装等)运行 dotnet 和 nuget 命令。
【讨论】:
您还可以查看NPanday(这是我参与的一个项目)。虽然它仍然需要一些工作来更紧密地与 Maven 的最佳实践保持一致,但它是目前可用的最完整和最活跃的替代方案。它的一项独特功能是存在一个 Visual Studio 插件,用于从 IDE 生成正确的pom.xml。
【讨论】:
codeplex 有一个NMaven 项目,但它似乎并不活跃或不受欢迎。另请参阅以下问题:
【讨论】:
带有 plexus-compiler-csharp 的 maven-compiler-plugin 在以下配置下工作得很好。当然,您必须使用“可执行”参数指向您机器上的实际 C# 编译器。
<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>
【讨论】:
看看这个:http://interfaceable.blogspot.com/2019/01/how-to-mavenize-visual-studio-project.html
在我开发这些脚本/解决方案时,我不知道 Maven 存在这样的 csharp 支持,但我建议使用 Maven 进行构建,因为它使您能够自动化/编排所有内容,例如 IIS + ActiveMQ + MongoDB 带来 -在预集成测试阶段,然后我们可以使用 vstest 运行测试。更不用说您可以将它与 Jenkins 集成并在远程机器上运行您的构建。
我个人推荐它,但请记住,您有时会面临一些挑战。
【讨论】: