Ошибка сборки .NET Visual Studio "существует другое частичное объявление этого типа" - PullRequest
5 голосов
/ 28 июля 2011

Я не очень опытный разработчик в мире Windows, и у меня есть проблема, которая требует некоторого объяснения. Я надеюсь, что в своем невежестве я упускаю что-то очевидное.

Мне пришлось откомпилировать предварительно скомпилированный веб-сайт / приложение .NET. Reflection удалось получить мне нужный мне c # CodeFile, и я потратил немало времени, изменяя все ссылки .aspx на такие вещи:

<%@ page language="C#" autoeventwireup="true" inherits="someclassname, App_Web_Z8sdf" %>

на такие вещи:

<%@ page language="C#" autoeventwireup="true" CodeFile="somefilename.aspx.cs" inherits="someclassname" %>

и перемещение файлов aspx.cs в тот же каталог, что и файлы .aspx.

Это привело меня к тому, что я мог фактически загрузить проект в несколько редактируемой форме в Visual Studio. Я пробовал это и с 2010 и с 2008 годами.

Теперь, однако, я пытаюсь построить этот проект. Я получаю ошибку:

"Missing partial modifier on declaration of type 'someclassname'; another partial declaration of this type exists"

Достаточно справедливо. Я понимаю, что классы могут быть объявлены в нескольких местах, и для того, чтобы это работало, каждое из них должно иметь ключевое слово «частичное». Поэтому я добавляю частичное ключевое слово в определение класса в файле aspx.cs, в котором происходит ошибка. Ему удалось избавиться от этого сообщения об ошибке и заменить его на

"The type 'someclassname' already contains a definition for 'some variable name".

Он явно ведёт себя так, будто где-то есть другое определение класса. Будучи главным образом администратором Unix, я начинаю искать во всех файлах проекта строки, соответствующие названию рассматриваемого класса, и нахожу его только в двух файлах и двух файлах. Файл aspx, который содержит первые строки, которые я цитировал, и файл aspx.cs, который ему соответствует, который содержит определение класса. Теперь я запутался.

Я прочитал некоторые сообщения на форуме, которые указывают, что Visual Studio будет создавать «дизайнерские» файлы с частичными классами в них, что казалось многообещающим, но я не вижу эти дизайнерские файлы, даже когда я просматриваю все файлы в VS, когда я посмотрите каталог на диске или вообще где-нибудь еще. Очевидно, я что-то упустил. Возможно, я неправильно выполнил восстановление с предварительно скомпилированного сайта? Может быть, в файле web.config или в другом файле есть какие-то настройки, которые мне нужно изменить?

Любая помощь будет принята с благодарностью.

По запросу обобщенная версия определения 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");
        }

}

Обновление Похоже, это результат преобразования предварительно скомпилированного сайта обратно в исходный. Файлы .aspx.cs содержат определения полей управления (если это правильная терминология для того, что я наивно назвал бы «определениями переменных»), чего они не должны, и не имеют частичного объявления, которое они должны иметь. Дико выражаясь, кажется, что определения на самом деле подразумеваются файлом aspx, и поэтому файл aspx.cs не нуждается в них. Большое спасибо Дану Абрамову и всем, кто прокомментировал.

Ответы [ 3 ]

4 голосов
/ 19 июня 2012

Этот вопрос немного устарел, но я только что столкнулся с подобной проблемой при декомпиляции кода .NET с помощью Reflector.

Причина, по которой вы получаете эти ошибки, заключается в "CodeFile =... »директива страницы на вашей странице ASPX.Когда ASP.NET видит директиву CodeFile, он автоматически создает файл конструктора (то есть частичный класс с определениями элементов управления).Изменение директивы CodeFile на директиву CodeBehind решило все мои проблемы.

Надеюсь, что это может помочь кому-то еще.

2 голосов
/ 28 июля 2011

Я могу быть ужасно необычным, но я подозреваю, что компилятор генерирует частичные классы на основе самого кода aspx.Если это так, то такие классы, очевидно, содержат поля типа form1.

Я бы удалил все объявления полей управления и посмотрел, поможет ли это.Обратите внимание, что я не парень WebForms, так что это предположение.

0 голосов
/ 11 марта 2014

Связанная, но не совсем похожая проблема возникла у меня сегодня при реализации заглушки веб-службы с использованием WCF.При создании одноразовой заглушки и прокси веб-службы для прототипирования дизайна я случайно поместил автоматически сгенерированный код в то же пространство имен, что и код определения службы.

Мое решение состояло в том, чтобы переместить автоматически сгенерированный клиентский прокси вэто собственное пространство имен, и все было хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...