Периодически, при сохранении довольно сложной геометрии (полученной из автокадовского DWFx файла) в XPS файл (через XpsDocumentWriter.Write(Visual)), при попытке в дальнейшем прочитать этот XPS я получал следующее исключение:
Но это происходило далеко не всегда. Т.е. для большинства DWFx все работало хорошо, но с некоторыми файлами возникали проблемы.
Ошибка повторялась на .Net FW 3, 3.5, 4. И вот, я, наконец, нашел, в чем была проблема. Я стал разбираться в строке Data, и мое внимание привлекло странное число 0000025044782, и тут я понял, что число это, на самом деле, -90,0000025044782! Т.е. в каком-то месте ReachFramework.dll при преобразовании Double в String используется не InvariantCulture, а текущая культура (в моем случае – русская), и вместо '.' используется ','! Это именно какой-то особый случай, т.к. даже в данном примере видно, что большинство чисел представлено в правильном формате.
Изучение этой ошибки показало, что InvariantCulture следует выставлять не только перед созданием XPS файла, но и перед дальнейшим его выводом на печать (и через XpsDocumentWriter.Write(), когда XpsDocumentWriter создан для PrintQueue, и даже перед PrintDialog.PrintVisual()). В противном случае при выводе на востренный в Windows виртуальный принтер ~Microsoft XPS Document Writer~ получается опять «кривой» XPS с -90,...