【问题标题】:How to include multiple source files in C#如何在 C# 中包含多个源文件
【发布时间】:2019-07-06 05:26:20
【问题描述】:

我正在尝试从 C++ 背景学习 C#,但我不知道如何将两个源文件链接在一起。我有一个相对简单的程序叫做 test.cs 和一个 main.cs。我只想在 main.cs 中说:
#include <"test.cs">

我能想到的最接近的是:

<Compile Include="test.cs"/Compile>

但是编译器无法识别这一点。那么如何在我的 main 中包含多个源文件?

【问题讨论】:

  • C# 不需要链接。编译的结果是一个完整的程序集。
  • 如果您只有命令行工具可用,请查看此页面:microsoft.com/express,您可以在其中下载 Visual Studio(开发人员环境)的免费个人版本,然后编译 c# 将很容易。跨度>
  • 当我在使用 C++ 后第一次开始学习 C# 时,最让我难以理解的是你永远不需要 #include 代码这一事实。编译的类型解析发生在不止一次通过代码的过程中,因此源中的所有可见类型和引用程序集中的所有可见类型都可以作为类型解析的符号。不再需要显式强制包含类型,以便在使用它们之前定义类型。

标签: c#


【解决方案1】:

您将源文件列表传递给compiler

csc.exe /target:library source1.cs source2.cs

如果您在创建新的 .NET 项目时使用 Visual Studio,您可以根据需要添加任意数量的源文件,它们将被自动编译。

【讨论】:

  • 考虑到他有一个Main.cs,我假设他不想要/target:library 开关。我认为他应该使用/out:file.exe 开关。
【解决方案2】:

如果您在 Visual Studio 中构建它,那么只需将 2 个文件放在同一个项目中即可。

如果您在命令行上使用 csc 进行编译,您需要在调用 csc 时引用这两个文件。请参阅 Darin 对此的回复。

不需要从另一个文件引用一个文件,但使类型彼此可见的最简单方法是将每个文件中的类添加到同一个命名空间。

【讨论】:

    【解决方案3】:

    我也是 C# 新手。我在寻找从命令行编译 C# 时如何包含多个源文件的答案时发现了这个线程。但在我看来,目前的答案是不完整的。这是今天早上对我来说有意义的事情:

    你好.cs

    using System;
    
    namespace PartialClasses
    {
        class Program
        {
        static void Main(string[] args)
        {
            PartialClass pc = new PartialClass();
            pc.HelloWorld();
            pc.HelloUniverse();
        }
        }
    }
    

    PartialClass1.cs

    using System; 
    
    namespace PartialClasses
    {
        public partial class PartialClass
        {
            public void HelloWorld()
            {
                Console.WriteLine("Hello, world!");
            }
        }
    }
    

    PartialClass2.cs

    using System;
    
    namespace PartialClasses
    {
        public partial class PartialClass
        {
        public void HelloUniverse()
        {
            Console.WriteLine("Hello, universe!");
        }
        }
    }
    

    我正在使用Mono 来编译我的源文件。而且,到目前为止,我遇到的任何事情都没有告诉我需要做什么。

    经过一番挖掘,我发现了以下语法。

    首先,我想要 to create a library 我的部分课程。

    csc -target:library -out:myLibrary.dll Partial*.cs
    

    然后我想引用我刚刚在编译我的主程序时创建的那个库。我很幸运找到an example 演示了我需要的语法。

    csc -reference:.\myLibrary.dll hello.cs
    

    这对我有用。

    mono .\hello.exe
    Hello, world!
    Hello, universe!
    

    关于#include 指令,C# 中不需要它。我请读者参考上面丹·布莱恩特的评论。相反,保持你的类名和命名空间直截了当,并告诉编译器在哪里可以找到(你创建的)库。这就是 C# 中源文件之间的连接方式。

    还有MSBuild 用于.csproj 文件和更复杂的项目。但是,作为初学者,这超出了我的解释能力。

    感谢 The Complete C# Tutorial 提供我使用的代码。

    作为参考,我得到的csc hello.cs 的编译器错误是CS0246。那篇微软的文章有点帮助。 -reference (C# Compiler Options) 也是如此。

    【讨论】:

      【解决方案4】:

      源文件不需要相互了解。选项有:

      • 按照 Darin 的回答将两个文件一起编译
      • 将一个文件编译到类库中,并在编译另一个文件时添加对该库的引用

      这取决于您希望结果是一个程序集还是两个程序集。通常答案是将两者一起编译到同一个程序集中。

      【讨论】:

        【解决方案5】:

        如果您想将您的课程分成两个(或更多)源文件,您可以使用partial class definitions。因此,在您的情况下,main.cs 中有“class TheClass”,test.cs 中有“partial class TheClass”。这与#include 不一样,但我想已经足够接近了。

        【讨论】:

          【解决方案6】:

          我经常使用命令

          csc *.cs
          

          它尝试编译当前目录中的所有 .cs 文件。 我发现它是此类命令行编译最简单且最常用的方法,例如 javas

          javac *.java
          

          此外,您不必担心 Main() 所在的文件,它会自动检测入口点。

          【讨论】:

            猜你喜欢
            • 2013-10-06
            • 1970-01-01
            • 1970-01-01
            • 2020-06-18
            • 2010-11-28
            • 2021-01-06
            • 1970-01-01
            • 2010-09-18
            • 1970-01-01
            相关资源
            最近更新 更多