Использование C# 3.0 на layout страницах приложения в Sharepoint

В повседневной работе мы часто используем application layout страницы (aspx страницы, которые расположены в папке 12/Templates/Layouts на файловой системе веб сервера) для трассировки и отладки. Это достаточно полезная техника, т.к. вы можете написать серверный скрипт прямо на странице и посмотреть результаты его выполнения на той же странице в контексте запущенного сайта на production сервере. Допустим у нас есть подпапка 12/Templates/Layouts/Test, в которой мы создали простую aspx страницу:

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
  <title>Test</title>
</head>
<body>
  <form id="form1" runat="server">
    <%   1:  int i = 1;
       this.lbl.Text = i.ToString();
    
    <asp:Label ID="lbl" runat="server" />
  </form>
</body>
</html>

Обратите внимание на код внутри <%%>. Это очень простой пример, который показывает, как на стороне сервера мы присваиваем значение переменной “i” и отображаем его на странице. В реальности в блоке с серверным кодом будет более полезный код, который будет выводить результаты на страницу (напр. отображение identity текущего пользователя).

К сожалению в этой технике есть небольшой недостаток: по умолчанию мы ограничены использованием C# 2.0 и не можем использовать многие полезные возможности C# 3.0 (полный список см. здесь: Overview of C# 3.0). Так например, если вместо “int i = 1;” вы напишете “var i = 1;” (см. Implicitly Typed Local Variables), то вы получите следующую ошибку при обращении к вашей странице:

C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\test\test.aspx(9): error CS0246: The type or namespace name ‘var’ could not be found (are you missing a using directive or an assembly reference?)
   at System.Web.Compilation.AssemblyBuilder.Compile()
   at System.Web.Compilation.BuildProvidersCompiler.PerformBuild() 
   … 
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Для того чтобы иметь возможность использовать С# 3.0 на layout-страницах необходимо добавить web.config в нашу поддиректорию (12/Templates/Layouts/Test) со следующим содержимым:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration>
<system.codedom>
  <compilers>
    <compiler
      language="c#;cs;csharp"
      extension=".cs"
      type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0,
            Culture=neutral, PublicKeyToken=b77a5c561934e089"
      warningLevel="4">
      <providerOption name="CompilerVersion" value="v3.5"/>
      <providerOption name="WarnAsError" value="false"/>
    </compiler>
  </compilers>
</system.codedom>
</configuration>

В этом файле мы переопределили версию компилятора (см. <providerOption name=»CompilerVersion» value=»v3.5″/>), используемого ASP.Net. После этого вы сможете использовать C# 3.0 на ваших страницах. Эта техника помогла нам писать код для application layout страниц более эффективно. Надеюсь она окажется полезной и для вас.

Advertisements

Об авторе sadomovalex

Старший инженер, team lead, консультант. Работаю в стеке .Net. Последние несколько лет занимаюсь разработкой enterprise приложений под Sharepoint, чему и будет в основном посвящена тематика этого блога. Также активно использую и интересуюсь ASP.Net MVC, DDD, TDD, Agile. Активно участвую в жизни многих профессиональных сообществ, SPb .Net UG, SPb ALT.Net, rsdn, Finland SP UG и др.
Запись опубликована в рубрике Sharepoint. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s