Visual Studio 2013 дает "Невозможно добавить запись дубликата коллекции типа" mimeMap "

У меня есть сайт, который был создан с использованием Visual Studio 2010. Когда я обновился до Visual Studio 2013, на некоторых страницах я получил бы сообщение об ошибке:

Невозможно добавить дублируемую запись коллекции типа "mimeMap" с уникальным атрибутом ключа "fileExtension", установленным в ".mp4".

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

Ответ 1

Проблема заключалась в том, что когда я переключился на Visual Studio 2013, веб-сервер, используемый для отладки, изменился. Visual Studio 2013 по умолчанию использует IIS Express. Хотя Visual Studio 2010 SP1 поддерживает IIS Express, моя установка по-прежнему использовала сервер Visual Studio Development по умолчанию.

Как и IIS 7, Visual Studio Development Server по умолчанию не определял тип mime mp4, поэтому почему мы его явно добавили в web.config, например:

<system.webServer>
<staticContent>
  <mimeMap fileExtension=".mp4" mimeType="video/mp4" />
</staticContent>
</system.webServer>

IIS Express, с другой стороны, основан на IIS 8, а IIS 8 определяет тип mime mp4 и многие другие по умолчанию. Поэтому, когда mimeMap явно задан в файле web.config, он считается дубликатом.

Если вам не нужна поддержка IIS 7 в рабочей среде, вы можете просто полностью удалить тег mimeMap из web.config. Если вам необходимо поддерживать BOTH IIS 7 и IIS 8, вы можете сначала использовать тег remove для mimeMap, а затем установить его снова, например:

<system.webServer>
<staticContent>
    <remove fileExtension=".mp4" />
    <mimeMap fileExtension=".mp4" mimeType="video/mp4" />
</staticContent>
</system.webServer>

В IIS 7 удаление ничего не сделает, поскольку оно еще не определено, но в IIS 8 оно удалит оригинал, чтобы новый не дублировал. Благодаря Оливеру Пайену за его пост в разнице IIS 7 и IIS 8 и устранении решения.

Ответ 2

Просто удалите расширение, прежде чем добавлять его.

<remove fileExtension=".mp4" />
<mimeMap fileExtension=".mp4" mimeType="video/mp4" />

Ответ 3

В моем случае я решил проблему, просто удалив строку, которая делала дубликаты:

 <configuration>
    (...)
    <system.webServer>
        <staticContent>
            <!--mimeMap fileExtension=".json" mimeType="application/json" /-->
        </staticContent>
    </system.webServer>
 </configuration>