我使用带有.NET 4.6.1的ASP.NET Web应用程序完整框架模板创建了一个ASP.NET MVC项目
我尝试使用带有Entity Framework的脚手架项创建Api Controller。在创建过程中,它失败并显示错误消息 -
“未处理的异常:System.IO.PathTooLongException。”执行时 codegenerator.exe。
我的项目是这样的 -
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个字符。
答案 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)
4.6.2解决了maxpath超过260个字符https://blogs.msdn.microsoft.com/dotnet/2016/08/02/announcing-net-framework-4-6-2/
的问题答案 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之前运行它。