是否可以在库中定义条件生成符号逻辑并使用 C# 中的可执行符号?

Can conditional build symbols logic be defined in a library and use the executable symbols in C#?

提问人:just_a_developer 提问时间:2/22/2022 最后编辑:just_a_developer 更新时间:2/22/2022 访问量:38

问:

我有使用预处理器指令来识别构建配置(调试、暂存、发布等)的逻辑。

我想重用该逻辑,在库中定义一次,然后从可执行文件调用它。

逻辑是这样的:

public BuildConfig GetBuildConfig()
{
#if DEBUG
            return BuildConfig.Debug;
#elif STAGING
            return BuildConfig.Staging;
#else
            return BuildConfig.Release;
#endif
}

我在库“A”中的类中定义了该方法,然后从可执行文件“B”调用该方法

从可执行文件“B”到调试版本中的引用库“A”

问题来自可执行文件“B”,当其构建配置为“暂存”或“发布”时,我得到 BuildConfig.Debug。我的意思是,我得到的是“A”构建配置,而不是“B”。

有没有办法在“A”中执行逻辑并获得“B”构建模式或符号?

我尝试将“A”中的类设置为静态,并使其非静态并从“B”实例化,结果相同......

c#

评论

0赞 Jeroen Mostert 2/22/2022
预处理器指令不是这样工作的,不是。您必须主动与应用程序一起重新生成库,并为整个解决方案设置符号。如果这不可取,则必须构建库的单独版本,并在构建时引用相应的实例。这可以通过在项目文件中使用生成变量来完成。
0赞 Jon Skeet 2/22/2022
“有没有办法在'B'中执行逻辑并获得'A'构建模式或符号?”——这就是你已经得到的。我怀疑你是说另一轮,不是吗?
0赞 Neil 2/22/2022
我知道这只是一个示例,但这种配置更改应该在 appsettings 中,而不是代码中。
0赞 just_a_developer 2/22/2022
@Neil 好的,我将解释我的要求:在每个项目中,我都有一个 ContainerConfig 类,它使用 Autofac 来解析依赖项,并根据构建配置解析不同的依赖项。所以,在每个项目的每个 ContainerConfig 中,我都有这个预处理器逻辑,所以我想重用该逻辑,在库上定义它,我遇到了这个问题......
0赞 Jon Skeet 2/22/2022
对 - 在这一点上,基本上 Jeroen 的评论是合适的。预处理器指令更改 DLL 中内置的内容。一旦库 A 建成,就选择了其中一条路径 - 其余路径没有留下任何迹象。

答: 暂无答案