Есть ли способ автоматически включить все файлы F# в каталог/подкаталоги для компиляции? В идеале я бы хотел, чтобы мне не приходилось менять свой файл .fsproj
каждый раз, когда я создаю новый файл.
Я думал, что добавление следующего в мой файл .fsproj
может сработать, но, к сожалению, порядок файлов указан в вопросе.
<ItemGroup>
<Compile Include = "**\*.fs" />
</ItemGroup>
<ItemGroup>
<Compile Remove = "obj\**" />
<EmbeddedResource Remove = "obj\**" />
<Compile Remove = "bin\**" />
<EmbeddedResource Remove = "bin\**" />
</ItemGroup>
Лучшие причины нежелания менять мой файл .fsproj
, которые я мог придумать, следующие:
В качестве дополнительного второстепенного вопроса: может ли кто-нибудь также пояснить, почему поведение F# MSBuild заключается в том, что вы должны указывать каждый файл в правильном порядке? Я думаю, что это связано с предотвращением циклических зависимостей в кодовой базе, но я не понимаю, почему компилятор не может просто собрать все файлы во время компиляции, и если он обнаружит какие-либо циклические зависимости, то выдаст ошибку компиляции.
Обновлено: я должен упомянуть, что использую .NET 7.0.
Указание порядка файлов — это функция самого языка F#, а не какого-либо инструмента. Вы можете себе представить, что компилятор будет компилироваться сверху вниз, по строкам и по файлам, перечисленным в файле проекта. При этом он будет смотреть только назад, чтобы найти элементы, на которые есть ссылки. Это позволяет избежать циклических зависимостей, просто чтобы упомянуть об одном из преимуществ.
Так что нет, вы не можете избежать перечисления порядка. Вы также должны разрешить конфликт слияния, возникающий в результате этого, поскольку на самом деле это конфликтная логика в вашей программе, если вы придумали разные порядки.
Вы можете прочитать больше об организации исходного кода F# в отличной статье Скотта Влашина на эту тему: Организация модулей в проекте. На самом деле, вы должны пройти весь сайт, если вы еще этого не сделали.
Спасибо за ответ. Не то, на что я надеялся, но думаю, это просто состояние языка. Я понимаю, что это помогает предотвратить циклические зависимости, но есть ли какие-либо языковые причины/примеры того, что файлы должны быть указаны в определенном порядке, и код будет вести себя по-другому? Прямо сейчас я не понимаю, почему компилятор не может просто сканировать используемые файлы и сам проверять циклические зависимости. Затем, если он его обнаружил, просто вызовите ошибку компиляции, чтобы сообщить пользователю
Мы хотим, чтобы язык был таким. Это обеспечивает аккуратную организацию. Это проще, когда мы знаем, что ссылки могут указывать только назад.
Это, вероятно, поможет вам: Циклические зависимости — это зло.