我使用Visual Studio 2008,.NET 3.5 SP1,并具有以下模块的测试应用程序:使用#1 为什么WPF设计器无法加载调用非托管DLL的库?
- 一个C++ DLL
- 一个C++/CLI DLL使用#WPF应用程序2
当我尝试使用来自#2班作为WPF XAML资源,设计师不会让我:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:lib1="clr-namespace:ClassLibrary1;assembly=ClassLibrary1" <- ERROR
错误是:“Assembly'ClassLibrary1'找不到。验证您是否缺少程序集引用。另外,请确认您的项目和所有引用的程序集都已经构建好了。“
但是,当我在应用程序主窗口的代码隐藏的C++/CLI DLL中使用一个类时,一切正常,Class1被创建,并在其构造函数调用到C++ DLL,没有问题。
using ClassLibrary1;
...
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
//use in code-behind
Class1 tmp = new Class1();
tmp.FirstName = "foo";
Title = tmp.FirstName;
}
}
如果我修改了C++/CLI组件,删除其调用到C++ DLL和重建一切,设计师将停止抱怨,并加载C++/CLI汇编没有投诉
我怀疑这个问题与WPF设计器寻找动态的地方有关库。
我不确定解决方法,但我相信VS/WPF Designer将程序集复制到临时位置并从那里加载它们。所以它可能不会复制你的C++ DLL。 – CodeNaked 2011-05-17 20:33:52
我认为你非常接近正确,但并不完全。程序集(甚至是非托管程序)实际上都是复制的,但是像Rick在下面说的那样,WPF设计器无法找到它们,除非它们位于系统路径中的某个位置。 – 2011-05-17 20:52:42