Макросы Visual Studio 2017 при сборке отображаются пустыми, но не в макросе

Когда я добавляю событие пост-сборки в свой проект и пытаюсь использовать макрос в разделе Edit Post-Build ..., он показывает значение каждого макроса

события после сборки

Однако, когда сборка запускается, значение показывается пустым

с помощью echo было сгенерировано следующее: "Путь к проекту:" $(ProjectPath) "конец пути"

построить выход

любое значение макроса, которое я использую, кажется, имеет значение null

Я использую следующий csproj

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

  <PropertyGroup>
    <TargetFramework>netstandard1.6</TargetFramework>
    <AssemblyName>Client</AssemblyName>
    <PackageId>Client</PackageId>
    <PackageTags>pkgname</PackageTags>
    <NetStandardImplicitPackageVersion>1.6.1</NetStandardImplicitPackageVersion>
    <PackageTargetFallback>$(PackageTargetFallback);dnxcore50</PackageTargetFallback>
    <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
    <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
    <PostBuildEvent>
      echo on
      echo "The project path is:" $(ProjectPath) "end of path"
      dotnet pack $(ProjectPath)
    </PostBuildEvent>
  </PropertyGroup>


  <ItemGroup>
    <PackageReference Include="NoSQL" Version="1.0.4.3" />
  </ItemGroup>

</Project>

Я пытался вручную редактировать csproj безрезультатно. полный путь к csproj в событии post build работает.

Я подтвердил, что это происходит на нескольких машинах под управлением VS/15.0.0+26228.9

1 ответ

Решение

Кажется, есть ошибка с переменными макросреды, такими как $(ConfigurationName)игнорируется, по крайней мере, в Visual Studio 2017 вер. 15.9.11

Это сработало для меня:
укажите свой сценарий в<Target Name=...> элемент в файле проекта (.vbproj)

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

    <PropertyGroup>
        ...
        ...
    </PropertyGroup>

    <Target Name="PostBuild" BeforeTargets="PostBuildEvent">
        <!-- For " use &quot; -->
        <Exec Command="
            if $(ConfigurationName) == Debug (
                echo Upload Debug files:
                cmd /c &quot;S:\My Script\Debug_upload.cmd&quot;
            )
            if $(ConfigurationName) == Release (
                echo Upload Release files:
                cmd /c &quot;S:\My Script\Release_upload.cmd&quot;
            )"/>
    </Target>
    ...
<Project Sdk="Microsoft.NET.Sdk">
Другие вопросы по тегам