PathTooLongException при создании нового ApiController в приложении mvc asp.net-core

Я создал проект ASP.NET MVC с использованием шаблона веб-приложения ASP.NET Full framework с .NET 4.6.1

Я попытался создать Api Controller, используя элемент scaffolding с Entity Framework. Во время создания происходит сбой с сообщением об ошибке -

«Необработанное исключение: System.IO.PathTooLongException». при выполнении codegenerator.exe.

введите описание изображения здесь

Мой проект такой -

D: \ Perforce \ XYZ \ ABC \ POC \ ABC_PROEJCT \ src \ ABC_PROEJCT \ Controllers

Вот как выглядит мой project.json -

{
  "dependencies": {
    "Glimpse": "2.0.0-beta1",
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Identity": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.0",
    "Microsoft.AspNetCore.Mvc.TagHelpers": "1.0.0",
    "Microsoft.AspNetCore.Mvc.WebApiCompatShim": "1.0.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
    "Microsoft.EntityFrameworkCore.SqlServer.Design": {
      "version": "1.0.0",
      "type": "build"
    },
    "Microsoft.EntityFrameworkCore.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    "Microsoft.Extensions.Configuration.CommandLine": "1.0.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": "1.0.0-preview2-final",
    "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": "1.0.0-preview2-final"
  },

  "tools": {
    "BundlerMinifier.Core": "2.0.238",
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
    "Microsoft.Extensions.SecretManager.Tools": "1.0.0-preview2-final",
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
      "version": "1.0.0-preview2-final",
      "imports": [
        "portable-net45+win8"
      ]
    }
  },

  "frameworks": {
    "net461": { }
  },

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "web.config",
      "Views",
      "Areas/**/Views",
      "appsettings.json"
    ]
  },

  "scripts": {
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

Моя среда -

Visual Studio 2015 с обновлением 3

.NET framework 4.6.1

.NET core SDK 1.0 с набором инструментов Preview 2

64-битная ОС Windows 7

Не могли бы вы представить, как решить эту проблему?

Обновление от 20 сентября

На вкладке Вывод в VS2015 я вижу выполнение следующей команды при создании контроллера API с использованием шаблонов:

C:\Program Files\dotnet\dotnet.exe aspnet-codegenerator --project "D:\Perforce\###\#######\POC\################\src\################" controller --force --controllerName UserTypesTestController --model ################.Models.UserTypes --dataContext ################.Models.#####UserContext --relativeFolderPath Controllers --controllerNamespace ################.Controllers --restWithNoViews.

Полный путь вместе с именем контроллера не превышает 260 символов.


comment
укажите параметры, которые используются для генерации кода   -  person Set    schedule 19.09.2016
comment
Я не запускал его из CLI. Я использовал Visual Studio, щелкнул правой кнопкой мыши на контроллере- ›Добавить новый элемент скаффолда, чтобы добавить APIController.   -  person satish ganai    schedule 19.09.2016
comment
@Set, я добавил в свой пост команду генерации кода с параметрами.   -  person satish ganai    schedule 20.09.2016


Ответы (3)


4.6.2 решает эту проблему, когда maxpath превышает 260 символов https://blogs.msdn.microsoft.com/dotnet/2016/08/02/announcing-net-framework-4-6-2/

person mvermef    schedule 21.09.2016

В Windows API (который используется) максимальная длина пути составляет MAX_PATH, что определяется как 260 символов. Во время создания инструмент генератора кода EF пытается создать файл типа

D:\Perforce\XYZ\ABC\POC\ABC_PROEJCT\src\ABC_PROEJCT\Controllers\Yourcontroller.cs

но похоже, что этот путь в конце занимает более 260 символов, и вы видите System.IO.PathTooLongException ошибка:

Исключение, которое выдается, когда путь или имя файла длиннее максимальной длины, определенной системой.

(на самом деле то же сообщение, что и у вас в окне с ошибкой)

Чтобы избежать этого, вам следует уменьшить количество символов в пути вашего проекта / имени контроллера.

Обновление на основе комментариев:

ограничение длины имени файла в 260 символов (MAXPATH) было исправлено в API-интерфейсах System.IO в версии 4.6.2, поэтому обновление проекта для использования .NET framework 4.6.2 может быть решением.

person Set    schedule 19.09.2016
comment
Из исключения очевидно, что мы превышаем 260 символов. Но я рассчитал всю длину пути, и, если быть точным, он содержит 118 символов. - person satish ganai; 19.09.2016
comment
@mvermef agh, они исправили ограничение длины имени файла в 260 символов (MAXPATH) в API System.IO blogs.msdn.microsoft.com/dotnet/2016/08/02/. Думаю, вы можете опубликовать это как ответ) - person Set; 20.09.2016

Я столкнулся с той же ошибкой с Visual Studio 2015 Update 3, asp.net core 1.1, entity framework core 1.1.

Я наконец понял, что проблема была в папке node_modules в моем проекте, в которой было слишком много вложенных каталогов. Если вы посмотрите на вкладку вывода, вы увидите, что исключение выбрасывается на этапе сборки. Мне потребовалась целая вечность, чтобы осознать это. Хотя в Visual Studio проект компилируется нормально, по какой-то причине он выдает ошибку.

Я создал здесь проблему: https://github.com/aspnet/Scaffolding/issues/377 < / а>

Чтобы решить эту проблему, я удалил папку node_modules и снова запустил npm install. На этот раз у меня была гораздо более плоская структура каталогов. Я должен был запустить его перед обновлением npm.

person Philip Holly    schedule 13.01.2017