Изменение, как Visual Studio / Dot Net создает DLL? - PullRequest
0 голосов
/ 18 января 2019

У меня есть вопрос, в основном из любопытства, но и для проекта с питомцами:

Учитывая упрощенное решение на 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 из одного проекта, скажем, A.A1.dll только с классом A1 и A.A2.dll только с классом A2?

Еще более интересным случаем было бы создание Lib1.dll с A1 и B1 и Lib2.dll с A2 и B2.

Я понимаю, что сложность того, что я спрашиваю в сценарии реальной жизни, значительно выше, чем приведенное упрощенное описание.

Мне просто любопытно, возможно ли это теоретически (без тысяч часов работы). И, если да, то какие подходы я могу попробовать?

1 Ответ

0 голосов
/ 20 января 2019

Вы можете использовать компилятор C # напрямую для создания файлов DLL и EXE. Компилятор является частью установки .NET Framework, поэтому для его запуска не требуется Visual Studio.

Файлы проекта Visual Studio - это просто удобный способ организации исходных файлов, зависимостей и настроек компилятора. Visual Studio - хороший графический интерфейс поверх этих файлов проекта.

Использование следующих файлов:

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();
}
}

Мы строим все с помощью компилятора C #, csc.exe, используя пакетный скрипт build.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.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.dll и A.A2.dll ) и одна программа ( Program.exe ), которая использует библиотеки DLL. как показано ниже:

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>
...