在asp.net-core mvc应用程序中创建新的ApiController时出现PathTooLongException

时间:2016-09-19 13:08:00

标签: entity-framework-6 asp.net-core asp.net-core-mvc asp.net-core-1.0 asp.net-core-webapi

我使用带有.NET 4.6.1的ASP.NET Web应用程序完整框架模板创建了一个ASP.NET MVC项目

我尝试使用带有Entity Framework的脚手架项创建Api Controller。在创建过程中,它失败并显示错误消息 -

  

“未处理的异常:System.IO.PathTooLongException。”执行时   codegenerator.exe。

enter image description here

我的项目是这样的 -

  

d:\ Perforce的\ XYZ \ ABC \ POC \ ABC_PROEJCT \ SRC \ ABC_PROEJCT \控制器

这就是我的 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 Update 3

.NET framework 4.6.1

带有预览2工具集的.NET核心SDK 1.0

Windows 7 64位操作系统

请您提供一些输入以解决此问题?

9月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个字符。

3 个答案:

答案 0 :(得分:0)

在Windows API(使用中)中,路径的最大长度为MAX_PATH,定义为260个字符。 在创建过程中,EF代码生成器工具尝试创建类似

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

但看起来此路径最终需要260多个字符,并且您看到System.IO.PathTooLongException错误:

  

当路径或文件名长于系统定义的最大长度时引发的异常。

(实际上与错误窗口中的消息相同)

为避免这种情况,您应该减少项目路径/控制器名称中的字符数。

根据评论进行更新:

在4.6.2版本的System.IO API中修复了260个字符(MAXPATH)文件名长度限制,因此升级项目以使用.NET framework 4.6.2可能是一个解决方案。

答案 1 :(得分:0)

答案 2 :(得分:0)

我遇到了与Visual Studio 2015 Update 3,asp.net核心1.1,实体框架核心1.1相同的错误。

我终于意识到问题是我的项目中有一个npm install文件夹,它有太多嵌套目录。如果查看输出选项卡,可以看到在构建步骤期间抛出异常。但是我永远意识到这一点。虽然该项目在Visual Studio中构建良好,但由于某种原因,它会在那里引发错误。

我在这里创建了一个问题:https://github.com/aspnet/Scaffolding/issues/377

要解决此问题,我删除了{{1}}文件夹并再次运行{{1}}。这次我得到了一个更扁平的目录结构。我必须在升级npm之前运行它。