我刚刚从 VS2013 升级到 VS2015,出现了大量 CS0436 警告,所有这些警告似乎都与同一问题有关。
我正在慢慢地将 Web 应用程序从 VB 迁移到 C#,所以也许这真的很简单。我是 C# 新手,所以请使用外行式答案...
我的解决方案的结构如下:
\CommonDataAccessFunctionality.vb
Namespace MyCompany
Public Class CommonDataAccessFunctionality
Public Sub New(ByVal storedProcedureToRun As String)
' db stuff here '
End Sub
End Class
End Namespace
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
,然后清理/重建,错误会立即更新以使用新的类名。
因此,这可能与应用程序构建目标位置或其他原因有关吗?
警告CS0436 “...DataAccess.cs”中的类型“QrDataCommon”与“...”中导入的类型“QrDataCommon”冲突。使用“...DataAccess.cs”中定义的类型。
大多数人可能会遇到这种情况,因为项目引用了自己(正如您所指出的);但是,在您的情况下,这是因为您的 VB 项目具有完全相同的 命名空间和名称 的类型 - 这是从 VB 到 C# 直接 1:1 移植的结果。
由于名称和命名空间相同,C# 需要做出选择:应该使用哪一个?它通知您,它是最合乎逻辑的选择,并且已选择您的 C# 项目中的一个 - 无论如何,这可能正是您希望它执行的操作。
这些是您的选择:
您有 2 个 DLL 使用相同的类名
QrDataCommon
。重命名其中之一或不引用 QrCodes.dll
。
@EvilDr 有答案,但它隐藏在其他两个答案的评论中,所以我想让它更加明显。问题是项目中文件夹的名称:App_Code。目录中具有该名称的任何内容都会自动动态编译。重命名该目录,问题就会消失。