升级到VS2015时突然出现警告CS0436

时间:2015-10-06 09:55:57

标签: c# asp.net vb.net visual-studio visual-studio-2015

我刚刚从VS2013升级到VS2015,并且出现了大量的CS0436警告,所有警告似乎与同一问题有关。

我正在慢慢地将Web应用程序从VB迁移到C#,所以这可能非常简单。我是C#的新手所以请使用外行型答案......

我的解决方案是这样构建的:

项目1 - 可重复使用的方法(数据库访问等)

\ CommonDataAccessFunctionality.vb

Namespace MyCompany
    Public Class CommonDataAccessFunctionality
        Public Sub New(ByVal storedProcedureToRun As String)
            ' db stuff here '
        End Sub
    End Class
End Namespace

项目2 - 依赖于项目1的Web适用(C#)

App_Code文件\ DataAccess.cs

using System.Data;
using System.Data.SqlClient;

namespace QrCodes.App_Data
{
    public abstract class QrDataCommon : MyCompany.CommonDataAccessFunctionality
    {
        public QrDataCommon(string storedProcedureToRun)
            : base(storedProcedureToRun)
        {

        }
    }

    public class QrDataGrabber : QrDataCommon
    {
        public QrDataGrabber(string storedProcedureToRun)
            : base(storedProcedureToRun)
        {
    }
    }
}

错误显示在这一行:

public class QrDataGrabber : QrDataCommon
  

警告CS0436
  'D:\ Web \ wwwroot \ MyApp \ MyApp-InProgress-Person中的'QrDataCommon'类型   WebApi \ QrCodes \ App_Code \ DataAccess.cs'与导入的冲突   在'QrCodes中输入'QrDataCommon',Version = 1.0.0.0,Culture = neutral,   公钥=空”。使用中定义的类型   “d:\网络\ wwwroot的\ MyApp的\ MyApp的-INPROGRESS人称   的WebAPI \ QrCodes \ App_Code文件\ DataAccess.cs'。

我在这里阅读了许多关于引用自身的项目的帖子,但是,项目对话框中没有引用(列出的内容),项目2中只有一个依赖项目到项目1.此外,项目2没有控制等,引用其他任何东西。

任何人都可以给我一些指导吗?我不确定它是否有用,但在搜索'QrDataCommon'时在对象浏览器中我看到了:

enter image description here

到目前为止基于帮助的更新

如果我选择查看解决方案资源管理器中的所有文件,则在\ bin \目录中会出现一个名为QrCodes.dll的文件,该文件在构建项目/解决方案时创建。我也在隐藏的Debug文件夹中看到了相同的内容。

如果我将QrDataCommon类重命名为完全唯一的类,例如QrDataCommonTest123,并清理/重建,则错误会立即更新以使用新的类名。

因此,这可能与应用程序构建目标位置有关吗?

2 个答案:

答案 0 :(得分:2)

  

警告CS0436   类型' QrDataCommon'在' ... DataAccess.cs'与导入类型的冲突' QrDataCommon'在' ...'。使用' ... DataAccess.cs'。

中定义的类型

大多数人可能会因为自己引用的项目而遇到这种情况(正如您所指出的那样);但是,在你的情况下,因为你的VB项目的类型具有完全相同的命名空间和名称 - 这是从VB到C#的直接1:1端口的结果。

由于名称和命名空间相同,C#可以选择:它应该使用哪一个?它告诉你它是最合乎逻辑的选择,并在你的C#项目中选择了一个 - 这可能是你想要它做的。

以下是您的选择:

  • 好的选择:完成将类型移植到C#后,从VB项目中删除它并重新编译VB项目。
  • 不错的选择:如果您没有将代码作为独立的可重用DLL分发(看起来您不是),change the root namespace of your C# code.
  • 在完成端口之前忽略错误。
  • 最差选项:使用global namespace alias

答案 1 :(得分:1)

您有2个使用相同类名QrDataCommon的DLL。重命名其中一个或不引用QrCodes.dll