我有一个我继承的网站项目,正在尝试清理。它有一个超过10,000 loc的Common.cs文件,所以我把它分成了不同的文件。问题是,Common文件的顶部是一个#define UAT
语句,在整个代码中用于做出某些配置决定,例如:
#if UAT
using WCFServiceUAT;
#else
using WCFServicePRD;
#endif
所以现在,当我去部署这个应用程序的生产版本时,我将不得不在许多不同的地方删除#define语句,这似乎容易出错并且通常是个坏主意。 我正在寻找像条件编译常量这样的东西,我可以定义一次,并让它影响整个项目。
此类配置控件仅用于C#文件。 #define语句过去只需要在Default.aspx.cs和Common.cs中进行更改,但自从我的重组工作以来,它现在看起来更多了。虽然我的site.master文件可以根据某些配置更改标题,但这不是一个问题。
我试图改变项目的构建配置属性,但没有任何选项,如条件编译常量,并假设我的项目类型不支持它。还有其他方法将#define放在全局项目级别而不是每个文件的顶部吗?我找到的唯一解决方案是Web应用程序项目,并基于{{ 3}},我不相信我正在使用Web应用程序类型项目,因为没有.csproj文件。
答案 0 :(得分:-3)
请参阅https://www.codeproject.com/Questions/233650/How-to-define-Global-veriable-in-Csharp-net
在项目子目录App_Code中,我创建了一个文件Globals.cs,如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace GlobalVariables
{
/// <summary>
/// Summary description for Globals
/// See https://www.codeproject.com/Questions/233650/How-to-define-Global-veriable-in-Csharp-net
/// </summary>
public static class Globals
{
// Note that now the obsolete code now only leaves one warning
// for the block excluded code:
// Unreachable code detected
// instead of a warning line for each instance of obsolete code.
// The "Unreachable code detected" can be disabled and enabled with
// #pragma warning disable 162
// #pragma warning enable 162
public const bool UAT = true;
static Globals()
{
//
// TODO: Add constructor logic here
//
}
}
}
在项目.ascx.cs文件中,您不需要使用&#34;
。在您希望这会产生影响的地方,您可以这样做:
if (GlobalVariables.Globals.UAT) // See App_Code\Globals.cs
{
// Do the UAT stuff
}
else
{
// Do the other stuff
}
在未使用的代码中,您会收到一条警告: 警告CS0162:检测到无法访问的代码 可以禁用此消息:
#param warning disable 162
if (GlobalVariables.Globals.UAT) // See App_Code\Globals.cs
{
// Do the UAT stuff
}
else
{
// Do the other stuff
}
#param warning enable 162