【发布时间】:2011-08-27 13:20:26
【问题描述】:
我正在使用 Visual Studio 2008、.NET 3.5 SP1,并且有一个包含以下模块的测试应用程序:
- 一个 C++ DLL
- 使用#1 的 C++/CLI DLL
- 使用#2 的 C# WPF 应用程序
当我尝试将 #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 设计器查找动态库的位置有关。
【问题讨论】:
-
我不确定解决方法,但我相信 VS/WPF 设计器将程序集复制到一个临时位置并从那里加载它们。所以它可能不是在复制你的 C++ DLL。
-
我认为您非常接近正确,但并不完全正确。程序集(甚至是非托管程序集)实际上是被复制的,但就像 Rick 在下面所说的那样,WPF 设计人员无法找到它们,除非它们位于系统路径上的某个位置。
标签: c# wpf visual-studio-2008 c++-cli