修改Visual Studio/Dot Net创建DLL的方式?



>我有一个问题,主要是出于好奇,但也有一个宠物项目:

给定一个简单的 C# 解决方案,在构建后我最终会得到 A.dll 和 B.dll:

Solution
  - Project A
    - Class A1
    - Class A2
  - Project B
    - Class B1
    - Class B2

我好奇的是:DotNet/Visual Studio/MS Build/what有什么方法可以以不同的方式生成DLL吗?

朝着正确方向迈出的一步是从单个项目生成多个 DLL,比如 A.A1.dll只有 A1 类和 A.A2.dll只有 A2 类?

一个更有趣的情况是生成 Lib1.dll 与 A1 和 B1 和 Lib2.dll与 A2 和 B2。

我确实意识到,我在现实生活中所问的复杂性远远高于给出的简单描述。

我只是好奇这在理论上是否可行(无需数千小时的工作)。如果是这样,我可以尝试什么方法?

可以直接使用 C# 编译器生成 DLL 和 EXE 文件。编译器是.NET Framework安装的一部分,因此您不需要Visual Studio即可运行它。

Visual Studio 项目文件实际上只是组织源文件、依赖项和编译器设置的一种便捷方式。Visual Studio是这些项目文件之上的一个很好的GUI。

使用以下文件:

C:.
│   build.bat
│   Program.cs
│
├───ProjectA
│       ClassA1.cs
│       ClassA2.cs
│
└───ProjectB
        ClassB1.cs
        ClassB2.cs

A1类.cs:

public class ClassA1
{
public static void SayHello()
{
System.Console.WriteLine("ClassA1 says Hello World!");
}
}

A2类.cs:

public class ClassA2
{
public static void SayHello()
{
System.Console.WriteLine("ClassA2 says Hello World!");
}
}

课程.cs:

class Program
{
static void Main()
{
System.Console.WriteLine("Program says Hello World!");
ClassA1.SayHello();
ClassA2.SayHello();
}
}

我们使用批处理脚本 build 使用 C# 编译器 csc.exe 构建所有内容.bat:

REM Building my project using the C# compiler
REM NOTE: Add the path to the compiler to the path variable:
REM       set path=%path;%windir%Microsoft.NETFrameworkv4.0.30319
csc /out:A.A1.dll /target:library ProjectAClassA1.cs
csc /out:A.A2.dll /target:library ProjectAClassA2.cs
csc /out:Program.exe /r:A.A1.dll,A.A2.dll  Program.cs

这将生成两个 DLL(A.A1.dllA.A2.dll)和一个使用 DLL 的程序(程序.exe),如下所示:

C:.
│   A.A1.dll
│   A.A2.dll
│   build.bat
│   Program.cs
│   Program.exe
│
├───ProjectA
│       ClassA1.cs
│       ClassA2.cs
│
└───ProjectB
        ClassB1.cs
        ClassB2.cs

运行程序会给出以下输出:

C:TempHelloWorld>Program.exe
Program says Hello World!
ClassA1 says Hello World!
ClassA2 says Hello World!
C:TempHelloWorld>

最新更新