由于我需要导入一个库的目标.NET标准2,因此我从这个MS视频中理解的那样,将库升级到.NET 4.7.1,该视频应避免此问题:https:https://www.youtube.com/watch?v = u67eu_igems
但是,添加.NET标准现在会导致数十个System.xxx引用,而不是对.NET标准的单个引用(根据视频(。
更糟糕的是,已经添加了几个参考文献,但是基础文件似乎缺少生成警告,例如
Warning The referenced component 'Microsoft.Win32.Primitives' could not be found.
Warning The referenced component 'System.IO.FileSystem' could not be found.
Warning The referenced component 'System.Security.Cryptography.X509Certificates' could not be found.
Warning The referenced component 'System.Globalization.Calendars' could not be found.
我什至在视频中重新创建了演示项目,并获得了相同的结果 - 没有单一引用.NET标准,大量DLL参考。
Warning The referenced component 'System.Security.Cryptography.Encoding' could not be found.
Warning The referenced component 'System.Security.Cryptography.Primitives' could not be found.
Warning The referenced component 'System.IO.Compression.ZipFile' could not be found.
Warning The referenced component 'System.Console' could not be found.
我尝试了Nuget update-package -reinstall
,并降级并升级为.NET标准2.0和2.0.1
我正在为自己的问题创建的答案是:
您的.NET框架项目是否使用packages.config
?如果确实如此,则参考.NET标准库。如果您介绍.NET标准,则VS 2017中的包装/参考/绑定重新定位将非常损坏。试图解决它会导致更多问题(我浪费了几天的尝试(。期望尽管存在,但会有不加载的组件,很多警告和一个破损的应用程序。
如果您使用System.Net.Http
,请计划在Google和Github问题上花几天的时间来使其工作。
如果您可以升级到PackageReence,这应该解决问题。但是,如果您的项目包含导入内容的软件包,例如JQuery
或Bootstrap
,请注意,这些软件包不再起作用,而您将花费更多的时间尝试修复这些参考,并迁移到npm
或bower
,以及修复Tystemcript编译。不,谢谢。
理想情况下,您将使用2017 CSPROJ格式,但与Winforms,Asp.net或Windows Services不兼容 - 如果您有旧版项目,那么很难。
由于实现.NET Standard 2.0支持.NET Framework 4.7.1上的一些问题,因此需要将其他文件部署到您的bin文件夹。
此问题在这里描述为已知问题。
当您在.NET Framework 4.7.2。
上,复制到输出文件夹的文件数将为0还请确保您使用的是最新的Visual Studio(至少版本15.6.3(,因为在此处提供此方案所需的一些更改。
我遇到了绝对同样的问题。我试图在空控制台.NET Framework 4.7.1项目上安装Microsoft.azure.servicebus软件包,并获得了所有这些损坏的参考。
据我了解,根本原因是https://github.com/dotnet/standard/issues/567和此处描述的可能的解决方法https://github.com/dotnet/corefx/corefx/issues/29622 #issuecomment-396753264
所以我刚刚替换了
之类的破碎引用<Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..packagesSystem.Security.Cryptography.Primitives.4.3.0libnet46System.Security.Cryptography.Primitives.dll</HintPath>
</Reference>
在我的.csproj文件中
<Reference Include="System.Security.Cryptography.Primitives"/>
之所以起作用,是因为此组件是.NET框架4.7.1的一部分。我也从.config文件中删除了所有有关损坏的引用的重定向。
另外,我发现了一个有趣的事实。有一个参考
<Reference Include="System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..packagesSystem.Runtime.Serialization.Primitives.4.3.0libnet46System.Runtime.Serialization.Primitives.dll</HintPath>
</Reference>
并且没有破坏,因为此组件存在于.../msbuild microsoft Microsoft.net.build.extensions net471 lib文件夹中。所以我想知道,这可能是MS构建的问题吗?
fwiw,我使用的是Visual Studio 15.7.5,并正在手动修复我所有的绑定重定向(以删除它们(。但是,我注意到我的同事拥有Visual Studio 15.9.4,在项目属性屏幕上,现在有一个"自动生成绑定重定向"。我以前手动将其设置在CSPROJ中。但是,更新到vs 15.9.4并重建项目,这些项目摆脱了我的所有约束力重定向。