Ошибка ASP.NET: “Тип 'нечто' существует и в” temp1.dll “и в ”temp2.dll" (pt 2)

Хорошо, я немного подумал об этом и, наконец, нашел решение. Я немного упростил свое решение и использовал вместо кнопок прямоугольники, но вы можете перенести большую часть кода на кнопки, чтобы Начнем с того, что это не та функциональность, которую вы искали, но настолько близко, насколько это возможно, я запускаю событие при нажатии мыши, которое освобождает щелчок мыши и до тех пор, пока это событие не приходит из прямоугольника, тогда не переворачиваем булеву картину рисовать, и поэтому вы в основном нажимаете, чтобы войти в «Режим рисования», и нажимаете еще раз, чтобы выйти из раскрашивания плиток

public class Main extends Application {    

    private boolean mousePressed;

    @Override
    public void start(Stage primaryStage) throws Exception{
        BorderPane borderPane = new BorderPane();
        primaryStage.setTitle("SpriteSheet");
        Group root = new Group();
        Scene scene = new Scene(borderPane, 500,200);
        //        scene.setFill(Color.BLACK);

        primaryStage.setScene(scene);
        GridPane gridPane = new GridPane();
        borderPane.setCenter(root);

        for(int x = 0; x < 10; x++) {
            for(int y = 0; y < 10; y++) {
                Rectangle rectangle = new Rectangle(10, 10);
                rectangle.setOnMousePressed(event -> {
                    mousePressed = true;
                    System.out.println("mouseDown");
                    rectangle.fireEvent(new MouseEvent(MouseEvent.MOUSE_RELEASED,
                            rectangle.getLayoutX(), rectangle.getLayoutY(), rectangle.getLayoutX(), rectangle.getLayoutY(),
                            MouseButton.PRIMARY, 1,
                            false, false, false, false,
                            false, false, false, false,
                            false, false, null));
                });

                rectangle.setOnMouseReleased(event -> {
                    System.out.println(event.getSource());
                    if(!event.getSource().toString().equals("Rectangle[x=0.0, y=0.0, width=10.0, height=10.0, fill=0x000000ff]")) {
                        mousePressed = false;
                        System.out.println("mouseUp");
                    }
                });

                rectangle.setOnMouseMoved(event -> {
                    if(mousePressed) {
                        rectangle.setFill(Color.BLUE);
                    }
                });

                gridPane.add(rectangle, x, y);
            }
        }
        root.getChildren().add(gridPane);
        primaryStage.show();
    }
    public static void main(String[] args) { launch(args); }
}
13
задан Community 23 May 2017 в 12:00
поделиться

9 ответов

ОБНОВЛЕНИЕ: хорошо, как вы обнаружили, циклическая ссылка была неправильной, поскольку есть и другие ситуации, которые могут вызвать подобное поведение.

Более общий способ описания проблемы состоит в том, что пакетная обработка во время выполнения работает очень разрешающим образом, что может маскировать проблемы. По сути, мы пытаемся объединить все в одну папку, но если мы получаем ошибку компиляции при компиляции этого пакета, мы возвращаемся к компиляции отдельного файла. Во многих случаях это работает нормально, но иногда это может привести к тому, что данная страница компилируется дважды (аналогично тому, что я описал ниже, но по другой причине).

С другой стороны, aspnet_compiler работает строгим способом, при котором, если пакетирование не удается, он полностью завершается неудачей и не возвращается.Вот почему запуск этого инструмента - отличный способ найти различные типы проблем (или скрытых проблем), которые могут быть далеко не очевидными во время выполнения. Думаю, мы не очень хорошо продвинули этот инструмент для этой цели :)

Что касается того, почему переименование файла исправило его, это может быть вызвано изменением порядка обработки файлов, что немного произвольно. . Может случиться так, что если вы переименуете его во что-то другое, вы увидите, как это повторится снова.

Честно говоря, оглядываясь назад, мне хотелось бы, чтобы мы сделали это поведение пакетной обработки строгим во время выполнения, чтобы раньше отлавливать такие ситуации. Причина, по которой мы выбрали текущую резервную схему, заключалась в том, чтобы избежать сбоев, когда это возможно, но за это пришлось заплатить: когда что-то не так, это больно ловить :)


ОРИГИНАЛЬНЫЙ ОТВЕТ: Короче говоря, проблема в том, что когда пакетная обработка включена (а она включена по умолчанию), вам следует избегать циклических зависимостей на уровне каталогов. Позвольте мне объяснить, что я имею в виду под этим.

Вот пример. Допустим, у вас есть:

  • В папке1: page.aspx и uc2.ascx
  • В forder2: uc1.ascx

И скажем, что page.aspx ссылается на uc1.ascx (через директиву @register), и что uc1 .ascx ссылается на uc2.ascx. На уровне файла это прекрасно, но на уровне каталогов существует циклическая зависимость: папка 1 ссылается на что-то в папке 2, что указывает на что-то в папке 1.

Почему это проблематично, связано с тем, как работает пакетная обработка: когда вы запрашиваете страницу, она сначала пытается скомпилировать все в папке folder1 вместе. Но поскольку folder1 / page.aspx ссылается на folder2 / uc1.ascx, ему необходимо скомпилировать папку folder2, прежде чем она сможет выполнить folder1.Но тогда uc1 использует uc2, то есть сначала он должен сделать folder1! На этом этапе ASP.NET обнаруживает ситуацию и пытается извлечь из нее максимальную пользу, скомпилировав uc2.asc самостоятельно. Хотя это позволяет некоторым сценариям работать, это также может вызвать странные вещи, потому что некоторые элементы в конечном итоге скомпилированы в две сборки. Здесь uc2.ascx будет скомпилирован как сам по себе, так и с пакетом folder1.

На самом деле существует способ легко определить, имеет ли ваш сайт такие циклические зависимости на уровне папок. В окне консоли VS перейдите в корень вашего сайта и выполните:

aspnet_compiler -v foo -p .

Если у вас есть циклические зависимости на уровне папки, вы получите несколько ошибок, которые выглядят следующим образом:

/foo/Sub/UC1.ascx(2): error ASPPARSE: Circular file references are not allowed.

Дешевый способ избежать этой проблемы - это то, что вы уже знаю: отключите дозирование. Теперь, по крайней мере, вы знаете, почему это работает :)

Но лучше, если вы можете, избежать циклических зависимостей на уровне папок. Если вы начнете думать о каждой папке как о «компоненте», который производит сборку, это действительно имеет смысл и может помочь сделать части вашего сайта более модульными.

Да, это также справедливо называть "ошибкой" в системе компиляции или, по крайней мере, ограничением. Но как только вы осознаете это, этого довольно легко избежать.

15
ответ дан 1 December 2019 в 20:00
поделиться
  1. , В первую очередь, необходимо использовать против 2013 для для этой проблемы.
  2. , Во-вторых, эта ошибка, потому что файл, что расширение .dll и шоу на браузере как этот

Ошибка компилятора ssage: CS0433: типовая 'Гадюка dashboard_badusercontrol_ascx' существует и в 'c:\Docunts and Settings\me\Local Settings\Temp\Temporary ASP.NET Files\root\3c2b7e1f\2e8a7620\App_Web_badusercontrol.ascx.a57ad085.iljdmp1p.dll' и в 'c:\Docunts and Settings\me\Local Settings\Temp\Temporary ASP.NET Files\root\3c2b7e1f\2e8a7620\App_Web_bhdqaimy.dll'

, Таким образом, необходимо удалить тот файл, которые показывают с этой ошибкой. (App_Web_bhdqaimy.dll)

0
ответ дан 1 December 2019 в 20:00
поделиться

Очистите временные файлы ASP.NET . Возможно, перед перемещением элемент управления имеет сборку, а после - другую

4
ответ дан 1 December 2019 в 20:00
поделиться

Иногда я получаю это с помощью своих веб-элементов управления. Они будут жаловаться, что существуют дважды, когда я редактирую другой файл. Я не знаю, что за сумасшествие вызывает это, но я знаю, что если я нажму пробел> сохранить в элементе управления жалобами, он заставит сервер перекомпилировать, и после этого он будет работать нормально.

2
ответ дан 1 December 2019 в 20:00
поделиться

Я думаю, что некоторые из этих ответов могли быть неточными. Я видел это, когда ваш код программной части ссылается на другую версию сборки, чем ваш web.config. например:

(версия 1.1.0.0 указана в aspx и 1.2.0.0 указана в web.config)

MyFile.aspx

<%@ Register TagPrefix="cc1" Namespace="StrongNamed.Namespace" Assembly="StrongNamed, Version=1.1.0.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" %>

web.config:

<assemblies>
    <add assembly="StrongNamed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
...

Я видел случаи, когда обе версии сборки находятся в GAC, ASP.NET выдаст вам описанную вами ошибку.

2
ответ дан 1 December 2019 в 20:00
поделиться

Подобная ошибка связана с пространством имен. Проверьте пространство имен для всех файлов, чтобы убедиться в отсутствии дублирования или ошибки использования пространства имен.

3
ответ дан 1 December 2019 в 20:00
поделиться

В вашем решении более одного проекта?

Попробуйте очистить папку /bin (вручную). Возможно, что старый файл сборки все еще сохраняется где-то, не позволяя вам выполнить сборку...

Также посмотрите на свои ссылки - возможно, вы дублируете определение чего-то, на что ссылаетесь?

Это дикая попытка - но, возможно, у вас есть эта .dll, установленная в GAC?

2
ответ дан 1 December 2019 в 20:00
поделиться
  • Закройте все запущенные экземпляры visual studio.
  • Остановите IIS (если запущен, иначе остановите эту штуку "devserver")
  • Очистите папку ASP.NET Temp file (полностью)
  • Очистите папку BIN
  • Запустите IIS (если запущен)
  • Запустите VS
  • Пересоберите решение
1
ответ дан 1 December 2019 в 20:00
поделиться

При большом количестве проектов и папок иногда можно запутать пространства имен, особенно если вы пытаетесь форсировать вещи, используя объявления пространств имен.

Чтобы увидеть, действительно ли это проблема, я просмотрел все свои файлы кода - .cs и .designer.cs - и удалил ВСЕ объявления пространств имен, а затем перестроил все, чтобы увидеть, решит ли это проблему.

Вы не упоминаете, какую версию Visual Studio и .NET вы используете, это тоже может помочь - я помню, как сталкивался с аналогичной проблемой в VS2005.

1
ответ дан 1 December 2019 в 20:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: