Как изменить код из одного проекта для проекта зависимостей в C# - PullRequest
0 голосов
/ 04 февраля 2020

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?

...