我刚刚从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,Version = 1.0.0.0,Culture = neutral,中键入'QrDataCommon',
  PublicKeyToken = null”。使用中定义的类型
  'D:\ Web \ wwwroot \ MyApp \ MyApp-InProgress-Person
  WebApi \ QrCodes \ App_Code \ DataAccess.cs”。


我在这里阅读了许多有关项目引用自身的文章,但是,项目对话框中没有引用(已列出),在Project 2中只有对Project 1的依赖。此外,Project 2没有控件,等等。 ,即引用其他任何内容。

谁能给我一些指导?我不确定它是否有帮助,但是在对象浏览器中搜索“ QrDataCommon”时,我看到以下内容:

c# - 升级到VS2015时突然出现警告CS0436-LMLPHP

到目前为止基于帮助进行更新

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

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

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

最佳答案

警告CS0436
  “ ... DataAccess.cs”中的“ QrDataCommon”类型与“ ...”中的导入类型“ 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

关于c# - 升级到VS2015时突然出现警告CS0436,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32966995/

10-09 22:44