我的解决方案名为 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文件。
答案 0 :(得分:0)
此问题的原因是您的.DLL和您的WPF应用程序目标可能不同。您的应用程序目标可能是客户端配置 保持目标相同。
例如,如果您的库以.NET 4为目标,请确保您的WPF应用程序目标也是4,而不是客户端配置文件。
答案 1 :(得分:0)
转到项目的client.Send(mail);
和C:\path\to\Device.dll
文件夹,然后从这两个位置删除bin\Debug\Device.dll
文件。再次运行项目时,将在目录中自动创建这些文件。然后你可以在没有这个错误的情况下构建。