You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core与.NET Framework XmlDocument跨平台兼容问题求助

解决.NET 4.5.2应用引用.NET Core 2.0类库时XmlDocument类型不匹配的问题

这个问题我之前也碰到过,本质是**.NET Framework和.NET Core中XmlDocument的程序集归属不一致**导致的类型兼容问题:

  • 在.NET 4.5.2里,XmlDocument定义在System.Xml.dll中
  • 在.NET Core 2.0里,它被迁移到了System.Xml.ReaderWriter.dll中

CLR会把来自不同程序集的同名类型视为完全独立的类型,所以当你的.NET 4.5.2应用试图接收Core类库返回的XmlDocument实例时,就会出现找不到类型定义的错误。

下面是几个不需要依赖NuGet的可行解决方案:

方案1:改用跨框架兼容的XML类型

最简单的方式是替换成XDocument(LINQ to XML的核心类型),它在.NET Framework 4.5.2和.NET Core 2.0中都有一致的程序集归属,天然兼容。你可以在Core类库中完成XmlDocument到XDocument的转换,应用端按需转回即可:

修改后的Core 2.0类库代码

using System.Xml;
using System.Xml.Linq;

namespace TestCoreXmlDoc
{
    public class Class1
    {
        public static XDocument DoAThing()
        {
            XmlDocument libDoc = new XmlDocument();
            libDoc.LoadXml("<root></root>");
            // 将XmlDocument转换为XDocument
            return XDocument.Load(libDoc.CreateNavigator().ReadSubtree());
        }
    }
}

修改后的.NET 4.5.2应用代码

using System.Xml;
using System.Xml.Linq;

namespace ConsoleAppTextXmlDoc
{
    class Program
    {
        static void Main(string[] args)
        {
            XDocument xDoc = TestCoreXmlDoc.Class1.DoAThing();
            
            // 如果需要继续使用XmlDocument,再转换回去
            XmlDocument appDoc = new XmlDocument();
            using (var reader = xDoc.CreateReader())
            {
                appDoc.Load(reader);
            }
            
            // 后续正常操作appDoc即可
        }
    }
}

方案2:给Core类库做多目标编译

如果你不想修改类库的业务逻辑,可以让类库同时针对.NET 4.5.2和.NET Core 2.0编译,生成两个版本的dll,应用直接引用.NET 4.5.2版本即可:

  1. 打开Core类库的.csproj文件
  2. 将原来的单目标配置<TargetFramework>netcoreapp2.0</TargetFramework>替换为多目标配置:
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>net452;netcoreapp2.0</TargetFrameworks>
  </PropertyGroup>
</Project>
  1. 重新编译类库,你会在bin/Debug目录下看到net452和netcoreapp2.0两个子文件夹,各自对应不同框架的dll
  2. 让你的.NET 4.5.2应用引用net452文件夹下的dll,此时返回的XmlDocument就是.NET Framework 4.5.2原生类型,完全兼容

不推荐的方案:手动引用Core的System.Xml.ReaderWriter.dll

虽然你可以尝试在.NET 4.5.2应用中手动添加对.NET Core 2.0版本System.Xml.ReaderWriter.dll的引用,但这种做法很容易引发兼容性问题(比如两个框架下XML处理行为的差异),除非万不得已,不建议这么做。

内容的提问来源于stack exchange,提问作者Broots Waymb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:27:17