Я создаю приложение для Windows, в котором я могу вызвать закодированный проект пользовательского интерфейса (проект с именем RecordAndPlayback), нажав кнопку. Моя цель - вызвать методы тестирования в закодированном проекте пользовательского интерфейса, а затем иметь возможность изменить тест, а затем вызвать его обратно из моего приложения win, не закрывая его с помощью той же кнопки.
Мне удалось вызвать тестовый метод, но после этого у меня возникла проблема с изменением тестового метода. Всякий раз, когда я создаю свой закодированный проект пользовательского интерфейса, я получаю сообщение об ошибке
ОШИБКА CSC(0,0): непредвиденная ошибка при создании файла отладочной информации '...\obj\Debug\RecordAndPlayback.PDB' -- '...\obj\Debug\RecordAndPlayback.pdb: процесс не может получить доступ к файлу, поскольку он используется другим процессом.
Я использовал AppDomain
для загрузки в него dll, а затем выгрузил AppDomain
в надежде, что dll будет выпущена. Мне удалось это сделать, но затем я получил указанную выше ошибку в файле .pdb. Я нашел другое решение, которое я нашел намного проще, но все же столкнулся с вышеуказанной проблемой.
Вот мой пример кода:
string dllPath = @"...\bin\Debug\RecordAndPlayback.dll";
byte[] fileContent;
using (FileStream dll = File.OpenRead(dllPath))
{
fileContent = new byte[dll.Length];
dll.Read(fileContent, 0, (int)dll.Length);
}
var DLL = Assembly.Load(fileContent);
Playback.Initialize();
foreach (Type type in DLL.GetExportedTypes())
{
if (type.Name == "CodedUITest1")
{
var c = Activator.CreateInstance(type);
try
{
type.InvokeMember("CodedUITestMethod1", BindingFlags.InvokeMethod, null, c, new object[] { });
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
break;
}
}
Playback.Cleanup();
Я пытался использовать AppDomain
, но это не сработало. На самом деле приведенный выше код - лучшее, что я получил до сих пор, я уверен, что файл .dll выпущен, так как я могу его удалить. Также освобождается файл .pdb в папке bin (тоже смог его удалить). Моя проблема - файл .pdb в папке obj. Единственный способ - я должен закрыть свой проект приложения Windows, чтобы я мог создать свой закодированный проект пользовательского интерфейса.
Как я могу это исправить, не закрывая приложение win?
AppDomain
? Это был бы правильный подход. Может быть, вы делали что-то не так с этим. - person Jacob   schedule 31.05.2018