首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建针对.Net Framework4.5和.Net标准的库

创建针对.Net Framework4.5和.Net标准的库
EN

Stack Overflow用户
提问于 2017-08-22 07:57:51
回答 1查看 549关注 0票数 4

我有一个.NET库(Products.SDK),需要它与.NET Framework4.5和.NET标准1.4兼容。

(稍后我还将在这个库中创建一个NuGet包)

我的问题是:

如何在这个库中编写代码?考虑到这两个框架都使用不同的库/依赖关系?

  1. 在同一解决方案下,我会有两个不同的项目吗? Products.SDK.sln
代码语言:javascript
复制
- Products.SDK.NetFramework
- Products.SDK.NetStandard

  1. 我是否只有一个项目,并且使用#if预处理器指令在库中定义不同的类? 命名空间Products.SDK {#如果NETSTANDARD1_3公共类ProductsApi {公共字符串ApiUrl { get;set;}}#set公共类ProductsApi {公共字符串ApiUrl { get;set;}} #endif }

如果选项1是正确的,如何确保使用相同的名称/名称空间(Products.SDK)编译两个项目

我确实认为选择2更好,但我不确定这是正确的方式。

PS:

我在.csproj文件中指定了目标框架

代码语言:javascript
复制
  <PropertyGroup>
    <TargetFrameworks>netstandard1.4;net45</TargetFrameworks>
  </PropertyGroup>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-22 08:03:00

您使用选项二,但只在您真正需要它的地方使用#if。您给出的示例在两个分支中都有相同的代码。

我的野田时间项目正是采用这种方法,因此我们很少遇到问题。

在可能的情况下,使您的代码的公共API在这两个平台上相同,只有实现细节不同。特别是,如果您确实需要在一个平台上公开API的某些部分,我希望它只适用于net45。如果你的结局是这样的:

  • 公共类A-仅在net45上使用
  • 公共B级--仅限于网络标准
  • 公共C级-两者兼备

然后,如果您有多个其他项目(取决于此),那么您将在以后遇到重大问题。假设项目X以netstandard1.4为目标并使用B,然后项目Y以net45为目标并使用A-那么运行在.NET 4.7上并依赖于X和Y的应用程序Z将出现问题。

完全避免使用条件代码是值得的。在许多情况下,您可能会发现,虽然有一段稍微简单的代码可以只在net45上工作,但是仍然有一些代码可以同时在netstandard和net45上工作。(反射浮现在脑海中,您将希望在netstandard上使用TypeInfo,在那些只需在net45中使用Type的地方。但是,您可以同时使用TypeInfo。)

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

https://stackoverflow.com/questions/45812011

复制
相关文章

相似问题

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