Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 避免或修复.Net核心中的命名空间污染 总结_C#_Asp.net Core - Fatal编程技术网

C# 避免或修复.Net核心中的命名空间污染 总结

C# 避免或修复.Net核心中的命名空间污染 总结,c#,asp.net-core,C#,Asp.net Core,对于我的CS capstone项目,我们遇到了一个问题,类名存在于两个不同的依赖项中。具体来说,我们使用一个依赖项来使用带有实体框架的MySQL,使用一个依赖项来直接连接和执行MySQL查询 背景 非EF由项目之外的组件拥有,该数据库是我们与数据库交互的主要方式之一。客户/导师已要求我们对一个单独的数据库进行任何添加或更改,该数据库是EF正在连接的数据库 问题 我的问题本质上是关于如何修复错误该类型同时存在于…,但我更想知道.Net内核中名称空间污染的根本问题以及我们可以采取的行动。我已经研究了

对于我的CS capstone项目,我们遇到了一个问题,类名存在于两个不同的依赖项中。具体来说,我们使用一个依赖项来使用带有实体框架的MySQL,使用一个依赖项来直接连接和执行MySQL查询

背景 非EF由项目之外的组件拥有,该数据库是我们与数据库交互的主要方式之一。客户/导师已要求我们对一个单独的数据库进行任何添加或更改,该数据库是EF正在连接的数据库

问题 我的问题本质上是关于如何修复错误
该类型同时存在于…
,但我更想知道.Net内核中名称空间污染的根本问题以及我们可以采取的行动。我已经研究了错误,最初的结果描述了一个只适用于.Net而不适用于.Net Core的修复程序,并解释了.Net Core不支持别名

潜在修复
  • 独立项目-我问过一个我认识的人,他对.Net有更多的经验,他建议单独做项目。虽然这在消除构建错误方面显然有效,但我不知道我们如何在主ASP.Net应用程序中使用它。我认为要么两者都需要成为应用程序,要么将其制作成一个库。我还假设,如果它是一个独立的图书馆,它将面临与我们现在同样的问题

  • 删除一个依赖项-我目前正在考虑,不太理想的解决方案是重写依赖EF使用直接MySQL连接依赖项的代码。依赖EF数据库的代码更少,因此重写EF数据库和一些SQL更简单

  • 别名或完全引用-我发现的结果似乎只适用于.Net,它们描述了使用别名或引用类型中的完整路径。据我所知,.NETCore目前不支持这一点。如果是,我可以怎么做

使用系统;
使用System.Collections.Generic;
使用MySql.Data.MySqlClient;
命名空间OVD.API.GuacamoleDatabaseConnectors
{
公共类GuacamoledDatabaseConnector:IDisposable
{
私有MySqlConnection;
...
错误发生在MySqlConnection类型上,完整的错误是:
GuacamoleDatabaseConnectors/GuacamoleDatabaseConnector.cs(81,16):错误CS0433:类型“MySqlConnection”同时存在于“MySql.Data,Version=8.0.15.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d”和“MySqlConnector,Version=0.49.2.0,Culture=neutral,PublicKeyToken=d33d3e53aa5f8c92”[/Users/markbeussink/Action/OVD/OVD.API/OVD.API/OVD.API.csproj]

这是
.cs.proj


netcoreapp2.2
过程中

只需创建一个新的项目“类库”,在该项目中,您可以创建一个接口,该接口允许您从一个组件访问方法(您需要在该项目中实现“组件”及其方法)。类似于facade模式。然后在解决方案的其余部分中,您将仅使用新创建的项目引用。此解决方案允许您定义自己的命名空间名称

由于您刚刚发现的原因,两个单独的项目具有相同命名空间和相同名称的类型是非常糟糕的形式。根本不是你会遇到这样的冲突,这是正常的或预料之中的,在你的职业生涯中,你很可能再也不会遇到这种冲突了

看起来这个项目:

决定删除更正式的MySQL ADO.NET提供程序的命名空间:

通过定义一个名为:
MySql.Data.MySqlClient.MySqlConnection
,而不是使用
MySqlConnector.MySqlClient.MySqlConnection
或类似的类型

最好的方法是从项目中排除其中一个,而只使用另一个

但我对这些图书馆的相对优点没有任何意见

如果您无法做到这一点,C#将为您提供一个别名,以使用不同的命名空间对其中一个程序集进行别名。请参阅


这实际上将向有问题的程序集添加一个新的最外层命名空间级别,因此另一个MySqlConnection(仅在您的代码中)将被称为
SomeAlias.MySql.Data.MySqlClient.MySqlConnection

我很高兴能提供帮助:)