Câu hỏi WebResource Hell - không thể tìm thấy tài nguyên


Đã đánh dấu tệp javascript là "Tài nguyên được nhúng"
Đã thêm thuộc tính WebResource vào lớp AssemblyInfo của tôi

Bây giờ tôi đang cố gắng để xuất javascript nhúng vào trang chủ của tôi. Tất cả những gì tôi nhận được là "Tài nguyên web không tìm thấy" từ url tài nguyên web.


Tên dự án:

CompanyProduct


Không gian tên mặc định của dự án:

Company.Product.Web


Tệp Javascript nằm:
Thư viện / navigation.js


AssemblyInfo:

[assembly: WebResource("CompanyProduct.Library.navigation.js", "text/javascript")]


Mã trong trang chính:

Page.ClientScript.RegisterClientScriptInclude("NavigationScript", Page.ClientScript.GetWebResourceUrl(this.GetType(), "CompanyProduct.Library.navigation.js"));

lỗi server trong ứng dụng '/'

  Các nguồn tài nguyên không thể được tìm thấy. 

 Sự miêu tả: HTTP 404. Tài nguyên bạn đang tìm kiếm (hoặc một trong các phụ thuộc của nó) có thể đã bị xóa, tên của nó đã thay đổi hoặc tạm thời không khả dụng. Vui lòng xem lại URL sau và đảm bảo rằng URL được viết đúng chính tả.

 URL được yêu cầu: /WebResource.axd
Thông tin phiên bản:Microsoft .NET Framework Phiên bản: 2.0.50727.1433; Phiên bản ASP.NET: 2.0.50727.1433


14
2017-11-26 12:07


gốc


Ứng dụng của bạn có đang chạy trên nhiều máy chủ (trang trại, tải cân bằng hoặc tương tự) không? - KristoferA
@Kristofer - Không - Naeem Sarfraz
Sử dụng Phản xạ .NET của Red Gate Tôi có thể thấy tài nguyên được đặt tên là "Company.Product.Web.Library.navigation.js" Một điều khác, mã của tôi trong trang cái được chứa trong hàm OnPreRender cho trang chính. Bạn có lời khuyên nào khác không? - Naeem Sarfraz
Tôi thực sự muốn giải quyết vấn đề này .. - Naeem Sarfraz


Các câu trả lời:


Thay vì this.GetType(), lấy một loại từ assembly có chứa tài nguyên .. tức là:

typeof(Company.Product.Web.Library.Class1)

Điều đó có hiệu quả không?


14
2018-02-08 16:45



Không, cos không có Class1 nào được định nghĩa trong thư mục Library. Đó là tệp javascript được nhúng mà tôi cố gắng truy cập. - Naeem Sarfraz
Rõ ràng là bạn hiểu sai vấn đề, 'Class1' chỉ là một ví dụ về tên lớp, bạn nên chọn bất cứ thứ gì bạn muốn từ thư viện đó, điều quan trọng là bạn cung cấp phương thức gọi một kiểu từ assembly SAME như nơi nhúng thuộc tính là .. - meandmycode
Xin lỗi. Tôi đang làm việc trong cùng một dự án. Tôi có thể nhìn thấy con đường bằng cách sử dụng phản xạ nhưng không có niềm vui nhận ra nó như mô tả trong câu hỏi của tôi. - Naeem Sarfraz


Đến cùng một vấn đề ngày hôm nay. Vấn đề có vẻ là AssemblyResourceLoader sử dụng assembly có chứa kiểu được cung cấp cho GetWebResourceUrl phương thức (tham số đầu tiên) trong trường hợp của bạn là một assembly được tạo động cho trang chính (.master) và không chứa tài nguyên mà bạn đang tìm kiếm. Tôi giả định rằng tệp tài nguyên của bạn được bao gồm trong cùng một assembly với trang chủ cơ bản của bạn (tệp .master.cs), sau đó bạn có thể sử dụng typeof để có được cá thể Loại

Page.ClientScript.RegisterClientScriptInclude(
   "NavigationScript",
   Page.ClientScript.GetWebResourceUrl(
      typeof(MyMasterPage),
      "CompanyProduct.Library.navigation.js"));

nơi MyMasterPage là tên trang chủ của bạn

Có vẻ như nó cũng có thể sử dụng bất kỳ kiểu nào khác được khai báo trong cùng một assembly nơi tài nguyên được nhúng.


4
2017-08-09 13:06



GREATLY này đã giúp tôi - cảm ơn bạn - RichardHowells


Tôi nghĩ rằng bạn muốn các đường dẫn đầy đủ được dựa trên không gian tên, không phải là hội đồng; Vì vậy, bất cứ nơi nào bạn có "CompanyProduct.Library.navigation.js", thay thế nó bằng "Company.Product.Web.Library.navigation.js". Ngoài ra, có một phương thức Page.ClientScript.RegisterClientScriptResource () thực hiện những gì bạn cần trong một phương thức (trái ngược với việc sử dụng RegisterClientScriptInclude (GetWebResourceUrl ()).


3
2017-11-26 13:36



Đồng ý với bình luận đầu tiên của bạn. Sử dụng Reflector Tôi có thể thấy rằng javascript nhúng của tôi là Company.Product.Web.Library.navigation.js. Mặc dù sử dụng RegisterClientScriptResource  dường như không tạo ra sự khác biệt, vẫn nhận được lỗi. - Naeem Sarfraz


Đây là ly hợp ở ống hút một chút, nhưng nó có thể là asp.net của bạn không được thiết lập để xử lý webresource.axd một cách chính xác? Nếu một cái gì đó đã đi sai có thể là thẻ xử lý bị thiếu từ web.config của máy?

Thẻ trình xử lý http của C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG \ web.config phải có mục nhập webresource.axd như sau:

<httpHandlers>
    <add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="True"/>
</httpHandlers>

Ngoài ra kiểm tra đôi không có bất kỳ mục nhập xử lý nào trong web.config của dự án có thể ghi đè cài đặt từ web.config của máy.


1
2018-02-26 23:24





Đối với bất kỳ ai tình cờ sử dụng VB - có sự khác biệt về hành vi giữa trình biên dịch VB và trình biên dịch C #.

Trong VB, tài nguyên nhúng HAS ở mức gốc của dự án của bạn. Khi tôi nhìn vào assembly được tạo ra với ILDASM, tôi thấy rằng tên của tài nguyên nhúng KHÔNG BAO GIỜ bao gồm tên của bất kỳ thư mục con nào. Điều này cuối cùng làm cho AssemblyLoader nhìn vào vị trí sai cho tài nguyên nhúng.

Khi bạn lặp lại thử nghiệm với C # nó KHÔNG bao gồm tên của các thư mục con.

EDIT - Thay đổi để phản ánh điều đó cho VB nguồn tài nguyên nó phải ở cấp cơ sở.

Những gì tôi đã thành công với là có tài nguyên nhúng trong cùng một thư mục với mã sử dụng nó (tốt hơn để kiểm soát nguồn). Tôi sau đó LIED trong các thuộc tính và cuộc gọi Page.ClientScript.GetWebResourceUrl tài khoản cho trình biên dịch VB tuyên bố rằng các tài nguyên nhúng không có đường dẫn.


1
2018-02-21 21:43





blog này đã được hai tuổi rồi ... nhưng tôi đã dành nhiều ngày để cố gắng làm việc này. Đang cố gắng để có được một tập tin js nhúng để thực sự cho tôi một chuỗi truy vấn WebResource.asx sẽ hoạt động. Phần cuối cùng dường như được tô bóng ở đây là tệp bạn đã nhúng HAS ở trong cùng cấu trúc thư mục vật lý như mã điều khiển phía sau mà bạn đang gọi GetWebResourceUrl() từ. Nếu bạn đã đặt tệp được nhúng vào một thư mục có tên là "tập lệnh", thì được gọi là GetWebResourceUrl() từ trang chính không được tìm thấy trong "tập lệnh", ResourceURL được trả về sẽ trỏ đến vị trí sai ... do đó LUÔN trả về 404.

nếu bạn đang sử dụng MasterPage làm kiểu cho tham số đầu tiên thì nó sẽ không bao giờ hoạt động. GetWebResourceUrl(typeof(MasterPage)... Tôi đoán khóa thực sự ở đây là bạn phải thả tài nguyên được nhúng vào cùng một vị trí mà bạn sẽ sử dụng làm kiểu cho thông số đầu tiên của ResourceURL. Sau 3 ngày đấu vật với thứ này, cuối cùng nó cũng tìm được Tài nguyên của tôi.


1
2017-12-14 20:29





Chỉ có vấn đề này và giải quyết nó dựa trên phản ứng của meandmycode; tuy nhiên, có thể cần một lời giải thích chi tiết hơn.

Khi bạn đăng ký khối tập lệnh bằng cách sử dụng ScriptManager.RegisterClientScriptInclude phương thức tham số "type" phải là một lớp bên trong cùng một dự án với tập lệnh .js. Nếu bạn không có lớp nào được liên kết với khối tập lệnh, bạn sẽ phải chọn một lớp khác.


1
2018-01-31 23:22





Tôi đã có một vấn đề tương tự và, trong trường hợp của tôi, đó là do thực tế là Page.ClientScript.GetWebResourceUrl  tên tài nguyên tham số là trường hợp nhạy cảm.


1
2017-10-22 16:10



Có nơi nào đó được ghi chép? Tôi đã tìm kiếm hơn một giờ để tìm nó, nhưng không thể. Tôi đã bị kẹt trong địa ngục webresource sáng nay ... - Zack
Không thực sự tài liệu (có thể điều này là tiềm ẩn) nhưng tôi thấy điều này trên dự án mã "Tên hợp lý phân biệt chữ hoa chữ thường, mặc dù nó chứa tên tệp thường không phân biệt chữ hoa chữ thường" - Guish
Vâng, lỗi duy nhất tôi thấy đã chỉ cho tôi đúng hướng là một thông báo mức độ lỗi của Nhật ký sự kiện cho biết "Đã xảy ra lỗi khi xử lý yêu cầu tài nguyên web hoặc tập lệnh ...". Tôi đã nhìn vào con đường SO nhiều lần trước khi nhận ra "J" trong đường dẫn thư mục của dự án jQuery của tôi là chữ thường, trong đó chuỗi mà tôi đã gửi tới webresource có chữ hoa. - Zack


Câu trả lời cho câu hỏi của bạn hoàn toàn phụ thuộc vào nơi bạn có tệp này trong dự án thực tế của bạn và không gian tên mặc định là gì. Như Chris đã đề cập, đường dẫn bạn cung cấp cho các phương thức đăng ký tập lệnh cần có đường dẫn đúng để định vị tài nguyên được nhúng. Bạn không chỉ phù hợp với chuỗi bạn chỉ định trong AssemblyInfo của bạn. Chuỗi phải là đường dẫn chính xác đến tài nguyên.

<default projectpacepace> / <bất kỳ thư mục con nào bạn có tệp trong> / <filename>


0
2017-11-26 23:13