Я пытался решить эту проблему часами. У меня есть nuget с файлом .targets и консольным инструментом, упакованным внутри. Во время процесса сборки другого проекта консольный инструмент запускается и выполняет какие-то действия, если включен нюгет. Но похоже, что процесс msbuild никогда не останавливается. Это просто продолжает работать.
Файлы, включенные в сборку:
myapp.targets
<Project>
<Import Project="$(MSBuildThisFileDirectory)/../../tools/mytargets.targets" />
</Project>
mytargets.targets
<Project>
<Target Name="check" AfterTargets="CoreCompile">
<PropertyGroup>
<Output>files</Output>
<Directory>$(MSBuildProjectDirectory)$(Output)</Directory>
<Exe>dotnet $(MSBuildThisFileDirectory)mytool.dll</Exe>
<Call>$(Exe) $(MSBuildProjectFullPath) $(Directory)</Call>
</PropertyGroup>
<MakeDir Directories="$(Directory)"/>
<Exec Command="$(Call)" />
</Target>
</Project>
myapp.nuspec
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>testtool</id>
<version>1.0.0</version>
<authors>author</authors>
<description>
bla
</description>
</metadata>
<files>
<file src="lib\netstandard1.0\_._" target="/lib/netstandard1.0/" />
<file src="build\netstandard1.0\myapp.targets" target="/build/netstandard1.0/myapp.targets" />
<file src="tools\mytargets.targets" target="/tools/" />
<file src="$publishdir$\netcoreapp2.1\**\*" target="/tools/netcoreapp2.1/" />
</files>
</package>
myapp.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<AssemblyName>assemblytest</AssemblyName>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<!-- Pack settings -->
<PropertyGroup>
<NoPackageAnalysis>true</NoPackageAnalysis>
<NuspecFile>myapp.nuspec</NuspecFile>
<IntermediatePackDir>$(MSBuildProjectDirectory)/bin/$(Configuration)/publish/</IntermediatePackDir>
<PublishDir>$(IntermediatePackDir)$(TargetFramework)/</PublishDir>
<NuspecProperties>publishDir=$([MSBuild]::NormalizeDirectory($(IntermediatePackDir)))</NuspecProperties>
</PropertyGroup>
<!-- Executes /t:Publish for all target frameworks before packing-->
<Target Name="PublishAll" BeforeTargets="GenerateNuspec">
<ItemGroup>
<_TargetFramework Include="$(TargetFramework)" />
</ItemGroup>
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="Publish" Properties="TargetFramework=%(_TargetFramework.Identity)" />
</Target>
<ItemGroup>
<Folder Include="src\" />
<Folder Include="tools\netcoreapp2.1\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Build.Framework" Version="16.0.461" />
<PackageReference Include="Microsoft.Build.Utilities.Core" Version="16.0.461" />
</ItemGroup>
</Project>
И это структурапроекта, который создает пакет nuget
myapp
build
netstandard1.0
myapp.targets
lib
netstandard1.0
_._
src
program.cs
tools
mytargets.targets
netcoreapp2.1
myapp.nuspec
Теперь, если ссылка на nuget есть в другом проекте, запускается консольный инструмент, и все работает как положено. Но это на самом деле просто продолжает работать. Я вижу, что папка, созданная в процессе msbuild, просто воссоздается. Где моя ошибка?