Bir web uygulaması projesi çalıştırırken, rastgele görünen zamanlarda bir sayfa bir CS0433 hatasıyla başarısız olabilir: birden çok DLL'de tür mevcuttur. DLL'lerin tümü, "Temporary ASP.NET Files" dizininde bulunan DLL'ler tarafından oluşturulur.
Bir web uygulaması projesi çalıştırırken, rastgele görünen zamanlarda bir sayfa bir CS0433 hatasıyla başarısız olabilir: birden çok DLL'de tür mevcuttur. DLL'lerin tümü, "Temporary ASP.NET Files" dizininde bulunan DLL'ler tarafından oluşturulur.
Yanıtlar:
Web.config dosyasının "derleme" öğesine batch = "false" özniteliğini ekleyin.
Bu sorun, ASP.NET 2.0'ın uygulamayı derlemek için uygulama başvurularını ve klasör yapısını kullanma biçimi nedeniyle oluşur. Uygulama için web.config dosyasındaki öğenin batch özelliği true olarak ayarlanmışsa, ASP.NET 2.0 uygulamadaki her klasörü ayrı bir derlemede derler.
Bu, .cs dosyalarını App_Code'a yerleştirirseniz ve derleme eylemini bir Web Uygulaması Projesi'nde derlemek için değiştirirseniz gerçekleşebilir.
İçerik olarak App_Code'daki .cs dosyaları için derleme eylemine sahip olun veya App_Code adını başka bir şeye değiştirin. Intellisense, içerik olarak işaretlenen .cs dosyalarını düzeltmeyeceği için adını değiştirdim.
Daha fazla bilgi http://vishaljoshi.blogspot.se/2009/07/appcode-folder-doesnt-work-with-web.html adresinde
Bu hatanın olası bir nedeni inherits=, <@page language=......inherits=>satırında aynı ada sahip 2 aspx sayfası olmasıdır .
inherits=İsmin değiştirilmesi hatayı çözer.
Bir başkasının sorunumu paylaşması durumunda, yeni dallanmış bir projenin Web Sitesini yayınlamaya çalışırken bu hatayı aldım, derleme mükemmel çalıştı.
Yayınlama Ayarlar -> Ön derlemeyi yapılandır altında "Önceden derlenmiş sitenin güncellenebilir olmasına izin ver" onay kutusunu kaldırmayı unuttuğum ortaya çıktı .
Başka bir veri noktası olarak, Ben'in cevabındaki bağlantılarda açıklandığı gibi herhangi bir döngüsel referans kanıtı olmadan bu sorunu yaşadım . Web sitesi projemi oluşturmak, bu hataların birkaçıyla başarısız olur ve ayar yapmak compilation batch="false"onu düzeltir, ancak bu büyük bir üretim web sitesi olduğu için bu rotaya gitmek istemedim.
Bu çözüm, S: ile eşleştirdiğim D: \ svn klasörümün bir alt klasöründeydi. Çözümü S: 'den açtığımda, bu hatalar oluştu, ancak doğrudan D: \ svn'ye gidip çözümü açarsam hata olmaz.
Ayrıca, compilation batch="true"web.config dosyamda olmasına rağmen , çözümü eşlenmiş S: sürücüsünden açarken tüm .ascx dosyalarımın kendi derlemelerinde derlendiğini fark ettim . Onu fiziksel konumdan açarsam, .ascx dosyaları kendi klasörlerinin derlemelerinde derlenir (bu nasıl batch="true"çalışması gerekir).
Garip.
Bu hata, web formunun sınıf adı ile aynı sınıf adına sahip wsdl saplaması (.cs dosyasının arkasındaki kod) arasındaki çelişkiden kaynaklanıyordu.
ASPX sayfası: Dashboard Class: partiacl class Dashboard
AppCode / APIServices.cs: genel kısmi sınıf Dashboard
Hata yalnızca web sitesi yayınlanırken tekrarlanabilirdi, ancak derleme ve hata ayıklama herhangi bir hata bildirmedi.
Benim durumumda bir projeyi yeniden adlandırmıştım, dolayısıyla dll de yeniden adlandırılmıştı. Yeni dll'yi kopyaladığımda, ancak eskisini sunucudan silmeyi düşünmediğimde, kısa süre sonra aynı isimlere sahip bir sürü sınıf çiftine sahip oldum. Güncel olmayan dll'leri silmek, hile yapıyordu (nedene).
Bu yanıtların hiçbiri benim için işe yaramadı, ancak sorunu çözdüm. Web uygulamasını dağıtmak için VS'nin Yayınlama işlevini kullandığım için, yayınlamadan önce mevcut tüm dosyaları silme seçeneğini seçtim Web Yayınlama sihirbazında . Bu, uygulamanın temiz bir kopyasını zorunlu kıldı ve buradan her şey yolunda gitti.
Bu çözüm, yerel hata ayıklama kopyanız iyi çalışıyorsa ancak yayınlanan sistem işe yaramıyorsa yararlı olabilir. Ayrıca, silmek için tek tek dll'leri bulmak için zaman ayırmak istemiyorsanız ve önce silinen üretim dosyalarına aldırış etmiyorsanız harika.
Benim durumumda, hala yinelenen sınıf adına sahip bir Designer.cs dosyasını düzenlediğimde sorun çözüldü. bazı nedenlerden dolayı, "logout" sınıfını "logout2" olarak yeniden adlandırdığımda, tasarımcı dosyasında otomatik olarak değiştirilmedi ve hala "logout" idi ve bu sınıf adı projemde önceden derlenmiş bir dll'de zaten mevcuttu ( birlikte çalıştığım ve geliştirdiğim bir üçüncü taraf web uygulamasına).
Bir aspx sayfasının bir bölümünü ayrı kullanıcı denetimine koyduğunuzda bu sorunu yaşadım. Makinemde her şey yolundaydı, sunucuda bir hata var.
Sorunlu sınıf ve dosyayı yeniden adlandırdı.
http://support.microsoft.com/kb/919284 Yöntem 2: Uygulamadaki klasörleri yeniden sırala, olası döngüsel referanslar hakkında yazıyor
Bu çözümlerin hiçbiri benim için işe yaramadı. Çakışan DLL dosyalarımın ikisi de C: \ ... \ AppData \ ... \ Temporary ASP.NET Files \ ...
Sorun, kaynak depomu önceki bir sürüme geri döndürmüş olmamdı - bir türü aynı çözüm içindeki bir projeden başka bir projeye taşımadan önce.
Msbuild tarafından tanımlanan "Geçici ASP.NET Dosyaları" konumundan eski kod tabanında hiç bulunmaması gereken yeni DLL'yi silmeyi denedim. msbuild onu geri koydu.
Ayrıca bazılarının başarıyla kullandığı web.config ayarını da denedim, ancak bu da işe yaramadı. Bunu yazarken, aslında aynı çözüm içinde iki MVC projesi olduğunu ve her ikisinin de hataları olduğunu fark etsem de sorun, ayarı ikisine de eklememiş olmam olabilir.
Kaynak depomu ileriye doğru yuvarlamayı ve tekrar temizlemeyi, geri almayı ve temizlemeyi denedim. Hiçbir şey değil.
"Geçici ASP.NET Dosyaları" konumundaki her şeyi silmeyi denedim. msbuild sadece tekrar geri koydu.
Son olarak, Visual Studio'da yeniden oluşturmayı denedim. Komut satırı çıktısı ve "Hatalar" çıktısının her ikisi de aynı msbuild "Geçici ASP.NET Dosyaları" hatasını vermesine rağmen, Intellisense hatası - çakışan türün üzerine gelindiğinde - aslında çıktı dizinlerindeki DLL'lerden şikayet ediyordu. Görünüşe göre "Temizle" ve "Yeniden Oluştur" işlerini yapmıyordu. Intellisense tarafından belirlenen çıktı dizinlerindeki DLL'leri manuel olarak sildim ve sorun çözüldü.
tl; dr - Toplu ayar ile tüm web.configs dosyalarınızı kapladığınızdan emin olun ve daha fazla ipucu için Intellisense'den yararlanmaya çalışın.
Sorunum, proje klasörümde oluşturulan bir .dll ile bağlantılıydı.
Başka bir dosyaya başvuruyorsanız, yukarıda gördüğünüz her şeyi yapmak yerine, sorunumu anında çözen şey, projem için / bin dizinimde kalan .dll'yi silmekti.
Sorun mutlaka bir web.config düzeltmesi değil, çözülmesi gereken döngüsel bir referanstır. Orijinal proje dosyamdaki eski .dll'yi temizlediğimi ancak onu referans alan projede temizlemediğimi fark ettim.
Web.config dosyanızda değişiklik yapmanızı önermiyorum çünkü bu sadece bir yara bandı düzeltmesi - gerçek sorunu ele almıyor. Sorunu çözmek istemiyorsanız, ancak gelecekteki baş ağrılarından kaçınmak istiyorsanız, .dll'yi her iki yerden de kaldırın.
Bazen çözümü kaldırıp yeniden oluşturmak yardımcı olabilir. Bu kullanım, VS2005'ten vs2010'a dönüştürüldüğünde gerçekleşeceğinden, bazı çerçeve 4.0 referansları (yükseltmeden sonra) çözümde kalır, hatta tüm projeler 3.5 olarak tanımlanır.
Normalde çözümü yeniden inşa etmek bu sorunları gidermelidir.
Uygulamayı bir derleme sunucusunda derlerken de aynı sorunu yaşadım.
Denetleyicimin basit bir statik kodu vardı, bu yüzden ascx'imi değiştirdim:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="controllerName.ascx.cs" Inherits="Controls.controllerName" %>
için
<%@ Control Language="C#" AutoEventWireup="true" Src="controllerName.ascx.cs" Inherits="Controls.controllerName" %>
Ayrıca kısmi anahtar kelimeyi kodun arkasından çıkardı ve kod arkasına bir ad alanı ekledi.
Bu:
using System;
using System.Web.UI;
/// <summary>
/// My controller
/// </summary>
public partial class controllerName: UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
Buna:
using System;
using System.Web.UI;
namespace Controles
{
/// <summary>
/// My controller
/// </summary>
public class controllerName : UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
Ve bu benim için çalıştı.
Benim için bu, PrecompiledWeb / Publish konumumu sitenin kök klasörünün de bulunduğu mevcut dizine ayarladığımda oldu.
Web Sitem daha sonra derleme / oluşturma sırasında yayınlama klasörünü projenin bir parçası olarak görüyor ve bu şekilde kopyaları buluyordu.
Örneğin, sitenizin yayınlanmış / önceden derlenmiş sürümünü sitenizin kod klasörlerine koymayın.
DLL'ler geçici bir klasörde gösteriliyorsa, çözümünüzü temizlemeyi denemelisiniz.
Çözümüm yayınlanıyor:
Sorun, Mcafee Antivirus'ün "Erişimde Tarama" ile ilgiliydi. Bunu devre dışı bırakmak sorunu çözdü. Her nasılsa, ASP Temporary klasörü antivirüs AÇIK iken ASP tarafından düzgün kullanılmıyordu.
Umarım bu birine yardımcı olur.
App_Code klasörü soruna neden oluyor, sınıfı klasörün dışına koyun (İyi çalışıyor)
App_Code klasörü Web Uygulama Projeleri için tasarlanmamıştır
http://vishaljoshi.blogspot.in/2009/07/appcode-folder-doesnt-work-with-web.html
Derleme zamanında sorunla karşılaştım.
Ben katılıyorum ile toplu = "true" nitelikler, hata düzeneği 2 orada mevcut anlatıyor
1.Çözüm: Bunlardan birini silme
2.Çözüm: Bunlardan birini yapılandırın