我已将问题简化为以下代码。

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.PluginWeinCad.Plugin.Foo.WeinCad.Plugin。当编译器正在寻找WeinCad.Plugin时,它首先查看本地范围,并且只有在找不到匹配项的情况下,它才会查看全局范围。

最简单,最正确的解决方法是:不要在自己的名称范围内复制名称(这只是自找麻烦)。另一种选择是使用完整类型名称global::前面的global::WeinCad.Plugin.Whatever前缀显式指定全局范围。

关于c# - 带有嵌套 namespace 的编译器错误 “cannot resolve symbol”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24140703/

10-09 03:59