Tag: c preprocessor

获取#define变量列表

即使由于#define是预处理器指令而应该是不可能的,我想问: 是否有可能在实际程序中获得# #define变量的列表? 分别是项目属性中定义的条件编译符号列表。 我为什么需要那个? 我正在使用符号来管理扩展。 我正在尝试获取它们的列表,将它们添加到我的窗口中 Enabled Extensions: CUSTOMER1_ABC_EXTENSION CUSTOMER2_XYZ_EXTENSION 无需为每个扩展编写特定代码。

如何使用其他文件中的#define?

例如: define.cs #define FOO Form1.cs的 #if FOO MessageBox.Show(“foo is set!”); #else MessageBox.Show(“foo is not set!”); #endif define.cs包含在form1.cs的同一个项目中,但上面的条件给出了: foo is not!

为什么编译后代码注入比预编译代码注入更好?

所以我们都知道C#没有类似C的宏预处理器(这里有一个很好的线程)。 但是现在AOP正在获得牵引力,似乎我们开始使用后处理器来处理我们曾经使用预处理器的事情(请记住,我只是在使用PostSharp,所以可能不在)。 我是C#中属性的忠实粉丝,但是如果一个预处理器被遗漏了很多理由(作为一个前MFC用户,我仍然质疑但仍然接受)为什么编译后代码注入比预先更好?编译代码注入?

使用MSBuild 从命令行定义预处理器值

我需要创建一个包含多个项目的现有大型应用程序的演示版本。 我想使用现有的项目,并通过预处理器指令中性化function #if DEMO mycode.NeuterNow(); #endif 我们正在使用MSBuild构建我们的应用程序,我理想地使用以下内容: MSBuild -DefineProperty:DEMO MySolution.sln 这样的function是否存在?

我可以根据.NET框架版本制作预处理程序指令吗?

这是我想要做的具体例子。 考虑string.Join函数。 在.NET 4.0之前,只有两个重载,两个都需要一个string[]参数。 从.NET 4.0开始,新的重载采用了更灵活的参数类型,包括IEnumerable 。 我有一个库,其中包含一个基本上与.NET 4.0 string.Join函数string.Join函数。 我只是想知道我是否可以使这个function的实现依赖于目标.NET框架。 如果是4.0,它可以简单地string.Join内部调用string.Join 。 如果是3.5或更早,它可以调用自己的内部实现。 这个想法有意义吗? 如果它确实有意义,最合乎逻辑的方法是什么? 我想我只是假设预处理程序指令最有意义,因为在使用早于4.0的.NET版本时,使用IEnumerable参数调用string.Join时甚至无法编译 ; 所以无论我使用什么方法都必须在编译之前进行。 (例如,在运行时检查Environment.Version属性将不起作用。)

如何禁用写入T4生成输出文件的#line指令

我的T4代码生成遇到了一个小问题。 我已将我的T4模板分解为单独的文件并将它们放在各种目录中,我已经这样做了,因此我的代码生成的一部分可以在多个项目中重复使用,例如模型生成,存储库生成和服务生成都包括核心EntityGeneration .tt文件。 不幸的是,当TextTemplating解析我的嵌套包含时,它会在其生成的.cs文件中构建一个长的#line预处理器指令,将所有相对路径组合到最低级别的包含文件。 不幸的是,由于这条路径是用相对路径构建的,所以它不必要地长了很长时间,实际上它超过了最大路径长度(Windows 7)。 如果您感兴趣,以下是生成代码的错误行: #line 3 “C:\VS2010\AlbatrossTravelGroup\ASC\AlbatrossTravelGroup.ASC.BusinessRules\Services\Contracts\..\..\..\..\AlbatrossTravelGroup.BusinessRules\Services\Contracts\..\..\..\AlbatrossTravelGroup.Models\Repositories\Contracts\..\..\../AlbatrossTravelGroup.Common/CodeGeneration.tt” 我的问题是,如何禁用这些指令写入生成的代码文件? 如果不这样做,如何在不改变文件结构的情况下避免此问题?

在C#代码中重用.h文件中的define语句

我有C ++项目(VS2005),其中包含#define指令中版本号的头文件。 现在我需要在双C#项目中包含完全相同的数字。 最好的方法是什么? 我正在考虑将此文件包含为资源,然后在运行时使用正则表达式解析它以恢复版本号,但也许有更好的方法,您如何看待? 我不能在.h文件之外移动版本,也建立系统依赖于它而C#项目是应该适应的。

是否存在C#预处理工具?

有没有人知道一个实用程序来预处理C#源文件而不编译它,就像在GCC中使用-E标志一样? 我尝试使用GCC – 它成功地处理了#if指令,但它在任何#region指令上都会窒息…… 理想情况下,我希望能够在.cs文件上运行该工具以删除任何评估为false的#if块,并且可选地能够标记是否删除/保留完整的注释, #region , #pragma指令等。 为了将其置于上下文中,我希望能够发布一些(更大)项目的一部分源代码,同时删除仅与较大项目相关的部分。 例如,有大量代码如下所示: #if (SUBPROJECT) namespace SubProject #else namespace CompleteProject #endif { public class SomeClass() { #if (!SUBPROJECT) // This might call a method contained in an assembly that potentially // won’t be available to the sub-project, or maybe a method that hooks // into a C library […]

ASPX页面中的#DEBUG预处理程序语句

我正在尝试在ASPX页面中使用预处理程序指令,但页面无法识别它。 这只是我不能做的事吗? 背景:我试图在DEBUG模式中包含完整版本的jQuery(for,well,debugging =)),以及用于发布的缩小版本。 我尝试过这个,但我对ASPX <%语法并不十分熟悉。 我只是从根本上误解了这种语法的作用吗?

#pragma警告禁用代码列表及其含义

禁用警告的语法如下: #pragma warning disable 414, 3021 或者,更一般地表达: #pragma warning disable [CSV list of numeric codes] 是否有这些数字代码的列表以及它们要抑制的警告的描述? 令我懊恼的是,我似乎无法通过谷歌找到它。