Nie jestem szczególnie utalentowanym programistą w świecie Windows i mam problem, który wymaga wyjaśnienia. Mam nadzieję, że w mojej niewiedzy brakuje mi czegoś oczywistego.Błąd kompilacji programu .NET Visual Studio "występuje inna deklaracja częściowa tego typu"
Znalazłem się zmuszonym do odwrotnej kompilacji prekompilowanej witryny/aplikacji .NET. Odbicie udało się mi C# CodeFile Mówię potrzebne, i spędziłem sporo czasu zmienia się cały aspx referencje od rzeczy tak:
<%@ page language="C#" autoeventwireup="true" inherits="someclassname, App_Web_Z8sdf" %>
do rzeczy tak:
<%@ page language="C#" autoeventwireup="true" CodeFile="somefilename.aspx.cs" inherits="someclassname" %>
i przenoszenie plików aspx.cs do tego samego katalogu, co pliki .aspx.
Doprowadziło mnie to do punktu, w którym mógłbym załadować projekt w nieco edytowalnej formie w Visual Studio. Próbowałem tego zarówno w latach 2010 i 2008.
Teraz jednak staram się zbudować ten projekt. Otrzymuję błąd:
"Missing partial modifier on declaration of type 'someclassname'; another partial declaration of this type exists"
Odpowiednio. Rozumiem, że klasy można zadeklarować w wielu miejscach, a każde z nich musi mieć słowo kluczowe "częściowe", aby mogło działać. Więc dodam częściowe słowo kluczowe do definicji klasy w aspx.cs złożyć, że błąd ma miejsce. To udało się pozbyć się tego komunikatu o błędzie, i zastąpienie go
"The type 'someclassname' already contains a definition for 'some variable name".
To wyraźnie zachowuje się jak nie ma innego gdzieś jest definicja klasy. Będąc głównie administratorem unix, zaczynam przeszukiwać wszystkie pliki w projekcie pod kątem ciągów pasujących do nazwy danej klasy, a znajduję ją dokładnie w dwóch plikach i tylko dwóch. Plik aspx zawierający pierwsze wiersze, które zacytowałem, oraz plik aspx.cs, który odpowiada temu, który zawiera definicję klasy. Teraz się mylę.
Przeczytałem kilka postów na forach wskazujących, że Visual Studio utworzy pliki "projektantów" z częściowymi klasami, co wydaje się obiecujące, ale nie widzę tych plików projektanta, nawet gdy przeglądam wszystkie pliki w VS, kiedy Patrzę na katalog na dysku lub naprawdę nigdzie indziej. Najwyraźniej czegoś brakuje. Być może nie wykonałem poprawnie rekonstytucji ze wstępnie skompilowanej strony? Może jest jakieś ustawienie w web.config lub innym pliku, który muszę zmienić?
Każda pomoc zostanie bardzo doceniona.
Na życzenie uogólniona wersja definicji SomeClass
using System;
using System.Web;
using System.Web.Profile;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
public class Some_Class_Name : Page, IRequiresSessionState
{
/// a bunch of variables defined like this
protected HtmlForm form1;
///a bunch of protected methods defined similarly to this
protected void LinkButtonReturn_Click(object sender, EventArgs e)
{
this.Session.Clear();
base.Response.Redirect("Default.aspx");
}
}
aktualizacji To wydaje się być wynikiem konwersji z prekompilowany miejscu z powrotem do źródła. Pliki .aspx.cs zawierają definicje pól kontrolnych (jeśli jest to poprawna terminologia, którą nazwałbym naiwnie "definicjami zmiennych"), której nie powinny, i brak częściowej deklaracji, że powinny one mieć. Spekulując dziko, wydaje się, że definicje są faktycznie implikowane przez plik aspx, a więc plik aspx.cs ich nie potrzebuje. Wielkie dzięki dla Dana Abramova i wszystkich innych, którzy komentowali.
Czy możesz opublikować definicję "someclass"? – scottm
Mogę opublikować uogólnioną wersję. – malcolmpdx
Nie jestem facetem WebForms, ale czy możesz spróbować kompilacji po usunięciu wszystkich pól kontrolnych (takich jak 'form1')? Może jednak jestem okropnie zły. –