【问题标题】:Expression Blend: Getting error "XXX" does not exist in the namespace "XXX", but not in VS2008Expression Blend:命名空间“XXX”中不存在错误“XXX”,但在 VS2008 中不存在
【发布时间】:2009-11-30 18:25:04
【问题描述】:

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

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

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

namespace Company.WPFControls.SearchTextBox
{
    public class SearchTextBox : Control
    {
        ...
    }
}

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

<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>

我在 Blend 中收到以下错误:

名称“SearchTextBox”不 存在于命名空间中 “clr 命名空间:Company.WPFControls.SearchTextBox”。

我尝试通过添加 ;assembly=Company.WPFControls 来指定程序集名称,但它并没有消除错误。

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

【问题讨论】:

  • Blend 4 中存在此问题,并且可能会继续存在。 Blends 程序集搜索算法中有一个错误。它不是在 SELECTED Platform 配置中查找程序集,而是在 DEFAULT Platform 配置中查找它们。有关详细信息,请参阅 Scott Bilas 的答案。

标签: expression-blend expression-blend-3 expression-blend-4


【解决方案1】:

我在 Windows Vista 64 上使用 Blend 2 时遇到了同样的问题。

我通常在 VS2008 中编译我的解决方案,在我的所有项目中使用“Debug - x86”目标,以便它与其他一些仅 32 位的项目兼容。

看起来 Blend 喜欢“调试 - 任何 CPU”目标。 我基本上更改了我的配置管理器,使其针对任何 CPU 平台而不是 x86。

所以...

  • 在 Blend 和 VS2008 中打开您的解决方案
  • 在VS2008中,选择菜单Build -> 配置管理器
  • 确保您的解决方案 配置有一个“调试 - 任何 CPU” 适用于所有项目
  • 在VS2008中编译
  • tadaaaa 您的混合项目应该更新并删除这些错误... 对我来说很好

我做了相反的事情来验证它是否真的如此,似乎是的......我只是将解决方案更改恢复为 Debug - x86,清理所有内容并重建,但我仍然返回错误“Does不存在[...]”

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

【讨论】:

  • 完美!仅存在 Any CPU 配置是不够的。事实上,让 Visual 编译 Any CPU 配置似乎可以修复 Blend。希望这最终得到解决......
  • 谢谢谢谢谢谢!这就是我喜欢 StackOverflow 的原因!我的问题正是。 +1 如果可以的话,我会投票更多。
  • 谢谢 - MS 开发人员抽什么烟? 64 位机器上的 32 位互操作 + 混合?你搞砸了......但感谢您的信息!
【解决方案2】:

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

【讨论】:

  • 这是解决我的 VS2010 和 Blend 4 问题的关键。如果您需要 x86 平台,您仍然可以指定它,但具有构建到 bin\Debug 的 Any CPU 配置。
  • 我在 VS 2012 中遇到了同样的问题,将构建文件夹从 bin\x86\Debug 更改为 bin\Debug 有帮助,谢谢!
  • 我刚刚签出了一个解决方案,并且只在发布配置中编译了它。一旦我在 Debug 配置中编译了解决方案,它就可以工作了。
  • Blend 5 和 VS2012 中仍然存在问题(并且解决方案仍然有效)。
【解决方案3】:

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

<PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    ...

将 AnyCPU 更改为 x86,它应该可以按您期望的方式工作。

【讨论】:

  • 你成功了。问题是 Blend 错误地从项目文件中读取了默认平台,而不是选定的平台。无论用于编译的 Selected 配置如何,Blend 仍将自身配置为在默认 Platform 文件夹中查找程序集。这可能会导致 Blend 在错误的文件夹中查找程序集。
  • 这对我来说是正确的答案。我们已经删除了 AnyCPU 目标,但忘记更改项目的默认平台。 visual studio 可以正确构建,但混合会阻塞。
  • 改完后,切换到Release,编译,切换到Debug,编译,错误就消失了。
【解决方案4】:

您还可以通过将所有项目的输出路径更改为 bin\Debug 而不是 bin\x86\Debug 来解决此“任何 CPU/x86”问题(对于发布版本也是如此)。

【讨论】:

    【解决方案5】:

    我也有这样的错误。但对我来说,它有助于直接在 Blend 中重建项目,而无需使用 Visual Studio。

    对于那些不知道的人:您可以在 Blend 的菜单中执行此操作,方法是单击“项目”->“重建项目”。 至少在 Blend 4 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      • 2014-02-15
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2016-09-13
      相关资源
      最近更新 更多