我正在使用Visual Studio 2008,.NET 3.5 SP1,并拥有一个包含以下模块的测试应用程序:
当我尝试使用#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
错误是:“找不到程序集'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设计人员寻找动态库的地方有关。
答案 0 :(得分:7)
由于Visual Studio设计器将程序集复制到临时位置,但不复制非托管依赖项,因此可能会遇到此问题。
最简单的解决方案虽然不是很理想,但是要将包含非托管依赖项的文件夹添加到PATH
环境变量中,然后使用DevEnv.exe
启动PATH
。
您可以通过以下方式执行此操作:
此解决方案的问题在于,随着非托管依赖项的重建,Visual Studio倾向于“挂起”它们或不使用新的依赖项,因此您最终需要在使用设计器完全正确后退出并重新启动Visual Studio重建一切,这可能有点痛苦。
答案 1 :(得分:0)
这不是真正的解决方案,但有时会有所帮助:使用“ AnyCPU”(不是“ x64”,因为设计器是32位进程)进行重建,并在“发布”模式下关闭并重新打开Visual Studio。而且,是的:这很烦人...