命名空间clr-namespace <…>中不存在名称<…>
我有一个小的WPF应用程序,用于编译就好,但现在不是了。 我不能说它停止build设的时候。 它有一天工作得很好,接下来不是。
这是项目结构:
除了标准的.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文件中的命名空间/类名是(据我了解)是正确的。 当我inputxaml时,我得到了intellisense,所以它find的文件确定,但不是编译时。
在其他post中最常见的解决scheme是.NET框架版本。 目前,我的主要和testing项目都设置为.Net Framework 4。 完整版本不是客户端configuration文件。
这是我想我搞砸了:在configurationpipe理器,这两个项目的平台设置为任何CPU,但有一次,当试图解决这个问题我注意到,主项目设置为x86和testing项目设置为任何中央处理器。 所以我在configurationpipe理器中为主项目手动添加了Any CPU。 但是,我真的不知道我是否正确地做了这件事,即使我应该这样做。 所以作为一个额外的问题,有没有办法可以将configurationpipe理器重置为默认状态? 这有什么要说的主要问题? 我不知道如果主项目总是设置为x86或不知道如果我改变它到x86然后它打破。 如上所述,这个项目正在编译一段时间。
有什么build议么? 我会回答更详细的代码或任何问题,而不是在这里散漫:)
每当它发生在我身上,我刚刚重新启动视觉工作室,重新build立的解决scheme,它工作得很好..不能说为什么
除了“不存在于命名空间”消息之外,我还从devise者那里得到一条消息,表示它不能显示x64和ARM目标窗口。
我刚刚发现,构build切换到x86模式,做一个重build解决scheme,然后切换回到x64模式,然后重build再次修复[这两个]问题。
简单地重buildx64解决scheme什么也没做。
这在Visual Studio 2012(更新3)上适用于我。
- 重新启动Visual Studio
- 将当前程序集添加到名称空间声明
xmlns:framework="clr-namespace:TimeRecorder.Framework;assembly=MyAssembly
-
Build
– >Build Solution
重build你的解决scheme(有时干净,然后build立更好的作品)。 然后看看你的错误列表,滚动到最底部,它很可能表示一个错误,不允许你的程序集编译,而XAML编译器很可能使用程序集的caching版本,而不是新的意味着build立。
我有类似的问题。 就我而言,我必须做到以下几点
- 从xaml中删除引用标记(在本例中,
<local:HistoryViewModel x:Key="ViewModel"/>
) - build立类(在这个例子中包含
HistoryViewModel
类的文件) - 一旦构build,在xaml中添加引用标记
- 重新build立
上述方法为我工作。
什么对我有效: – 将解决schemeconfiguration从debugging切换到发布 – 将configuration从发布切换callback试
我发现的帮助(特别是如果这个错误发生在App.xaml
)是注释掉引用给你麻烦,重build,然后取消注释。 我认为这样做是允许整个项目实际构build而不是停止构build的错误。
从我可以收集,该应用程序试图build立在一定的顺序的文件,所以当App.xaml
或大概任何其他类文件错误的引用,导致错误的文件没有被正确编译,因此为什么它没有find该名称空间中的文件。
没有解决scheme为我工作。 我这样固定它:
- 从参考中删除库的DLL
- 下载库的源代码(而不是仅仅是dll文件)
- build立图书馆的项目,以获得一个新的DLL文件
- 将新的dll文件添加到主项目的引用
有这个问题绕圈子浪费了几个小时。 我将一个单独的用户控件DLL移入项目中,以便在项目中进行编译,而不是引用dll。 这打破了整个项目,所以我仔细检查了所有的命名空间,path和文件名。 尝试在x86和AnyCPU之间删除obj文件,在版本和debugging之间切换。 打开保存全部,重新编译还是没有喜悦。
之前记得有类似的问题,在VS2013中标记的错误与我不得不修改XAML的位置直接相关,但是通过使用
x:Name="myControl"
在所有的控制,而不是
Name="myControl"
修复。
这是一个类似的事情的一个奇怪的例子:
<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>
产生错误“typesUi没有在Gtl.Ui.Gtl中find”(我向你保证处理方法存在于代码隐藏中)。 解决方法是在类构造函数中添加处理程序,但拜托Microsoft,wtf正在进行?
当我尝试调用xaml中的命名空间时遇到同样的问题。 显示该类在命名空间中不可用。 我搜查了很多。 最后我发现这个问题是与VS. 我正在使用VS 2013.我尝试了下面的步骤:
- 生成 – >configurationpipe理器 – >活动解决scheme平台 – >更改为x64和x86和任何CPU。
- closuresVS并再次打开。
-
更改
xmlns:VM="clr-namespace:MyFirstAppViewModel"
至
xmlns:VM="clr-namespace:MyFirstAppViewModel;assembly=ViewModel"
我改变目标框架我的“.Net框架4.5”的应用程序“。NET框架4.6”,它的工作!
- 我会build议重命名
x:Key="ViewModel"
也许有一个小故障 - 如果你input
local:
VS显示你HistoryViewModel
? - 还要检查你的
Class
是否public
这对我来说是一个反复出现的问题。 其中一次我发现解决scheme正在查看“ 警告”选项卡 。 这是一个.NET框架版本的问题 ,并指出以下内容:
警告9主要引用“myDll”无法parsing,因为它是针对“.NETFramework,Version = v4.5.2”框架构build的。 这是一个比当前目标框架“.NETFramework,Version = v4.0”更高的版本。
他们缓冲的对象布局有一个小故障。 如果任何东西被重命名或移动,它会丢失。 一般来说,对我来说,创build一个全新的类,并复制所有旧代码,让它在新类上工作,然后删除原来的类。 有时候在启动并运行新的类名后,可以尝试将其重命名为原始名称(但通常不会)
我在.xaml的头文件中使用了xmlns:local =“using:MyRootNamespace.ChildNamespace”,并将其转换为xmlns:local =“clr-namespace:MyRootNamespace.ChildNamespace”…呃,我只是让intellisense做工作,而且工作。
问题是当您创buildx86目标时,特定项目的输出path设置为bin \ x86 \ Debug。 它看起来像expression混合不喜欢这个。 这似乎只对bin \ Debug中的内容感兴趣。
例如,如果您将x86项目的输出path更改为bin \ debug,那么我相信您会发现它将起作用。 那么,无论如何,为我工作:)
您添加的.dll文件的目标框架应该与您的应用程序的目标框架相同。