2013-08-29 33 views
5

Tôi hiện đang thiết lập dự án cho mô-đun DotNetNuke. Trong dự án này tôi có một số tập tin điều khiển người dùng, được phiên bản với TFS sử dụng ASP.NET 4.0 và C#.ASP.NET Designer.xx tạo 'đã chứa định nghĩa cho' lỗi kiểm soát

Hiện tại, dự án sẽ xây dựng và chạy tốt mà không có vấn đề gì. Tuy nhiên, bất kỳ thay đổi nào tôi thực hiện cho giao diện người dùng .ascx của MỘT SỐ điều khiển người dùng trong dự án sẽ gây ra lỗi tương ứng .ascx.designer.cs để tạo ra lỗi ~ 14 nêu rõ lỗi sau:

Lỗi ## loại 'ControlClass' đã chứa định nghĩa cho 'SomeControlID' 'Vị trí của ControlName.ascx.designer.cs'

Tôi chưa thực hiện bất kỳ thay đổi nào khác đối với điều này trước đây mà tôi có thể nghĩ đến điều đó sẽ gây ra sự cố này. Nó chỉ ngẫu nhiên bắt đầu xảy ra trong dự án của tôi.

Tôi đã thử những điều sau đây:

  • Xóa .ascx.designer.cs => Chọn dự án => 'Convert to Web Application' để tái sinh các tập tin được thiết kế riêng. Điều này luôn dẫn đến các lỗi giống nhau được hiển thị.
  • Đặt lại IIS. Xóa các tập tin tạm thời ASP.NET. Giải pháp làm sạch bằng tay và xây dựng lại. Điều này cũng tái tạo các lỗi tương tự.
  • Xóa kiểm soát người dùng khỏi dự án. Thêm điều khiển người dùng mới có cùng tên. Xây dựng. Sao chép mã để kiểm soát mới trước và sau. Sau đó xây dựng lại. Sao chép các lỗi tương tự.

Để làm cho mọi việc kì quặc, khi tôi cố gắng để xác định nếu điều này có thể là một số loại vấn đề cú pháp tôi đã sau và tạo ra những kết quả này:

  1. Undo tất cả thay đổi và quay trở lại phiên bản làm việc tại TFS.
  2. Xây dựng dự án. Không có lỗi nào cũng ổn và xây dựng.
  3. Thêm dấu cách vào cuối tệp front. Endx.
  4. Xây dựng dự án. Tất cả các lỗi được sao chép lại.
  5. Khi xác định điều đó không thành công, hãy nhấn CTRL + Z chỉ để đảm bảo rằng trở lại bình thường.
  6. Xây dựng lại dự án. Tất cả các lỗi được sao chép lại.

Tôi không chắc chắn lý do tại sao, nhưng mỗi khi dự án này có thay đổi đối với một vài lựa chọn điều khiển người dùng, các tệp thiết kế tạo ra các lỗi này đột ngột.

Các điều khiển người dùng này chứa các điều khiển phức tạp chứa các mẫu đầy đủ các điều khiển khác, v.v. Tuy nhiên khi xây dựng chúng tôi không có vấn đề gì với các tên giống nhau trong các mẫu khác nhau và những thứ tương tự.

Tôi đã hết ý tưởng và không tìm thấy gì khác để thử bằng cách tìm kiếm trực tuyến vấn đề này.

Mọi đề xuất ??

CHỈNH SỬA: Đã được gợi ý rằng tôi chỉ xóa thủ công các điều khiển được tạo bổ sung để dự án sẽ xây dựng. Sau khi xem xét sâu hơn, tôi có hai vấn đề với điều này.Đầu tiên, điều này sẽ cho phép dự án xây dựng, nhưng tôi sẽ phải làm điều này MỌI thời gian tôi cập nhật ASCX, như sau khi tôi xóa chúng và thực hiện thay đổi khác các khai báo kiểm soát đã trở lại.

Thứ hai, trong khi điều này sẽ cho phép dự án xây dựng mà không gặp vấn đề gì. Nó không chạy nhưng thay vào đó ném lỗi thời gian chạy sau:

Lớp cơ sở bao gồm trường 'btnDelete', nhưng loại của nó (System.Web.UI.WebControls.ImageButton) không tương thích với loại điều khiển (Telerik) .Web.UI.RadButton).

Lỗi này cho tôi biết rằng điều khiển 'btnDelete' mà tôi đã xóa để kiểm tra điều này, được đánh dấu là lỗi 'trùng lặp' khi tòa nhà hiện được đánh dấu là loại không chính xác.

Điều này tôi tin là do thực tế là có nhiều nút 'btnDelete' của các loại khác nhau trên điều khiển người dùng mang lại cho tôi lỗi. Các nút này được chứa trong các điều khiển RadGrid khác nhau cho các mẫu chỉnh sửa/xóa của chúng.

Trả lời

0

Có vẻ như có điều gì đó đang cố gắng thêm các bản sao của các điều khiển của bạn vào tệp thiết kế. VS cập nhật tệp thiết kế trên mọi chỉnh sửa bạn thực hiện, đó là lý do tại sao nó xảy ra ngay sau khi bạn chỉnh sửa tệp aspx hoặc ascx. Một điều bạn có thể làm là khi lỗi được ném ra, hãy mở tệp designer.cs của bạn và kiểm tra - đặt cược của tôi là bạn sẽ thấy các khai báo trùng lặp. Nếu đây là trường hợp, nó có thể là một lỗi trong bất kỳ thư viện bạn đang sử dụng - mặc dù tôi không thể biết chắc chắn mà không có thêm một số thông tin. Xóa các bản sao và bạn sẽ có thể tạo lại. Theo như giữ nó xảy ra một lần nữa, chúng ta cần phải xem những gì đang được tạo ra trong các tập tin thiết kế.

+0

Xin lỗi có vẻ như tôi quên đề cập rằng khi tôi xóa các 'mục trùng lặp' từ file thiết kế. Dự án sẽ thực sự xây dựng chính xác, nhưng sẽ không chạy vì nó ném một lỗi nói rằng điều khiển không tồn tại, vv ... Vì vậy, đây không phải là một giải pháp có thể cho tôi. – user1048281

+0

@ user1048281, đối với các cú đá, hãy thử đặt tuyên bố của các điều khiển được đề cập vào tệp mã phía sau của bạn và xóa hoàn toàn khỏi tệp thiết kế. Chuyện gì xảy ra sau đó? –

+0

Tôi không nghĩ rằng tôi sẽ có thể thử rằng điều khiển trong câu hỏi là tất cả lồng nhau trong các mẫu của một RadGrid rất phức tạp. Điều này đã mang lại một cái gì đó mà tôi đã không nghĩ đến trước đó. Nó xuất hiện tất cả các điều khiển có vấn đề nằm trong EditItemTemplate/InsertItemTemplate/GridTemplateColumn tờ khai của RadGrid của tôi. Đó là thú vị và có thể chỉ ra đây là một vấn đề Telerik, tuy nhiên tôi không thể tưởng tượng tại sao điều khiển này có vấn đề này và tất cả các điều khiển tương tự khác của tôi không. – user1048281

0

Trong trường hợp của tôi, tôi đã sử dụng cùng một không gian tên hai lần trong hai lớp khác nhau.

Xác minh không gian tên của chúng tôi và tên lớp một lần nữa - đảm bảo lỗi không phải do tệp lớp trùng lặp.

1

Muốn thêm vào trường hợp của tôi cho lỗi này và cách tôi giải quyết.

Đã xảy ra với dự án kế thừa đã được nâng cấp lên dự án visual studio 2010. Trong trường hợp của tôi đã phải chuyển đổi các tập tin .aspx thành "Ứng dụng web" để tạo ra các tệp thiết kế. Trong trường hợp này, không quá chắc chắn về những gì đã xảy ra nhưng bắt đầu nhận được lỗi được đề cập ở trên. Đã bắt đầu xem xét biến nhưng nó không được xác định nhiều hơn một lần trong mã phía sau (.cs), trang aspx hoặc bất kỳ điều khiển liên quan nào khác.

Tôi bắt đầu xem xét tiêu đề trang aspx và đó là khi tôi nhận thấy sự cố có thể xảy ra. Tôi có 2 tệp có tên tương tự ... iABC.aspx (.cs, .designer) và ABC.aspx (.cs, .designer) và trong tiêu đề iABC.aspx, nó được thừa kế "ABC" ... dấu đầu tiên một cái gì đó không ổn. Tôi đã thay đổi nó thành cài đặt chính xác "iABC" và sau đó quyết định kiểm tra tên lớp trong mã phía sau, lo and behold, tên lớp cho iABC.aspx.cs được đặt thành "class ABC" thay vì "class iABC" .

Khi tôi đã sửa xong, tất cả đều tốt.

HTH

Dave

+0

Tôi gặp phải vấn đề tương tự - ứng dụng cũ & lộn xộn. – costa

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