gpt4 book ai didi

c# - 在引用的 C# 库中,有没有办法知道父项目是 Debug 还是 Release?

转载 作者:行者123 更新时间:2023-11-30 16:53:42 25 4
gpt4 key购买 nike

我有一个实用程序库,用于在 C# 中执行一些常见操作。

我想在项目根目录下返回一个JSON文件中的Assets数组,但是根据父项目是Debug还是Release,结果会有所不同。

例如:

{ProjectRoot}\Assets.json

{
"debug": {
"css": [
"/public/vendor/bootstrap/3.3.5/css/bootstrap.min.css"
],
"js": [
"/public/vendor/bootstrap/3.3.5/js/bootstrap.min.js",
]
},
"release": {
"css": [
"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"
],
"js": [
"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js",
]
}
}

然后我通过检查 DEBUG 或 RELEASE 并将正确的列表返回给 ViewBag 来使用它。

我已经在几个项目中手动执行此操作,并且我即将开始另一个。我想将它添加到实用程序项目中。但是,在库中设置 #if DEBUG 将为库构建返回正确的文件,但不会为父项目返回正确的文件。

有没有办法在没有另一个预处理器包装的情况下获取父项目构建是调试还是发布?

为了简单起见,我只想设置 ViewBag.Assets = MyLib.Assets,而不是在我的父项目中检查 Debug 或 Release 并包装 ViewBag 设置。

这可能吗?

最佳答案

我的快速而肮脏的解决方案

像这样在您的自定义 DLL 中放置一个属性:

    public bool IsDebug
{
get
{
#if DEBUG
return true;
#else
return false;
#endif
}
}

3 方 DDL 有可能但是 be careful .正如 Dave Black 在他的博客中提到的:

First, you need to define exactly what is meant by "Debug" vs. "Release"...

object[] attribs = ReflectedAssembly.GetCustomAttributes(typeof(DebuggableAttribute), 
false);

// If the 'DebuggableAttribute' is not found then it is definitely an OPTIMIZED build
if (attribs.Length > 0)
{
// Just because the 'DebuggableAttribute' is found doesn't necessarily mean
// it's a DEBUG build; we have to check the JIT Optimization flag
// i.e. it could have the "generate PDB" checked but have JIT Optimization enabled
DebuggableAttribute debuggableAttribute = attribs[0] as DebuggableAttribute;
if (debuggableAttribute != null)
{
HasDebuggableAttribute = true;
IsJITOptimized = !debuggableAttribute.IsJITOptimizerDisabled;
BuildType = debuggableAttribute.IsJITOptimizerDisabled ? "Debug" : "Release";

// check for Debug Output "full" or "pdb-only"
DebugOutput = (debuggableAttribute.DebuggingFlags &
DebuggableAttribute.DebuggingModes.Default) !=
DebuggableAttribute.DebuggingModes.None
? "Full" : "pdb-only";
}
}
else
{
IsJITOptimized = true;
BuildType = "Release";
}

这里也经常问这个问题:

关于c# - 在引用的 C# 库中,有没有办法知道父项目是 Debug 还是 Release?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31175565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com