だから、かなりのチョコレートの消費と多くの罵倒の後、私は答えを持っています:
最近、すべてのソースファイルの上部に著作権表示を挿入しました。一部のソースファイルには、ファイルの先頭にバイト順マーク(U + FEFF)があり、通知がこの文字の前に挿入されていたことがわかりました。
StyleCopはこの文字の存在に不快感を与え、ファイルの残りの部分を黙って無視します。
キャラクターが正しくVisualStudioIDEによってレンダリングされていないことを考えると、それを見つけるのに3日かかりました:(
編集(2013.01.14):ソースファイルからBOMを削除するPerlスクリプトを作成しました:
#!/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;
}
}
最後に1つ。特定の文字列を貼り付けたときに、メモ帳がファイルの中央にBOMを追加しているように見えたため(もちろん、これらの文字列にはBOMが含まれていなかったとしても)、このスクリプトの作成に多くの問題がありました。 。マッチャー文字列の中央に非表示のBOMがあることがわからないのに、正規表現が一致しない理由を理解するのは楽しいことではありません。