2013-02-09 25 views
7

nềnLỗi CS0433 trong lớn precompiled Dự án Asp.net website

Tôi đã thực hiện trên một dự án trang web asp.net rất lớn. Quá trình triển khai cũ là sao chép các tệp .cs, .aspx, và .ascx vào IIS và để nó xây dựng trên bay. Tôi muốn biên dịch trước nó và sử dụng TeamCity để tự động triển khai nó. Tôi đã làm điều này với một số dự án trang web khác.

Dự án có khoảng 350 điều khiển người dùng được sắp xếp độc đáo trong các thư mục nhưng được sử dụng khắp nơi. Các điều khiển được tham chiếu từ các thư mục khác, từ các thư mục khác ... Về cơ bản là một cơn ác mộng tham chiếu tập tin tròn.

Nỗ lực của tôi

nỗ lực đầu tiên của tôi là xây dựng nó như những người khác. MSbuild toàn bộ giải pháp vs2012. Tôi chạy vào tấn "tài liệu tham khảo tập tin tròn không được phép". Hãy đến để tìm hiểu tất cả những điều khiển có tổ chức độc đáo này được sử dụng ở khắp mọi nơi và có những tham chiếu vòng tròn ở khắp mọi nơi. I read this và tôi đã chuyển "web.config" thành compilation batch="false" và sau đó trong bản dựng, hãy đặt trang web thành "không thể cập nhật" và "sử dụng các cụm đặt tên cố định". Các trang web xây dựng nhưng mất nghĩa đen 25 phút để biên dịch trên lõi tứ của tôi, ssd, 16 GB ram dev hộp. Đây là thời gian xây dựng không được chấp nhận.

Tôi biết rằng nếu tôi tắt "sử dụng cụm đặt tên cố định" thì trang web sẽ xây dựng nhanh hơn đáng kể. (Tôi đã chứng minh nó trên một trong những trang web nhỏ hơn. Nó đã đi từ 4 phút đến 45 giây). Khi tôi làm loại bỏ thiết lập đó tôi nhận được lạ build lỗi:

c:\Projects\Web\Site.master(146): error CS0433: The type 'ASP.usercontrols_modules_viewprofilepopup_ascx' exists in both 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\8d37b2c6\4c39f0a\App_Web_viewprofilepopup.ascx.4101713c.dll' and 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\8d37b2c6\4c39f0a\App_Web_xa514so5.dll' 

c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\8d37b2c6\4c39f0a\App_Web_site.master.cdcab7d2.0.cs(927): error CS0433: The type 'ASP.usercontrols_modules_viewprofilepopup_ascx' exists in both 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\8d37b2c6\4c39f0a\App_Web_viewprofilepopup.ascx.4101713c.dll' and 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\8d37b2c6\4c39f0a\App_Web_xa514so5.dll' 

error ASPPARSE: c:\Projects\web\Web\UserControls\Modules\JobsLeftMenu.ascx(128): error CS0433: The type 'ASP.usercontrols_modules_imagesgallerymodule_ascx' exists in both 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\8d37b2c6\4c39f0a\App_Web_imagesgallerymodule.ascx.4101713c.dll' and 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\8d37b2c6\4c39f0a\App_Web_nvrj33tx.dll' 

error ASPPARSE: c:\Projects\web\Web\Site.master(146): error CS0433: The type 'ASP.usercontrols_modules_viewprofilepopup_ascx' exists in both 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\8d37b2c6\4c39f0a\App_Web_viewprofilepopup.ascx.4101713c.dll' and 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\web\8d37b2c6\4c39f0a\App_Web_xa514so5.dll' 

Đây là chính xác lệnh aspnet_compiler.exe:

aspnet_compiler.exe -v/web -p Web \ -f " Web biên dịch trước "

Tôi đã tìm kiếm câu trả lời. KHÔNG, họ không bị trùng lặp trong mã ở bất cứ đâu. Chúng chỉ xảy ra trong các thư mục khác nhau, được sử dụng bởi các điều khiển khác trong các thư mục khác nhau. Tôi có cảm giác điều này là do tham chiếu tập tin vòng tròn. Ok ... Được rồi. Tôi loại bỏ việc sử dụng một vài trong số này để xem nó sẽ xây dựng và quá trình xây dựng chỉ di chuyển vào các lỗi khác như thế này. Tôi không thể chỉ cần xóa mã trên tất cả để phù hợp với điều này ... Làm thế nào tôi có thể sửa chữa các lỗi này mà không cần bật "sử dụng lắp ráp đặt tên cố định"?

Thing của tôi đã thử

  1. dọn dẹp các Temporary ASP.NET Files tất cả trên toàn hệ thống của tôi.
  2. Đã cố gắng "xuất bản" ngay trong studio trực quan 2012. Lỗi tương tự.
  3. Đã cố chuyển đổi trang web thành Ứng dụng web nhưng có quá nhiều lỗi (tối đa 600+).
  4. Một lần nữa: đảm bảo rằng không có tệp và mã trùng lặp nào có thể giải thích được. Tôi đã tìm kiếm toàn bộ thư mục giải pháp bằng notepad ++ để xác thực rằng không có một điều khiển khác có cùng tên.
  5. Checked this.
  6. Tôi có chỉnh hiệu suất msbuild bật: /m /p:CreateHardLinksForCopyLocalIfPossible=true /p:BuildInParallel=true

tôi stumped và dường như nghĩ rằng lựa chọn duy nhất của tôi là phải viết lại các ứng dụng, slog thông qua các lỗi như tôi chuyển sang một ứng dụng Web hoặc tiếp tục triển khai nguồn tới máy chủ web nhưng thực hiện tự động.

+0

Đầu ra lỗi bạn liệt kê ở trên những gì bạn nhận được từ việc chạy aspnet_compiler chưa? Tôi đã dự kiến ​​sẽ thấy lỗi tham chiếu vòng tròn thay thế. –

+0

@DavidEbbo Lỗi đó là do chạy với web.config: compilation batch = "false" và msbuild không có "fixednames". –

+0

Vì vậy, sau đó trong điều kiện gì là bạn thay vì nhìn thấy các tham chiếu 'Thông tư tập tin tham chiếu không được phép'? Khi thử nghiệm một kịch bản hình tròn tầm thường, đó là những gì tôi nhận được. –

Trả lời

7

Tôi biết bạn đã thử điều đó, nhưng tránh tham chiếu vòng tròn sẽ là đặt cược tốt nhất của bạn tại đây. Lưu ý rằng thuật ngữ 'tham chiếu vòng tròn' thực sự không hoàn toàn chính xác. Những gì hệ thống xây dựng than phiền về là tham chiếu vòng tròn ở cấp độ thư mục, không phải là cấp độ tập tin.

ví dụ: sub1\page.aspx sử dụng sub2\uc1.ascx sử dụng sub1\uc2.ascx

Ở cấp tệp, không có vòng kết nối nào, nhưng ở cấp thư mục ở đó, và điều đó sai với cách xử lý theo lô.

Mặc dù có vẻ như bạn có rất nhiều tình huống như vậy để làm cho nó không thể sửa được, tôi cá rằng nếu bạn nhìn vào chi tiết của 'vòng tròn thư mục', nó không phải là tất cả. Vẽ đồ thị tham chiếu có thể giúp hiểu được mọi thứ.

Sau đó, bạn chỉ cần di chuyển người phạm tội vào một thư mục khác và thay đổi các liên kết tương ứng.

Vâng, đó là một quá trình đau đớn, nhưng có khả năng giải quyết được.

+0

Việc di chuyển tất cả các điều khiển vào một thư mục có khắc phục được sự cố không? Ngoài ra, điều đó có khắc phục được "Loại 'blah' tồn tại trong cả lỗi 'blah'"? –

+1

Có, di chuyển tất cả các điều khiển vào một thư mục sẽ sửa chữa nó, mặc dù điều đó có thể liên quan đến việc điều chỉnh nhiều tham chiếu. Nó cũng sẽ khắc phục lỗi 'loại tồn tại ở 2 địa điểm'. Lưu ý rằng bạn có thể có cả tham chiếu thời gian phân tích cú pháp (chỉ thị @register) và tham chiếu thời gian chạy (ví dụ: LoadControl()). Bạn chỉ cần sửa phần đầu tiên để biên dịch, nhưng bạn sẽ cần phần còn lại để thực sự chạy. –

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