【问题标题】:Warning CS0436 suddenly appears when upgrading to VS2015升级到VS2015时突然出现警告CS0436
【发布时间】:2015-10-06 09:55:56
【问题描述】:

我刚刚从 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 Applicable (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' 与导入的冲突 在“二维码”中键入“QrDataCommon”,版本=1.0.0.0,文化=中性, PublicKeyToken=null'。使用中定义的类型 'D:\Web\wwwroot\MyApp\MyApp-InProgress-Person WebApi\QrCodes\App_Code\DataAccess.cs'。

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

谁能给我一些指导?我不确定它是否有用,但在对象浏览器中搜索“QrDataCommon”时,我看到了这个:

目前根据帮助进行更新

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    由于名称和命名空间相同,C# 需要做出选择:应该使用哪一个?它告诉您,这是最合乎逻辑的选择,并且已在您的 C# 项目中选择了它——这可能就是您希望它做的事情。

    这些是您的选择:

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

    【讨论】:

    • 我更改了默认命名空间,但警告仍然存在。对不起,如果我很厚,但是QrDataCommon 没有定义任何地方,而是在项目 2 中,如图所示,所以我无法确定这个冲突是在哪里引起的。
    • @EvilDr 哦,我错过了 - 我在这里很厚。检查项目中的 all web.configs(它看起来像 ASP.Net MVC?)以获取循环引用。
    • @EvilDr 如果您的项目引用(项目下的引用节点)没有循环,那么它只需要在 webconfig 中。按 CTRL+SHIFT+F,从下拉列表中选择“整个解决方案”并搜索“QrCodes”。如果结果太多,请尝试“QrCodes”(注意逗号)。
    • 对不起,@EvilDr 我真的没有想法。您可以尝试的最后一件事是通过将代码/标记复制到新项目来重新创建项目。
    • 对不起@EvilDr,除了重新创建项目之外,我真的没有想法。
    【解决方案2】:

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

    【讨论】:

    • 谢谢,我可能又遗漏了一些简单的东西,但是除了项目 2 之外,QrDataCommon 没有在解决方案中的任何地方定义
    • 找到了答案,因为App_Code被称为App_Code,它是动态编译的。重命名为 AppWideCode 解决了这个问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    相关资源
    最近更新 更多