Есть ли эквивалент $ (BuildingInsideVisualStudio), который обнаружит NuGet? - PullRequest
0 голосов
/ 14 мая 2019

В MSBuild есть переменная $ (BuildingInsideVisualStudio), которую можно использовать для определения, выполняется ли сборка внутри Visual Studio, поэтому я могу выполнять такие условия:

  <PropertyGroup Condition="'$(BuildingInsideVisualStudio)' != 'true'">
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
  </PropertyGroup>

Есть ли что-нибудь подобное для NuGet?Я хочу, чтобы выполнялись другие условия, если проект используется внутри диспетчера пакетов.

Ответы [ 2 ]

2 голосов
/ 18 мая 2019

Ваш комментарий к вопросу звучит так, будто ваша цель состоит в том, чтобы поддерживать совместимость версий пакетов в различных условиях в рамках одного проекта, но также часто бывает так, что вы хотите поддерживать его согласованность между проектами в решении или репозитории.

Я собираюсь предложить другое решение.Создайте Directory.Build.props в своем корне репо, который будет выглядеть примерно так:

<Project>
  <PropertyGroup>
    <NewtonsoftJsonVersion>12.0.1</NewtonsoftJsonVersion>
    <xunitVersion>2.4.1</xunitVersion>
  </PropertyGroup>
</Project>

Теперь в ваших проектах, где требуется Newtonsoft.json, вы меняете PackageReference на <PackageReference Include="Newtonsoft.Json" Version="$(NewtonsoftJsonVersion)" />.

Если вы поместите свой производственный код в src\ и тестовый код в test\, то вы можете создать test\Directory.Build.props с содержанием:

<Project>
  <Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />

  <PropertyGroup>
    <PackageReference Include="xunit" Version="$(xunitVersion)" />
  </PropertyGroup>
</Project>

Теперь все вашипроекты под test\ автоматически получат xunit, и гарантированно будет та же версия.

Если вы хотите обновить версию пакета, вы можете использовать интерфейс диспетчера пакетов для проверки версий, но, к сожалению, не дляобновить версию.Для этого вам нужно вручную отредактировать корень репо Directory.Build.props (поэтому добавьте его в свое решение для быстрого доступа), но вы можете быть уверены, что при каждой ссылке на этот пакет будет использоваться одна и та же версия.Он ограничен проектами, использующими PackageReference, в настоящее время нет решения для packages.config, но условия MSBuild применимы только для PackageReference.

Этот шаблон часто можно увидеть в репозиториях Microsoft.Конечно, NuGet (моя команда, да!) И различные репозитории .NET, такие как cli и sdk, делают это, хотя в импортируемых вручную файлах реквизитов, а не Directory.Build.props, хотя концепция та же.

0 голосов
/ 17 мая 2019

Прямого решения для дела не существует. NuGet - это просто менеджер загрузок, он загружает исходники. MSBuild - это система сборки, она собирает исходники. Они не обмениваются какой-либо информацией между.

Я бы предложил вам пойти другим путем. Вы можете добавить файл реквизита в ваш проект упаковки nuget с помощью

<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">

  <ItemGroup>
    <PackageUsedFromNuget>true</PackageUsedFromNuget>
  </ItemGroup>

</Project>
...