所以,在大量食用巧克力和咒骂之后,我有了答案:
我们最近在所有源文件的顶部插入了版权声明。事实证明,我们的一些源文件在文件开头有一个字节顺序标记(U+FEFF),并且通知最终被插入到该字符之前。
StyleCop 对这个角色的存在感到冒犯,并默默地忽略了文件的其余部分。
鉴于 Visual Studio IDE 未正确呈现该字符,我花了三天时间才发现它:(
编辑(2013.01.14):我创建了一个 Perl 脚本来从我们的源文件中删除 BOM:
#!/usr/bin/perl -w
use strict;
use warnings;
use File::Find;
my @dir = "C:/TopLevelSourceCodeDirectory";
find(\&edits, @dir);
sub edits() {
my $file = $_;
if( (-f $file)
&&
(
($file =~ /.*\.cs$/)
||
($file =~ /.*\.xaml$/)
||
($file =~ /.*\.whatever$/)
)
) {
#Open the file and read in the data
open (my $in, '<', $file) or die "Can't open $file: $!\n";
my @lines = <$in>;
close $in;
#Open same file for writing
open (my $out, '>', $file) or die "Can't open $file: $!\n";
#Walk through lines, putting into $_, and remove BOMs
for ( @lines ) {
s/\xef\xbb\xbf//g;
print $out $_;
}
close $out;
}
}
最后一点;我在编写这个脚本时遇到了所有问题,因为当我粘贴某些字符串时(即使这些字符串最初不包含 BOM),记事本似乎在我的文件中间添加了 BOM(当然,这些是不可见的) . 当您无法判断它在匹配器字符串的中间有一个不可见的 BOM 时,找出您的正则表达式不匹配的原因并不令人愉快。