Измените это:
<head>
<title>
<link rel="icon" href="g.png" sizes="16x16" type="image/png">
</title>
</head>
на это:
<head>
<link rel="shortcut icon" type="image/png" sizes="16x16" href="g.png"/>
</head>
Убедитесь, что ваше изображение находится в том же каталоге. <title>My page</title>
- это текст, который отображается рядом со значком. В моем примере это будет «Моя страница».
Из того, что я собираюсь на той статье, она создает анонимные типы для Вас, и Вы используете это для получения значений. Если это так, нет никакого простого способа включить методы к тем объектам. Однако, если структура XML будет тем же каждым разом, когда SP выполняется, почему бы не создать реальный класс, который имеет все свойства, в которых Вы нуждаетесь и заполняете набор тех объектов сами с XML. Тем путем можно легко добавить любые методы, в которых Вы нуждаетесь непосредственно в класс...
Править: На основе нашего обсуждения в комментариях вот мысль:
В коде там при создании типа Вы используете: ModuleBuilder. DefineType. Существует перегрузка к DefineType, который берет тип для расширения. Ссылка.. Поэтому создайте интерфейс (он не делает события, должны иметь любые методы в нем), и когда Вы динамично создаете тип, расширяете тот интерфейс с помощью перегрузки, я связал Вас с. Затем создайте дополнительный метод в том интерфейсе, который делает Сохранение ().
Существует другая перегрузка, которая может представлять интерес, который берет тип для расширения, и интерфейсы:
http://msdn.microsoft.com/en-us/library/f53tx4x8.aspx
EDIT2: Пример кода:
Во-первых, создайте интерфейс:
public interface ISaveExtentable //I suck at naming stuff :-p
{
}
Затем в коде Вам понравилось в том сайте, Вы найдете метод названным: GetTypeBuilder. Измените его на это:
private static TypeBuilder GetTypeBuilder(string typeSigniture)
{
AssemblyName an = new AssemblyName("TempAssembly" + typeSigniture);
AssemblyBuilder assemblyBuilder =
AppDomain.CurrentDomain.DefineDynamicAssembly(
an, AssemblyBuilderAccess.Run);
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MainModule");
TypeBuilder tb = moduleBuilder.DefineType("TempType" + typeSigniture
, TypeAttributes.Public |
TypeAttributes.Class |
TypeAttributes.AutoClass |
TypeAttributes.AnsiClass |
TypeAttributes.BeforeFieldInit |
TypeAttributes.AutoLayout
, typeof(object), new Type[] {typeof(ISaveExtentable)});
return tb;
}
Затем создайте дополнительный метод в том интерфейсе, чтобы сделать сохранение:
public static class SaveExtendableExtensions
{
public static void Save(this ISaveExtentable ise)
{
//implement save functionality.
}
}
Необходимо будет, скорее всего, использовать отражение в методе Сохранения для получения всех свойств, так как тип был создан динамично.
Я думаю, что это называется подмешиванием, которое напрямую или легко не доступно в .net. Однако, насколько я понимаю, это одна из основных причин, по которой был разработан фреймворк LinFu .