我已将问题简化为以下代码。
using WeinCad.Plugin.MoineauMachinePath;
namespace WeinCad.Plugin.Foo
{
public class Foo
{
// This line is a compiler error
// (Cannot resolve symbol MoineauMachinePath )
private WeinCad.Plugin.MoineauMachinePath.MachinePathSolverPropertiesViewModel X;
// Implicity referenced it is ok
private MachinePathSolverPropertiesViewModel Y;
}
}
如果我使用对类的显式引用,则会收到编译器错误。为了证明 namespace 正确,我还将 namespace 导入范围并隐式引用该类。仅显式引用有误。
编辑
智能感知表明,存在这样的嵌套嵌套double的 namespace 。那将是问题的根源。不知道它在那里如何编码。
编辑
问题的根源是损坏的Resources.Designer.cs文件。
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18444
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WeinCad.Plugin.WeinCad.Plugin.BasicFolders.Properties
{
using System;
不知道这是怎么发生的。删除资源文件,然后重新创建它
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18444
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WeinCad.Plugin.BasicFolders.Properties {
using System;
没有讨厌的重复。关于如何发生这仍然是一个悬而未决的问题。
最佳答案
该错误消息表明当前作用域中有一个WeinCad.Plugin
,即WeinCad.Plugin.Foo.Foo.WeinCad.Plugin
或WeinCad.Plugin.Foo.WeinCad.Plugin
。当编译器正在寻找WeinCad.Plugin
时,它首先查看本地范围,并且只有在找不到匹配项的情况下,它才会查看全局范围。
最简单,最正确的解决方法是:不要在自己的名称范围内复制名称(这只是自找麻烦)。另一种选择是使用完整类型名称global::
前面的global::WeinCad.Plugin.Whatever
前缀显式指定全局范围。
关于c# - 带有嵌套 namespace 的编译器错误 “cannot resolve symbol”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24140703/