【问题标题】:C# Project Management with Maven使用 Maven 进行 C# 项目管理
【发布时间】:2010-02-17 13:42:03
【问题描述】:

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

如果是,请告诉我几句话,创建这样的设置会有多奇怪。

谢谢

【问题讨论】:

    标签: c# maven-2


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我使用一组通过 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 的整体价值。

      【讨论】:

        【解决方案3】:

        对于 .NET Core,您可以使用驱动 dotnetnuget 命令的 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 命令。

        【讨论】:

        • 用一个例子更新了我的答案
        • 你可能想提及你写的。
        【解决方案4】:

        您还可以查看NPanday(这是我参与的一个项目)。虽然它仍然需要一些工作来更紧密地与 Maven 的最佳实践保持一致,但它是目前可用的最完整和最活跃的替代方案。它的一项独特功能是存在一个 Visual Studio 插件,用于从 IDE 生成正确的pom.xml

        【讨论】:

          【解决方案5】:

          codeplex 有一个NMaven 项目,但它似乎并不活跃或不受欢迎。另请参阅以下问题:

          【讨论】:

            【解决方案6】:

            带有 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>
            

            【讨论】:

              【解决方案7】:

              看看这个:http://interfaceable.blogspot.com/2019/01/how-to-mavenize-visual-studio-project.html

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

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2015-10-31
                • 2010-12-09
                • 2013-05-20
                • 2010-12-30
                • 1970-01-01
                • 2016-01-16
                • 2010-10-07
                • 2020-09-14
                相关资源
                最近更新 更多