All last night till 2am and when I could find the time today I have been having some great fun with developing a configuration wizard for a SnippetCallback control that is part of my Ajax Snippets project.
I wanted the user to select a webservice and then select a method from that service, but there did not seem to be an easy way to get at the web projects files during design-time, at least thats what I initially thought.
It turns out that there is an IWebApplication interface that can be got at by using the GetService method of a component sited in design mode, this then allows you to get at a project item. In my case I needed to get at the asmx file and pull out the type name of its associated code-behind file so I could get a list of methods.
This is a very simple example of how to get at project files physical path on disk from a control designer [code:c#] public class MyDesigner : ControlDesigner { public void DoSomethingWithProjectItemExample() { IWebApplication app = (IWebApplication)Component.Site.GetService(typeof(IWebApplication)); IProjectItem item = app.GetProjectItemFromUrl("~/Default.aspx"); string physicalPath = item.PhysicalPath; // do something with file } } [/code]
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.