Raf*_*afi 6 c# asp.net master-pages compiler-errors
我有一个asp.net webforms应用程序.每个aspx.cs类都需要从继承自System.Web.UI.Page的BasePage.cs继承.
所需页面继承:
class MyChildPage : BasePage : System.Web.UI.Page
Run Code Online (Sandbox Code Playgroud)
如何在创建新子页面时强制它从BasePage.cs而不是System.Web.UI.Page继承?
潜在解决方案
注意:这些子页面共享相同的母版页,这可能会有所帮助.
不确定它是否适合您的情况,但您可以通过web.config指定整个应用程序的基页
<system.web>
<pages pageBaseType="BasePage" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
有关msdn的文档:http://msdn.microsoft.com/en-us/library/950xf363( v = vs.85).aspx
您可以使用验证所有页面的自定义 MSBuild 任务来实现此目的。例如,这是一个Task将检查仅BasePage继承自 的Page。如果任何其他类继承自Page,则输出中将记录错误并且构建将失败:
public class CheckBasePage : Task
{
public override bool Execute()
{
var assm = Assembly.LoadFile("/path/to/WebsiteAssembly.dll");
var types = assm.GetTypes();
var pages = new List<string>();
foreach (var t in types)
{
if (t.BaseType == typeof(Page) && t.Name != "BasePage")
{
pages.Add(t.FullName);
}
}
if (pages.Count > 0)
{
Log.LogError("The following pages need to inherit from BasePage: [" + string.Join(",", pages) + "]");
return false;
}
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以将此自定义任务添加为项目文件中构建过程的一部分:
<UsingTask TaskName="CheckBasePage" AssemblyFile="/path/to/MyCustomTasksAssembly.dll" />
<Target Name="PostBuild">
<CheckBasePage />
</Target>
Run Code Online (Sandbox Code Playgroud)
现在假设这MyCustomTasksAssembly是您为管理此类自定义 MSBuild 任务而创建的单独项目。如果您想将CheckBasePage任务与其余代码嵌入到同一项目中,则需要从此处应用相同的技巧。
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |