Thông báo lỗi Pars Parser: Không thể tải loại hình trong Global.asax


203

Tôi đang làm việc trên một dự án MVC3 và nhận được lỗi sau:

Thông báo lỗi phân tích cú pháp: Không thể tải loại 'GodsCreationTaxidermy.MvcApplication'.

Lỗi nguồn:

Dòng 1: <%@ Application Codebehind="Global.asax.cs" Inherits="GodsCreationTaxidermy.Core.MvcApplication" Language="C#" %>

Lỗi tôi nhận được là không thể tải GodsCreationTaxidermy.Core.MvcApplication nhưng trong màn hình này, phần Core không hiển thị trong lỗi:

Ảnh chụp màn hình trang lỗi

Có ai có bất kỳ ý tưởng hoặc một giải pháp cho lỗi này?


8
Bạn có thực sự có lớp GodsCreationTaxidermy.Core.MvcApplication trong ứng dụng của bạn không? Nếu không xin vui lòng tạo cùng và biên dịch dự án. Nó sẽ làm việc chắc chắn.
Shailesh

4
Có, tôi có GodsCreationTaxidermy.Core.MvcApplication (Global.asax.cs)
Nhà phân tích tâm lý

Tệp Global.asax dường như được sử dụng (theo ảnh chụp màn hình) trông khác với tệp bạn đã hiển thị.
Darin Dimitrov

kiểm tra xem chuỗi thừa kế có giống với đường dẫn đến lớp trong ứng dụng của bạn không (tên không gian + tên đường dẫn), đó là cả hai đều là GodsCreationTaxidermy.Core.MvcApplication
linkerro

Đó là một trong những vấn đề của Darin, bất kể tôi làm gì, nó luôn để lại phần cốt lõi
PsychoCoder

Câu trả lời:


175

Máy chủ web cục bộ của bạn đang chạy mã khác với những gì bạn đang thực sự làm việc. Đảm bảo bạn đã ngừng gỡ lỗi, dừng máy chủ web cục bộ của bạn, dọn dẹp và xây dựng lại như Peter đề xuất, kiểm tra kỹ lại global.asax và global.asax.cs của bạn và thử lại.

Nếu điều này không hoạt động và bạn đang sử dụng IIS cục bộ, hãy thử xóa trang web trong IIS Manager và tạo lại nó theo cách thủ công.


4
Lỗi rất lạ thật. Tôi đã triển khai lên IIS trên máy chủ và nhận được điều này. Làm sạch và biên dịch lại làm việc cho tôi quá.
Piotr Kula

2
Clean / Rebuild + tạo lại Thư mục ảo và sau đó nó hoạt động.
fantastik78

4
Có vấn đề khi tôi có cùng một dự án mở trong hai trường hợp Visual Studio. Vì vậy, tôi đã có hai phiên bản IIS Express đang chạy. Tôi đã phải đóng một và sau đó nó đã được giải quyết.
lvmeijer

4
Bạn cũng có thể thử xóa các thư mục bin / obj trong dự án của bạn.
arni

1
Tôi đã làm theo các hướng dẫn này và ném thêm một vài lần dọn dẹp / xây dựng lại, thay đổi khoảng trắng trong tệp .asax, định dạng lại màn hình của tôi và thực hiện một trò hề vui nhộn kèm theo các ống Pan và điều đó dường như là một mánh khóe.
MrBoJangles

206

Kiểm tra xem đường dẫn đầu ra của dự án (thuộc tính dự án / Xây dựng) được đặt thành binkhông bin\Release hoặcbin\Debug

Vì một số lý do, IIS (VS Development Server hoặc Local IIS) luôn truy cập các thư viện từ binthư mục (và sẽ không tìm kiếm các thư mục con)


27
Tín dụng khi đến hạn. Đã khắc phục sự cố của tôi, ứng dụng của tôi đã được đặt để sử dụng bin \ Debug, thay đổi nó thành bin đã giải quyết nó. Cảm ơn nhiều.
Joey Bob

Thật thú vị khi biết rằng các dự án ASP.NET không sử dụng đường dẫn đầu ra mặc định bin / $ (Cấu hình) /. Rất cám ơn câu trả lời!
Jaanus Varus

2
@JamesPusateri: hãy cẩn thận. Mỗi khi bạn khởi chạy, nó sẽ sử dụng những gì trong / bin. Vì vậy, có lẽ kết quả của bản dựng này bạn đã thực hiện sau khi bạn thay đổi nó.
Vincent de Lagabbe

1
Wow, tại 2018 IIS vẫn hoạt động theo cách này. Xấu, rất tệ cho Microsoft. Cảm ơn!
Rodrigo T.

1
Không có gì thay đổi trong gần 7 năm, lời khuyên vẫn có ích
Yuriy Vikulov

33

Hãy thử sửa đổi tệp global.asax của bạn (đơn giản thêm một khoảng trắng ở đâu đó) và chạy lại. điều này sẽ buộc máy chủ web tích hợp phải làm mới và biên dịch lại tệp global.asax.

Cũng làm sạch và xây dựng lại - nên khắc phục vấn đề


4
Sửa đổi global.asax không làm gì cho tôi, nhưng việc dọn dẹp và xây dựng lại đã khắc phục vấn đề :)
NightShigs

Tôi gặp vấn đề này khi hết điện. Làm sạch và xây dựng lại giúp. Cảm ơn!
Gorgi Rankovski

Làm sạch thất bại. Thiết lập thất bại. Tôi không có vấn đề với con đường xây dựng của tôi. Điều này, tuy nhiên, đã lừa Cảm ơn!
egandalf

Cảm ơn câu trả lời của bạn Ông Munnings
dada

30

Điều này đôi khi xảy ra nếu bạn thay đổi thông tin không gian tên (cấp dự án hoặc lớp) sau global.asax được tạo.

Nhấp chuột phải vào Global.asax tệp và chọn "Mở bằng" và sau đó chọn "Trình soạn thảo XML (Văn bản) có mã hóa" (các trình soạn thảo khác có thể hoạt động tốt, nhưng đây là những gì tôi sử dụng).

Sau đó chỉnh sửa phần "Kế thừa" trong chỉ thị XML

<% @ Application Codebehind = "Global.asax.cs" Kế thừa = "GodsCreationTaxidermy.MvcApplication" Language = "C #"%>)

sao cho nó khớp với tên đầy đủ thực tế của lớp Ứng dụng của bạn. Và đó là nó.

Một tùy chọn khác là sao chép tất cả mã của bạn khỏi Global.asax.cs, sau đó xóa và tạo một tệp Global.asax khác (và sau đó sao chép mã trở lại vào Global.asax.cs).


Điều này cũng làm việc cho tôi. Tôi đã thay đổi không gian tên cho lắp ráp cho tất cả các dự án trong giải pháp. Vì vậy, phải chỉnh sửa Global.asaxtệp như đã nêu trong câu trả lời này và làm cho nó khớp với những gì trong cài đặt Cấu hình dự án.
Shiva

21

Tôi đóng cửa và mở lại studio hình ảnh và nó hoạt động.


4
đóng TẤT CẢ phòng thu hình ảnh của bạn
Jboy Flaga 8/12/14

11
Đầu tiên tất cả chúng ta nên thử ra khỏi xe, đóng tất cả các cửa, sau đó quay trở lại.
đồ ngủ

không, bạn phải đóng cửa trên TẤT CẢ ô tô của mình cùng một lúc.
BlackICE

17

Tôi đã phải đến BUILD -> QUẢN LÝ CẤU HÌNH và - ahem - đánh dấu vào ô bên cạnh dự án của tôi để đảm bảo nó thực sự được xây dựng.


2
Tôi không hiểu downvote. Điều này có khả năng có thể là một giải pháp. Điều này thực sự phù hợp hơn hầu hết mọi người nghĩ ... Nếu không được kiểm tra, nó không phải luôn luôn là vị trí rõ ràng nhất. Đặc biệt là khi có một vài cấu hình.
Anthony Mason

Tôi thích câu trả lời của bạn và lý luận của bạn!
UKM

1
Đây cũng là vấn đề của tôi và tôi không biết làm thế nào các dự án được bỏ chọn khỏi cấu hình.
Seth

5

Tôi đã có vấn đề này ngày hôm nay, và tôi phải mất một thời gian để tìm ra nguyên nhân.

Về cơ bản, dự án VS2015 chính của tôi bao gồm một dự án con đã được xây dựng bằng phiên bản cao hơn của .Net Framework.

Thật kỳ lạ, khi bạn gặp vấn đề này, VS2015 sẽ vui vẻ báo cáo rằng giải pháp đã được xây dựng ổn, nhưng khi bạn thử và chạy trang web, nó chỉ cung cấp cho bạn lỗi sai đó, cho rằng Global.asax.cs tệp sai.

Vì vậy, nếu bạn thấy lỗi này và Dọn dẹp / Xây dựng lại không giúp ích gì, hãy mở Referencescây Dự án của bạn và kiểm tra dấu chấm than.

nhập mô tả hình ảnh ở đây

Ngoài ra, hãy kiểm tra Outputcửa sổ của bạn cho các tin nhắn như thế này:

The primary reference "C:\Projects\Business Objects 4\bin\Release\BusinessObjects.dll" 
could not be resolved because it was built against 
the ".NETFramework,Version=v4.5" framework. 
This is a higher version than the currently targeted framework
".NETFramework,Version=v4.0".

Tất nhiên, giải pháp là nhấp chuột phải vào dự án chính của bạn, chọn tab trên cùng, "Ứng dụng" và thay đổi phiên bản Target Framework thành phiên bản cao hơn phù hợp với dự án phụ của bạn.

Thật khó chịu khi Visual Studio 2015 sẽ cho phép bạn xây dựng và chạy đầy đủ các Giải pháp lặng lẽ chứa vấn đề này. Đó là yêu cầu rắc rối ..!


2

Bạn cũng có thể kiểm tra thuộc tính trang web của bạn trong IIS. (Trong IIS, nhấp chuột phải vào trang web và chọn Thuộc tính.) Đảm bảo cài đặt Đường dẫn vật lý đang trỏ đến đường dẫn chính xác cho ứng dụng của bạn chứ không phải một số ứng dụng khác. (Điều đó đã sửa lỗi này cho tôi.)


2

Tôi chỉ gặp điều này trên một ứng dụng MVC5 và không có gì làm việc cho tôi. Điều này xảy ra ngay sau khi tôi cố gắng thực hiện SVN trở lại phiên bản cũ hơn của dự án.

Tôi đã phải xóa global.asax.cs và sau đó thêm một cái mới bằng cách nhấp chuột phải vào Project -> Thêm mục mới -> Global.asax và THAT cuối cùng đã sửa nó.

Chỉ cần nghĩ rằng nó có thể giúp đỡ một ai đó.


Nếu điều đó khắc phục nó cho bạn, có thể có điều gì đó đã gây rối về thuộc tính "Xây dựng hành động" của global.asax.cstệp hiện có . Nó nên được đặt thành "Biên dịch". Hành động xây dựng của global.asaxchính tệp phải được đặt thành "Nội dung".
Steven Liekens

Tôi đã làm chính xác những gì @iAteABug_And_iLiked_it đã làm và vấn đề đã được giải quyết!
kẽmzinc

2

Tôi phải báo cáo rằng tôi đã thử ít nhất 4 đề xuất từ ​​bài đăng này. Không ai trong số họ làm việc. Tuy nhiên, tôi vui mừng báo cáo rằng tôi đã phục hồi bằng cách lấy lại từ bản sao lưu. Chỉ phải cập nhật thay đổi mã cuối cùng của tôi từ tệp nhật ký. Mất ít hơn 10 phút. Đã dành 3 lần mà đọc bài đăng này và thử các đề xuất khác. Lấy làm tiếc.

Đó là một lỗi rất kỳ lạ. Chúc may mắn cho bất cứ ai khác gặp phải gremlin này.


2

Tôi gặp vấn đề tương tự khi tôi có 2 phiên bản Visual Studio chạy cùng một dự án. Vì vậy, tôi đã đóng cả Visual Studio và chỉ mở một phiên bản và nó hoạt động tốt ngay bây giờ!


2

Tôi đã làm việc trên một dự án web ASP.NET dựa trên thư mục cũ hơn (mà tôi rất ghét) - và thấy đây là cách khắc phục của tôi:

Tạo một App_Codethư mục (nếu bạn chưa có)

Di chuyển Global.asax.vbtệp vào App_Codethư mục

Đánh dấu trong Global.asax có thể bỏ qua mọi không gian tên (ít nhất, đối với kiểu dự án này, afaik):

<%@ Application Codebehind="Global.asax.vb" Inherits="MyApp" Language="VB" %>

... Trong đó "MyApp" là tên của lớp được định nghĩa trong Global.asax.vb


2

"BUILD -> QUẢN LÝ CẤU HÌNH và - ahem - đánh dấu vào ô bên cạnh dự án của tôi để đảm bảo nó thực sự được xây dựng." Điều đó và đi đến thư mục dự án trong windows explorer, nhấn tùy chọn và bỏ chọn hộp kiểm "Chỉ đọc" đã giúp.


đơn giản là nó làm việc cho tôi Dự án chưa có tùy chọn xây dựng cho phép tôi không biết tại sao nhưng cách giải quyết này là điều tôi cần, cảm ơn.
willyMon

1

Làm trống thư mục bin. Xây dựng tất cả các thư viện lớp phụ thuộc và giới thiệu chúng trong dự án chính và xây dựng giải pháp hoàn chỉnh.

Nguồn


1

Tôi cũng phải đối mặt với cùng một vấn đề. Mặc dù làm theo mọi câu trả lời, nó không hoạt động. Sau đó, tôi đã thay đổi "Kế thừa = tên không gian ." Thành "Kế thừa = tên lắp ráp đủ điều kiện " tức là "Kế thừa = tên không gian, lớp, tên, Phiên bản =, Văn hóa =, PublicKeyToken = " Hy vọng nó sẽ giúp.


1

Điều này cũng có thể xảy ra nếu bạn vô tình quên đặt giải pháp VS của mình thành "Nhiều dự án khởi động" nếu bạn đang chạy Web và WebApi từ cùng một giải pháp.

Bạn có thể kiểm tra điều này bằng cách nhấp chuột phải vào Giải pháp trong Solution Explorer và chọn 'Thuộc tính ". Sau đó tìm' Dự án khởi động '.


Của tôi tương tự như thế này: Tôi đã chạy dự án API sai trong giải pháp. Tôi thực sự đã có một lỗi trình biên dịch trong API mà tôi nghĩ rằng tôi đang chạy, nhưng VS đã không nhận ra khi tôi chạy giải pháp, ngay cả sau khi xóa sạch.
Giăng

1

Xóa .vs thư mục từ thư mục gốc. Dọn dẹp. Xây dựng lại.

Vấn đề này thúc đẩy tôi bonkers một lần trong một thời gian và tôi chắc chắn kết thúc ở đây để phân trang thông qua các câu trả lời. Tôi nghi ngờ có nhiều nguyên nhân có thể tạo ra ngoại lệ này, điều này một lần làm việc cho tôi.


Vài giờ thử hàng ngàn đề nghị khác và đây là một trong những gợi ý cho tôi. Ứng dụng của tôi đã chạy tốt trong Visual Studio, cả về cấu hình gỡ lỗi và phát hành, nhưng một khi được xuất bản lên IIS tôi đã gặp lỗi. Xóa thư mục .vs và triển khai lại đã khắc phục sự cố.
Philip Stratford

1

Vâng, tôi đọc tất cả các câu trả lời. Tuy nhiên, nếu bạn là tôi và đã lấy hết tóc còn lại, hãy thử kiểm tra thư mục \ bin. Giống như hầu hết các tệp proj có thể có một số cấu hình được nhóm theo thành phần XML PropertyGroup, sau đó tôi đã thay đổi OutputPathgiá trị từ 'bin \ Debug' để xóa phần '\ Debug' và Rebuild. Điều này đã đặt các tệp trong thư mục \ bin cho phép Express IIS tìm và tải bản dựng. Tôi đang tự hỏi đâu là cách chính xác để quản lý các bản dựng khác nhau này để triển khai gỡ lỗi cục bộ có thể tìm và tải môi trường đích.


Đây là điều duy nhất đã làm việc. Rất nhiều xác chết bị chôn vùi ... những thứ như thế này khiến tôi nghiêm túc xem xét các ơn gọi khác.
doveryai

0

Vấn đề này tôi đã được giải quyết bằng cách cho phép quyền của thư mục cũng như kiểm tra từ IIS.

Tôi đã được cho phép mọi người khi tôi đang thử nghiệm trong môi trường địa phương của tôi. Nhưng trong chế độ xuất bản, tôi nghĩ rằng chúng tôi chỉ cấp quyền cho người dùng ASP.Net.


0

Tôi cũng gặp lỗi tương tự ... kiểm tra tên của Ứng dụng bạn đã phát triển đúng cách. không gian tên và tên tập hợp được phân bổ và cũng thử thay đổi vật lý tên của thư mục được tạo cho ứng dụng, tất cả tên này phải giống như tên trong không gian tên ở trên có trong tệp global.asax


0

Tôi cũng gặp lỗi tương tự ... kiểm tra Cấu hình IIS của Thư mục ảo của bạn và chắc chắn rằng Thuộc tính - ASP.NET - Phiên bản ASP.NET giống với Thuộc tính dự án - Ứng dụng - Khung mục tiêu. (Điều đó đã sửa lỗi này cho tôi.)


0

Ứng dụng của tôi được xây dựng trong phiên bản cũ hơn của VS và không có thư mục bin. Tôi đã nâng cấp nó lên phiên bản mới hơn và gặp ác mộng khi triển khai nó. Cuối cùng tôi đã theo dõi lỗi này xuống Project> Properties> Application. Khung mục tiêu được đặt thành 2.0; việc thay đổi nó trên máy chủ để phù hợp với IIS Manager / App Pool đã giải quyết vấn đề cho tôi.


0

Tôi thấy rằng việc thay đổi Namespace trong dự án, mà không tái cấu trúc rằng toàn bộ giải pháp là vấn đề của tôi. Kiểm tra thuộc tính dự án của bạn và xem không gian tên của bạn là gì, đảm bảo rằng dòng lên, trên bảng.


0

Vấn đề đối với tôi là tôi đã không đưa global.asax.cs vào dự án của mình. Và vì tôi đã sao chép các tệp từ .net 4.5 sang 4.0 nên tôi không nhận xét các dòng không cần thiết trong 4.0. Bởi vì nó không được bao gồm trong phòng thu hình ảnh mà không có vấn đề. Nhưng khi tôi đưa nó vào, nó làm nổi bật các dòng gây ra vấn đề.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
//using System.Web.Http;
using System.Web.Mvc;
//using System.Web.Optimization;
using System.Web.Routing;

namespace YourNameSpace
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            //GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            //BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}

0

Tôi đã dành một ngày theo nghĩa đen để giải quyết điều này.

Điều duy nhất có tác dụng là xóa tệp .sln, tạo tệp mới và thêm từng dự án một.

\ _ (ツ) _ / ¯ - Lập trình - ¯ \ _ (ツ) _ /


0

Đối với trường hợp của tôi, lắp ráp web là một phần của GAC ​​... vì vậy sau khi xây dựng, nó cần được cài đặt trong GAC và nó đã hoạt động.


0

Tôi gặp phải thông báo lỗi này và cuối cùng phát hiện ra rằng thông báo lỗi là sai lệch. Trong trường hợp của tôi, dường như đã xảy ra sự cố định tuyến trong IIS, điều này khiến global.asax từ một trang web khác trên máy chủ web bị đọc do đó gây ra lỗi.

Trong IIS, trang web của tôi bị ràng buộc với http: * 80: webservice.local và chứa một ứng dụng có tên MyAPI. Tôi nhận được tin nhắn đáng sợ khi gọi ứng dụng MyAPI bằng địa chỉ IP của máy chủ web.

Để gọi thành công ứng dụng của tôi, tôi đã phải thêm một mục nhập tệp máy chủ cho webservice.local trên tất cả các máy được gọi là ứng dụng MyAPI. Sau đó, tất cả các yêu cầu của tôi phải được bắt đầu bằng http: //webservice.local/MyAPI/ để định tuyến chính xác.


0

Tôi đã cố gắng hoàn toàn mọi thứ ở đây và không có gì làm việc. Dự án của tôi là vào năm 2013. Tôi đã nâng cấp lên VS 2015 và đã tạo ra tất cả các ứng dụng mới của mình vào năm 2015 nhưng tải, biên dịch, xây dựng, v.v ... tất cả các ứng dụng cũ của tôi đã được xây dựng vào năm 2013 trong phiên bản đó.

Tôi đã kết thúc việc tải giải pháp vào năm 2015 và nó đã giải quyết nó cho tôi.


0

Tôi đã dành nhiều ngày cho vấn đề này. Cuối cùng tôi đã giải quyết nó với sự kết hợp các gợi ý sau từ bài đăng này.

  1. Thay đổi mục tiêu nền tảng thành bất kỳ CPU. Hiện tại tôi không có cấu hình này, vì vậy tôi phải đến Trình quản lý cấu hình và thêm nó. Tôi đã đặc biệt biên dịch cho x64. Điều này một mình không giải quyết được lỗi.
  2. Thay đổi đường dẫn đầu ra thành bin\thay vì bin\x64\Debug. Tôi đã thử điều này nhiều lần rồi trước khi tôi thay đổi mục tiêu nền tảng. Nó không bao giờ tạo ra sự khác biệt ngoài việc gặp lỗi khi không tải được lắp ráp vì định dạng không hợp lệ.

Để rõ ràng, tôi đã phải làm cả hai điều này trước khi nó bắt đầu làm việc. Tôi đã thử chúng riêng lẻ nhiều lần nhưng nó không bao giờ sửa được cho đến khi tôi làm cả hai.

Nếu tôi thay đổi một trong các cài đặt này trở lại ban đầu, tôi sẽ gặp lại lỗi tương tự, mặc dù đã chạy Clean Solution và xóa thủ công mọi thứ trong binthư mục.


0

Hai cách để có được điều này:

  • Trình quản lý cấu hình hiển thị các bản dựng dll dưới dạng kết hợp của các bản dựng '64' và 'bất kỳ cpu' nào. Đặt tất cả chúng vào cùng một bản dựng sẽ sửa nó.

  • Khi chuyển đổi giữa các nhánh, đường dẫn IIS express đôi khi không được cập nhật. Nhấp chuột phải vào 'IIS Express' trong thanh tác vụ> Hiển thị tất cả các ứng dụng và xác minh rằng đường dẫn đến nhánh chính xác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.