我有一个实用程序库,用于在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设置。
这有可能吗?
答案 0 :(得分:2)
我快速而肮脏的解决方案
将属性放在自定义DLL中,如下所示:
public bool IsDebug
{
get
{
#if DEBUG
return true;
#else
return false;
#endif
}
}
3-Party-DDL可能只有be careful。正如戴夫·布莱克在博客中提到的那样:
首先,您需要准确定义" Debug"的含义。 vs."发布" ...
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";
}
这个问题在这里经常被问到: