你可以用一个自定义的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;
}
}
那么你会在你的项目文件中添加这个自定义任务作为构建过程的一部分:
<UsingTask TaskName="CheckBasePage" AssemblyFile="/path/to/MyCustomTasksAssembly.dll" />
<Target Name="PostBuild">
<CheckBasePage />
</Target>
现在假定MyCustomTasksAssembly
是您创建的一个单独的项目,用于管理像这样的自定义MSBuild任务。如果您想将CheckBasePage
任务嵌入到与代码其余部分相同的项目中,则需要应用same trick from here。
您是否考虑过像[** FxCop **](http://msdn.microsoft.com/en-us/library/bb429476(v = vs.80).aspx)这样的工具?此外,你可以有一个自定义的构建步骤来验证每个页面扩展'BasePage'。 – mellamokb