Я работаю над библиотекой, доступ к которой имеют два типа пользователей - сотрудники компании, а затем все остальные. Сотрудники компании имеют доступ к нескольким пакетам 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
Но в настоящее время это не работает - когда я пытаюсь собрать, он терпит неудачу, говоря мне, что не может найти проприетарные пакеты.