#define MYMACRO .... #if MYMACRO //some C# code logic #else //some other C# code logic
我需要在C#库项目的专用文件中定义一些宏,一旦定义,我需要这些宏在整个库中可见.问题是上面的代码只适用于单个文件.
我知道解决此问题的另一种方法是将宏添加到构建命令.这将负责为整个.dll定义宏,并且我将在库中的任何地方使用#if – #else检查.这种方法的问题是我希望能够轻松维护宏.将它们放在项目内的文件中将是完美的.我也想在里面发表一些评论,以便我知道每个宏在做什么.如果我必须将宏作为构建参数传递,这将不适用.另一个原因是能够通过简单地评论和检查行为来打开/关闭宏.
有没有一个体面的方式来实现我的要求?我不想处理任何构建自动化工具,如MSBuild,NAnt或类似的东西,如果没有其他办法可行,我会很感激您认为哪一个更好的选择.
如果需要记录定义,可以在解决方案中添加文档文件,说明设置的含义.
如果没有太多变体,您可以为每个变体定义新的项目配置.这将允许您为每个变体预先配置必要的#defines列表,然后只需从工具栏中的配置组合框切换它们.如果要暂时禁用一个选项,可以复制当前配置并删除#define,然后在测试后删除配置.
我可以建议的下一个选项“更容易”(通过将设置和文档组合成您建议的单个文件)将使用简单的文本文件(设置注释)来配置项目,并花费15分钟编写一个快速的c#app来读取这个文件,并将它包含的设置写入.csproj文件 – 它只是XML,所以应该是一个简单的应用程序来编写.您将能够轻松调整此文件并运行更新程序应用程序以更新项目设置.如果您经常这样做,花30分钟就可以添加带有复选框的用户界面,以便更轻松地选择设置.
不过,你所描述的概念听起来很奇怪.库的重点通常是你有一个标准化的代码块可以被许多客户端共享,所以改变这些类型的定义来重新配置整个库并不是我希望经常需要做的事情. .也许你有充分的理由,但值得回顾为什么你需要解决这个#define问题.
(例如,如果您有许多客户需要不同的“库”变体,最好的方法是使用配置(如上所述),允许您在批量构建中构建所有需要的变体.如果您只是尝试批次然后你可以重新设计库的块,以便你可以限制大多数#defines对单个.cs文件的影响,这样它们就不再需要是全局的了吗?也许库不应该是需要单个dll或插件架构,以便您选择库中包含的“模块”