0

我对此进行了相当彻底的研究,发现了这个这个这个。我发现的所有帮助页面都说的差不多。这不是很复杂,所以我很确定我做对了,但是幕后的文件都变得混乱了。以下三个错误中的任何一个都会出现,只有错误 1 ​​和 2 会阻止它运行。

错误 1:如果 XAML 文件在我运行时在编辑器中打开,那么只有该文件的错误是:名称空间“clr-namespace:Addin”中不存在名称“Option”

错误2:如果XAML文件在我运行时没有在编辑器中打开,那么错误是:类型名称'Option'在'Addin.Addin'类型中不存在。...在所有 g.cs 文件上。

错误 3:与 1 完全相同,但在不同的对象上。当我运行它时,它确实解决了,不会导致错误,并且完全按预期工作。

就好像 VS 确信该类不存在,但只在涉及继承时才真正关心。

我只想说我很困惑,任何关于可能出错的见解将不胜感激。另外,我正在使用 VS 2012 Professional,我的一些同事似乎认为它至少是错误 3 的罪魁祸首。

EAC1O1.xaml.cs

namespace Addin
{
    public partial class EAC1O1 : Option
    {
        public EAC1O1()
        {
            InitializeComponent();
        }
    }
}

选项.cs

namespace Addin
{
    public abstract class Option : UserControl
    {

EAC1O1.xaml

<local:Option x:Class="Addin.EAC1O1"
             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:Addin"
             mc:Ignorable="d" >
    <DockPanel>

    </DockPanel>
</local:Option>

EAC1O1.g.cs

namespace Addin{


    /// <summary>
    /// EAC1O1
    /// </summary>
    public partial class EAC1O1 : Addin.Option, System.Windows.Markup.IComponentConnector {
4

2 回答 2

0

您可以尝试使您的基Option类不是抽象的。设计器的一部分依赖于能够创建在 XAML 标记中使用的类和/或基类的实例。

于 2013-07-17T02:12:34.317 回答
0

编辑:心理,它不是一个错误。(好吧,它可以使用一些额外的功能来避免它。)我有一个与命名空间同名的类。这从来没有破坏过任何东西,也没有发出任何警告,所以我没有意识到这是不可以的。更改类名修复了这一切。如果你这样做,VS 真的应该发出警告,这样你就知道它可能会破坏事情。

该解决方案最终成为 Visual Studio 2012 中的一个错误。我通过两种方法展示了这一点。

方法一:我将 Option 类分离到一个不同的程序集(类库)中,现在它的工作方式与编写的完全一样,只是更改了命名空间。

方法二:一位同事在 MS VS 2010 中设置了相同的项目,并且运行良好。

MS VS BUG# 794312

于 2013-07-17T22:35:11.190 回答