Ваш подход к доступу к ключу с пробелом правильный, но, похоже, вы забыли заметить данные в «Usage Data», это данные типа массива / списка.
так что вам нужно получить к нему доступ с помощью index или json deep scan или многих других опций.
здесь мало,
# to get all usage data as list
* def usageData = $example.integration.serviceData.['Usage Data']
# to get all stage in usage data
* def stages = $example.integration.serviceData.['Usage Data']..Stage
Сделайте xpsDocument участником, затем не звоните близко () на нем :)
http://blogs.msdn.com/junfeng/archive/2008/04/21/use-htrace-to-debug-handle-leak.aspx
Можно выяснить, кто держит дескриптор и неуправляемое использование стека WinDbg
Править: И конечно, можно также получить управляемое отслеживание стека и ввести по абсолютному адресу вокруг через расширение SOS (http://msdn.microsoft.com/en-us/library/bb190764.aspx)
Спасибо за ответ!
Это - немного низкого уровня, но я буду иметь в виду его, когда у меня закончатся идеи. Так или иначе я узнал немного больше об ошибке. Конкретный документ, который вызывает исключение, имеет изображения, вставленные в них. Когда я удаляю изображения, исключения не происходит. Это могло быть ошибкой DocumentViewer, возможно, но я все еще пробую...
Я подозреваю, что Вы сталкиваетесь с той же проблемой как http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic59281.aspx
Походит на ошибку в DocumentViewer, он должен был избавиться от вложенного BitmapDecoders на завершении или загрузить изображение другой опцией кэширования растровых изображений.
Нет, до сих пор все еще ничто.
Только для перечисления я попробовал следующие методы, которые перестали работать:
Установите все в NULL в событии "Closed" окна прежде, чем удалить файл. Это включает DocumentViewer. Свойство Document и объект DocumentViewer.
Используемый ShowDialog (), чтобы открыть окно и установить его в NULL впоследствии. Перемещенный удаление файла к событию "Exit" Системы. Windows. Объект приложения, который открывает окно. Все еще выдает исключение, что файл используется.
Ошибка DocumentViewer???
Вам необходимо закрыть System.IO.Packaging.Package, из которого был открыт XpsDocument, назначенный программе просмотра. Кроме того, если вы хотите иметь возможность снова открыть тот же файл в том же сеансе приложения, вам придется удалить пакет из PackageStore.
Попробуйте
var myXpsFile = @"c:\path\to\My XPS File.xps";
var myXpsDocument = new XpsDocument(myXpsFile);
MyDocumentViewer.Document = myXpsDocument;
//open MyDocumentViwer's Window and then close it
//NOTE: at this point your DocumentViewer still has a lock on your XPS file
//even if you Close() it
//but we need to do something else instead
//Get the Uri from which the system opened the XpsPackage and so your XpsDocument
var myXpsUri = myXpsDocument.Uri; //should point to the same file as myXpsFile
//Get the XpsPackage itself
var theXpsPackage = System.IO.Packaging.PackageStore.GetPackage(myXpsUri);
//THIS IS THE KEY!!!! close it and make it let go of it's file locks
theXpsPackage.Close();
File.Delete(myXpsFile); //this should work now
//if you don't remove the package from the PackageStore, you won't be able to
//re-open the same file again later (due to System.IO.Packaging's Package store/caching
//rather than because of any file locks)
System.IO.Packaging.PackageStore.RemovePackage(myXpsUri);
Да, я знаю, что вы, вероятно, не открывали XpsDocument с пакетом и может даже не знать, что это такое - или заботиться, - но .NET сделал это «за» вас за кулисами и забыл очистить после себя.