Lỗi ASP.Net: “Loại 'foo' tồn tại trong cả" temp1.dll "và" temp2.dll "


108

Khi chạy một dự án ứng dụng web, vào những thời điểm dường như ngẫu nhiên, một trang có thể bị lỗi với lỗi CS0433: loại tồn tại trong nhiều DLL. Các DLL đều là DLL được tạo nằm trong thư mục "Tệp ASP.NET Tạm thời".

Câu trả lời:


135

Thêm thuộc tính batch = "false" vào phần tử "compilation" của tệp web.config.

Sự cố này xảy ra do cách ASP.NET 2.0 sử dụng các tham chiếu ứng dụng và cấu trúc thư mục của ứng dụng để biên dịch ứng dụng. Nếu thuộc tính lô của phần tử trong tệp web.config cho ứng dụng được đặt thành true, ASP.NET 2.0 sẽ biên dịch từng thư mục trong ứng dụng thành một tập hợp riêng biệt.

http://www.sellsbrothers.com/1995

http://support.microsoft.com/kb/919284


Người đàn ông, cảm ơn vì điều đó. Hôm nay đã cố gắng sửa lỗi này trong một địa điểm sản xuất. Không biết điều gì đã gây ra nó (đã hoạt động tốt trong thời gian dài!), Nhưng điều này đã khắc phục sự cố cho chúng tôi.
Matt

cảm ơn. Những công việc này. Sáng nay thức dậy với lỗi này. ISP của tôi giảm giáasp.net phải đã thay đổi một cái gì đó. Nếu không phải cho bài viết này, tôi vẫn có lỗi. Không thích đối với ISP của tôi.
Damon

3
Câu trả lời hữu ích - cú pháp ở đây: <compilation ... batch = "false" />
Catto

1
Chú ý đến cảnh báo này: "Phương pháp này chỉ được khuyến nghị cho các ứng dụng nhỏ ... Điều này gây ra phân mảnh bộ nhớ."
ThatMatthew

22

Điều này có thể xảy ra nếu bạn đặt tệp .cs trong App_Code và thay đổi hành động xây dựng của chúng để biên dịch trong Dự án ứng dụng web.

Có hành động xây dựng cho các tệp .cs trong App_Code dưới dạng Nội dung hoặc thay đổi tên của App_Code thành tên khác. Tôi đã đổi tên vì intellisense sẽ không sửa các tệp .cs được đánh dấu là nội dung.

Thông tin thêm tại http://vishaljoshi.blogspot.se/2009/07/appcode-folder-doesnt-work-with-web.html


11

Một lý do có thể cho lỗi này là có 2 trang aspx mà đang có cùng tên trong họ inherits=trong <@page language=......inherits=>dòng.

Thay đổi inherits=tên sẽ giải quyết được lỗi.


2
Điều này đã giải quyết được vấn đề của tôi, có vẻ như sao chép / dán điều khiển người dùng hơi phức tạp khi bạn không cần mã phía sau để làm bất cứ điều gì.
Grubsnik

8

Đề phòng trường hợp người khác chia sẻ vấn đề của tôi, tôi đã gặp lỗi này khi cố gắng xuất bản Trang web của một dự án mới phân nhánh, bản dựng hoạt động hoàn hảo.

Hóa ra tôi đã quên xóa hộp kiểm "Cho phép cập nhật trang web được biên dịch trước" trong xuất bản Cài đặt -> Định cấu hình biên dịch trước .


4

Như một điểm dữ liệu khác, tôi vừa gặp vấn đề này mà không có bất kỳ bằng chứng nào về các tham chiếu vòng tròn như được mô tả trong các liên kết trong câu trả lời của Ben. Việc xây dựng dự án trang web của tôi sẽ thất bại với một vài lỗi trong số này và việc thiết lập đã compilation batch="false"sửa nó, nhưng tôi không muốn đi theo con đường đó vì đây là một trang web sản xuất quy mô lớn.

Giải pháp này nằm trong một thư mục con của thư mục D: \ svn của tôi, mà tôi đã ánh xạ tới S :. Khi tôi mở giải pháp từ S :, những lỗi này xảy ra, nhưng nếu tôi chuyển thẳng đến D: \ svn và mở giải pháp, thì không có lỗi.

Tôi cũng nhận thấy rằng, mặc dù có compilation batch="true"trong web.config của tôi, khi mở giải pháp từ S: được ánh xạ, tất cả các tệp .ascx của tôi được biên dịch thành các tập hợp của riêng chúng. Nếu tôi mở nó từ vị trí thực, các tệp .ascx sẽ được biên dịch thành tập hợp các thư mục tương ứng của chúng (đó là cách batch="true"hoạt động).

Thật kỳ lạ.


4

Lỗi này do xung đột giữa tên lớp của biểu mẫu web và tệp wsdl (mã đằng sau tệp .cs) có cùng tên lớp, tức là

Trang ASPX: Bảng điều khiển Lớp: Bảng điều khiển lớp partiacl

AppCode / APIServices.cs: Trang tổng quan một phần lớp công khai

Lỗi chỉ có thể tái tạo khi xuất bản trang web nhưng xây dựng và gỡ lỗi không thông báo bất kỳ lỗi nào.


2

Trong trường hợp của tôi, tôi đã đổi tên một dự án, vì vậy dll cũng đã được đổi tên. Khi tôi chỉ sao chép dll mới nhưng không nghĩ đến việc xóa cái cũ khỏi máy chủ, tôi đã sớm có một loạt các cặp lớp có cùng tên. Xóa dll đã lỗi thời đang thực hiện thủ thuật (nguyên nhân).


2

Không có câu trả lời nào trong số này phù hợp với tôi, tuy nhiên tôi đã khắc phục được sự cố. Vì tôi đang sử dụng chức năng Xuất bản của VS để triển khai ứng dụng web, tôi đã chọn tùy chọn xóa tất cả các tệp hiện có trước khi xuất bản trong trình hướng dẫn Xuất bản Web. Điều này buộc phải có một bản sao sạch sẽ của ứng dụng và mọi thứ hoạt động tốt từ đó.

Giải pháp này có thể hữu ích nếu bản sao gỡ lỗi cục bộ của bạn hoạt động tốt nhưng hệ thống đã xuất bản thì không. Cũng tuyệt vời nếu bạn không muốn mất thời gian để theo dõi các dll riêng lẻ để xóa và đừng bận tâm đến việc các tệp sản xuất bị xóa trước.


2

Trong trường hợp của tôi, việc xóa tất cả các cụm đầu ra khỏi các thư mục bin trong tất cả các dự án trong giải pháp đã giải quyết được vấn đề. Thật không may, tôi không có lời giải thích cho nó.


1

Trong trường hợp của tôi, sự cố đã được giải quyết khi tôi chỉnh sửa tệp Designer.cs vẫn có tên lớp trùng lặp. vì lý do nào đó, khi tôi đổi tên lớp "đăng xuất" thành "logout2", trong tệp trình thiết kế, nó không được tự động thay đổi và vẫn là "đăng xuất", và tên lớp này đã tồn tại trong một dll được biên dịch trước trong dự án của tôi (thuộc cho một ứng dụng web của bên thứ ba mà tôi làm việc cùng và phát triển).


Nếu bạn đưa ra một phương pháp mới để gây ra thông báo lỗi, cảm thấy tự do để thêm nó :)
Ben Fulton

1

Gặp sự cố này khi đặt một phần của trang aspx vào điều khiển người dùng riêng biệt. Trên máy của tôi mọi thứ đều ổn, trên máy chủ bị lỗi.

Đã đổi tên lớp và tệp sự cố.

http://support.microsoft.com/kb/919284 Phương pháp 2: Sắp xếp lại các thư mục trong ứng dụng đang viết về các tham chiếu vòng có thể có


1

Không có giải pháp nào trong số này hiệu quả với tôi. Cả hai tệp DLL xung đột của tôi đều ở trong C: \ ... \ AppData \ ... \ Temporary ASP.NET Files \ ...

Vấn đề là tôi đã khôi phục nguồn repo của mình về phiên bản cũ hơn - trước khi chúng tôi chuyển một loại từ dự án này sang dự án khác trong cùng một giải pháp.

Tôi đã thử xóa DLL mới hơn - thậm chí không có ở đó trong codebase cũ hơn - khỏi vị trí "Tệp ASP.NET Tạm thời" được xác định bởi msbuild. msbuild chỉ cần đặt nó trở lại.

Tôi cũng đã thử cài đặt web.config mà một số ở đây đã sử dụng thành công, nhưng điều đó cũng không hoạt động. Mặc dù, khi tôi viết điều này, tôi nhận ra rằng thực sự có hai dự án MVC trong cùng một giải pháp và cả hai đều có lỗi, vì vậy vấn đề có thể là tôi đã không thêm cài đặt cho cả hai.

Tôi đã thử lăn repo nguồn của mình về phía trước và làm sạch và quay lại và làm sạch. Không có gì.

Tôi đã thử xóa mọi thứ ở vị trí "Tệp ASP.NET Tạm thời". msbuild vừa đặt nó trở lại.

Cuối cùng, tôi đã thử xây dựng lại trong Visual Studio. Mặc dù đầu ra dòng lệnh và đầu ra "Lỗi" đều cho cùng một lỗi "Tệp ASP.NET tạm thời" trên msbuild, nhưng lỗi Intellisense - khi di chuột qua kiểu bị xung đột - thực sự phàn nàn về các tệp DLL trong thư mục đầu ra. Rõ ràng "Clean" và "Rebuild" đã không thực hiện công việc của họ. Tôi đã xóa thủ công các tệp DLL trong các thư mục đầu ra được xác định bởi Intellisense và sự cố đã được giải quyết.

tl; dr - Đảm bảo rằng bạn đang bao gồm tất cả web.configs của mình bằng cài đặt hàng loạt và cố gắng tận dụng Intellisense để có thêm manh mối.


1

Sự cố của tôi được liên kết với .dll đang được tạo trong thư mục dự án của tôi.

Nếu bạn đang tham chiếu đến một tệp khác, thay vì làm mọi thứ bạn thấy ở trên, điều đã khắc phục sự cố của tôi ngay lập tức chỉ là xóa .dll nằm trong thư mục / bin cho dự án của tôi.

Vấn đề không nhất thiết phải là bản sửa lỗi web.config - đó là một tham chiếu vòng tròn cần được giải quyết. Tôi nhận ra rằng tôi đã xóa .dll cũ trong tệp dự án ban đầu của mình nhưng không phải trong dự án đang tham chiếu đến nó.

Tôi không khuyên bạn nên thực hiện sửa đổi đối với tệp web.config của mình vì đó chỉ là một bản sửa lỗi hỗ trợ băng tần - không thực sự giải quyết được vấn đề thực tế. Làm điều đó nếu bạn không muốn khắc phục sự cố, nhưng nếu bạn muốn tránh đau đầu trong tương lai, chỉ cần xóa .dll khỏi cả hai nơi.


1

Tôi đã có một phần lớp có cùng tên trong hai dự án khác nhau. Tôi đã giải quyết nó bằng cách chỉ để nó trong một dự án.


0

Đôi khi, nó có thể hữu ích để xóa giải pháp và tạo lại nó. Vì việc sử dụng này xảy ra khi chuyển đổi từ VS2005 sang vs2010, một số tham chiếu sang framework 4.0 (sau khi nâng cấp) vẫn còn trong giải pháp, thậm chí tất cả các dự án được định nghĩa là 3.5.

Thông thường, việc xây dựng lại giải pháp sẽ giải quyết những vấn đề này.


0

Tôi đã gặp vấn đề tương tự khi biên dịch ứng dụng trên máy chủ biên dịch.

Bộ điều khiển của tôi có một mã tĩnh đơn giản, vì vậy tôi đã thay đổi ascx của mình:

 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="controllerName.ascx.cs" Inherits="Controls.controllerName" %>

Đến

 <%@ Control Language="C#" AutoEventWireup="true" Src="controllerName.ascx.cs" Inherits="Controls.controllerName" %>

Cũng xóa từ khóa một phần khỏi phần mã và thêm một không gian tên vào phần sau.

Điều này:

using System;
using System.Web.UI;

/// <summary>
/// My controller
/// </summary>
public partial class controllerName: UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

Về điều này:

using System;
using System.Web.UI;

namespace Controles
{
    /// <summary>
    /// My controller
    /// </summary>
    public class controllerName : UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
    }
}

Và điều đó đã làm việc cho tôi.


0

Đối với tôi, điều này đã xảy ra khi tôi đặt vị trí PrecompiledWeb / Publish thành thư mục hiện tại, cũng là nơi chứa thư mục gốc của trang web.

Trang Web của tôi sau đó nhìn thấy thư mục xuất bản như một phần của dự án khi biên dịch / xây dựng và sau đó tìm các bản sao theo cách đó.

tức là Không đặt phiên bản đã xuất bản / biên dịch trước của trang web của bạn trong các thư mục mã của trang web của bạn.


0

Nếu tệp DLL đang hiển thị trong một thư mục tạm thời, bạn nên thử làm sạch giải pháp của mình.


0

Đăng giải pháp của tôi:

Sự cố liên quan đến "Quét khi truy cập" của Mcafee Antivirus. Vô hiệu hóa điều này đã giải quyết được vấn đề. Bằng cách nào đó, thư mục ASP Temporary không được ASP sử dụng đúng cách khi chương trình chống vi-rút BẬT.

Hy vọng điều này sẽ giúp ai đó.


Bạn có biết tại sao không? Nhóm của tôi cũng gặp sự cố này và họ nói rằng đó là do McAfee, tuy nhiên, dựa trên các quy tắc CNTT của công ty, chúng tôi không thể hủy kích hoạt phần mềm chống vi-rút (điều này không nên can thiệp!).
Kat Lim Ruiz,

Chúng tôi vẫn đang nghiên cứu để tìm ra nguyên nhân chính xác. Rất tiếc, việc loại trừ thư mục Tạm thời ASP khỏi Quét khi truy cập không giải quyết được vấn đề vĩnh viễn.
Adrian Nasui


0

Đi tới Thêm tham chiếu và tìm kiếm cả dll, Cả hai dll sẽ được chọn, bỏ chọn một trong các dll, vì có các tham chiếu đến cùng một dll với sự không rõ ràng về phiên bản khác nhau được tạo ra.


0

Giải pháp của tôi là thay thế CodePage = "...." bằng CodeBehind = "..." trong tệp .aspx. Bằng cách nào đó, nó đã được để dưới dạng CodePage trong quá trình di chuyển từ các phiên bản .NET trước đó. Chỉ thị trang này tạo ra một tệp dll khác xung đột với tệp dll của dự án.


0

Không có giải pháp nào trong số này hiệu quả với tôi. Biên dịch ở chế độ "Phát hành" đã hoạt động, nhưng khi tôi chuyển sang "Gỡ lỗi", tôi gặp phải mười mươi Thông báo lỗi này.

Tôi không hiểu tại sao, nhưng khởi động lại Visual Studio đơn giản là giải pháp của tôi.


0

Tôi phải đối mặt với vấn đề trong thời gian biên dịch.

Tôi đồng ý với lô = "true" , lỗi cho biết có tồn tại 2 assembly

Giải pháp 1: Xóa một trong số chúng

Giải pháp 2: Định cấu hình một trong số chúng

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.