95

我有一个小型 WPF 应用程序,它过去编译得很好,但现在不再编译了。我真的不能说它在什么时候停止了构建。前一天还好好的,第二天就不行了。

这是项目结构:

在此处输入图像描述

除了标准的 .net dll 之外,没有其他项目或外部参考。

这是问题所在的用户控件:

<UserControl x:Class="TimeRecorder.HistoryUserControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:TimeRecorder.ViewModel"
         xmlns:framework="clr-namespace:TimeRecorder.Framework"
         mc:Ignorable="d" Height="Auto" Width="Auto" Padding="5">
<UserControl.Resources>
    <local:HistoryViewModel x:Key="ViewModel"/>
    <framework:BoolToColorConverter x:Key="ColorConverter"/>
</UserControl.Resources>
<StackPanel DataContext="{StaticResource ViewModel}">

这是我得到的错误: http://i48.tinypic.com/5u1u8w.png

请注意,这不仅仅是屏幕截图中的一个文件,而是我在此项目的所有用户控件/窗口文件中以类似方式在 xaml 中添加的所有引用。

所以文件在那里,文件中的命名空间是正确的,xaml 文件中的命名空间/类名(据我所知)是正确的。当我输入 xaml 时,我得到了智能感知,因此它发现文件正常,但在编译时却没有。

在其他帖子中,最常见的解决方案是 .net 框架版本。我的主项目和测试项目目前都设置为 .Net Framework 4。完整版不是客户资料。

这就是我认为我搞砸了: 在配置管理器中,两个项目的平台都设置为任何 CPU,但是在尝试解决这个问题时,我注意到主项目设置为 x86,测试项目设置为任何中央处理器。所以我在配置管理器中为主项目手动添加了Any CPU。但是,老实说,我不知道我是否正确地这样做了,或者即使我应该这样做。所以作为一个额外的问题,有没有办法可以将配置管理器重置为其默认状态?这对主要问题有什么要说的吗?我不知道主项目是否总是设置为 x86,或者我是否以某种方式将其更改为 x86,然后它就坏了。如前所述,这个项目在一段时间内编译得很好。

4

30 回答 30

169

每次发生在我身上时,我都只是重新启动了 Visual Studio,重新构建了解决方案,它工作得很好.. 不能说为什么

于 2013-03-06T12:46:32.197 回答
31

除了“命名空间中不存在”消息之外,我还收到了来自设计器的消息,它无法显示 x64 和 ARM 目标的窗口。

我刚刚发现将构建切换到 x86 模式,执行重建解决方案,然后切换回 x64 模式,然后再次重建修复 [both] 问题。

简单地重建 x64 解决方案什么也没做。

于 2013-05-09T11:12:06.347 回答
17

我发现有帮助(特别是如果此错误发生在 中App.xaml)是注释掉给您带来麻烦的引用,重建,然后取消注释。认为这样做是允许整个项目实际构建而不是在错误时停止构建。

据我所知,该应用程序正在尝试按特定顺序构建文件,因此当App.xaml或可能是引用中的任何其他类文件错误时,导致错误的文件尚未正确编译,因此为什么它没有'在该命名空间中找不到文件。

于 2016-05-04T14:18:37.737 回答
12

这就是在 Visual Studio 2012(更新 3)上对我有用的方法。

  • 重新启动 Visual Studio
  • 将当前程序集添加到命名空间声明xmlns:framework="clr-namespace:TimeRecorder.Framework;assembly=MyAssembly
  • Build->Build Solution
于 2013-11-05T14:03:58.237 回答
10

重新构建您的解决方案(有时干净然后构建效果更好)。然后查看您的错误列表,滚动到最底部,它很可能会指示不允许您的程序集编译的错误,并且 XAML 编译器很可能使用的是程序集的缓存版本,而不是您的新版本意思是建造。

于 2014-02-04T02:00:54.373 回答
7

什么对我有用: - 将解决方案配置从调试切换到发布 - 将配置从发布切换回调试

于 2014-01-23T15:01:34.840 回答
7

我有类似的问题。就我而言,我必须执行以下操作

  • 从 xaml 中删除引用标记(在此示例中,<local:HistoryViewModel x:Key="ViewModel"/>
  • 构建类(在此示例文件中包含HistoryViewModel类)
  • 构建完成后,在 xaml 中添加引用标记
  • 再次构建

上述方法对我有用。

于 2014-06-15T09:43:56.423 回答
4

今天使用 Visual Studio 2017 社区版遇到了这个问题。在这里尝试了所有建议(重置 VS 2017,从 x64 更改为 x32 并再次返回等)和其他来源均无济于事。Intellisense 知道一切都在那里,但我每次都遇到同样的错误。

无论如何,我的修复结果非常简单......当你花了几个小时解决这个问题时,他们不总是这样吗!

基本上,我做了以下......

  1. 从 xaml 文件中删除有问题的代码(在我的例子中只有 3 行)
  2. 构建项目,以便您获得成功的构建
  3. 此时布局神奇地出现在设计器窗口中,这是一个好兆头!
  4. 重新插入我在第 1 点中删除的代码。包括 xmlns: 条目
  5. 在这一点上你不应该得到任何蓝色曲线......希望
  6. 再次构建项目

似乎通过成功构建,它必须在 VS 和/或程序集中重置“某些东西”。一旦你有一个成功的构建尝试再次插入你的代码。

于 2018-01-20T19:06:22.400 回答
3

没有一个解决方案对我有用。我这样修复它:

  • 从引用中删除库的 dll
  • 下载库的源代码(而不仅仅是 dll 文件)
  • 构建库的项目以获得新的dll文件
  • 将新的dll文件添加到主项目的References
于 2014-08-07T14:59:09.537 回答
3

有这个问题浪费了几个小时。我将一个单独的用户控件 dll 移到项目中,因此它是在项目中编译的,而不是引用的 dll。这破坏了整个项目,所以我仔细检查了所有命名空间、路径和文件名。尝试删除 obj 文件,在 x86 和 AnyCPU 之间切换发布和调试。打开全部保存,重新编译还是不爽。

记得之前有过类似的问题,VS2013 中标记的错误与我必须修改 XAML 的位置没有直接关系,而是通过使用

x:Name="myControl"

在所有控件上,而不是

Name="myControl"

修复。

于 2014-08-30T00:44:50.370 回答
3

我将目标框架我的“.Net Framework 4.5”应用程序更改为“.Net Framework 4.6”并且它有效!

于 2016-06-26T11:25:35.610 回答
2

这是一个类似的奇怪例子:

<UserControl x:Class="Gtl.Ui.Controls.WaitControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:controls="clr-namespace:Gtl.Ui.Controls"
         mc:Ignorable="d" 
         d:DesignHeight="120" d:DesignWidth="120"             
         Background="Transparent">
...
</UserControl>

将编译(VS2013)。

<UserControl x:Class="Gtl.Ui.Controls.WaitControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:controls="clr-namespace:Gtl.Ui.Controls"
         mc:Ignorable="d" 
         d:DesignHeight="120" d:DesignWidth="120"             
         Background="Transparent"
         IsVisibleChanged=onIsVisibleChanged>
...
</UserControl>

产生错误“在 Gtl.Ui.Gtl 中找不到类型 Ui”(我向您保证处理程序方法存在于代码隐藏中)。解决方法是在类构造函数中添加处理程序,但是来吧微软,wtf 是怎么回事?

于 2015-06-16T12:11:17.690 回答
2

当我尝试在 xaml 中调用命名空间时,我遇到了同样的问题。显示该类在命名空间中不可用。我搜索了很多。最后我发现这个问题与VS有关。我正在使用 VS 2013。我尝试了以下步骤:

  1. 构建-->配置管理器-->活动解决方案平台-->更改为 x64 和 x86 以及任何 CPU。
  2. 关闭VS并再次打开。
  3. 改变

    xmlns:VM="clr-namespace:MyFirstAppViewModel"
    

    xmlns:VM="clr-namespace:MyFirstAppViewModel;assembly=ViewModel"
    
于 2016-01-31T19:00:55.683 回答
2

此错误通常发生在上次构建期间项目未成功构建时。

步骤 1) 首先从 XAML 或 .cs 文件中删除所有导致错误的代码,然后按 F5 构建并启动项目。

步骤2)添加在XAML中一一添加导致错误的代码。

于 2018-02-04T06:59:08.163 回答
1
  • 我会建议重命名 x:Key="ViewModel",也许有一个小故障
  • 如果你输入local:VS 会显示给你HistoryViewModel吗?
  • 还要检查你Class是否是public
于 2013-03-11T16:03:09.863 回答
1

只需从Build菜单 运行代码分析

于 2018-06-14T11:09:34.793 回答
1

我发现运行命令“运行代码分析”会重新构建所有内容,并且几乎总是可以解决问题(右键单击项目 > 分析 > 运行代码分析)。这通常也会重新构建资源文件,以便可以找到字符串等。

于 2018-07-29T13:45:25.110 回答
1

尝试了此线程上的所有解决方案,但没有一个有效。原来是由解决方案配置引起的。由于某些本机依赖项需要它,我的 WPF 应用程序设置为为 X64 构建,但该项目的解决方案配置仍设置为 AnyCPU。在解决方案配置管理器中为项目创建新的 X64 配置允许 XAML 设计人员最终识别我的类型和命名空间。

于 2019-01-02T06:08:41.427 回答
1

在将名称空间添加到您的 .xaml 文件之前,请确保您没有因现有代码而出现任何编译错误。

一旦所有编译检查都正常,然后重新构建您的解决方案并尝试添加所需的命名空间以使用其类或属性。

于 2020-03-11T11:16:54.963 回答
0

这对我来说是一个反复出现的问题。有一次我找到了查看警告选项卡的解决方案。这是一个.NET 框架版本问题,它说明了以下内容:

警告 9 无法解析主要引用“myDll”,因为它是针对“.NETFramework,Version=v4.5.2”框架构建的。这是比当前目标框架“.NETFramework,Version=v4.0”更高的版本。

于 2014-10-17T12:53:05.403 回答
0

他们对对象布局的缓冲存在故障。如果任何东西被重命名或移动,它就会丢失。通常对我有用的是创建一个全新的类并复制所有旧代码,让它在新类上工作,然后删除原始类。有时在使用新的类名启动并运行后,您可以尝试将其重命名为原始名称(但通常不会)

于 2015-04-28T14:02:01.150 回答
0

我在 .xaml 的标题处使用 xmlns:local="using:MyRootNamespace.ChildNamespace" ,然后我把它变成了 xmlns:local="clr-namespace:MyRootNamespace.ChildNamespace" ...好吧,我只是让智能感知做这份工作,它奏效了。

于 2015-06-24T14:21:41.080 回答
0

问题是当您创建 x86 目标时,特定项目的输出路径设置为 bin\x86\Debug。看起来 Expression blend 根本不喜欢这个。它似乎只对 bin\Debug 中的内容感兴趣。

例如,如果您将 x86 项目的输出路径更改为 bin\debug,那么我相信您会发现它会起作用。好吧,无论如何对我有用:)

于 2015-12-15T12:12:33.100 回答
0

您添加的 .dll 文件的目标框架应与您应用的目标框架相同。

于 2016-08-19T10:08:27.457 回答
0

我面临着同样的问题。您收到此错误,但您仍然可以成功构建您的项目,不便之处在于您看不到 UI 设计(或者只是想清理代码并删除烦人的摆动线)。阅读许多帖子尝试了几件事,但以下作品就像魅力一样。

在 Visual Studio 2019 中试过这个:

右键单击您的解决方案 -> 属性 -> 配置属性,然后将项目配置从调试更改为发布,反之亦然。

之后,重建您的解决方案。它可以解决你的问题。

于 2020-04-20T10:29:57.707 回答
0

正如一些已经回答过这篇文章的人所说,完全退出并重新启动 Visual Studio 通常可以解决这些问题。但是,有时错误不会得到解决,因为它实际上是构建失败或依赖问题。

当我在 Visual Studio 中处理 WPF 项目时,XAML 错误并不总是根本原因而是失败的症状。有时会出现 .net 框架依赖问题,这些问题没有出现在错误列表窗口中,您必须使用“输出”窗口来调试实际失败的内容。

我了解到,当真正的罪魁祸首来自完全独立的类或项目时,根本原因(为什么会在多个 XAML 文件中出现如此多的错误)实际上可能是不正确的表现。通常会导致构建失败。特别是在具有多个项目的解决方案中,可能存在一个项目无法生成的 DLL 依赖项,从而导致级联故障,显示为 XAML 文档错误。

XAML 的缺点之一是它需要库的构建副本才能验证 XAML,因为元素名称与实际类匹配。因此,有时您会收到 XML 错误,因为库没有正确构建。此外,在添加新控件时,如果您尚未构建项目,它将无法找到新类。只是在查看错误时需要注意的事情。

一旦您修复了 XAML 文件之外的基础构建问题,它将允许构建每个依赖项目。在这些情况下,跨多个 XAML 文件抛出的错误与文档结构无关,而是底层依赖关系的失败;它可能会破坏受影响的 XAML 文档呈现所需属性和绑定的能力。这最初是一种误导,但如果你理解它,它有助于找到潜在的问题。

于 2021-05-24T20:59:28.077 回答
0

https://i.stack.imgur.com/2oEWs.png

https://i.stack.imgur.com/dMwNX.png

有同样的问题,我通过将 exe 保存在 net5.0-windows 文件夹中来解决。

不要尝试在构建后事件命令行中删除它。

于 2021-06-16T10:14:47.740 回答
0

“名称 <...> 在命名空间 clr-namespace <...> 中不存在” 如果此错误持续存在,无论您做什么,您的解决方案中很可能存在与XAML 文件。对我来说,当我解决解决方案中的其他问题时,错误得到了解决。

于 2021-10-20T18:18:29.603 回答
0

如果您还有此特定错误以外的错误,则可能会发生这种情况。更多错误可能会导致文件无法正确编译并导致此错误。

首先尝试删除其他构建错误,如果可能,还要删除警告。然后重建解决方案。

于 2021-12-18T14:14:42.223 回答
0

如果 xaml 文件具有正确的命名空间,并且您最近修改了解决方案中任何项目的名称,那么可以尝试以下方法:

  1. 清洁整个溶液
  2. 从依赖层次结构中的最低层到最高层一个一个地重新构建每个项目。因此,如果项目 A 依赖于项目 B 和项目 C,两者都没有进一步的依赖关系,那么首先重建 B 和 C,然后再重建 A。
  3. 卸载有错误的项目并重新加载它。如果错误仍然存​​在,则关闭并再次打开 sln。
于 2022-01-13T03:16:15.320 回答