Условная ссылка и компиляция проекта на основе переменной среды - PullRequest
0 голосов
/ 03 января 2019

Я работаю над библиотекой, доступ к которой имеют два типа пользователей - сотрудники компании, а затем все остальные. Сотрудники компании имеют доступ к нескольким пакетам Nuget из внутренней ленты Nuget, которая недоступна для широкой публики, для удобства я буду ссылаться на них в качестве «проприетарных» пакетов.

У нас есть несколько проектов в одном решении - скажем, проект A, проект B и проект C. Проект A и проект B ссылаются на проект C, а проект C использует «проприетарные» пакеты.

То, что мы хотели бы сделать, - это одно решение с двумя различными вариантами сборки - одно для сотрудников компании и одно для общественности. Когда сотрудник компании создает решение, он ссылается и компилирует проект C и извлекает «проприетарные пакеты». Когда он создается кем-то другим, Project A и Project B не будут ссылаться на Project C, а Project C не будет компилироваться и не будет пытаться получить «проприетарные» пакеты.

Есть ли какие-либо предложения о том, как лучше всего выполнить этот или какие-либо подробные блоги, показывающие, как это можно сделать?

В настоящее время я пытаюсь установить две разные конфигурации сборки. В одном я пытаюсь определить константу, подобную этой, в build.props:

<PropertyGroup>
  <!-- If build config is InternalEmployees -->   
  <DefineConstants>$(DefineConstants);InternalEmployees</DefineConstants>
</PropertyGroup>

Затем в Project C я добавил следующее к

<ItemGroup>
  <PackageReference Condition=" $(DefineConstants).contains(InternalEmployees)' Include="ProprietaryPackage" Version="1.1.1" />
</ItemGroup>

и затем в обоих проектах A и B я пытаюсь использовать #if директивы процессора

#if InternalEmployees
PropreitaryPackage.SomeMethod();
#endif

Но в настоящее время это не работает - когда я пытаюсь собрать, он терпит неудачу, говоря мне, что не может найти проприетарные пакеты.

...