【问题标题】:Use .Net Framework class in .Net Core [closed]在.Net Core中使用.Net Framework类[关闭]
【发布时间】:2020-03-06 14:41:55
【问题描述】:

大家好!

我正在开发一个 .Net Core 类库项目,但我必须使用 .Net Framework DLL 中的一个名为 System.Security 的类,该类在 Core 中不可用。 (该类是 System.Security.Cryptography.Xml 命名空间中的 SignedXml.cs。 - 是的,我知道 Core 中也存在命名空间和类,但 SignedXml 不一样,缺少一些私有字段(m_refProcessedm_refLevelCache 等)。)

我必须使用旧类。

是否有任何解决方案可以在我的核心项目中导入System.Security 并扩展SignedXml 类?还是只导入 SignedXml 类?

谢谢!

【问题讨论】:

  • 你为什么要关心一些私有字段是否丢失?这只是一个实施问题。
  • I have to use the old class. 为什么?这是最重要的信息——没有它,问题就无法回答。您不需要 需要任何这些私有字段,甚至不需要序列化。序列化已签名的 XML 意味着保存 已签名的 XML 字符串,而不是用于生成它的类。
  • 您是否使用过 BinaryFormatter?即使在 .NET Old 中,这也是一个禁忌
  • 即使使用 .NET Old,any 补丁也可能会更改实现(这就是它们存在的原因),因此您的代码可能会被通过 Windows Update 提供的任何 .NET Old 补丁破坏。

标签: c# .net-core dllimport signedxml system.security


【解决方案1】:

如果您查看文档,Microsoft 并未描述 .NET Core 和 .NET Framework 版本之间的任何差异。

https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.xml.signedxml?view=netcore-3.1

你不应该操纵私有字段,这对你的代码的可维护性是很危险的。

我看到您在谈论“旧课程”,当您来到安全课程时,最好保持最新版本。也许差异来自代码中更正的缺陷。那么最好保留最新的。

无论如何,.NET Core 和 .NET 框架并不是为了兼容而设计的。理论上,他们应该有可能发布 .NET framework 5.0。

【讨论】:

  • 在 .NET Core 3.1 中重新引入了 很多 个缺失的接口。兼容性从不考虑 private 字段,并且不应期望这些类与旧类具有相同的实现。 .NET Core 5.0 不会改变这一点。
  • 我的意思是,一旦我们有了 .net 5.0,.net framework 和 .net core 之间的区别将不再是问题,因为只会维护 .net 5.0。 devblogs.microsoft.com/dotnet/introducing-net-5 当然,我同意内部实现可能会改变,但是类的公共契约不会在版本之间改变。这就是不应该使用私有字段的原因。
【解决方案2】:

我试图复制您想要做的事情,但是显然失败了,您可以做的是向项目添加一个新的 .net 框架解决方案,并在需要时调用它,这样您就可以使用你需要的库。

【讨论】:

  • 简而言之“不要使用 .NET Core”。不过,这不是一个很好的答案,尤其是因为我们不知道 真正的 问题是什么。私有字段无关紧要
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 2021-03-02
  • 2019-12-03
  • 2021-04-30
  • 1970-01-01
相关资源
最近更新 更多