WPF设计器实例化对象并导致编译器错误

时间:2012-01-24 19:10:14

标签: .net wpf visual-studio visual-studio-2008

我的解决方案名为 MySol

我在 MySol 中有一个名为 DeviceProj 的DLL项目。该项目定义了一个类:

public class Device
{
    public int NumFields { get; set; }
}

我还在 MySol 中有一个名为 DeviceControl 的WPF UserControl项目。这个类看起来像这样:

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();
    }
}

最后,我在 MySol 中有一个名为 DeviceWindow 的WPF应用程序项目。当我向 DeviceWindow 设计器添加 DeviceControl 时,我看到我的控件有4个文本框(这是预期的:设计人员创建 DeviceControl的实例并且,由于默认的设备 NumFields 属性设置为4,因此有4个文本框。

但是,当我编译 MySol 时,我收到错误:

错误1无法将文件“C:\ path \ to \ Device.dll”复制到“bin \ Debug \ Device.dll”。该进程无法访问文件'bin \ Debug \ Device.dll',因为它正由另一个进程使用。

我认为这是因为WPF设计器正在使用设备的实例,因此无法覆盖DLL。

有没有解决这个问题的方法?

更短,更容易理解(可能?)解释:

WPF窗口设计器创建窗口中声明的所有UserControl的实例。如果其中一个UserControl包含对在同一解决方案中在另一个项目中声明的对象的引用(我们将其称为 ObjectProject ),则该解决方案将无法构建,因为 ObjectProject .dll将由WPF设计师使用。 Visual Studio无法覆盖正在使用的.dll文件。

2 个答案:

答案 0 :(得分:0)

此问题的原因是您的.DLL和您的WPF应用程序目标可能不同。您的应用程序目标可能是客户端配置 保持目标相同。

例如,如果您的库以.NET 4为目标,请确保您的WPF应用程序目标也是4,而不是客户端配置文件。

答案 1 :(得分:0)

转到项目的client.Send(mail); C:\path\to\Device.dll文件夹,然后从这两个位置删除bin\Debug\Device.dll文件。再次运行项目时,将在目录中自动创建这些文件。然后你可以在没有这个错误的情况下构建。