我有一个ASP.NET 5(vNext)应用程序,只是从beta5迁移到beta7,从dnx451迁移到dnx46,我无法正常工作。 我的另一个应用程序,在迁移后运行良好,我没有看到任何差异,但我发布它后会一直跟踪错误:
DirectoryNotFoundException: Could not find a part of the path 'D:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\Facades\System.Collections.Concurrent.dll'.
System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
Microsoft.AspNet.Mvc.Razor.Compilation.RoslynCompilationService.<>c__DisplayClass15_0.<CreateMetadataFileReference>b__0(String _)
System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
Microsoft.AspNet.Mvc.Razor.Compilation.RoslynCompilationService.CreateMetadataFileReference(String path)
我尝试了几种发布方式,我创建了一个全新的WebSite,仍然是相同的 - 只有这样才能让它工作就是在Startup.cs中注释掉以下内容:
app.UseMvc(routes =>
{
//default
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}"
);
routes.MapRoute(
name: "overrideRoute",
template: "{*url}",
defaults: new { action = "Index", controller = "Home" }
);
//web api
routes.MapRoute(
name: "apiRoute",
template: "api/{controller}/{action}/{bizObject}/{id?}"
);
});
如果没有上述,我可以写
app.Run(async context =>
{
context.Response.ContentType = "text/plain";
await context.Response.WriteAsync("test");
});
并且它可以工作,但显然我需要MVC,而我的其他类似应用程序也可以正常工作。
任何提示?
答案 0 :(得分:2)
这是一个已知问题。您可以按照https://github.com/projectkudu/kudu/issues/1675
中的错误进行操作基本上@Dijkgraaf是正确的。缺少整个外观文件夹(.NETFramework\v4.6\Facades\
),你无法做任何事情来解决这个问题。 Azure必须为目标4.6的构建添加该文件夹才能工作。如果可以,您可以尝试降级到dnx451
,看看它是否现在适用于您,直到上面的错误得到解决。如果你对dnx46
有很强的依赖性,那么不幸的是你只需要等待。