Expression Blend:出现错误“XXX”不存在于命名空间“XXX”中,但在VS2008中没有。

30

我想使用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-namespace:Company.WPFControls.SearchTextBox”中不存在。

我尝试添加;assembly=Company.WPFControls指定程序集名称,但这并不能解决错误。

有没有办法解决这个问题或者找到问题的原因?


这个问题存在于Blend 4中,并且可能会持续存在。Blends程序集搜索算法中存在一个错误。它不是在所选平台配置中查找程序集,而是在默认平台配置中查找。有关详细信息,请参阅Scott Bilas的答案。 - CLaRGe
5个回答

30

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

通常我会在VS2008中编译我的解决方案,对所有项目选择“Debug-x86”目标,以便与一些仅支持32位的项目兼容。

看起来Blend喜欢“Debug-Any CPU”目标。我基本上改变了配置管理器,使其针对Any CPU平台而不是x86。

所以...

  • 在Blend和VS2008中打开您的解决方案
  • 在VS2008中,选择菜单构建 ->配置管理器
  • 确保您的解决方案配置对于所有项目都有“Debug-Any CPU”
  • 在VS2008中编译
  • 您的blend项目应该更新并删除那些错误...至少对我来说是这样

我为了验证是否真的是这样做的,反过来试了试,似乎是这样...我只是将解决方案更改回Debug-x86,清理了一切并重新构建,但还是出现了“不存在[...]”的错误。

至于“为什么?”...我不知道,但至少现在它可以正常工作了!


太好了!仅有 Any CPU 配置的存在是不够的。实际上,让 Visual 编译 Any CPU 配置似乎可以修复 Blend 的问题。希望这个问题最终能够得到解决... - Anthony Brien
1
谢谢,谢谢,谢谢!这就是我喜欢StackOverflow的原因!我的问题完全解决了。+1 如果可以的话,我会投更多票的。 - cplotts
谢谢 - 微软的开发人员在想什么?32位Interop在64位机器上+Blend?你完了...但感谢提供信息! - Tomáš Kafka

16

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


2
这是解决我在使用VS2010和Blend 4时问题的关键。如果您需要x86平台,仍然可以指定它,但有一个构建到bin\Debug的任何CPU配置。 - Bryce Kahle
我在VS 2012中遇到了相同的问题,将生成文件夹从bin\x86\Debug更改为bin\Debug有所帮助,谢谢! - Mirek
2
我刚刚检查了一个解决方案并只在发布配置下编译它。一旦我在调试配置下编译解决方案,它就可以工作了。 - Arthur Nunes
1
问题在Blend 5和VS2012中仍然存在(解决方案仍然有效)。 - Joseph

13

我认为Blend使用项目文件中定义的默认配置/平台。你应该能够通过编辑文本文件来解决这个问题。如果你查看你的.csproj文件,你应该会看到类似于下面的内容:

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

将 AnyCPU 改为 x86,它就能按照您的期望正常工作。


3
你说得对。问题在于 Blend 错误地从项目文件中读取默认平台,而非所选平台。无论使用哪个已选择的配置进行编译,Blend 仍然配置自己以在默认的平台文件夹中查找程序集。这可能导致 Blend 在错误的文件夹中查找程序集。 - CLaRGe
这对我来说是正确的答案。我们已经移除了 AnyCPU 目标,但忘记更改项目的默认平台。Visual Studio 可以正确构建,但 Blend 却出现了问题。 - Bill Tarbell
修改后,切换到发布模式并编译,然后切换到调试模式并重新编译,这个错误就消失了。 - stricq

1

我也遇到过这样的错误。但对我来说,在不使用Visual Studio的情况下直接在Blend中重建项目有所帮助。

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


1
你也可以通过将所有项目的输出路径更改为bin\Debug而不是bin\x86\Debug(发布时同样如此)来解决“Any CPU/x86”问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接