首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的整个解决方案必须是.NET框架,而不是.NET核心,因为我使用的是需要.NET框架的NuGet包吗?

我的整个解决方案必须是.NET框架,而不是.NET核心,因为我使用的是需要.NET框架的NuGet包吗?
EN

Stack Overflow用户
提问于 2019-01-09 18:25:43
回答 3查看 824关注 0票数 1

我有一个.NET核心解决方案,包括三个部分:

  1. ASP.NET核心网站
  2. 业务逻辑.NET核心动态链接库
  3. 数据访问.NET核心DLL

现在,我需要使用业务逻辑DLL中的.NET框架NuGet包(它不在我的控制范围内)。

按照this answer中的建议,我将业务逻辑项目更改为目标.NET 4.6.1 (net461)。

然而,这迫使我对数据访问项目(这是从业务逻辑项目中引用的)做同样的事情,而且(尽管我还没有到那里),我想我也必须为这个网站项目这样做。

我认为.NET核心在很大程度上是.NET框架的一个子集,除了只需要“更大的”框架(这是可以的)之外,没有任何功能改变。然而,在重新定位我的数据访问项目之后,我现在发现还缺少一些东西。例如,它现在使用C#7值元组反对我。

虽然我可以通过NuGet包添加值元组,但我还需要进行其他更改(DataAnnotations似乎已经离开/移动了),而且我似乎正在以.NET框架的方式返回所做的一切。

有办法绕过这件事吗?我觉得我在拉一根线,最终我会回到ASP.NET MVC.

EN

回答 3

Stack Overflow用户

发布于 2019-01-09 18:37:56

同时将这两个框架作为目标是可能的。我在一个项目中工作,我想以.Net核心2.0为目标,但需要使用.NET框架包。

为此,打开.csproj文件,用一个新的TargetFrameworks标记替换TargetFramework标记。

<TargetFrameworks>net461;netcoreapp2.0</TargetFrameworks>

不幸的是,通过visual中的UI无法做到这一点。在进行此更改并重新加载Visual之后,目标框架将为空。

票数 2
EN

Stack Overflow用户

发布于 2019-01-10 12:31:20

在和@Svek聊天时,我说服自己必须放弃整个网络项目,重新开始一个老式的ASP.NET MVC网络项目(或者割腕),现在我发现情况并非如此。

以下是我认为的要点:

  1. 如果使用的是使用NuGet 4.6的.NET包,则不能在以.NET为目标的DLL中使用。
  2. 您可以拥有一个同时针对.NET核心和.NET 4.6的DLL (per @Matt的答案)--但这并没有真正的帮助,因为它所做的就是创建两个版本的DLL,并且只有.NET 4.6版本可以使用NuGet包。因此,您的DLL需要以.NET 4.6为目标。
  3. 通过扩展,解决方案中直接引用DLL的每个项目都需要针对.NET 4.6。所以是的,传染确实扩散了。:-(
  4. 在我的例子中,这意味着我的ASP.NET核心web应用程序也需要针对.NET 4.6 --我起初认为这意味着完全放弃ASP.NET核心,并丢弃我在网络项目上所做的大量工作。然而,,情况并非如此。
  5. 在ASP.NET 4.6上运行.NET核心web应用程序是可能的(尽管这似乎有点不合逻辑)。实际上,在Visual中创建新的ASP.NET核心web应用程序时,您可以选择将.NET 4.6作为目标。这会产生一个不同的项目文件,具有额外的NuGet依赖等。参见this question

所以,我最终的解决办法是:

  1. 将我的所有all更改为目标"net461“(通过编辑项目文件)。
  2. 结果丢失的一些内容(例如,添加一个NuGet包以获得ValueTuple支持,以及通过添加一个显式包引用来获取System.Component.DataAnnotations)。
  3. 在ASP.NET核心web项目周围进行黑客攻击,同时也针对"net461“,这意味着更新各种引用并添加更多的NuGet包以使ASP.NET核心组件正常工作。(我创建了两个版本的新web项目-一个针对.NET核心,另一个针对.NET 4.6,目的是了解其中的不同之处,从而了解我必须做出哪些改变)。

完成所有这些之后,我的项目编译并正确运行。这是一个巨大的解脱。

票数 0
EN

Stack Overflow用户

发布于 2019-01-10 13:10:58

另一个可能的解决方案(尽管可能不是您想要的)是将您的项目划分为较小的项目,然后业务和数据逻辑可以转换为服务(SOA - architecture)。

这似乎是“漫长的道路”,但它确实有它的最终优势,因为分离的逻辑服务和主要项目在技术和大多数其他需求方面是相互独立的。

再次,我意识到这可能不是你想要的,但我觉得这是一个有效的选择,在这里分享可能是有用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54116209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档