Как заставить Visual Studio прекращать копировать DLLs во время сборки без моего разрешения?

Ретрофит выполняет вызов для получения статистики асинхронно, но вы устанавливаете текст в TextView синхронно. Вы звоните getStatistics(), который запускает вызов, чтобы получить новую статистику, но не ждет его завершения. Затем вы сразу же устанавливаете текст, после чего объект statistics все еще равен нулю. Вам необходимо обновить TextView после получения успешного ответа. Например:

public void init() {
    getStatistics(); 
}

private void getStatistics() {
    ...
        @Override
        public void onResponse(Call<STATISTIC> call, Response<STATISTIC> response) {
            if (response.isSuccessful()) {
                setStatistics(response.body()); 
                // Call the code to update your UI here, as we have now received the stats
                updateUI(); 
            } else {
                ...
            }
        }
    ...
}

...

private void updateUI() {
    textNrCompleted.setText(String.format("%s", statistics.getTask())); 
}
8
задан Anthony Mastrean 1 August 2012 в 20:44
поделиться

3 ответа

Мне кажется, что у вас есть несколько проектов, настроенных для вывода в один и тот же каталог - это правда?

Если да, вам необходимо проверить свою конфигурацию, как предполагает Visual Studio (нет, требует ), чтобы у каждого проекта был уникальный выходной каталог.

Кроме того, вы написали:

Это, в свою очередь, перезаписывает версии файлов DLL, которые уже существуют в этом каталоге. .

Откуда взялись эти существующие файлы?

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

(К сожалению, я говорю из опыт. Вздох.)

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

Почему в каталоге bin уже были другие версии?

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

См. если вы можете воспроизвести это, начав с нового проекта веб-приложения и просто добавив ссылки.

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

Однажды у меня была эта проблема,

При публикации : Самый простой способ предотвратить запись поверх существующих файлов dll - установить их как ReadOnly. Вы получите предупреждение о публикации для каждого файла, который не удалось заменить, но он выполнит свою работу.

При сборке : для автоматического отключения CopyLocal вам необходимо разместить файлы dll в GAC.

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

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