Зачем мне указывать версию компилятора в web.config для использования встроенных методов расширения? - PullRequest
2 голосов
/ 16 ноября 2011

У меня есть метод расширения в HttpRequest, который я пытаюсь использовать встроенным на разных страницах aspx.

Несмотря на то, что я добавил правильный импорт в aspx, я получаю сообщение об ошибке, говорящее, что метод не 'не существует.Метод расширения отлично работает с кодом.

Сообщение об ошибке компилятора: CS0117: «System.Web.HttpRequest» не содержит определения для ...

InЧтобы это исправить, мне пришлось добавить объявление web.config

<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>

Я обнаружил, что здесь , но я понятия не имею, зачем мне это объявление.

Я не уверен, для чего это нужно, и я обеспокоен тем, что у него может быть какой-то побочный эффект.

Знаете ли вы, зачем мне нужна эта декларация и как я мог ее избежать?

1 Ответ

2 голосов
/ 16 ноября 2011

Методы расширения были введены в .NET 3.5.По умолчанию встроенный код компилируется с помощью CompilerVersion v2.0.Вам нужно добавить указанный вами блок, чтобы дать указание среде выполнения компилировать языковые функции, представленные в .NET 3.5, поэтому значение CompilerVersion равно «v3.5».

Проблема связана с ASP.NET как расширениеметоды компилируются в обычных приложениях под компилятором CLR 2.0.

...