关于C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.NET4中的使用介绍方法
- 作者: 用户64333750
- 来源: 51数据库
- 2021-08-22
c# 5.0 给我们带来了三个非常有用的编译器特性
callermembername
callerfilepath
callerlinenumber
在c与c++中由下列字符帮助我们实现调试消息的文件行号
复制代码 代码如下:
.#define debug_msg printf("%s[%d]:",__file__,__line__);printf
在.net 4中与其功能相等的是
复制代码 代码如下:
new stacktrace(true).getframe(1).getmethod().name(注意,是功能相等,但实现不同,.net4中是运行时获取,而c#5.0 中应该是编译时指定,原因参考以下)
在c#5.0中我们可以用以下代码实现调试信息文件行号获取:
复制代码 代码如下:
public static void tracemessage(string message,
[callermembername] string membername = "",
[callerfilepath] string sourcefilepath = "",
[callerlinenumber] int sourcelinenumber = 0)
{
trace.writeline("message: " + message);
trace.writeline("member name: " + membername);
trace.writeline("source file path: " + sourcefilepath);
trace.writeline("source line number: " + sourcelinenumber);
}
用vs2012编译调试,便能看见文件,行号,调用者方法名称。
三个特性是.net 4.5里面的,如果在.net4中使用那么请定义一下特性:
复制代码 代码如下:
namespace system.runtime.compilerservices
{
[attributeusage(attributetargets.parameter, allowmultiple = false, inherited = false)]
public class callermembernameattribute : attribute { }
[attributeusage(attributetargets.parameter, allowmultiple = false, inherited = false)]
public class callerfilepathattribute : attribute { }
[attributeusage(attributetargets.parameter, allowmultiple = false, inherited = false)]
public class callerlinenumberattribute : attribute { }
}
为了编译时.net4和.net4.5兼容,可以用预处理指令增加编译条件,在4.5下编译以上代码。
关键点来了,在.net4下定义以上属性后,用vs2010编译,无相关信息输出,
用vs2012重新编译,则会输出相关信息(注意实在.net4下),说明这个特性是编译器特性。也就是说我们可以在vs2012里写.net4项目时用以上特性。
推荐阅读
- C#通过fleck实现wss协议的WebSocket多人Web实时聊天(附源码)
- 团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
- 使用 MSBuild.exe 在发布模式下构建 C# 解决方案
- 当我发布 Web 应用程序时,AfterPublish 脚本不运行
- 构建时 T4 转换的产品仅在下一个构建中使用
- ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
- 新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
- 如何将条件编译符号(DefineConstants)传递给 msbuild
- MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
- NuGet 包还原找不到包,没有源
热点文章
团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
0
使用 MSBuild.exe 在发布模式下构建 C# 解决方案
0
当我发布 Web 应用程序时,AfterPublish 脚本不运行
0
构建时 T4 转换的产品仅在下一个构建中使用
0
ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
0
新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
0
如何将条件编译符号(DefineConstants)传递给 msbuild
0
MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
0
NuGet 包还原找不到包,没有源
0
使用 C# 6.0 功能运行 TFS 构建
0
