我正在努力创建一些标记扩展,并开始获得非常奇怪的VS行为。我已经在单独的解决方案中提取并确定了问题。问题是VS无法在XAML中创建CLR对象。
这是:
查看:
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wpfApplication4="clr-namespace:WpfApplication4">
<Window.Resources>
<wpfApplication4:Dog x:Key="doggy" />
</Window.Resources>
<Grid />
</Window>
代码背后:
using System.Windows;
namespace WpfApplication4
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
狗类:
namespace WpfApplication4
{
public class Dog
{
}
}
App.Xaml(App.Xaml.cs中没有代码):
<Application x:Class="WpfApplication4.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
我得到的例外:
Error 1 The name "Dog" does not exist in the namespace "clr-namespace:WpfApplication4". \\hopr1\folders$\vxk\Documents\Visual Studio 2012\Projects\WpfApplication4\MainWindow.xaml 6 9 WpfApplication4
我能够运行解决方案,但设计器因“无效标记”错误而失败 有什么想法吗?
修改
我正在运行VS 2012 Update 2 相同的解决方案适用于VS 2012 Update 1
答案 0 :(得分:109)
对于现在遇到这种情况的人来说,在你做任何事情之前......如果你确定你的课程/命名空间是正确的,重建并没有解决你的问题:
尝试重新启动Visual Studio
就是这样!
这似乎是Visual Studio 2012的一个错误(似乎也会影响支持XAML开发的所有其他版本)
更新:如果重新启动Visual Studio不起作用,请重新启动整个PC。
更新:如@Dunk的评论中所述,如果重新启动Visual Studio不起作用,请尝试删除.suo文件
答案 1 :(得分:47)
您的解决方案正在网络共享上运行。在网络共享上运行时,.Net(和Visual Studio)应用程序可能会遇到权限/访问问题。
将您的解决方案复制到本地驱动器(完全信任),您应该没问题。
可以让网络驱动器完全信任 - 你可以在StackOverflow和其他地方找到答案 - 但根据我的经验,当我这样做时我会遇到障碍,所以尽量避免它,除非绝对是对手头的问题至关重要。
E.g。这个问题提供了有关如何执行此操作的说明:
Give FullTrust to UNC share for Visual Studio 2012 and .Net 4.0
我只是尝试过VS2010,所以(如链接所示)你可能会更喜欢2012年。
答案 2 :(得分:31)
我遇到了同样的问题,但我的文件存储在本地。我的IValueConverter与使用它的视图驻留在不同的程序集中。尽管VS2013 IntelliSense建议如下,但它无法正常工作:
xmlns:conv="clr-namespace:MySharedAssembly.Converters"
在我最后明确添加了程序集后,它起作用了:
xmlns:conv="clr-namespace:MySharedAssembly.Converters;assembly=MySharedAssembly"
答案 3 :(得分:11)
我坚持这个错误几个小时。程序集和命名空间是正确的,类和引用也是正确的。编译并运行正常,只有设计师在某种程度上与我有问题。唯一有效的方法
我正在使用3d party portable.library,我只在x64版本中使用过。
答案 4 :(得分:11)
答案 5 :(得分:6)
它仍然发生在VS 2015中。我在App.xaml中取出了SomeConverter:
<Application.Resources>
<!--Value Converters-->
<local:SomeConverter x:Key="mySomeConverter"/>
<强> STRG移-B 强>
把它放回去 - 它起作用了。
答案 6 :(得分:3)
在本地驱动器上创建指向网络共享的符号链接。
转到命令行并输入mklink / D C:\ LOCALFOLDER \ YOURNETWORKPATH
然后从本地文件夹中打开项目,所有问题都会消失。 现在所有文件仍然在您的网络共享上。:)
答案 7 :(得分:2)
我正在开始一个新项目并遇到这个问题。这里列出的解决方案都不适合我,包括删除suo文件,卸载/重新加载项目,重启VS等等。
对我有用的是,因为这是一个新项目,我还没有建立它。我将Window.DataContext元素移除到剪贴板,构建项目一次(shift-ctrl-b),然后重新添加元素并立即运行。
答案 8 :(得分:2)
答案 9 :(得分:2)
在尝试广泛的解决方案之前,请尝试以下方法:
我遇到了完全相同的问题,我关闭了导致错误的窗口/窗体,然后运行了项目,
一旦项目成功运行并且没有恢复,错误似乎很清楚。
希望这有助于任何寻求快速解决方案的人。
答案 10 :(得分:0)
在我的情况下,此错误是由于签名的程序集仅包含“延迟签名”而引起的。启用。解决方案是从开发人员控制台(以管理员身份)运行命令sn -Vr *
。这会注册程序集以进行验证跳过。然后重新启动Visual Studio。
答案 11 :(得分:0)
名称“XYZ”在名称空间“clr-namespace:ABC”
中不存在解决!!
检查要调用的函数/类是否存在于命名空间
中正确例子:
.XAML文件
<Window x:Class="objectbinding.MainWindow"
<!--your xmlns:x .......
namespace1 is the project name-->
xmlns:m="clr-namespace:namespace1"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel Orientation="Vertical">
<StackPanel.Resources>
<ObjectDataProvider ObjectType="{x:Type m:StringData}"
x:Key="anyname" MethodName="GetStrings"/>
</StackPanel.Resources>
ItemsSource="{Binding Source={StaticResource Runni}}" />
</StackPanel>
</Grid>
// StringData是xaml.cs中的类名,GetString是Function
.XAML.CS文件
namespace namespace1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
// the class StringData is defined in namespace namespace 1
public class StringData
{
ObservableCollection<String> lst = new ObservableCollection<String>();
public StringData()
{
lst.Add("Abhishek");
lst.Add("Abhijit");
lst.Add("Kunal");
lst.Add("Sheo");
}
public ObservableCollection<String> GetStrings()
{
return lst;
}
}
}
错误的例子:
.XAML文件
<Window x:Class="objectbinding.MainWindow"
<!--your xmlns:x .......
namespace1 is the project name-->
xmlns:m="clr-namespace:namespace1"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel Orientation="Vertical">
<StackPanel.Resources>
<ObjectDataProvider ObjectType="{x:Type m:StringData}"
x:Key="anyname" MethodName="GetStrings"/>
</StackPanel.Resources>
ItemsSource="{Binding Source={StaticResource Runni}}" />
</StackPanel>
</Grid>
.XAML.CS
namespace namespace1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
//The StringData is defined in the class mainWindow not in namespace namespace1
public class StringData
{
ObservableCollection<String> lst = new ObservableCollection<String>();
public StringData()
{
lst.Add("Abhishek");
lst.Add("Abhijit");
lst.Add("Kunal");
lst.Add("Sheo");
}
public ObservableCollection<String> GetStrings()
{
return lst;
}
}
}
}
答案 12 :(得分:0)
我在项目中有3个错误,并专注于有关ObjectDataProvider的此错误。我发现如果项目由于其他错误而无法构建,则无法解决此错误。我有几个其他事件处理程序,其代码已被删除。我还需要删除试图将处理程序链接到控件的代码。然后项目能够构建并看到我试图从ObjectDataProvider引用的类是可用的。
答案 13 :(得分:0)
在资源词典中声明它对我有用。
<Window.Resources>
<c:IsNullConverter x:Key="IsNullConverter" />
</Window.Resources>
问题似乎是解析器在看到Converter={c:IsNullConverter}}"
之类的标记扩展时会自行调整,但可以使用:Converter={StaticResource IsNullConverter}
。
我想也许问题出在那里。
Windows 10,VS 2013
答案 14 :(得分:0)
我在网络共享上也有一个项目,这个错误意外地出现了。我尝试了上述所有建议,包括将项目复制到本地磁盘,清理,重建以及打开和关闭VS.这些都没有解决问题。
对我有用的只是删除对viewmodels文件夹的命名空间引用(xlmns:vm =&#34; clr-namespace:Myproj.ViewModel&#34;)。
我将类型添加到我的xaml(DataTemplate DataType =&#34; {x:Type vm:myviewmodel}&#34;)。 Visual Studio然后检测到命名空间丢失,我点击提示添加命名空间。
答案 15 :(得分:0)
重新启动Visual Studio后,我收到了一个IntelliSense错误,指出了我正确的方向。
由于 'Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.Semantics.Metadata.ReflectionTypeNode' 在同一个程序集中实现,您必须设置x:Name属性 而不是 Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.Semantics.Metadata.ReflectionPropertyNode 属性。
所以我改变了这个:
In [8]: s = """BOLD:Parshat NoachBOLD:
...: BOLD:Parshat Lech LechaBOLD:
...: BOLD:Parshat VayeraBOLD
...: BOLD:Parshat Sh’miniBOLD:"""
In [9]: re.findall(r'^(BOLD.*)BOLD:?$', s, re.MULTILINE)
Out[9]:
['BOLD:Parshat Noach',
'BOLD:Parshat Lech Lecha',
'BOLD:Parshat Vayera',
'BOLD:Parshat Sh’mini']
对此:
<local:MyView Name="test"/>
然后它奏效了。那么,这给了我们什么? 42可能的原因?虚幻...
答案 16 :(得分:0)
对我有用的是将 MOVE
更改为 XCOPY
中的 Post Build
project properties
,然后 re-build
项目。设计人员可能需要项目输出文件夹中的dll。 我正在使用vs 2015
答案 17 :(得分:0)
有同样的问题。为我修复的是当我意识到有问题的课被标记为internal
:
internal class MyClass
{
}
将其更改为public
后,设计人员能够正确编译XAML。
答案 18 :(得分:0)
对于任何被困的人。
对我来说有用的是将名称空间别名从本地更改为其他任何内容。
xmlns:local="clr-namespace:ExampleNameSpace.Folder" />
<Grid>
<StackPanel>
<local:ReferencedUserControl />
</StackPanel>
</Grid>
到
xmlns:blah="clr-namespace:ExampleNameSpace.Folder" />
<Grid>
<StackPanel>
<blah:ReferencedUserControl />
</StackPanel>
</Grid>
希望这有帮助!
答案 19 :(得分:0)
这让我烦恼了2008年,10年,12年,13年。
每当发生这种情况时(是的,我正在处理网络共享 - 我无法避免),我关闭VS,重命名FOLDER并重新打开项目。十分之九,这是有效的。有一段时间。
答案 20 :(得分:-2)
这可能是由于发布配置造成的。 需要在Debug配置中使用Designer。