Проект 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 отстранить.
После этого все работает. Я полагаю, что это не очень хорошо работает с файловыми системами, чувствительными к регистру, если вы не ошиблись с фактическими именами папок.