我在 xaml 中收到类似“类型引用无法找到名为“Sign”的公共类型”的错误。我该如何解决它。 Sign 类位于同一个程序集中。
<DataTemplate DataType="{x:Type local:Sign}">
<Expander Padding="4"
IsExpanded="{Binding RelativeSource={
RelativeSource Mode=FindAncestor, AncestorType={
x:Type ListBoxItem}}, Path=IsSelected}">
<Expander.Header>
<TextBlock Text="{Binding Name}" ... />
</Expander.Header>
<DockPanel LastChildFill="True">
<Border DockPanel.Dock="Left" CornerRadius="16" BorderBrush="WhiteSmoke" Background="AliceBlue" BorderThickness="5" HorizontalAlignment="Center" VerticalAlignment="Center">
<Image Source="{Binding Icon}" Width="90" Height="90" Stretch="Fill" />
</Border>
...
</DockPanel>
</Expander>
如果类型与您正在修改的 XAML 驻留在同一程序集中,请在导入命名空间时省略 clr 命名空间的程序集段。
做
xmlns:local="clr-namespace:NamespaceContainingSignClass"
不要
xmlns:local="clr-namespace:NamespaceContainingSignClass;assembly=AssemblyContainingSignClassAndXAML"
对于那些在我的船上没有得到谷歌上这个错误的前 1,00 个结果帮助的人......就我而言,这与 smelch 的建议完全相反:我必须在我的 xmlns 声明结束。我猜可能是因为我的特殊情况 - 我的数据模板位于独立的资源字典 xaml 文件中。没有把握。我只知道它不起作用直到我添加了程序集信息,所以对于那些在那里挣扎的人来说,请重击一下,看看它是否有效。我不想深入探讨为什么,它就是这样。
Sign
映射到local
别名的命名空间:xmlns:local="clr-namespace:NamespaceContainingSignClass"
Sign
是否被标记public
Sign
是否有无参构造函数现在遇到这个错误。问题是我从程序集中引用的类位于具有更高框架级别的程序集中(4.7.2 与 4.6)。版本对齐解决了问题。
另一件事要检查,因为我今天刚刚解决了同样的问题...出于某种原因,我们有一个 xaml 文件,它添加了 Resource 而不是 Page 的构建操作。在该文件中,并且仅在该文件中,我们必须在命名空间声明中使用 assembly= 才能使其正常工作。自从 13 年前添加该文件以来,情况一直如此,其中的所有内容似乎都运行良好,直到现在我们才发现任何问题。
令我们困惑的是,我们正在创建 .NET 6 版本的 DLL,而新项目具有所有相同的代码和 xaml 文件,但不是该项目的 .NET Framework 版本的直接克隆。按照其设置方式,相关 XAML 文件的编译方式与所有其他文件相同,这意味着它不能在命名空间中包含 assembly= 部分。因此,有一段时间,我被误导,认为这可能是 .NET 6 与 .NET Framework 项目的差异。幸运的是,我注意到 XAML 文件在旧版本的项目中被设置为 Resource,一旦我修复了这个问题,在项目的两个版本中一切都工作正常(已删除 assembly=)。
我刚刚发现了另一个问题,可能会导致此问题。 允许在项目名称中使用点,例如
FancyTrainsimTools.Desktop
是有效的项目名称。如果您在项目中使用文件夹,您可能会得到如下结构:
FancyTrainsimTools.Desktop.Logic
如果您定义引用此文件夹中的项目的数据模板,则会导致错误消息。我还使用了分层数据模板,但这给出了略有不同的消息。
解决方法:
通过删除点来重命名您的项目:
FancyTrainsimToolsDesktop
编辑:我尝试再次重现该问题,以便报告错误,但现在一切正常......所以谜团尚未解决,并且不清楚如何创建解决方案......
对于 .Net 框架。
检查另一个类,以防丢失的类即使在那里也无法解决,并且它在 NuGet 中,问题可以在参考 HintPaths 中。在文本编辑器中打开
.csproj
文件,查看包引用是否与 HintPath 匹配。
例如:
<Reference Include="System.IO.Pipelines, Version=7.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Pipelines.7.0.0\lib\net462\System.IO.Pipelines.dll</HintPath>
</Reference>
HintPath
需要更新以引用版本 7.1.0
的文件夹,就像参考一样。
有时 Visual Studio 不会更新
HintPath
,这会带来麻烦。
我已经通过以下方式解决了这个问题: