У меня есть решение с именем MySol .
У меня есть проект DLL в MySol с именем DeviceProj .Этот проект определяет класс:
public class Device
{
public int NumFields { get; set; }
}
У меня также есть проект WPC UserControl в MySol с именем DeviceControl .Этот класс выглядит примерно так:
public class DeviceControl : UserControl
{
private Device _MyDevice;
public Device MyDevice
{
get { return _MyDevice; }
set
{
_MyDevice = value;
for (var i = 0; i < _MyDevice.NumFields; i++)
Main.Children.Add(new TextBox());
}
}
public DeviceControl()
{
MyDevice = new Device { NumFields = 4 };
InitializeComponent();
}
}
Наконец, у меня есть проект приложения WPF в MySol с именем DeviceWindow .Когда я добавляю DeviceControl в DeviceWindow Designer, я вижу свой элемент управления с 4 текстовыми полями (это ожидаемо: дизайнер создает экземпляр DeviceControl и,поскольку по умолчанию Device имеет свойство NumFields , установленное в 4, есть 4 текстовых поля).
Но, когда я компилирую MySol ,Я получаю сообщение об ошибке:
Ошибка 1 Не удается скопировать файл «C: \ path \ to \ Device.dll» в «bin \ Debug \ Device.dll».Процесс не может получить доступ к файлу bin \ Debug \ Device.dll, потому что он используется другим процессом.
Я предполагаю, что это потому, что экземпляр Device находится в процессеиспользуется дизайнером WPF, поэтому DLL не может быть перезаписана.
Есть ли способ обойти эту проблему?
Короче, проще для понимания (может быть?) объяснение:
Дизайнер окон WPF создает экземпляр всех пользовательских элементов управления, объявленных в окне.Если один из этих элементов UserControls содержит ссылку на объект, объявленный в другом проекте (мы назовем его ObjectProject ) в том же решении, решение не будет построено, поскольку ObjectProject .DLL будет использоваться дизайнером WPF.Visual Studio не может перезаписать используемые DLL-файлы.