Visual Studio Professional 15.9.2 падает при открытии пользовательского элемента управления в конструкторе - PullRequest
0 голосов
/ 24 ноября 2018

My .Net Framework Приложение WinForms создается без ошибок и работает без ошибок.

Сбой конструктора VS2017 Professional 15.9.2, когда я дважды щелкаю, чтобы открыть созданные мной элементы управления.Все эти пользовательские элементы управления наследуются от класса с именем MyUserControl.Я могу открыть MyUserControl в конструкторе без ошибки.

Когда я запускаю только VS2017 (без второй копии с подключенным отладчиком), я вижу следующее исключение, когда дважды щелкаю целевой пользовательский элемент управления:

«Не удалось загрузить файл или сборку» MyEventArgs, версия = 1.0.6896.23135, культура = нейтральная, PublicKeyToken = null 'или одна из ее зависимостей.Системе не удается найти указанный файл. '

Целевой пользовательский элемент управления не ссылается на MyEventArgs.Добавление ссылки в целевой проект в MyEventArgs не помогает.Все ссылки на MyEventArgs в решении - это ссылки на DLL в папке Libraries, а не ссылки на проекты.

Я открыл каждый из файлов .csproj в решении в Блокноте.Ни один из них не ссылается на конкретную версию библиотеки MyEventArgs.

Я очистил все каталоги obj и bin.

Я очистил каталог ProjectAssemblies.Это приложение WinForms, поэтому нет необходимости очищать каталог временных файлов ASP.Net.

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

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

Сначала я получаюисключение

Параметр неверен.(Исключение из HRESULT: 0x80070057 (E_INVALIDARG))

без информации о том, какой параметр неверен.Я посмотрел во всех свойствах объекта исключения.Ни в одной из моих библиотек DLL не установлен бит «загружен из Internt».

Я нажимаю «Продолжить» в отладчике и получаю это исключение

«Не удалось загрузить файл или сборку» MyEventArgs, Версия = 1.0.6896.23135, Культура = нейтральная, PublicKeyToken = null 'или одна из ее зависимостей.Системе не удается найти указанный файл. '

=== Информация о состоянии предварительной привязки === LOG: DisplayName = MyEventArgs, версия = 1.0.6896.23135, Culture = нейтральный, PublicKeyToken = null (полностью указан)LOG: Appbase = file: /// C: / Program Files (x86) / Microsoft Visual Studio / 2017 / Professional / Common7 / IDE / LOG: Initial PrivatePath = NULL Вызывающая сборка: (неизвестно).=== LOG: эта привязка начинается в контексте загрузки по умолчанию.LOG: Использование файла конфигурации приложения: C: \ Users \ Adam \ AppData \ Local \ Microsoft \ VisualStudio \ 15.0_fdc9bc52 \ devenv.exe.config LOG: Использование файла конфигурации хоста: LOG: Использование файла конфигурации компьютера из C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ machine.config.LOG: Политика, не применяемая в настоящее время для ссылки (частная, пользовательская, частичная или привязка сборки на основе местоположения).LOG: та же самая привязка была замечена ранее, и она была неудачной с hr = 0x80070002.

Однако у меня нет этой версии MyEvents где-либо еще.Все ссылки на DLL в папке библиотеки.Эта DLL имеет более новую версию.

Как заставить VS2017 перестать искать эту старую версию DLL?

Я запустил две копии AstroGrep (бесплатная утилита Windows), чтобы найти этуномер версии (1.0.6896.23135) во всех файлах на диске C, а также на диске D, на котором хранится решение.Не найдено ни одного экземпляра этого номера версии ни в одном файле (csproj и т. Д.).

Целевой проект управления пользователями не ссылается на MyEventArgs.Я проверил каждый csproj в решении.Все ссылки на копию MyEventArgs.dll в папке библиотеки.Эта копия имеет более новую версию, чем та, которая названа в исключении.

MyEventArgs отсутствует в GAC на целевом компьютере.

Откуда VS получает этот старый номер версии?Если бы я знал, где VS читает этот номер версии, я мог бы очистить его или изменить.Он не мог составить этот номер, но я не могу найти, где он хранится.

1 Ответ

0 голосов
/ 25 ноября 2018

TLDR: Это была моя вина, а не Visual Studio.Тем не менее, более понятное человеку исключение сэкономило бы мне много времени на отладку.

Исключение было вызвано тем фактом, что я недавно пересмотрел свое решение, изменив многие ссылки на проекты для ссылки на библиотеки DLL в библиотеках.папку, а не другие проекты в том же решении.

Например, у меня есть много проектов, которые содержат простые интерфейсы (IDoStuff).Я полагал, что они меняются не часто, поэтому, возможно, обращение к DLL-файлам немного ускорит процесс компиляции.

Я считаю, что произошло то, что я скомпилировал MyEventArgs, создав версию 1.0.6896.23135, а затем скомпилировал другие классы, которыезависит от MyEventArgs, затем поместите эти библиотеки в мою папку «Библиотеки».Затем я должен перекомпилировать MyEventArgs и сохранить более новую версию в папке «Библиотеки».

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

Я часами искал ссылку "1.0.6896.23135" в файлах проекта, очищал папки bin и т. Д.

Теперь я считаю, что ссылка на эту конкретную версию MyEventArgs была встроена в другую DLL, которую яскопировал в папку «Библиотеки».

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

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