将.NET标准库添加到4.7.1 lib会增加大量引用,有些会损坏

时间:2018-03-30 07:46:24

标签: c# .net .net-standard-2.0

由于我需要导入一个面向.NET Standard 2的库,我已将我的库升级到.NET 4.7.1,正如我从MS视频中所理解的那样应避免此问题:https://www.youtube.com/watch?v=u67Eu_IgEMs

但是,添加.NET标准现在会导致数十个System.xxx引用,而不是对.NET Standard的单一引用(根据视频)。

更糟糕的是,已添加了几个参考文献,但基础文件似乎缺少生成警告,例如 update-package -reinstall 我甚至在视频中重新创建了演示项目并获得了相同的结果 - 没有单一的.NET Standard参考,而是大量的DLL引用。

我已尝试过NUGET import numpy as np from keras.models import Sequential from keras.layers import Embedding model = Sequential() model.add(Embedding(dictionary_size_here, sizeof_embedding_vector, input_length= input_length_here)) input_array = array([[integer]]) #each integer is fed one by one using a loop model.compile('rmsprop', 'mse') output_array = model.predict(input_array) 并降级并升级到.NET标准2.0和2.0.1

4 个答案:

答案 0 :(得分:6)

由于在.NET Framework 4.7.1上实现.NET Standard 2.0支持的一些问题,需要将其他文件部署到bin文件夹。

此问题被描述为已知问题here

在.NET Framework 4.7.2上定位或运行时,复制到输出文件夹的文件数将为0。

还请确保您使用的是最新的Visual Studio(至少版本15.6.3),因为可以使用此方案所需的一些更改。

答案 1 :(得分:6)

我为自己的问题创建的答案是:

您的.NET Framework项目是否使用packages.config?如果是,不要引用.NET标准库。如果您引入.NET Standard,VS 2017中的package / reference / binding-redirect会严重破坏。试图修复它会导致更多问题(我已经浪费了几天的时间)。期待装配尽管存在但不会加载,大量警告和应用程序损坏。

如果您使用System.Net.Http,请计划花几天时间在Google和GitHub上试图让它发挥作用。

如果您可以升级到packageReferences,这应该可以解决问题。但是,如果您的项目包含导入内容的软件包,例如JQueryBootstrap,请注意这些内容不再有效,而您将花费更多时间来修复这些引用并迁移到{{1 }}或npm,以及修复TypeScript编译。不,谢谢。

理想情况下,您使用的是2017 csproj格式,但它与WinForms,ASP.NET或Windows服务不兼容 - 如果您有遗留项目,那就太难了。

答案 2 :(得分:1)

我有一个完全相同的问题。我试图在空的控制台.NET Framework 4.7.1项目上安装Microsoft.Azure.ServiceBus软件包,并得到所有这些损坏的引用。

据我了解,根本原因是https://github.com/dotnet/standard/issues/567,此处介绍的可能的解决方法https://github.com/dotnet/corefx/issues/29622#issuecomment-396753264

所以我只替换了

之类的损坏的引用
<Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
  <HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
</Reference>

在我的.csproj文件中

<Reference Include="System.Security.Cryptography.Primitives"/>

之所以起作用,是因为该程序集是.NET Framework 4.7.1的一部分。另外,我从.config文件中删除了有关损坏引用的所有绑定重定向。

此外,我发现了一个有趣的事实。有一个参考

<Reference Include="System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
  <HintPath>..\packages\System.Runtime.Serialization.Primitives.4.3.0\lib\net46\System.Runtime.Serialization.Primitives.dll</HintPath>
</Reference>

并且它没有损坏,因为此程序集存在于... / MSBuild \ Microsoft \ Microsoft.NET.Build.Extensions \ net471 \ lib文件夹中。所以我想知道,这可能是MS构建的问题吗?

答案 3 :(得分:1)

FWIW,我使用的是Visual Studio 15.7.5,并手动修复了所有绑定重定向(以删除它们)。但是,我注意到我的同事有Visual Studio 15.9.4,并且在项目属性屏幕上现在有一个“自动生成绑定重定向”。我以前曾在csproj中手动设置。但是,更新到VS 15.9.4并重新构建项目对我来说摆脱了所有绑定重定向。