Как предотвратить копирование ненужных библиотек при публикации - PullRequest
0 голосов
/ 04 августа 2020

У меня есть три простых проекта:

  1. SampleApp.Cli1
  2. SampleApp.Cli2
  3. SampleApp.Lib

SampleApp. Cli1 напрямую использует Microsoft.Extensions.Configuration SampleApp.Cli2 использует Microsoft.Extensions.Configuration через SampleApp.Lib

SampleApp.Cli1:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <OutputPath>../_out1</OutputPath>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
  </PropertyGroup>
  
</Project>

SampleApp.Cli2:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <OutputPath>../_out2</OutputPath>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\SampleApp.Lib\SampleApp.Lib.csproj" />
  </ItemGroup>

</Project>

SampleApp.Lib:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.6" />
  </ItemGroup>

</Project>

Скрипт для публикации:

@echo off

if exist "%~dp0_out1" (    
  rd "%~dp0_out1" /s /q  
)

if exist "%~dp0_out2" (    
  rd "%~dp0_out2" /s /q  
)

dotnet publish "%~dp0SampleApp.Cli1/SampleApp.Cli1.csproj" 
dotnet publish "%~dp0SampleApp.Cli2/SampleApp.Cli2.csproj" 

После сборки

publi sh каталог для SampleApp.Cli1 содержит эти файлы

web.config
SampleApp.Cli1.deps.json
SampleApp.Cli1.dll
SampleApp.Cli1.exe
SampleApp.Cli1.pdb
SampleApp.Cli1.runtimeconfig.json

publi sh dir для SampleApp.Cli2 содержит эти файлы

SampleApp.Lib.pdb
web.config
Microsoft.Extensions.Configuration.Abstractions.dll
Microsoft.Extensions.Configuration.dll
Microsoft.Extensions.Primitives.dll
SampleApp.Cli2.deps.json
SampleApp.Cli2.dll
SampleApp.Cli2.exe
SampleApp.Cli2.pdb
SampleApp.Cli2.runtimeconfig.json
SampleApp.Lib.dll

Question

По неизвестной мне причине публикация понимает что для SampleApp.Cli1 Microsoft.Extensions. * должен быть взят из общей среды выполнения (Program Files \ dotnet \ shared \ Microsoft.AspNetCore.App), но не понимает того же для SampleApp.Cli2. Конечно, я понимаю, что, скорее всего, дело в SampleApp.Lib (в реальном приложении это был Microsoft.Extensions.Hosting.WindowsServices).

В моей ситуации мне нужно собрать все библиотеки из источников, которые go в папку publi sh. В реальном приложении библиотек Microsoft.Extensions. * Намного больше, и мне бы не очень хотелось собирать все библиотеки из asp net основной среды выполнения.

Есть ли способ предотвратить копирование (publi sh) Библиотеки Microsoft.Extensions. *?

Sdk: 3.1.6

...