none
自动生成的 MyClassLibrary.XmlSerializers.dll 的目标框架的问题 RRS feed

  • 问题

  • 最近将一个项目从原来的电脑变迁到新的电脑后,发现无法发布的问题。我做了一个简单的 demo 还原了犯罪现场:

    假设我们1个解决方案下面有以下2个项:

    项A,是一个类库类型的。目标框架是 .netframework3.5

    项B,是一个web。目标框架也是 .netframework3.5

    并且项B引用了项A。

    上述这种环境下是不会出现问题的。但是:

    我在项A中增加了 webservice引用(注意不是WCF引用)。

    这时候,发布项B的时候,系统会自动为项A生成序列化程序集。

    但是系统会提示说,这个自动生成的序列化程序集中引用的 System.Xml 是面向 .netframework 4.0 的

    以下是系统提示的原始的错误描述:(其中 ClassLibrary1 就是上面举例中的项A)

    (0,0): 警告 : 以下程序集包含对高于目标版本的 .NET Framework 版本的依赖项,在运行时可能无法正确加载并会导致错误: ClassLibrary1.XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null。依赖项为: System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089; mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089。您应确保依赖程序集对应于目标框架,或确保您针对的目标框架为依赖程序集的目标框架。

    除了升级项B为 .netframework4.0 以外,有其它的方案吗?

    上述项目原始在系统 windows 2008r2 中,使用 visual studio 2017 是可以正常发布的。

    但是在新的电脑系统 win10,使用的还是 visual studio 2017 就开始出现上述的错误

    2021年3月24日 8:33

全部回复

  • Hi ktcat_6,

    请问你添加的webservice引用是哪个版本的呢?是通过鼠标右击“引用” > “添加引用” > “框架” > 中找到的System.Web.Services么?根据错误信息来看问题就是依赖的框架版本需要高版本,我有两个建议,第一个建议就是你提及的升级或使用高版本的框架,第二个是针对报错的地方引用相应低版本的引用。

    Windows Server 2008 R2已经停止support了,Visual Studio 2017版本也有所升级,在你以前的环境中可能对框架等版本的兼容性检测的不是很到位,新系统或者VS,将规则定得更细了,这也是为了避免向后开发过程中出现不必要的依赖项错误。

    诚挚的问候,

    Tianyu


    如果您对Visual Studio Microsoft Azure相关产品感兴趣,请点击此链接,或扫描以下二维码注册获取相关信息。

    2021年3月29日 12:14
  • 我重新安装了一个VMWare的虚拟机,安装原来的操作系统 Windows Server 2008 R2。进行了如下两次测试:

    第一次是先安装 Visual Studio 2017,再安装 Visual Studio 2010。

    第一次是先安装 Visual Studio 2010,再安装 Visual Studio 2017。

    实际情况是上述两种情况下使用Visual Studio 2017生成的 ClassLibrary1.XmlSerializers 都是目标框架 .netframework 4.0

    使用Visual Studio 2010都是不会生成 ClassLibrary1.XmlSerializers 。

    基本认为从来没有生成过 目标框架 .netframework 2.0 或 3.5 的。

    2021年3月31日 5:44
  • 被引用的 webservice 也是 .netframework 3.5。
    2021年3月31日 5:46
  • 最后采用将类库属性 -> 生成序列化程序集 开关设定为关闭。

    因为生成的ClassLibrary1.XmlSerializers只是在发布网站的时候才会出来,其它时候不会出来。

    并且线上的环境和测试的环境中都没有 ClassLibrary1.XmlSerializers 这个类库。

    所以评估为不使用也不会带来问题。

    2021年3月31日 5:52
  • 我没有选择将项目版本升级到高版本,是因为其中有部分子项目不兼容,并且短时间内无法修改为兼容高版本的。

    感谢您的答复。

    2021年3月31日 6:26