Вот VB.NET-адаптация решения @Jeff Fritz. Он делает то же самое, но включает в себя все элементы управления, расположенные в любом месте решения. (В нашей архитектуре используются модули, которые могут быть включены как внешние SVN, поэтому это очень хороший способ убедиться, что хост-приложение осведомлено о элементах управления всех модулей.)
Sub RegisterUserControls()
Dim Config As Configuration = WebConfigurationManager.OpenWebConfiguration("~/")
Dim WebSection As PagesSection = TryCast(Config.GetSection("system.web/pages"), PagesSection)
Dim ToRemove As List(Of TagPrefixInfo) = ( _
From t As TagPrefixInfo In WebSection.Controls _
Select t Where t.Source IsNot Nothing AndAlso t.Source.EndsWith(".ascx") _
).ToList
For Each t As TagPrefixInfo In ToRemove
WebSection.Controls.Remove(t)
Next
Dim SiteRoot As New DirectoryInfo(Server.MapPath("~"))
For Each f As FileInfo In SiteRoot.GetFiles("*.ascx", SearchOption.AllDirectories)
Dim Source As String = Path.Combine("~/", f.FullName.Replace(SiteRoot.FullName, "")).Replace("\", "/")
Dim TagName As String = Path.GetFileNameWithoutExtension(f.Name)
Dim NewTag As New TagPrefixInfo( _
tagPrefix:="YOURPREFIX", _
nameSpace:=Nothing, _
assembly:=Nothing, _
TagName:=TagName, _
Source:=Source)
WebSection.Controls.Add(NewTag)
Next
Config.Save(ConfigurationSaveMode.Modified)
ConfigurationManager.RefreshSection("system.web/pages")
End Sub
(Конечно, вы бы сослались на это в Application_Start, как это сделал Джефф.)