ITNOA
Я хочу узнать, как мне изменить поведение кода и сегмента из одного проекта для одного из проекта зависимостей в C#
Я думаю, что мой вопрос неоднозначен, поэтому я стараюсь чтобы объяснить мой вопрос на другом языке и в экосистеме.
В C ++ Мы можем написать некоторую библиотеку, как показано ниже
// My library header file
#ifndef MY_LIBRARY_H_
#define MY_LIBRARY_H_
#ifdef ML_HOOSHANG
constexpr bool TEST = true;
#else
constexpr bool TEST = false;
#endif
#endif
В этом сценарии, если у меня есть другой проект, который хочет использовать верхнюю библиотеку, мы может изменить поведение верхней библиотеки, как показано ниже:
// Main.cpp this is another project
#include <iostream>
#define ML_HOOSHANG 1
#include <MyLibrary.h>
int main()
{
cout << ::TEST == true ? "Hoooray" : "Nooo" << endl;
}
И мы видим этот результат
Hoooray
И если я хочу увидеть Nooo
, мы легко можем #undef ML_HOOSHANG
в пользовательской библиотеке (библиотека ссылается на MyLibrary
.
Еще один механизм в C ++ для того, чтобы сделать что-то между библиотекой и очень популярным механизмом в сообществе C ++, который определяет некоторую константу на этапе сборки, например, в CMake с add_compile_definitions
, и это очень полезный подход, когда мы хотим изменить базовую c платформу или поведение, зависящее от среды, в библиотеках зависимостей нашего проекта.
нет w Я хочу, чтобы какой-то похожий механизм в экосистеме C# и msbuild
обеспечивал одинаковую функциональность, например, у меня есть много проектов и библиотек, которые все ссылаются на одну c нашу библиотеку с механизмом nuget. и я хочу, чтобы различное поведение этой библиотеки зависело от каждого проекта и библиотеки. поэтому мой вопрос: как мне это сделать?
Если я хочу показать аналогичный механизм в C#, я могу обратиться к механизму PCL в решении многоцелевой проблемы. или netstandard library механизм для многоцелевого подхода с различным поведением.
Моя проблема очень похожа на два верхних примера, за исключением того, что это не multi target и те примеры, решающие многоцелевую проблему, и я хочу сделать что-то похожее на то, что они сделали для решения нескольких целей, но другое. Я хочу сделать что-то вроде того, что они сделали для решения многоцелевой задачи, для решения проблемы, подобной <DefineConstants>
в msbuild одного проекта из другого проекта, который зависит от него.
Как мне это сделать?
Как создать пакет nuget, который имеет несколько выходных данных, зависит от значения нескольких определяемых констант? и как ссылка на пакет в csproj
на другой nuget
зависит от constatns?