【发布时间】:2012-07-12 13:42:04
【问题描述】:
我是一名 Visual C++.net 程序员,大约一年前转换为 C#,我真的很想念 __FILE__ 和 __LINE__。为了替换__FILE__,我写了一个很好的函数来返回class.method,这很棒,但是__LINE__没有合适的替代品(如果我错了,请纠正我!)。
我了解语言差异和技术限制、推理以及所有这些内容。
我要问的是:
编写一些 Visual Studio 扩展(我们所有的开发人员都会安装)是否可行,甚至可能,这将允许我们定义某种类型的令牌(~~LINE~~ 或其他东西),即当编译成可执行文件时,我们可以进行文本替换或将该符号切换为实际的 VS 行号?
我的扩展编程知识很少,我不知道分机。系统限制。
编辑澄清:
在 C++ 中,__FILE__ 在编译后将返回您编写代码的当前文件,以及__LINE__,您的当前行。这很重要,因为我们所有的日志记录系统(10 多年前)都需要一个 char* 用于文件,一个 int 用于我们正在记录的行。
C# 不能像 C++ 那样产生这两个“令牌”。
举个例子:
LoggingService.LogException(e, "file.cs", 1234);
是我想要编译到我的可执行文件中的,并且
LoggingService.LogException(e, ~~MYFILE~~, ~~MYLINE~~);
是我希望我的代码看起来的样子,并保存在磁盘上。我有一个合适的替代方法来获取文件,但我没有一个来获取文件。
编辑 2:
这些我们的版本构建,没有调试符号。为了适应这个修复,我们的产品安装量必须大几百兆,这是不可能的。
【问题讨论】:
-
你在寻找一个 string.Replace Method() 吗?...如果你想用空行替换一行也看看 Environment.NewLine 方法我有点困惑你真正在问什么..
-
有什么用?如果您想跟踪调用堆栈,运行时会为您执行此操作。
-
为澄清而编辑。这是为了让我们的 C# 应用程序能够与我们的遗留错误日志服务(企业级应用程序)一起工作。
-
此外,发布版本的调用堆栈信息非常差。
-
我几乎可以肯定我已经为
_LINE_使用了一些替换类型的东西,但我不记得它是什么
标签: c# visual-c++ compilation c-preprocessor visual-studio-extensions