У меня есть библиотека C #, которая имеет сложный способ генерации ее вывода при сборке, и я не могу получить правильный вывод для копирования в проекты, ссылающиеся на нее.
Структура раствора
MySolution
├─ MyConsoleApp (c# console)
│ └─ Program.cs
└─ MyNodeServices (c# library)
├─ node_modules**
├─ NodeProgram
│ ├─ build**
│ │ ├─ tsCode.js**
│ │ └─ tsCode.map**
│ └─ src
│ └─ tsCode.ts (TypeScriptCompile)
├─ package.json
├─ tsconfig.json
└─ CodeThatReferencesNodeProgram.cs
** indicates files are not included in project
При сборке я хочу, чтобы MyNodeServices полностью скопировал папку NodeProgram в выходной каталог (src, а также build), а затем скопировал node_modules в NodeProgram . Это будет мой контекст выполнения при использовании NodeServices.
MyConsoleApp ссылки MyNodeServices и я хочу, чтобы каталог NodeProgram из MyNodeServices был скопирован в выходной каталог MyConsoleApp при сборке.
Ограничения
- MyNodeServices будет использоваться несколькими проектами, поэтому я хотел бы избежать добавления копии после сборки к MyConsoleApp и другим ссылочным проектам.
- Я не хочу включать отдельные файлы в node_modules и NodeProgram / build в проект, так как содержимое создается при сборке.
- Я не хочу, чтобы каждый файл в NodeProgram / src был дважды указан в решении.
Что я пробовал
Включить NodeProgram в качестве содержимого
<TypeScriptCompile Include="NodeProgram\src\tsCode.ts">
<Content Include="$(ProjectDir)NodeProgram\**" />
Это работает для включения кода в выходные данные MyConsoleApp, но файлы .ts отображаются дважды в обозревателе решений. Это также не относится к node_modules.
После сборки копии
<Target Name="AfterBuild">
<ItemGroup>
<ProgramCode Include="$(ProjectDir)NodeProgram\**" />
<NodeModules Include="$(ProjectDir)node_modules\**" />
</ItemGroup>
<MakeDir Directories="$(TargetDir)\NodeProgram" Condition=" !Exists('$(TargetDir\NodeProgram') " />
<MakeDir Directories="$(TargetDir)\NodeProgram\node_modules" Condition=" !Exists('$(TargetDir\NodeProgram\node_modules') " />
<Copy SourceFiles="@(ProgramCode)" DestinationFiles="@(ProgramCode->'$(TargetDir)\NodeProgram\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="true" />
<Copy SourceFiles="@(NodeModules)" DestinationFiles="@(NodeModules->'$(TargetDir)\NodeProgram\node_modules\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="true" />
</Target>
Это поддерживает мое решение в чистоте и копирует правильные файлы в выходной каталог, но файлы после этого, похоже, игнорируются. Если я очищу решение, скопированная папка останется в выходном каталоге, а содержимое не будет скопировано в ссылающиеся проекты.
Вопросы
- Есть ли способ указать, какие файлы в выходном каталоге важны?
- Есть ли лучший подход к этому?