C# NuGet软件包(.NET标准2.x)破坏ASP.NET MVC5应用程序(.NET完整框架)

C# NuGet软件包(.NET标准2.x)破坏ASP.NET MVC5应用程序(.NET完整框架),c#,asp.net-mvc,nuget,.net-standard,C#,Asp.net Mvc,Nuget,.net Standard,(更新-见下文) 我有一个ASP.NET MVC5应用程序(多个程序集),所有这些程序集都处理.NET完整框架4.7.1 我最近添加了一个(私有)NuGet包,我们使用.NET标准2构建了这个包。发件人: 除非您有理由选择其他版本,.NET标准是NuGet软件包的首选目标,因为它提供了与最广泛的消费项目的兼容性 从那以后,情况就不一样了……我在下面提到了一系列错误,但我怀疑它们都是同一问题的症状(在最后讨论) 请注意:我使用的是Visual Studio 15.7.1,所有NuGet软件包都使用

(更新-见下文)

我有一个ASP.NET MVC5应用程序(多个程序集),所有这些程序集都处理.NET完整框架4.7.1

我最近添加了一个(私有)NuGet包,我们使用.NET标准2构建了这个包。发件人:

除非您有理由选择其他版本,.NET标准是NuGet软件包的首选目标,因为它提供了与最广泛的消费项目的兼容性

从那以后,情况就不一样了……我在下面提到了一系列错误,但我怀疑它们都是同一问题的症状(在最后讨论)

请注意:我使用的是Visual Studio 15.7.1,所有NuGet软件包都使用package.config管理格式,而不是PackageReference

第一个问题

找不到方法: 'System.Collections.ObjectModel.Collection'1 System.Web.Http.HttpConfiguration.get_MessageHandlers()'

我的猜测是,System.Web.Http的.NET标准版本没有这种方法,我的应用程序选择了解决这个问题,而不是4.7.1框架

我通过在web.config文件中添加以下内容部分修复了此问题:

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>

他提出了以下建议:

我看到的另一个建议(对我毫无帮助)是禁用 该项目无法创建序列化程序集。遵循这些 实现这一点的步骤(可能有帮助,也可能没有帮助,但值得一试):

  • 在解决方案资源管理器中,右键单击出现错误的项目并转到属性
  • 在Build选项卡中,滚动到最底部并更改Generate 将序列化程序集设置为关闭
  • 我试过这个,是的,它对我有效。但是,这两个项目正在序列化要发送到这些不同web源的对象,所以我最不想做的就是在我的应用程序中取消序列化优化

    对可能出现的问题有什么建议,或者我应该如何最好地继续

    更新日期:2018年5月14日 我发现了一篇关于NuGet软件包的优秀文章,其中指出:

    正如奥伦明智地说的那样:

    “使用.NET标准要求您使用PackageReference来消除 “大量包裹”的痛苦以及正确处理传递性 依赖项。而您可能可以使用.NET标准,而无需 包装参考,我不推荐。”

    然而,有一个陷阱。。。。在Visual Studio中,现在有一种简单的方法可以将程序集从较旧的package.config迁移到PackageReference,如本文所述,但该文章明确指出:

    注意,迁移者目前不支持C++、JavaScript和ASP.NET(.NETFramework)项目。 尝试此操作时,迁移工具及时通知我,对于NuGet软件包Microsoft.AspNet.Mvc和Microsoft.AspNet.webpage:

    迁移后安装包时,“内容”资产不可用

    更新2018年5月23日我发现其他几个人也遇到类似问题。来自GitHub:。他们的“解决方案”是再次禁用序列化(见上文),这会破坏我的应用程序的性能

    结论?


    那么,我是否正确地得出结论,要在.NET FullFramework应用程序中使用.NET标准2.x NuGet包,我需要使用PackageReference而不是package.config,而这在AspNet.MVC应用程序中目前是不可能的?换句话说,它目前不可能。

    我在.Net Framework 4.8应用程序和
    系统.Buffers
    程序集格式不正确时遇到了这个问题

    问题已经解决了。使用
    Directory.Build.targets
    文件,我可以毫无问题地构建一个项目

    
    
    我们也经历了类似的过程。我们手动编辑web项目的.csproj文件,方法是删除-element,然后运行迁移工具,然后在.csproj文件中恢复该元素。瞧!然而,团队中的大多数开发人员都经历过,在IISExpress中使用F5运行项目的速度要慢得多。如果您对此有更进一步的了解,并经历过同样的经历,我将非常感兴趣。您必须放弃并放弃.NET标准解决方案,恢复到.NET完整框架。令人沮丧的。。。。Microsoft对此有一个问题:请参阅[链接]()