Интересно, есть ли обходной путь для использования стандартного XmlSiteMapProvider в приложении, отличном от asp.net, например WinForm / Console или, в моем случае, VS Unit Test one.
Следующий код не работает, потому что он не может создать путь к файлу .sitemap внутри частного метода GetConfigDocument.
XmlSiteMapProvider provider = new XmlSiteMapProvider();
NameValueCollection providerAttributes = new NameValueCollection();
providerAttributes.Add("siteMapFile", "Web.sitemap");
provider.Initialize("XmlSiteMapReader", providerAttributes);
provider.BuildSiteMap();
Я считаю правильным решением написать другого провайдера.





Я не понимаю, почему не. Это просто провайдер, реализующий интерфейс. Возможно, вам не понадобятся многие функции, но вы можете получить доступ к API для того, что он вам предоставляет. Ваши экраны WinForms могут просто использовать URL-адреса для идентификации, чтобы вы могли определить свое место в иерархии.
Возможно, вам придется создать настраиваемую реализацию поставщика, поскольку он будет использовать HttpContext для получения URL-адреса текущего веб-запроса для определения текущего размещения, в то время как вам нужно будет получить это значение по-другому. Это может быть сложно, потому что ваше приложение WinForm может одновременно отображать несколько окон. Если вы знаете, что одновременно отображается только одно окно, вы можете использовать статическое значение, которое устанавливается до доступа к SiteMap API.
Теперь вы должны подвергнуть сомнению ценность использования API, если вам нужно делать всю работу. Может быть недостаточно пользы, чтобы окупить ее.