2012-11-12 26 views
8

Tôi có một trang web và các công trình:biên dịch tập tin thực thi csc.exe không thể được tìm thấy trong .NET 4.5 Azure triển khai

  • ASP.NET 4
  • MVC 3
  • Entity Framework 4.3
  • Chạy trong vai trò web Azure (tôi nhận thấy nó là osFamily = "1" kỳ lạ như tôi dự kiến ​​là 2 - nhưng dù sao ...)
  • Azure SDK 1.7

Tôi đã nâng cấp toàn bộ codebase của mình để được cập nhật với rất nhiều đồ chơi mới. Vì vậy, bây giờ nó là:

  • ASP.NET 4.5
  • MVC 4 (Razor 2)
  • Entity Framework 5
  • Azure cấu hình các thiết lập để osFamily = "3"
  • Azure SDK 1.8 (với Thư viện lưu trữ của khách hàng được nâng cấp cẩn thận lên 2 không 1.7)

Khi tôi truy cập trang web trong dàn dựng, tôi nhận được màn hình màu vàng chết nói rằng Tệp thực thi trình biên dịch csc.exe không thể được tìm thấy. Câu hỏi của tôi là Tại sao?

Nó hoạt động tốt tại địa phương, ở chế độ Phát hành. Tôi từ chối trong và các trường hợp chắc chắn đang chạy Windows Server 2012 (do đó. NET 4.5 ?? Tôi đã nhìn thấy nó khó nói kể từ khi NET 4.5 thay thế. NET 4 hội đồng trong các thư mục .NET 4).

Theo tiêu đề phản hồi, chắc chắn nó đang chạy IIS 8 nhưng thú vị là X-ASPNET-VERSION là 4.xxxx. Điều này có bình thường đối với một trang ASP.NET 4 không?

UPDATE:

tôi nhắm mục tiêu .NET framework 4 và thay đổi osFamily đến 2 và nó hiện đang làm việc. Vì vậy, bây giờ tôi nghi ngờ rằng tôi có một hội đồng bên thứ 3 sử dụng NET 3.5 hoặc 2 (Infact tôi chắc chắn tôi làm) nhưng chắc chắn khi nhắm mục tiêu một khuôn khổ .NET cao hơn so với những người tham chiếu trong hội đồng nhập khẩu phiên bản cao hơn của khuôn khổ. đã sử dụng??

osFamily = "3" chỉ có .NET 4 và 4.5 được cài đặt vì vậy tôi đoán đây là lý do cho lỗi nhưng tôi không đúng về điều nhắm mục tiêu? Tôi muốn sử dụng osFamily = "3" những gì tôi có thể làm ở đây?

Stack trace

[InvalidOperationException: Compiler executable file csc.exe cannot be found.] 
    System.CodeDom.Compiler.RedistVersionInfo.GetCompilerPath(IDictionary`2 provOptions, String compilerExecutable) +8675071 
    Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch(CompilerParameters options, String[] fileNames) +739 
    Microsoft.CSharp.CSharpCodeGenerator.FromSourceBatch(CompilerParameters options, String[] sources) +3293761 
    Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromSourceBatch(CompilerParameters options, String[] sources) +64 
    HibernatingRhinos.Profiler.Appender.Util.GenerateAssembly.Compile(String fileName, String[] sources, IEnumerable`1 assembliesToReference) +1252 
    HibernatingRhinos.Profiler.Appender.Util.GenerateAssembly.CompileAssembly(IEnumerable`1 sourcesResources, IEnumerable`1 assembliesToReference, String assemblyName) +118 
    HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.SetupDatabaseDefaultConnectionFactoryIfNeeded() +929 
    HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.SetupEntityFrameworkIntegration() +80 
    HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.Initialize(EntityFrameworkAppenderConfiguration configuration) +47 
    HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.Initialize() +73 
    Web4.MvcApplication.Application_Start() +17 

[HttpException (0x80004005): Compiler executable file csc.exe cannot be found.] 
    System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +12864673 
    System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +175 
    System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +304 
    System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +404 
    System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +475 

[HttpException (0x80004005): Compiler executable file csc.exe cannot be found.] 
    System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12881540 
    System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159 
    System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +12722601 

Trả lời

1

OK David Ebbo đã chỉ cho tôi đúng hướng và tôi bắt đầu xem xét kỹ lưỡng Entity Framework Profiler. Có một chuỗi here về nó.

Điều gì đó về việc tạo hội đồng vào thời gian chạy và có vẻ như osfamily = "3" (Server 2012) sẽ không cho phép (nó hoạt động trên osfamily = "2" (Server 2008 R2)). Sẽ không gỡ lỗi nữa vì tôi không muốn profiler trên môi trường sống của tôi. Loại bỏ EF Profiler làm cho nó hoạt động.

2

Vâng, nếu bạn có Server 2012, bạn chắc chắn chạy Fx 4.5 và không phải là 4.0, vì nó là một trong nâng cấp diễn ra.

Để trả lời câu hỏi của bạn bằng chữ in đậm, một ứng dụng ASP.NET nhất định chỉ có thể sử dụng một khung công tác tại một thời điểm. Nếu bạn đang chạy như một trang web 4.5, sau đó bất kỳ 2.0/3.5 hội đồng nên chỉ chạy như là dưới khuôn khổ 4.5.

Vì vậy, sự nghi ngờ của tôi là những cụm cũ hơn đó là không phải là số gốc của sự cố của bạn.

Điều đó đang được nói, tôi không thể giải thích vấn đề csc. Nó có thể giúp bao gồm thông báo lỗi chính xác mà bạn đang nhận được cũng như một số dấu vết ngăn xếp.

+0

Cảm ơn David. Được rồi nghi ngờ của tôi là chính xác về phiên bản .NET nhưng bây giờ tôi đang hết ý tưởng. Tôi đã thêm Stack Trace khi được hỏi. Tôi nhận thấy Hibernating Rhinos rất tự hỏi nếu nó là để làm với EF Prof. Tôi không thể nhìn thấy lý do tại sao nhưng tôi có thể thử loại bỏ nó – BritishDeveloper

+2

Ah có, ngăn xếp là thú vị như chúng ta thấy csc không được đưa ra bởi ASP.NET nhưng bởi HibernatingRhinos. Và tôi thấy bạn đã tìm thấy một chủ đề trên diễn đàn của họ liên quan đến điều này. Cảm ơn các điểm thưởng :) –

+0

David Ebbo! Bạn cứu tôi! Tôi cũng đã HibernatingRhinos tạo ra lỗi này! Cảm ơn bạn! –

2

Tôi gặp sự cố tương tự. Đảm bảo rằng bạn đang nhắm mục tiêu trình biên dịch chính xác. Tôi đã nhắm mục tiêu v4.5 (nhưng có shoul được v4.0 như bây giờ có 4,5 biên dịch)

Trong séc web.config

<system.web> 
<compilation debug="true" defaultLanguage="c#" optimizeCompilations="true" targetFramework="4.0"> 
</system.web> 
0

Tôi gửi bài này với hy vọng rằng nó sẽ giúp người . Chúng tôi đã tự động biên dịch mã với phiên bản 2 của khung công tác và trên máy chủ chỉ có .net 4, chúng tôi đã nhận được thông báo lỗi. Nó chỉ đơn giản là vì chúng ta cứng mã hóa phiên bản khuôn khổ:

var provider = new CSharpCodeProvider(new Dictionary<String, String> { { "CompilerVersion", "v3.5" } }); 

Vì vậy, nó chỉ là vấn đề loại bỏ đó - có lẽ vì thế nó biên dịch với bất kỳ phiên bản của khuôn khổ này đang được sử dụng vào thời điểm đó.

var provider = new CSharpCodeProvider(); 

Vì vậy, lỗi chỉ là về mã cần được biên dịch nhưng trình biên dịch cho phiên bản khung yêu cầu không có mặt. Các tùy chọn khác chỉ là để đảm bảo tính năng .net 3.5 được cài đặt.

Các vấn đề liên quan