我正在使用 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 设计器寻找动态库的位置有关。
由于 Visual Studio 设计器将程序集复制到临时位置,但不复制非托管依赖项,因此您可能会遇到此问题。
最简单的解决方案(尽管并不理想)是将包含非托管依赖项的文件夹添加到PATH
环境变量,然后启动DevEnv.exe
接着就,随即PATH
.
您可以通过以下方式执行此操作:
- 使用“计算机”->“属性”将文件夹添加到系统环境变量中
- 使用批处理文件设置路径,然后启动 DevEnv
此解决方案的问题在于,当重建非托管依赖项时,Visual Studio 往往会“保留”它们或不使用新的依赖项,因此在使用设计器正确完全重建所有内容后,您最终需要退出并重新启动 Visual Studio,并且这可能有点痛苦。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)