Процесс msbuild продолжает работать - PullRequest
0 голосов
/ 30 сентября 2019

Я пытался решить эту проблему часами. У меня есть 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, просто воссоздается. Где моя ошибка?

...