Безумно глубокая длина пути в .Net Core 1.1

Кто-нибудь видел проблему в .NET Core 1.1, когда под папкой netcoreapp1.1\publish они заканчиваются папкой bin, которая, кажется, зацикливается сама на себе и в конечном итоге приводит к появлению сообщения слишком длинного пути в Windows. Попытка удалить эту папку в проводнике Windows приводит к появлению сообщения Source Too Long. Единственным решением было использовать RoboCopy.

Вот пример одного из сгенерированных путей:

bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\ bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\ bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\bin\Debug\netcoreapp1.1\publish\ bin\release\netcoreapp1.1\publish\bin\release\netcoreapp1.1\publish\bin\release\netcoreapp1.1\publish\bin\release\netcoreapp1.1\publish\bin\release\netcoreapp1.1\publish\ Контроллеры\

Это проблема, вызванная тем, что я что-то неправильно настроил?

Последняя очистка вернула следующую статистику:

Папки: 6866 Файлы: 7391

Я публикую с помощью следующей команды:

dotnet publish -c debug

Кажется, что каждая публикация делает структуру папок глубже, и это, похоже, связано с файлами CSHTML в моем проекте, создающими эту структуру папок:

\publish\bin\debug\netcoreapp1.1\publish\Controllers\Account\Views

Затем при второй сборке этой структуры:

  \publish\bin\debug\netcoreapp1.1\publish\bin\debug\netcoreapp1.1\publish\Controllers\Account\Views

И так далее...

Я использую SDK 1.0.0-preview2-1-003177.


person Michael Edwards    schedule 04.03.2017    source источник
comment
Если я правильно понимаю, эта структура вложенных папок действительно существует на диске?   -  person Millie Smith    schedule 09.03.2017
comment
Кроме того, я не думаю, что вы сможете удалить эту папку с помощью проводника Windows, поскольку эта программа во многих отношениях ограничена определением MAX_PATH (260). Вы можете написать программу, которая удалит папку за вас. Изменить: я полагаю, что Robocopy тоже работает. Настоящая проблема заключалась в том, что путь был больше, чем MAX_PATH.   -  person Millie Smith    schedule 09.03.2017
comment
Как вы его опубликовали?   -  person Pawel    schedule 09.03.2017
comment
Какую версию SDK вы используете?   -  person Marcus    schedule 10.03.2017
comment
@marc Я добавил это к вопросу.   -  person Michael Edwards    schedule 10.03.2017


Ответы (2)


Я помню, что у меня была такая же проблема с preview2 .NET Core SDK. Это было исправлено либо в превью3, либо в превью4. И это определенно исправлено в .NET Core SDK 1.0. как упоминалось @Marc. Просто обновите SDK https://www.microsoft.com/net/download/core#/sdk.

С новым SDK ваш проект будет преобразован в csproj и MSBuild, так что больше нет project.json.

EDIT: проект будет автоматически преобразован в VS 2017, если вы используете инструмент командной строки, вы должны применить dotnet-migrate.

person Andrii Litvinov    schedule 14.03.2017

Попробуйте обновить SDK до доступной сейчас версии. Версия 1.0 и версия 1.1 (на момент публикации) включены в один пакет, который можно загрузить отсюда. https://www.microsoft.com/net/download/core

как упоминал @Andrii Litvinov, миграция произойдет для VS2017. если вам нужна помощь: Microsoft предлагает бесплатную помощь по миграции для проекта.json в msbuild. (на момент этого обновления 15 марта 2017 г.]

проверьте: http://landinghub.visualstudio.com/migrate-dotnetcore

person Marcus    schedule 10.03.2017
comment
Где лучше всего найти строку, которую необходимо добавить в файл global.json, чтобы указать, что он должен использовать последнюю версию SDK, то есть часть 1.0.0-preview2-1-003177? - person Michael Edwards; 14.03.2017
comment
@MichaelEdwards это не часть проекта, это часть среды. Вам необходимо загрузить и обновить среду разработки. - person Marcus; 14.03.2017
comment
Я запустил EXE-файл обновления, но понятия не имею, какое строковое значение я должен теперь использовать для Global.json. Должно ли это обновляться автоматически? - person Michael Edwards; 14.03.2017
comment
@MichaelEdwards версию обновлять не требуется, так как среда разработки извлекает библиотеки на машине во время компиляции. SDK — это сетевая основная библиотека приложений, которая используется в вашей библиотеке разработки. Ваш global.json нацелен на конкретную версию в библиотеке SDK. поскольку ранее у вас была предварительная версия SDK, обновление фактического SDK гарантирует, что все, что используется в вашем проекте, использует производственный код. - person Marcus; 15.03.2017