我有一个小的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}">
这是我得到的错误:
请注意,这不仅仅是截图中的一个文件,而是我在xaml中以类似的方式在此项目的所有用户控件/窗口文件中添加的所有引用。
所以文件在那里,文件中的命名空间是正确的,xaml文件中的命名空间/类名是(据我所知)是正确的。当我输入xaml时,我得到intellisense,因此它可以找到文件,但是在编译时没有。
其他帖子中最常见的解决方案是.net框架版本。目前,我的主要和测试项目都设置为.Net Framework 4。完整版不是客户端配置文件。
以下是我认为搞砸的事情: 在配置管理器中,两个项目都将其Platform设置为Any CPU,但在尝试解决此问题时,我发现主项目设置为x86,测试项目设置为Any CPU。所以我在配置管理器中为主项目手动添加了任何CPU。但老实说,我不知道我是否做得正确,或者即使我应该这样做。所以作为一个额外的问题,有没有办法可以将配置管理器重置为默认状态?对于主要问题,这有什么可说的吗?我不知道主项目是否总是设置为x86,或者我是否以某种方式将其更改为x86然后它就破坏了。如上所述,这个项目编译好了一段时间。
有什么建议吗?我将回答有关代码的更详细问题,或者您在此处提出的任何问题,而不是在这里漫无目的:)
答案 0 :(得分:104)
每次发生在我身上的时候我都重新启动了visual studio,重新构建了解决方案并且工作得很好..不能说为什么
答案 1 :(得分:29)
除了“命名空间中不存在”消息之外,我还从设计者那里得到一条消息,它无法显示x64和ARM目标的窗口。
我刚刚发现将构建切换到x86模式,执行重建解决方案,然后切换回x64模式,然后再次重建修复[两个]问题。
简单地重建x64解决方案什么也没做。
答案 2 :(得分:11)
这在Visual Studio 2012(Update 3)上对我有用。
xmlns:framework="clr-namespace:TimeRecorder.Framework;assembly=MyAssembly
Build
- &gt; Build Solution
答案 3 :(得分:9)
我发现有帮助(特别是如果App.xaml
中出现此错误)是注释掉那些给你带来麻烦,重建然后取消注释的引用。我想想它的作用是允许整个项目实际构建而不是在错误处停止构建。
从我可以收集的内容来看,应用程序正在尝试按特定顺序构建文件,因此当App.xaml
或大概任何其他类文件在引用中出错时,导致错误的文件都没有&#39 ;编译正确,因此它没有在该命名空间中找到该文件。
答案 4 :(得分:8)
重建您的解决方案(有时干净然后构建更好)。然后查看你的错误列表,滚动到最底层,它很可能表示一个错误,它不允许你的程序集编译,而且XAML编译器很可能使用程序集的缓存版本,而不是新版本的程序集意味着要建立。
答案 5 :(得分:7)
我有类似的问题。在我的情况下,我必须做以下
<local:HistoryViewModel x:Key="ViewModel"/>
)HistoryViewModel
类)上述方法对我有用。
答案 6 :(得分:6)
对我有用的东西: - 将解决方案配置从Debug切换到Release - 将配置从发布切换回调试
答案 7 :(得分:3)
这些解决方案都不适合我。我这样解决了:
答案 8 :(得分:2)
如果这个问题绕圈子浪费了几个小时。我将一个单独的用户控件dll移动到项目中,因此它在项目中编译而不是引用的dll。这破坏了整个项目,因此我仔细检查了所有命名空间,路径和文件名。试图在x86和AnyCPU之间删除obj文件,在发布和调试之间进行更改。打开保存所有,重新编译仍然没有乐趣。
记得之前遇到类似的问题,VS2013中标记的错误与我必须修改XAML的位置没有直接关系,而是使用
x:Name="myControl"
在所有控件上,而不是
Name="myControl"
修好了。
答案 9 :(得分:2)
我改变了目标框架我的应用程序&#34; .Net Framework 4.5&#34; to&#34; .Net Framework 4.6&#34;它有效!
答案 10 :(得分:2)
当我试图在xaml中调用命名空间时,我遇到了同样的问题。显示该类在命名空间中不可用。我搜索了很多。最后我发现这个问题与VS有关。我正在使用VS 2013。 我试过以下步骤:
更改
xmlns:VM="clr-namespace:MyFirstAppViewModel"
到
xmlns:VM="clr-namespace:MyFirstAppViewModel;assembly=ViewModel"
答案 11 :(得分: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"
IsVisibleChanged=onIsVisibleChanged>
...
</UserControl>
将编译(VS2013)。
StripHTML(WebBrowserControl_name);
产生错误&#34;在Gtl.Ui.Gtl&#34;中找不到类型Ui。 (我向你保证处理程序方法存在于代码隐藏中)。解决方法是在类构造函数中添加处理程序,但c&#39; mon Microsoft,wtf正在进行?
答案 12 :(得分:1)
今天使用Visual Studio 2017社区版进入本期。尝试了所有的建议(重置VS 2017,从x64更改为x32再返回等)和其他来源无济于事。 Intellisense知道一切都在那里,但我每次都得到同样的错误。
无论如何,我的修复结果非常简单......当你花了几个小时来解决这个问题时,他们总是没有!
基本上,我做了以下......
看起来,通过成功构建,它必须重置“&#39;在VS和/或组件中。成功构建后,请再次插入代码。
希望这可以帮助某人:)
答案 13 :(得分:1)
尝试了该线程上的所有解决方案,但没有一个起作用。原来是由解决方案配置引起的。由于某些本机依赖关系,我的WPF应用程序设置为X64构建,但该项目的解决方案配置仍设置为AnyCPU。 在解决方案配置管理器中为项目创建新的X64配置,XAML设计人员最终可以识别出我的类型和名称空间。
答案 14 :(得分:1)
在上次构建期间未成功构建项目时,通常会发生此错误。
步骤1)首先从XAML或.cs文件中删除所有导致错误的代码,然后构建&amp;按F5启动项目。
步骤2)添加在XAML中逐个添加导致错误的代码。
答案 15 :(得分:1)
我发现运行命令“运行代码分析”会重新生成所有内容,并且几乎总是可以解决问题(右键单击项目>分析>运行代码分析)。通常,这通常还会重新构建资源文件,以便可以找到字符串等。
答案 16 :(得分:1)
只需从构建菜单
运行代码分析答案 17 :(得分:1)
在将名称空间添加到.xaml文件之前,请确保由于现有代码而没有任何编译错误。
一旦所有编译检查都OK,然后重建解决方案并尝试添加所需的名称空间以使用其类或属性。
答案 18 :(得分:1)
x:Key="ViewModel"
也许有一个小故障local:
,VS会显示HistoryViewModel
吗? Class
是否为public
答案 19 :(得分:0)
我面临着同样的问题。您会收到此错误,但仍然可以成功构建项目。不便之处是您看不到UI设计(或者只是想清理代码并删除烦人的摆动行)。 阅读很多帖子都尝试过几件事,但随后的工作就像一个魅力。
在Visual Studio 2019中对此进行了尝试:
右键单击解决方案->属性->配置属性,然后将项目配置从“调试”更改为“发行”,反之亦然。
之后,重新构建您的解决方案。它可以解决您的问题。
答案 20 :(得分:0)
完全退出并重新启动 Visual Studio确实通常可以解决这些问题,正如一些已经回答过这篇文章的人所说的那样。但是,有时错误不会得到解决,因为它实际上是构建失败或依赖问题。
当我在 Visual Studio 中处理 WPF 项目时,XAML 错误并不总是根本原因,而是问题失败的征兆。有时会出现 .net 框架依赖问题,这些问题不会出现在错误列表窗口中,您必须使用输出窗口来调试实际失败的内容。
我了解到,当真正的罪魁祸首来自完全独立的类或项目时,根本原因(为什么在多个 XAML 文件中出现如此多的错误)实际上可能是不正确的表现。通常会导致构建失败。特别是在具有多个项目的解决方案中,可能存在一个项目无法生成的 DLL 依赖项,从而导致级联失败,显示为 XAML 文档错误。
XAML 的一个缺点是它需要库的构建副本来验证 XAML,因为元素名称与实际类匹配。因此,有时您会收到 XML 错误,因为库没有正确构建。此外,在添加新控件时,如果您尚未构建项目,它将无法找到新类。只是在查看错误时需要注意的事项。
一旦您修复了 XAML 文件之外的底层构建问题,它将允许构建每个依赖项目。在这些情况下,跨多个 XAML 文件抛出的错误与文档结构无关,而是与底层依赖项的失败有关;它可能会破坏受影响的 XAML 文档呈现所需属性和绑定的能力。这最初具有误导性,但如果您了解它,则有助于找到根本问题。
答案 21 :(得分:0)
https://i.stack.imgur.com/2oEWs.png
https://i.stack.imgur.com/dMwNX.png
遇到了同样的问题,我通过将 exe 保存在 net5.0-windows 文件夹中解决了。
不要尝试在构建后事件命令行中删除它。
答案 22 :(得分:0)
您添加的.dll文件的目标框架应与您应用的目标框架相同。
答案 23 :(得分:0)
问题在于,在创建x86目标时,特定项目的输出路径设置为bin \ x86 \ Debug。它看起来像Expression blend根本不喜欢这样。它似乎只对bin \ Debug中的内容感兴趣。
例如,如果您将x86项目的输出路径更改为bin \ debug,那么我确定您发现它可以正常工作。嗯,无论如何对我有用:)
答案 24 :(得分:0)
我使用的是xmlns:local =&#34;使用:MyRootNamespace.ChildNamespace&#34;在.xaml的标题处,我将其转换为xmlns:local =&#34; clr-namespace:MyRootNamespace.ChildNamespace&#34; ......好吧,我只是让intellisense完成这项工作,并且有效。
答案 25 :(得分:0)
他们缓冲对象布局有一个小故障。如果任何内容被重命名或移动,它就会丢失。 通常对我有用的是创建一个全新的类并复制所有旧代码,让它在新类上工作,然后删除原始类。有时在您使用新的类名启动并运行之后,您可以尝试将其重命名为原始名称(但通常不会)
答案 26 :(得分:0)
对我来说,这是一个反复出现的问题。有一次我发现解决方案正在查看警告标签。这是 .NET框架版本问题,它声明如下:
警告9无法解析主要参考“myDll”,因为 它是根据“.NETFramework,Version = v4.5.2”框架构建的。 这是比当前目标框架更高的版本 ” .NETFramework,版本= 4.0" 版。