Kesalahan ASP.Net: “Jenis 'foo' ada di” temp1.dll “dan” temp2.dll "

108

Saat menjalankan proyek aplikasi web, pada waktu yang tampaknya acak, halaman mungkin gagal dengan kesalahan CS0433: tipe ada di beberapa DLL. Semua DLL dihasilkan dari DLL yang berada di direktori "Berkas ASP.NET Sementara".

Ben Fulton
sumber

Jawaban:

135

Tambahkan atribut batch = "false" ke elemen "kompilasi" dari file web.config.

Masalah ini terjadi karena cara ASP.NET 2.0 menggunakan referensi aplikasi dan struktur folder aplikasi untuk menyusun aplikasi. Jika properti batch elemen di file web.config untuk aplikasi disetel ke true, ASP.NET 2.0 menyusun setiap folder dalam aplikasi ke dalam rakitan terpisah.

http://www.sellsbrothers.com/1995

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

Ben Fulton
sumber
Man, terima kasih untuk itu. Berebut untuk memperbaikinya di situs produksi hari ini. Tidak tahu apa penyebabnya (telah berfungsi dengan baik begitu lama!), Tetapi ini telah memperbaiki masalah kami.
Matt
Terima kasih. Ini bekerja. Bangun pagi ini dengan kesalahan ini. Discountasp.net MY ISP pasti telah mengubah sesuatu. Jika bukan karena posting ini, saya masih memiliki kesalahan. Jempol ke bawah untuk ISP saya.
Damon
3
Jawaban yang berguna - sintaksnya ada di sini: <compilation ... batch = "false" />
Catto
1
Perhatikan peringatan ini: "Metode ini disarankan hanya untuk aplikasi kecil ... Ini menyebabkan fragmentasi memori."
ThatMatthew
22

Ini mungkin terjadi jika Anda menempatkan file .cs di App_Code dan mengubah tindakan build-nya untuk dikompilasi di Proyek Aplikasi Web.

Baik buat tindakan build untuk file .cs di App_Code sebagai Konten atau ubah nama App_Code menjadi nama lain. Saya mengubah nama karena intellisense tidak akan memperbaiki file .cs yang ditandai sebagai konten.

Info lebih lanjut di http://vishaljoshi.blogspot.se/2009/07/appcode-folder-doesnt-work-with-web.html

Lilja
sumber
11

Salah satu kemungkinan alasan untuk kesalahan ini adalah bahwa ada 2 halaman aspx yang memiliki nama yang sama inherits=di <@page language=......inherits=>barisnya.

Mengubah inherits=nama menyelesaikan kesalahan.

Amrinder Singh
sumber
2
Ini memecahkan masalah saya, tampaknya salin / tempel kontrol pengguna agak rumit ketika Anda tidak memerlukan kode di belakang untuk melakukan apa pun.
Grubsnik
8

Kalau-kalau ada orang lain yang berbagi masalah saya, saya mendapat kesalahan ini ketika mencoba menerbitkan Situs Web dari proyek bercabang yang baru, membangun bekerja dengan sempurna.

Ternyata saya lupa menghapus kotak centang untuk "Izinkan situs yang telah dikompilasi menjadi dapat diperbarui" di bawah Publikasikan Pengaturan -> Konfigurasi prakompilasi .

ErikDaBe
sumber
4

Sebagai poin data lain, saya hanya mengalami masalah ini tanpa ada bukti referensi melingkar seperti yang dijelaskan dalam tautan di jawaban Ben. Membangun proyek situs web saya akan gagal dengan beberapa kesalahan ini, dan pengaturan compilation batch="false"memperbaikinya, tetapi saya tidak ingin mengambil rute itu karena ini adalah situs web produksi besar.

Solusi ini berada di subfolder dari folder D: \ svn saya, yang telah saya petakan ke S :. Ketika saya membuka solusi dari S :, kesalahan ini terjadi, tetapi jika saya langsung ke D: \ svn dan membuka solusi, tidak ada kesalahan.

Saya juga memperhatikan bahwa, meskipun ada compilation batch="true"di web.config saya, ketika membuka solusi dari S yang dipetakan: drive semua file .ascx saya dikompilasi ke dalam rakitan mereka sendiri. Jika saya membukanya dari lokasi fisik, file .ascx dikompilasi ke dalam rakitan folder masing-masing (begitulah batch="true"seharusnya cara kerjanya).

Aneh.

Mike Powell
sumber
4

Kesalahan ini disebabkan oleh konflik antara nama kelas formulir web dan wsdl stub (kode di belakang file .cs) yang memiliki nama kelas yang sama yaitu

Halaman ASPX: Dasbor Kelas: Dasbor kelas partiacl

AppCode / APIServices.cs: Dasbor kelas parsial publik

Kesalahan hanya dapat direproduksi saat menerbitkan situs web tetapi build dan debug tidak menginformasikan kesalahan apa pun.

Ravi Garg
sumber
2

Dalam kasus saya, saya telah mengganti nama proyek, begitu juga dll telah diganti namanya. Ketika saya baru saja menyalin dll baru tetapi tidak berpikir untuk menghapus yang lama dari server, saya segera memiliki banyak pasangan kelas dengan nama yang sama. Menghapus dll yang kadaluwarsa adalah melakukan trik (penyebab).

simaglei
sumber
2

Tak satu pun dari jawaban ini berhasil untuk saya, namun saya memperbaiki masalahnya. Karena saya menggunakan fungsi VS's Publish untuk menyebarkan aplikasi web, saya memilih opsi untuk menghapus semua file yang ada sebelum dipublikasikan di wizard Publish Web. Ini memaksa salinan bersih aplikasi dan semuanya bekerja dengan baik dari sana.

Solusi ini mungkin berguna jika salinan debugging lokal Anda berfungsi dengan baik tetapi sistem yang diterbitkan tidak. Juga bagus jika Anda tidak ingin meluangkan waktu untuk melacak dll individu untuk dihapus dan tidak keberatan file produksi dihapus terlebih dahulu.

kad81
sumber
2

Dalam kasus saya, menghapus semua rakitan keluaran dari folder bin di semua proyek dalam solusi memecahkan masalah. Sayangnya saya tidak punya penjelasan untuk itu.

dannydk
sumber
1

Dalam kasus saya, masalah terpecahkan ketika saya mengedit file Designer.cs yang masih memiliki nama kelas yang digandakan. untuk beberapa alasan, ketika saya mengganti nama kelas "logout" menjadi "logout2", dalam file desainer itu tidak secara otomatis berubah, dan masih "logout", dan nama kelas ini sudah ada di dll yang telah dikompilasi dalam proyek saya (milik ke aplikasi web pihak ketiga tempat saya bekerja dan mengembangkannya).

pengguna960123
sumber
Jika Anda menemukan cara baru untuk menyebabkan pesan kesalahan, silakan tambahkan :)
Ben Fulton
1

Dapatkan masalah ini saat meletakkan bagian dari halaman aspx ke dalam kontrol pengguna terpisah. Di mesin saya semuanya baik-baik saja, di server mendapat kesalahan.

Mengganti nama kelas dan file masalah.

http://support.microsoft.com/kb/919284 Metode 2: Susun ulang folder di aplikasi menulis tentang kemungkinan referensi melingkar

Anastasia Melnikova
sumber
1

Tak satu pun dari solusi ini berhasil untuk saya. Kedua file DLL saya yang bentrok berada di C: \ ... \ AppData \ ... \ Temporary ASP.NET Files \ ...

Masalahnya adalah saya telah mengembalikan repo sumber saya ke versi sebelumnya - sebelum kami memindahkan jenis dari satu proyek ke proyek lain dalam solusi yang sama.

Saya mencoba menghapus DLL yang lebih baru - yang seharusnya tidak ada sama sekali di basis kode lama - dari lokasi "File ASP.NET Sementara" yang diidentifikasi oleh msbuild. msbuild taruh saja kembali.

Saya juga mencoba pengaturan web.config yang beberapa di sini telah berhasil digunakan, tetapi itu juga tidak berhasil. Meskipun, ketika saya menulis ini, saya menyadari bahwa sebenarnya ada dua proyek MVC dalam solusi yang sama dan keduanya memiliki kesalahan, jadi masalahnya mungkin saya tidak menambahkan pengaturan ke keduanya.

Saya mencoba memutar repo sumber saya ke depan dan membersihkan dan menggulung kembali dan membersihkan. Tidak ada.

Saya mencoba menghapus semua lokasi "File ASP.NET Sementara". msbuild taruh saja kembali.

Akhirnya, saya mencoba membangun kembali di Visual Studio. Meskipun output baris perintah dan output "Kesalahan" keduanya memberikan kesalahan msbuild "File ASP.NET Sementara" yang sama, kesalahan Intellisense - saat mengarahkan kursor ke jenis yang konflik - sebenarnya mengeluh tentang DLL di direktori output. Rupanya "Clean" dan "Rebuild" tidak melakukan tugasnya. Saya secara manual menghapus DLL di direktori keluaran yang diidentifikasi oleh Intellisense, dan masalahnya telah terpecahkan.

tl; dr - Pastikan Anda mencakup semua web.configs Anda dengan pengaturan batch, dan coba gunakan Intellisense untuk petunjuk lebih lanjut.

Andrew Kvochick
sumber
1

Masalah saya terkait dengan .dll yang dihasilkan di folder proyek saya.

Jika Anda mereferensikan file lain, alih-alih melakukan semua yang Anda lihat di atas, yang memperbaiki masalah saya secara instan hanyalah menghapus .dll yang berada di dalam direktori / bin saya untuk proyek saya.

Masalahnya belum tentu perbaikan web.config - ini adalah referensi melingkar yang perlu diselesaikan. Saya menyadari bahwa saya menghapus .dll lama di file proyek asli saya tetapi tidak di proyek yang mereferensikannya.

Saya tidak menyarankan membuat modifikasi pada file web.config Anda karena itu hanya perbaikan bantuan pita - tidak benar-benar mengatasi masalah sebenarnya. Lakukan itu jika Anda tidak ingin memperbaiki masalah, tetapi jika Anda ingin menghindari sakit kepala di masa mendatang, hapus saja .dll dari kedua tempat tersebut.

cr1pto.dll
sumber
1

Saya memiliki kelas parsial dengan nama yang sama di dua proyek berbeda. Saya menyelesaikannya dengan hanya meninggalkannya dalam satu proyek.

Cosmin
sumber
0

Terkadang mungkin membantu menghapus solusi dan membuatnya lagi. Karena penggunaan ini terjadi ketika dikonversi dari VS2005 ke vs2010, beberapa referensi ke framework 4.0 (setelah peningkatan) tetap ada dalam solusi, bahkan semua project ditetapkan sebagai 3.5.

Biasanya membangun kembali solusi harus menyelesaikan masalah ini.

Roel AK Mohunlol
sumber
0

Saya mengalami masalah yang sama ketika saya mengompilasi aplikasi di server kompilasi.

Pengontrol saya memiliki kode statis sederhana, jadi saya mengubah ascx saya:

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

Untuk

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

Juga menghapus kata kunci parsial dari codebehind dan menambahkan namespace ke codebehind.

Ini:

using System;
using System.Web.UI;

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

Untuk ini:

using System;
using System.Web.UI;

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

Dan itu berhasil untuk saya.

Saliba
sumber
0

Bagi saya ini terjadi ketika saya menetapkan lokasi PrecompiledWeb / Publish saya ke direktori saat ini yang juga merupakan tempat folder root situs.

Situs Web saya kemudian melihat folder terbitkan sebagai bagian dari proyek saat menyusun / membangun dan kemudian menemukan duplikat dengan cara itu.

yaitu Jangan letakkan versi situs Anda yang telah dipublikasikan / dikompilasi sebelumnya di folder kode situs Anda.

David d C e Freitas
sumber
0

Jika DLL ditampilkan di folder sementara, Anda harus mencoba membersihkan solusi Anda.

Hugo Nava Kopp
sumber
0

Memposting solusi saya:

Masalah ini terkait dengan "On-Access Scan" dari Mcafee Antivirus. Menonaktifkan ini memecahkan masalah. Entah bagaimana, folder Sementara ASP tidak digunakan dengan benar oleh ASP saat antivirus AKTIF.

Semoga ini bisa membantu seseorang.

Adrian Nasui
sumber
Tahukah kamu kenapa? Tim saya juga mengalami masalah ini, dan mereka mengatakan itu karena McAfee, namun, berdasarkan aturan TI perusahaan, kami tidak dapat menonaktifkan antivirus (yang seharusnya tidak mengganggu!).
Kat Lim Ruiz
Kami masih berusaha menemukan penyebab pastinya. Sayangnya, mengecualikan folder Sementara ASP dari Pemindaian Saat Akses tidak memecahkan masalah secara permanen.
Adrian Nasui
0

Pergi ke Tambahkan referensi dan cari kedua dll, Kedua dll akan diperiksa, hapus centang salah satu dll, karena ada referensi ke dll yang sama dengan versi ambiguitas yang berbeda dihasilkan.

RkHirpara
sumber
0

Solusi saya adalah mengganti CodePage = "...." dengan CodeBehind = "..." di file .aspx. Entah bagaimana itu dibiarkan sebagai CodePage selama migrasi dari versi .NET sebelumnya. Arahan halaman ini membuat file dll lain yang bertentangan dengan file dll proyek.

mtkale.dll
sumber
0

Tak satu pun dari solusi ini berhasil untuk saya. Mengompilasi dalam mode "Rilis" berhasil, tetapi ketika saya beralih ke "Debug", saya mendapatkan sekian Pesan kesalahan ini.

Saya tidak mengerti mengapa, tetapi restart sederhana dari Visual Studio adalah solusi saya.

Beetee
sumber
0

Saya menghadapi masalah dalam waktu kompilasi.

Saya setuju dengan atribut batch = "true" , kesalahan mengatakan ada 2 assembly

Solusi 1: Menghapus salah satunya

Solusi2: Konfigurasi salah satunya

Hamit YILDIRIM
sumber