У меня есть три простых проекта:
- SampleApp.Cli1
- SampleApp.Cli2
- 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