繁体   English   中英

修改Visual Studio / Dot Net如何创建DLL?

[英]Modifying how Visual Studio/Dot Net creates DLL's?

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

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

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

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

朝着正确方向迈出的一步是从一个项目生成多个DLL,例如仅包含A1类的A.A1.dll和仅包含A2类的A.A2.dll?

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

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

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

您可以直接使用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

ClassA1.cs:

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

ClassA2.cs:

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

Program.cs中:

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

ClassA1.SayHello();
ClassA2.SayHello();
}
}

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

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.NET\Framework\v4.0.30319

csc /out:A.A1.dll /target:library ProjectA\ClassA1.cs
csc /out:A.A2.dll /target:library ProjectA\ClassA2.cs

csc /out:Program.exe /r:A.A1.dll,A.A2.dll  Program.cs

这将产生两个DLL( A.A1.dllA.A2.dll )和一个使用DLL的程序( Program.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:\Temp\HelloWorld>Program.exe
Program says Hello World!
ClassA1 says Hello World!
ClassA2 says Hello World!

C:\Temp\HelloWorld>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM