Как создать проект узла во время сборки visual studio отдельно от проекта на C#?

#c# #node.js #.net-core #build

Вопрос:

Visual Studio 2019 поставляется с одностраничными шаблонами приложений для приложений .net Core. Шаблон React typescript настраивает проект следующим образом:

  • Создайте решение в Project/Project.sln
  • Создайте ASP.NET Пример конечной точки Core REST в Project/WebApi/WebApi.csproj
  • Содержит приложение с одной страницей в Project/WebApi/ClientApp папке.
  • Создайте этот проект как часть создания остальной части этого проекта.

Я хотел бы сделать то же самое, но вместо того, чтобы проект узла был встроен в папку проекта C#, пусть это будут отдельные проекты в рамках одного решения. Так что вместо:

 * Project/Project.sln
* Project/WebApi/Startup.cs // and all other C# code
* Project/WebApi/ClientApp/package.json // and all other node/typescript code
 

Я бы предпочел создать проект так:

 * Project/Project.sln
* Project/WebApi/Startup.cs // and all other C# code
* Project/ClientApp/package.json // and all other node/typescript code.
 

Каков лучший способ отделить проект узла от проекта C# и все равно собрать его целиком как часть сборки решения?

Бонус: как я могу сделать это только с dotnet помощью команды?

Ответ №1:

Основная идея, лежащая в основе того, как это может быть достигнуто, заключается в том, чтобы затронуть две вещи:

  1. Вы должны иметь возможность обслуживать статический контент (или интерфейсные библиотеки) из node_modules, которые будут расположены внутри отдельного проекта
  2. Каждый раз, когда вы создаете проект, npm install он должен запускаться, чтобы убедиться, что все интерфейсные зависимости на месте.

Чтобы иметь возможность обслуживать из node_modules, вам необходимо либо самостоятельно изменить промежуточное программное обеспечение UseStaticFiles (), либо использовать OdeToCode.Используйте модули и настройте его так, чтобы путь указывал на папку внутри другого проекта. Наконец, в файле .csproj можно настроить автоматические действия после сборки. Образец:

   <Target Name="PostBuild" AfterTargets="ComputeFilesToPublish">
    <Exec Command="npm install"/>
  </Target>