【发布时间】:2013-12-23 14:39:45
【问题描述】:
好的,我怀疑这可能是 Visual Studio 的问题,但这一定是有原因的。我从默认项目列表中创建了一个 ListBox(右键单击项目或项目中的文件夹 -> 添加 -> 新项目 -> Xaml ListBox)。我立即得到一条带有错误的红色波浪线:
"错误2以下方法之间的调用不明确或 属性:'Identical.NameSpace.ListBox1.InitializeComponent()' 和 'Identical.NameSpace.ListBox1.InitializeComponent()' C:\Documents 和 设置\ouflak\我的文档\Visual Studio 2010\Projects\Identical\NameSpace\ListBox1.xaml.cs 27"
所有有问题的代码都是自动生成的,错误的原因是因为两个自动生成的文件之间存在冲突:ListBox1.g.cs 和 ListBox1.designer.cs 其中public voidInitializeComponent() 是在两者中声明。在这种情况下,代码自然无法编译。我想只需删除 ListBox1.designer.cs 并继续前进就足够简单了。 但我的问题是:为什么此代码会自动生成并出现此错误?我希望任何自动生成的东西都能够构建和编译,而无需接触项目或任何代码。对于您可以添加的几乎所有其他工具箱项目,情况就是如此。那么为什么要生成带有内置错误的代码呢?我们是否应该找到一些方法来完成这项工作?这段代码是否只是一个建议,是否需要 IDE 用户/开发人员来敲定细节?
这是生成的代码: ListBox1.xaml:
< ?xml version="1.0" encoding="utf-8" ? >
< ListBox
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:xc="http://ns.neurospeech.com/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
x:Class="Identical.NameSpace.ListBox1"
>
<sys:String>Item 1</sys:String>
<sys:String>Item 2</sys:String>
<sys:String>Item 3</sys:String>
< /ListBox>
ListBox1.g.cs:
namespace Identical.Namespace
{
/// <summary>
/// ListBox1
/// </summary>
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
public partial class ListBox1 : System.Windows.Controls.ListBox, System.Windows.Markup.IComponentConnector {
private bool _contentLoaded;
/// <summary>
/// InitializeComponent
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public void InitializeComponent() {
if (_contentLoaded) {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/MyProject;component/namespace/listbox1.xaml", System.UriKind.Relative);
#line 1 "..\..\..\namespace\ListBox1.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);
#line default
#line hidden
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
this._contentLoaded = true;
}
}
}
ListBox1.designer.cs:
namespace Identical.NameSpace
{
using System;
public partial class ListBox1 : System.Windows.Controls.ListBox
{
private void InitializeComponent()
{
// Pre Statements...
string string1 = "Item 1";
string string2 = "Item 2";
string string3 = "Item 3";
// Statements...
this.BeginInit();
this.Items.Add(string1);
this.Items.Add(string2);
this.Items.Add(string3);
this.EndInit();
// Post Statements...
}
}
}
最后是 ListBox1.xaml.cs(仅修改以防止 XML 文档和 Stylecop 警告):
namespace Identical.NameSpace
{
/// <summary>
/// ListBox1 class
/// </summary>
public partial class ListBox1 : ListBox
{
/// <summary>
/// Initializes a new instance of the ListBox1 class
/// </summary>
public ListBox1()
{
this.InitializeComponent();
}
}
}
就是这样。这是完全处于原始自动生成状态的代码,除了我放入 xaml.cs 文件的 cmets。
我在这个网站和互联网上搜索了一下,但似乎没有人解释过这种行为。我可能会删除designer.cs 代码并继续。但是,如果有人知道这是为什么,或者它确实是 Visual Studio 2010 专业版中的一个错误,我真的很想知道。
【问题讨论】:
-
这一切都在一个项目中吗? (即,其他相同的命名空间是否可能来自引用的程序集)?
-
为什么要删除代码示例中的所有命名空间?
-
没问题,我会添加它们...
-
看看这是否有帮助:unknown error upon rebuilding WPF project。查看您是否不小心将 .designer.cs 文件作为项目的一部分包含在内。
-
好奇:如果您在解决方案资源管理器中右键单击 ListBox1.xaml 并单击“运行自定义工具”,错误是否仍然存在?似乎至少应该重新生成 .g.cs 文件。 stackoverflow.com/a/9948546/674077 不管怎样,我知道问题仍然存在,为什么它首先会这样生成。
标签: c# wpf visual-studio xaml toolbox