使用Git、Beyond Compare遇到的一些问题

之前在项目中在向git提交代码的时候,由于是在Windows平台下,每次都会有一个warning:大致是说LF will be replaced by CRLF,因为当时纳品比较急,所以在确认不会有很大问题后,就没有再去追究。昨天同事在使用git的时候又遇到了同样的问题,关键是还遇到个问题导致Beyond Compare在比较本地SVN代码与git目录下代码的时候,很多source文件显示是不一样的,但是在打开之后又显示都一样。这样就很郁闷,本来想看修改文件的差异,这种情况直接就无奈了。

于是就做了一番调查。先说为什么git会报warning,普及一个知识,LF和CRLF在文本中都是代表new line的意思,只是LF用于Linux、Unix等系统下,而CRLF主要用于Windows下。而git设置里边有一个autocrlf的配置,默认情况下,他的设置是为true,你可以通过git config core.autocrlf来看你的配置。如果这个是true的话,每次在你向git本地库中添加文件的时候,都会默认的把所有的CRLF转为LF,而当你从git上checkout的时候,这些文件又会把LF转为CRLF。这个设置主要是为了支持一个项目中的跨平台开发而用的。Windows下设置为true还是比较合适的。

既然知道为什么会有waning了,那么Beyond Compare又是怎么回事?打开Beyond Compare的文件比较设置,会有一个比较的规则设定,如图 继续阅读

如何在C#中获得当前文件名和行数

在项目中有需求打印出当前函数调用处的行数,C++中可以用“__FILE__ and __LINE__”这个宏,那么在C#中应该如何实现类似的功能呢?

C#中提供了StackFrame这个类,通过调用它的方法即可简单的获得当前执行函数所在文件,以及在文件里的对应行数。

代码如下:

public static void WriteLog(String msg)
{
    StackFrame CallStack = new StackFrame(1, true);
    String SourceFile = CallStack.GetFileName();
    int lineNum = CallStack.GetFileLineNumber();
    WriteContent(msg, SourceFile, lineNum);
}

StatckFrame的构造函数中1代表堆栈上要跳过的帧数,也即用于构造StackFrame的帧当前指向了调用WriteLog这个方法的帧,true表示要捕获堆栈帧的文件名、行号和列号,如下图:

CSharp

这样获得了函数堆栈上正确的帧数之后,就可以通过调用StackFrame 中的GetLineNumber等函数获得你想要的信息了。

ps:注意StackFrame需要有PDB Files的支持。

ps1:最后再来首歌,挺好听的,还有爱熊行动 :mrgreen:

foobar2000完美歌词插件介绍

以前一直在用千千静听,但是由于千千静听不断挑战用户的底线,无限弹广告,让我对它已毫无好感。改用foobar也有一段时间了,一开始只是觉得它界面挺好看的,而且也比较简洁,最近想要个歌词显示的功能,就上网搜索了一把,对foobar又有了重新的了解:

foobar2000是一款免费软件,开发者为Peter Pawlowski(原Winamp开发公司Nullsoft成员),是多功能的音频播放器。除了播放之外,它还支持生成媒体库、转换媒体文件编码、提取CD等功能。它是一款功能强大的工具。foobar2000之所以出现,在于Peter不满于Winamp 2.x的插件体系架构和更倾向于图形、外观的发展方向的Winamp 3。

这显然又是一个技术大牛的杰作,foobar2000最大的特点就是其的任意定制化、模块化,用户可以随意的定制自己的foobar的界面,如果默认的Components里没有你想要的功能,你就可以去下载一个开发者开发的相应Components,只需将其放在foobar2000安装路径中的Components文件夹中,重启一下foobar2000后,就可以在foobar的preferences里找到你添加的components了,所有开发者的设计的功能你都可以在这里找到。另外它用的MP3解码器是mpglib,貌似也比较先进,之前也听人说过foobar2000的音质也很好,我倒是没明显感觉。说着说着就跑题了,总之foobar2000是一款很不错的播放器。 继续阅读