2017-07-20 26 views
3

VBのXMLリテラルのCR-LFの組み合わせは、静かにLFに変換されるようです。これは、私と同じようにVB.NET XMLリテラルの改行

31-0A-32 

ではなく

31-0D-0A-32 

Module Module1 
    Sub Main() 
     Dim x As XElement = <xml>1 
2</xml> 

     ' Print Bytes 
     Console.WriteLine(String.Join("-", x.Value.Select(Function(c) AscW(c).ToString("X2")))) 
    End Sub 
End Module 

のVisual Studio 2017(フレームワーク4.5.2)でコンパイル:

は、次の最小限の例を考えてみましょう期待しています。私は、バイナリエディタでソースファイルをチェックし、xmlリテラルに1〜2のCR-LF(0D-0A)が含まれていることを確認します。

これは公式に文書化されている動作か、私が頼りにできないコンパイラの実装の詳細ですか?前者の場合はどこに文書化されていますか?

答えて

5

マイクロソフトでは、許容されるXML標準を遵守しています。これは、XMLの改行に改行文字のみを使用することです。これは、Windows以外のシステムとの相互運用性のためであり、通常は改行のみを使用します。 WindowsではCR-LFが標準で使用されていますが、通常はLFだけがWindows上の改行として機能します。

+0

'しかし、LFだけでもWindows上の改行として機能することが一般的に分かります。」 - メモ帳を除いて。 ;) –

+0

OP _really_がcr-lfを望む場合、サンプル要素を作成することができます: 'Dim x as New XElement(" xml "、" 1 "&vbCrLf&" 2 ")'。しかし、確かにこの方法は面倒です。 – MarkL

+0

@ MarkL:現在のところ、私は '.Replace(vbLf、vbCrLf)'と書いていますが、VBのXMLリテラルの扱いが変更されれば、ひどく壊れてしまいます。 – Heinzi