2011-07-28 29 views
5

Tôi không phải là một nhà phát triển đặc biệt có kỹ năng trong thế giới Windows và tôi đã gặp phải một số vấn đề giải thích. Tôi hy vọng rằng trong sự thiếu hiểu biết của tôi, tôi đang thiếu một cái gì đó hiển nhiên.Lỗi Visual Studio dựng sẵn "một tuyên bố một phần của loại này tồn tại"

Tôi thấy mình phải đảo ngược biên dịch trang web/ứng dụng .NET được biên dịch trước. Reflection quản lý để có được tôi CodeFile của C# tôi cần, và tôi đã dành một chút tốt thời gian thay đổi tất cả các tài liệu tham khảo .aspx từ những điều như thế này:

<%@ page language="C#" autoeventwireup="true" inherits="someclassname, App_Web_Z8sdf" %> 

để điều như thế này:

<%@ page language="C#" autoeventwireup="true" CodeFile="somefilename.aspx.cs" inherits="someclassname" %> 

và di chuyển các tệp aspx.cs vào cùng thư mục với tệp .aspx.

Điều này đã cho tôi đến mức tôi có thể thực sự tải dự án dưới dạng có thể chỉnh sửa được trong Visual Studio. Tôi đã thử điều này với cả năm 2010 và 2008.

Hiện tại, tôi đang cố gắng xây dựng dự án này. Lỗi tôi nhận được là:

"Missing partial modifier on declaration of type 'someclassname'; another partial declaration of this type exists" 

Đủ công bằng. Tôi hiểu rằng các lớp học có thể được khai báo ở nhiều nơi và mỗi lớp phải có từ khóa "một phần" để làm việc này. Vì vậy, tôi thêm từ khóa phần định nghĩa lớp trong aspx.cs tập tin mà các lỗi đang xảy ra trong. Đó là quản lý để thoát khỏi điều đó thông báo lỗi, và thay thế bằng

"The type 'someclassname' already contains a definition for 'some variable name". 

Nó cư xử rõ ràng như có khác định nghĩa lớp ở đâu đó. Là chủ yếu là quản trị viên Unix, tôi bắt đầu tìm kiếm tất cả các tệp trong dự án cho các chuỗi phù hợp với tên của lớp đang được đề cập đến và tôi chỉ tìm thấy nó trong hai tệp và hai tệp. Tệp aspx chứa các dòng đầu tiên tôi trích dẫn và tệp aspx.cs tương ứng với tệp chứa định nghĩa lớp. Bây giờ, tôi đang bối rối.

Tôi đọc một số bài đăng trên diễn đàn cho biết Visual Studio sẽ tạo tệp "thiết kế" với các lớp một phần, có vẻ hứa hẹn, nhưng tôi không thấy các tệp thiết kế này, ngay cả khi tôi xem tất cả các tệp trong VS, Tôi nhìn vào các thư mục trên đĩa, hoặc thực sự bất cứ nơi nào khác. Rõ ràng, tôi đang thiếu một cái gì đó. Có lẽ tôi đã không thực hiện việc hoàn nguyên từ trang web được biên dịch trước một cách chính xác? Có thể có một số cài đặt trong web.config hoặc một số tệp khác mà tôi cần phải thay đổi?

Mọi trợ giúp sẽ được đánh giá cao.

Theo yêu cầu một phiên bản tổng quát của định nghĩa SomeClass

using System; 
    using System.Web; 
    using System.Web.Profile; 
    using System.Web.SessionState; 
    using System.Web.UI; 
    using System.Web.UI.HtmlControls; 
    using System.Web.UI.WebControls; 

    public class Some_Class_Name : Page, IRequiresSessionState 
    { 
     /// a bunch of variables defined like this 
     protected HtmlForm form1; 

     ///a bunch of protected methods defined similarly to this 

     protected void LinkButtonReturn_Click(object sender, EventArgs e) 
     { 
      this.Session.Clear(); 
      base.Response.Redirect("Default.aspx"); 
     } 

} 

Cập nhật này dường như là một kết quả của việc chuyển đổi từ một trang web trước khi biên soạn lại nguồn. Các tệp .aspx.cs chứa các định nghĩa trường điều khiển (nếu đó là thuật ngữ chính xác cho những gì tôi sẽ ngây thơ gọi là "định nghĩa biến") mà chúng không nên và thiếu tuyên bố một phần mà chúng cần phải có. Suy đoán một cách dữ dội, có vẻ như các định nghĩa thực sự được ngụ ý bởi tệp aspx, và vì vậy tệp aspx.cs không cần chúng. Rất cám ơn Dan Abramov và mọi người đã bình luận.

+0

Bạn có thể đăng định nghĩa "someclass" không? – scottm

+0

Tôi có thể đăng phiên bản tổng quát. – malcolmpdx

+0

Tôi không phải là một WebForms guy nhưng bạn có thể thử biên dịch sau khi đã loại bỏ tất cả các lĩnh vực kiểm soát (chẳng hạn như 'form1')? Mặc dù vậy tôi có thể sai lầm khủng khiếp. –

Trả lời

2

Tôi có thể rất khủng khiếp, nhưng tôi nghi ngờ trình biên dịch tạo ra các lớp học một phần dựa trên chính mã số aspx. Nếu điều này đúng, các lớp như vậy rõ ràng sẽ chứa các trường như form1.

Tôi sẽ xóa tất cả các khai báo trường điều khiển và xem điều này có hữu ích không. Lưu ý rằng tôi không phải là một anh chàng WebForms vì vậy đây là một phỏng đoán.

+0

Bạn biết đấy, bạn có thể đã đóng đinh nó. So sánh phiên bản tôi đã hoàn nguyên với Phản chiếu đối với phiên bản cũ hơn nhiều của cùng một mã và các tệp aspx.cs thiếu bất kỳ định nghĩa trường điều khiển nào. Loại bỏ chúng, nhưng để lại một phần từ khóa tại chỗ (cũng tồn tại trong phiên bản cũ của mã) có vẻ như nó giải quyết bất kỳ xung đột nào. Cảm ơn! Tôi chắc chắn sẽ nói điều này trả lời ít nhất là vấn đề này. – malcolmpdx

4

Câu hỏi này hơi cũ, nhưng tôi vừa chạy vào một vấn đề tương tự khi giải mã mã .NET bằng cách sử dụng Reflector.

Lý do khiến bạn gặp phải các lỗi này là do chỉ thị trang "CodeFile = ..." trên trang ASPX của bạn. Khi ASP.NET thấy chỉ thị CodeFile, nó sẽ tự động tạo ra một tệp thiết kế (nghĩa là một lớp một phần với các định nghĩa điều khiển). Việc thay đổi chỉ thị CodeFile thành chỉ thị CodeBehind đã giải quyết tất cả các vấn đề của tôi.

Hy vọng điều này có thể giúp người khác.

+0

+1 Tôi đã xóa tệp .designer và nó đã giải quyết được sự cố. Đơn giản chỉ cần hai nơi tên lớp đã được tuyên bố. –

0

Một vấn đề liên quan nhưng không chính xác tương tự xảy ra với tôi hôm nay trong khi triển khai thực hiện dịch vụ web bằng cách sử dụng WCF. Trong khi tạo ra một trình đơn dịch vụ web ném đi và proxy để tạo mẫu thiết kế, tôi vô tình đặt mã được tạo tự động trong cùng một không gian tên như mã định nghĩa dịch vụ.

Giải pháp của tôi là di chuyển proxy máy khách được tạo tự động, vào không gian tên của chính nó và tất cả đều tốt.

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