为什么WPF设计无法加载调用到托管DLL库?为什么WPF设计无法加载调用到托管DLL库?(Why d

2019-05-12 08:40发布

我使用Visual Studio 2008,.NET 3.5 SP1,并具有以下模块测试应用程序:

  1. 一个C ++ DLL
  2. 使用#1一C ++ / CLI DLL
  3. 使用#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设计查找动态库。

Answer 1:

由于Visual Studio设计的副本程序集到一个临时位置,但不复制非托管的依赖,你可以碰到这个问题。

最简单的解决办法,虽然不理想,是添加含有非托管的依赖关系到一个文件夹PATH环境变量,然后启动DevEnv.exePATH

您可以通过这样做:

  • 添加的文件夹,使用计算机系统的环境变量 - >属性
  • 使用设置路径,然后开始devenv的批处理文件

这种解决方案的问题是,作为非托管依赖关系重建Visual Studio中往往会“挂到”他们或不使用新的,所以你最终需要退出并使用设计正确完全重建一切后,重新启动Visual Studio和这可能是一个有点疼痛。



Answer 2:

不是一个真正的解决方案,但有时它可以帮助:重建使用“AnyCPU”(而不是“64”,因为设计师是一个32位进程),并在“释放”模式,关闭并重新打开Visual Studio中。 而且,是:这是很烦人的...



文章来源: Why does the WPF designer fail to load libraries that call into unmanaged DLLs?