我有一个.NET库(Products.SDK),需要它与.NET Framework4.5和.NET标准1.4兼容。
(稍后我还将在这个库中创建一个NuGet包)
我的问题是:
如何在这个库中编写代码?考虑到这两个框架都使用不同的库/依赖关系?
- Products.SDK.NetFramework
- Products.SDK.NetStandard
#if预处理器指令在库中定义不同的类?
命名空间Products.SDK {#如果NETSTANDARD1_3公共类ProductsApi {公共字符串ApiUrl { get;set;}}#set公共类ProductsApi {公共字符串ApiUrl { get;set;}} #endif }如果选项1是正确的,如何确保使用相同的名称/名称空间(Products.SDK)编译两个项目
我确实认为选择2更好,但我不确定这是正确的方式。
PS:
我在.csproj文件中指定了目标框架
<PropertyGroup>
<TargetFrameworks>netstandard1.4;net45</TargetFrameworks>
</PropertyGroup>发布于 2017-08-22 08:03:00
您使用选项二,但只在您真正需要它的地方使用#if。您给出的示例在两个分支中都有相同的代码。
我的野田时间项目正是采用这种方法,因此我们很少遇到问题。
在可能的情况下,使您的代码的公共API在这两个平台上相同,只有实现细节不同。特别是,如果您确实需要在一个平台上公开API的某些部分,我希望它只适用于net45。如果你的结局是这样的:
然后,如果您有多个其他项目(取决于此),那么您将在以后遇到重大问题。假设项目X以netstandard1.4为目标并使用B,然后项目Y以net45为目标并使用A-那么运行在.NET 4.7上并依赖于X和Y的应用程序Z将出现问题。
完全避免使用条件代码是值得的。在许多情况下,您可能会发现,虽然有一段稍微简单的代码可以只在net45上工作,但是仍然有一些代码可以同时在netstandard和net45上工作。(反射浮现在脑海中,您将希望在netstandard上使用TypeInfo,在那些只需在net45中使用Type的地方。但是,您可以同时使用TypeInfo。)
https://stackoverflow.com/questions/45812011
复制相似问题