Как включить несколько исходных файлов в С#

Я пытаюсь изучить С#, исходя из фона С++, но я не могу понять, как связать два исходных файла вместе. У меня есть относительно простая программа, называемая test.cs и main.cs. Все, что я хочу сделать, это main.cs сказать:
  #include <"test.cs">.

Ближе всего я смог придумать следующее:

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

Однако компилятор не распознает это. Итак, как я могу включить несколько исходных файлов в мой основной?

Ответ 1

Вы передаете список исходных файлов в компилятор:

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

Если вы используете Visual Studio при создании нового .NET-проекта, вы можете добавить столько исходных файлов, сколько хотите, и они будут автоматически скомпилированы.

Ответ 2

Если вы создаете это в Visual Studio, то просто иметь 2 файла в одном проекте - это все, что вам нужно сделать.

Если вы компилируете в командной строке, используя csc, вы должны ссылаться на оба файла в вызове csc. См. Ответ Дарина для этого.

Нет необходимости ссылаться на один файл с другого, но самый простой способ сделать типы видимыми друг для друга - это добавить классы в каждый файл в одно и то же пространство имен.

Ответ 3

Исходные файлы не должны знать друг о друге. Возможные варианты:

  • Скомпилируйте оба файла вместе, в соответствии с ответом Дарина
  • Скомпилируйте один файл в библиотеку классов и добавьте ссылку на эту библиотеку при компиляции других

Это зависит от того, хотите ли вы, чтобы результат был одним или двумя. Обычно ответ заключался в том, чтобы скомпилировать их вместе в одну и ту же сборку.

Ответ 4

Если вы хотите разделить свой класс на два (или более) исходных файла, вы можете использовать определения частичного класса. Итак, в вашем случае у вас есть "класс TheClass" в main.cs и "partial class TheClass" в test.cs. Это не так, как #include, но я думаю, достаточно близко.

Ответ 5

Я часто использую команду

csc *.cs

Он пытается скомпилировать все файлы .cs в текущем каталоге. Я считаю, что это самый простой и наиболее полезный способ для такого рода компиляций командной строки, как для javas

javac *.java

Кроме того, вам не нужно беспокоиться о файле, который находится в Main(), он автоматически определяет точку входа.

Ответ 6

Вы сосете, вы сосете, вы сосете, вы сосете

Ответ 7

Я также новичок в С#. Я нашел эту ветку, когда искал ответ о том, как включить несколько исходных файлов при компиляции С# из командной строки. Но текущие ответы являются неполными, на мой взгляд. Вот кое-что, что имело бы смысл для меня сегодня утром:

Hello.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 для компиляции моих исходных файлов. И до сих пор ничего, с чем я сталкивался, не информирует меня о том, что мне нужно делать.

После некоторых копаний я нашел следующий синтаксис.

Во-первых, я хочу создать библиотеку моих частичных классов.

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

Затем я хочу сослаться на ту библиотеку, которую я только что создал при компиляции моей основной программы. Мне повезло найти пример, демонстрирующий нужный мне синтаксис.

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

Вот что сработало для меня.

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

Что касается директивы #include, она не нужна в С#. И я отсылаю читателя к комментарию Дэна Брайанта выше. Вместо этого сохраняйте имена классов и пространства имен прямыми и сообщайте компилятору, где найти библиотеку (которую вы создали). Вот как связь между исходными файлами осуществляется в С#.

Существует также MSBuild для файлов .csproj и более сложных проектов. Но, как новичок, я не в состоянии объяснить.

Авторы благодарны The Complete С# Tutorial за предоставление кода, который я использовал.

Для справки, ошибка компилятора, которую я получал для csc hello.cs была CS0246. Эта статья Microsoft немного помогла. Как и -reference (параметры компилятора С#).