Использование Visual Studio 2005.
Вот интересный.
Для воспроизведения создайте новое решение с приложением и классом Windows.
библиотека.
В библиотеке классов определите класс следующим образом:
public class SomeClassInDLL
{
public string DoSomething()
{
return DateTime.Now.ToString();
}
}
Получите приложение Windows для ссылки на библиотеку классов. Добавить кнопку и добавить
этот код:
private void button1_Click(object sender, EventArgs e)
{
try
{
MessageBox.Show("about to call DoSomething");
string ret = DoCall();
MessageBox.Show(ret);
}
catch (Exception ex)
{
MessageBox.Show("error : " + ex.GetType().ToString() + " " + ex.Message);
}
}
private string DoCall()
{
SomeClassInDLL c1 = new SomeClassInDLL();
return c1.DoSomething();
}
1) Скомпилируйте приложение в режимах отладки и выпуска. (в корзину \ Debug и
bin \ Release каталогов)
2) Закройте Visual Studio и запустите приложение Windows из проводника Windows
3) Нажмите кнопку 1.
4) При появлении диалогового окна «по поводу вызова DoSomething» в проводнике Windows попробуйте удалить указанный файл DLL.
5a) если вы запустили версию режима отладки на шаге 2: вы можете удалить dll
файл успешно. Это то, что я ожидаю, так как DLL вызывается
внутри функции DoCall, а не непосредственно в button1_Click.
5b) если вы запустили версию режима выпуска на шаге 2: вы не можете удалить
Файл DLL, потому что он, кажется, заблокирован приложением.
==
5a) это поведение, которое я ожидал, начиная с dotnet 1.1 дня. Есть идеи
почему 5b) кажется, чтобы заблокировать dll раньше, чем это необходимо? Что-то делать с
оптимизация что ли?
Такое поведение загрузки DLL объяснено где-то?
ТИА.