Expression Blend:获取错误"XXX"在名称空间"XXX"中不存在,但在VS2008中不存在

Ant*_*ien 29 expression-blend expression-blend-3 expression-blend-4

我正在尝试使用Blend 3.0来编辑包含一些WPF控件的项目.该项目已经从Visual Studio 2008编译并运行良好.

然而,在Blend中,我遇到了一些毫无意义的神秘错误:

例如,我有一个派生自Control的类:

namespace Company.WPFControls.SearchTextBox
{
    public class SearchTextBox : Control
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试在同一个程序集中的资源中使用它来分配样式:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:Company.WPFControls.SearchTextBox" 

    <Style TargetType="{x:Type local:SearchTextBox}">
        ...
    </Style>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)

我在Blend中收到以下错误:

名称"SearchTextBox"在命名空间"clr-namespace:Company.WPFControls.SearchTextBox"中不存在.

我已经尝试通过添加指定程序集名称,;assembly=Company.WPFControls但它不会删除错误.

有没有办法解决这个问题,或者至少找出问题的来源?

Fra*_*kyB 30

在Windows Vista 64上,我遇到了与Blend 2相同的问题.

我通常在VS2008中编译我的解决方案,在我的所有项目中都有一个"Debug-x86"目标,因此它与其他一些32位项目兼容.

看起来Blend喜欢"Debug - Any CPU"目标.我基本上改变了我的配置管理器,以便它针对任何CPU平台而不是x86.

所以...

  • 在Blend和VS2008中打开您的解决方案
  • 在VS2008中,选择菜单Build - > Configuration Manager
  • 确保您的解决方案配置对所有项目都有"Debug - Any CPU"
  • 在VS2008中编译
  • tadaaaa你的混合项目应该更新并删除那些错误......它确实对我有用

我做了相反的事情以验证它是否真的那样,而且似乎是......我只是将解决方案更改回Debug-x86,清理了所有内容,然后重新编译,我仍然回复了错误"不存在[ ...]"

至于"为什么?"......我不知道,但至少它现在有效!


小智 16

问题出在Blend程序集搜索路径中.默认情况下,它会在文件夹"bin\Debug"中的程序集中搜索类!但是如果你在项目配置目标x86中设置,那么你的输出路径将是"bin\x86\Debug".因此,您需要将visual studio中的输出路径更改为"bin\Debug",Blend将找到您的所有类!

  • 这是解决VS2010和Blend 4问题的关键.如果你需要x86平台,你仍然可以指定它,但是有一个构建到bin\Debug的Any CPU配置. (2认同)
  • 我刚刚检查了解决方案并仅在Release配置中编译了它.一旦我在Debug配置中编译了解决方案,它就可以了. (2认同)

sco*_*obi 13

我认为Blend使用项目文件中定义的默认配置/平台.您应该可以通过使用文本文件进行编辑来解决此问题.如果查看.csproj文件,您应该看到如下内容:

<PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    ...
Run Code Online (Sandbox Code Playgroud)

将AnyCPU更改为x86,它应该按照您期望的方式工作.

  • 你钉了它.问题是Blend错误地从项目文件中读取默认平台,而不是选定的平台.无论用于编译的Selected配置如何,Blend仍会将自身配置为在默认的Platform文件夹中查找程序集.这可能导致Blend在错误的文件夹中查找程序集. (3认同)