0

Как исправить ошибку IIS "compilerVersion"?

9

Я получаю следующую ошибку:

System.Configuration.ConfigurationErrorsException: Значение для атрибута 'compilerVersion' в параметрах провайдера должно быть 'v4.0' или позже, если вы компилируете для версии 4.0 или позже .NET Framework.

Что мне нужно сделать, чтобы решить эту проблему?

5 ответ(ов)

0

Чтобы настроить компилятор C# в вашем проекте, вы можете использовать следующий пример конфигурации в файле web.config или app.config. Это поможет вам установить нужный уровень предупреждений и версию компилятора.

<configuration>
    <system.codedom>
        <compilers>
            <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4"
                      type="Microsoft.CSharp.CSharpCodeProvider,System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                <providerOption name="CompilerVersion" value="v4.0"/>
                <providerOption name="WarnAsError" value="false"/>
            </compiler>
        </compilers>
    </system.codedom>
</configuration>

Объяснение ключевых частей:

  • language: Определяет типы файлов, которые будет обрабатывать компилятор (в данном случае C#).
  • extension: Указывает расширение файлов, которые являются исходным кодом (например, .cs).
  • warningLevel: Уровень предупреждений компилятора. Значение 4 означает, что будут показываться все предупреждения.
  • type: Указывает тип компилятора, который будет использоваться.
  • providerOption: Позволяет задавать дополнительные параметры для компилятора.

Обратите внимание, что параметры могут отличаться в зависимости от версии .NET и требований вашего проекта. Не забудьте проверить, соответствует ли библиотека и версия компилятора вашим нуждам.

0

В вашем случае, судя по всему, вы столкнулись с проблемой, когда родительское приложение использует .NET Framework 2.0, а дочернее приложение требует .NET Framework 4.0. Чтобы это исправить, вы правильно добавили <location path="." inheritInChildApplications="false"> в конфигурацию web.config родительского приложения. Это позволяет изолировать настройки компилятора для родительского приложения и предотвращает наследование настроек дочерними приложениями.

Вот пример вашего web.config для родительского приложения:

<location path="." inheritInChildApplications="false">
  <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>
</location>

Таким образом, вы ограничиваете использование компилятора версии 2.0 для родительского приложения и избегаете конфликтов с дочерним приложением, которое использует более новую версию. Если у вас есть дополнительные вопросы или необходимо больше информации, не стесняйтесь их задавать!

0

Чтобы удалить указанный блок из файла web.config, просто откройте его в текстовом редакторе и найдите секцию, содержащую следующий код:

<compilation debug="true" strict="true" explicit="true" targetFramework="4.0" />

Удалите эту строку целиком. После внесения изменений сохраните файл.

Важно помнить, что настройки в web.config могут оказывать влияние на работу вашего приложения, поэтому убедитесь, что удаление этой секции не повлияет на его функциональность. Если вам нужно отключить режим отладки, можно заменить debug="true" на debug="false" вместо полной удаления секции.

0

Мы случайно скопировали файл Web.config в папку C:\inetpub\wwwroot. В результате это привело к несовпадению конфигурации и возникновению ошибки compilerVersion. Удаление этого файла Web.config решило нашу проблему.

0

В вашем случае, когда вы работаете с устаревшим сайтом на WebForms (версия 2.0) и пытаетесь интегрировать новое приложение, разработанное на MVC 4.0, вы можете столкнуться с различными ошибками конфигурации. Если вы уже пробовали множество решений и ошибки все еще сохраняются, то вы можете попробовать обернуть весь web.config родительского приложения в следующий тег:

<location path="." inheritInChildApplications="false">
...... теги web.config здесь........
</location>

Этот подход позволит вам отключить наследование настроек из родительского web.config для дочернего приложения, что может помочь устранить конфликты между настройками старого приложения и новым MVC приложением. Не забудьте протестировать работоспособность после внесения изменений.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь