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

问题描述 投票:0回答:3

我刚刚从 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 - Web 适用(C#),依赖于项目 1

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”,版本=1.0.0.0,文化=中性, PublicKeyToken=null'。使用中定义的类型 'D:\Web\wwwroot\MyApp\MyApp-InProgress-Person WebApi\QrCodes\App_Code\DataAccess.cs'.

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

有人可以给我一些指导吗?我不确定它是否有帮助,但在对象浏览器中搜索“QrDataCommon”时我看到了这个:

根据迄今为止的帮助进行更新

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

如果我将

QrDataCommon
类重命名为完全独特的名称,例如
QrDataCommonTest123
,然后清理/重建,错误会立即更新以使用新的类名。

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

c# asp.net vb.net visual-studio visual-studio-2015
3个回答
2
投票

警告CS0436 “...DataAccess.cs”中的类型“QrDataCommon”与“...”中导入的类型“QrDataCommon”冲突。使用“...DataAccess.cs”中定义的类型。

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

由于名称和命名空间相同,C# 需要做出选择:应该使用哪一个?它通知您,它是最合乎逻辑的选择,并且已选择您的 C# 项目中的一个 - 无论如何,这可能正是您希望它执行的操作。

这些是您的选择:

  • 好的选择:完成将类型移植到 C# 后,将其从 VB 项目中删除并重新编译 VB 项目。
  • 好的选择:如果您不将代码作为独立的可重用 DLL 分发(看起来您不是),更改 C# 代码的根命名空间。
  • 忽略该错误,直到完成移植。
  • 最差的选择:使用全局命名空间别名

2
投票

您有 2 个 DLL 使用相同的类名

QrDataCommon
。重命名其中之一或不引用
QrCodes.dll


0
投票

@EvilDr 有答案,但它隐藏在其他两个答案的评论中,所以我想让它更加明显。问题是项目中文件夹的名称:App_Code。目录中具有该名称的任何内容都会自动动态编译。重命名该目录,问题就会消失。

© www.soinside.com 2019 - 2024. All rights reserved.