我正在尝试学习来自C ++背景的C#,但我无法弄清楚如何将两个源文件链接在一起。我有一个相对简单的程序叫做test.cs和一个main.cs.我想做的就是在main.cs中说:
#include <"test.cs">
。
我能提出的最接近的是:
<Compile Include="test.cs"/Compile>
然而,编译器无法识别这一点。那么如何在我的主要文件中包含多个源文件?
答案 0 :(得分:9)
您将源文件列表传递给compiler:
csc.exe /target:library source1.cs source2.cs
如果在创建新的.NET项目时使用Visual Studio,则可以添加任意数量的源文件,它们将自动编译。
答案 1 :(得分:4)
如果要在Visual Studio中构建它,那么只需在同一个项目中拥有2个文件就可以了。
如果使用csc在命令行上进行编译,则需要在调用csc时引用这两个文件。请参阅Darin对此的回应。
不需要从另一个文件中引用一个文件,但使类型彼此可见的最简单方法是将每个文件中的类添加到同一名称空间。
答案 2 :(得分:2)
源文件不需要彼此了解。选项包括:
这取决于您是希望结果是一个组件还是两个组件。通常答案是将两者一起编译成同一个程序集。
答案 3 :(得分:0)
如果您希望将班级拆分为两个(或更多)源文件,可以使用partial class definitions。所以在你的情况下,你在main.cs中有“class TheClass”,在test.cs中有“partial class TheClass”。这与#include不同,但我觉得足够接近。
答案 4 :(得分:0)
我经常使用命令
csc *.cs
它将尝试编译当前目录中的所有.cs文件。 我发现它是这类命令行编译的最简单,最通用的方法,例如javas
javac *.java
此外,您不必担心Main()所在的文件,它会自动检测入口点。
答案 5 :(得分:0)
我也是C#的新手。我在寻找有关从命令行编译C#时如何包括多个源文件的答案时找到了该线程。但是我认为当前的答案是不完整的。今天早晨,这对我来说很有意义:
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来编译我的源文件。而且,到目前为止,我所遇到的一切都没有告诉我我需要做的事情。
经过一番挖掘,我发现了以下语法。
首先,我需要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#在源文件之间建立连接的方式。
.csproj文件和更复杂的项目也有MSBuild。但是,作为初学者,这是我无法解释的。
信贷转到The Complete C# Tutorial,以提供我使用的代码。
作为参考,我为csc hello.cs
遇到的编译器错误为CS0246。微软的文章有所帮助。 -reference (C# Compiler Options)也是如此。