Проект Visual Studio F #: не может иметь две папки в дереве файлов с тем же именем?

В Visual Studio 2013 один из моих проектов включает в себя:

<ItemGroup>
    <Compile Include="Entity\Abstract\Entity.fs" />
    <Compile Include="Entity\HumanEntity.fs" />
    <Compile Include="State\Abstract\State.fs" />
    <Compile Include="State\Abstract\HumanState.fs" />
    <Compile Include="State\Human\HumanIdleState.fs" />
    <Compile Include="State\Human\HumanAwakenState.fs" />
</ItemGroup>

Visual Studio задыхается от этого, утверждая, что:

The project 'Entity.fsproj' could not be opened because opening it would cause a folder to be rendered multiple times in the solution explorer. One such problematic item is 'State\Abstract\State.fs'.

Если я изменяю так, все хорошо:

<ItemGroup>
    <Compile Include="Entity\AbstractEntity\Entity.fs" />
    <Compile Include="Entity\HumanEntity.fs" />
    <Compile Include="State\AbstractState\State.fs" />
    <Compile Include="State\AbstractState\HumanState.fs" />
    <Compile Include="State\Human\HumanIdleState.fs" />
    <Compile Include="State\Human\HumanAwakenState.fs" />
</ItemGroup>

Является ли это надзором в VS2013, или я делаю что-то не так?

Ответы

Ответ 1

К сожалению, это ограничение системы проектов F # в Visual Studio. Более подробный анализ можно найти в в этой статье.

В предстоящей поддержке организации папок в Visual F # Power Tools, мы должны добавить проверку, чтобы пользователи не добавляли папки с дублированным именем в проект с использованием пунктов меню (см. код и соответствующее обсуждение). Конечно, мы не можем запретить пользователям делать это, редактируя файлы fsproj.

Возможно, вы можете отправить предложение fsbugs в microsoft dot com, чтобы оно могло быть исправлено в предстоящей версии Visual F # Tools.

Ответ 2

Вот что я сейчас использую, чтобы обойти это ограничение:

Предположим, что вы зависите от внешних библиотек (например, Bootstrap и т.д.), и F # на удивление хорош в веб-материалах), которые упорядочивают свои файлы в иерархиях папок, у которых есть дубликаты имен папок.

Вы можете сохранить эту структуру папок, если вы измените капитализацию папок с тем же именем. Например, это работает (и вы можете расширить этот шаблон, если имя папки допускает достаточные комбинации заглавных букв)

Следующая структура папок:

шрифты\самозагрузки... таблицы стилей\самозагрузки... JavaScripts\самозагрузки...

Может быть включен в проект F #, подобный этому (тег Content является всего лишь примером, он может быть None и т.д.):

<Content Include="fonts\bootstrap\glyphicons-halflings-regular.eot" />
...
<Content Include="javascripts\Bootstrap\affix.js" />
...
<Content Include="stylesheets\BOotstrap\_alerts.scss" />
...

... и так далее.

Соответствующий бит в приведенном выше примере: b ootstrap vs. B ootstrap vs. BO отстранить.

После этого все работает. Я полагаю, что это не очень хорошо работает с файловыми системами, чувствительными к регистру, если вы не ошиблись с фактическими именами папок.