WPF конструктор, создающий объект и вызывающий ошибку компилятора - PullRequest
0 голосов
/ 24 января 2012

У меня есть решение с именем 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-файлы.

Ответы [ 2 ]

0 голосов
/ 26 марта 2016

Перейдите в папки C:\path\to\Device.dll и bin\Debug\Device.dll вашего проекта, затем удалите файл Device.dll из этих двух мест. Когда вы снова запустите свой проект, эти файлы будут автоматически созданы в каталоге. Тогда вы можете построить без этой ошибки.

0 голосов
/ 21 июня 2013

Причиной этой проблемы являются ваши .DLL и цели вашего приложения WPF могут отличаться.Ваша цель приложения может быть Профиль клиента.Держите обе цели одинаковыми.

Например, если ваша библиотека предназначена для .NET 4, убедитесь, что ваше приложение WPF также нацелено на 4, а не на профиль клиента.

...