从完整的.NET Framework引用.NET Standard项目

tra*_*ter 7 .net c# .net-standard

我有一个.net标准1.4项目,我通过.net 4.6.1项目的项目引用引用它.

当我运行时,我收到以下消息:

System.IO.FileNotFoundException:'无法加载文件或程序集'System.Threading.Thread,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.该系统找不到指定的文件.'

我可以通过引用System.Threading.Thread版本4.3.0的nuget包来解决这个问题.但由于某种原因,这实际上是版本4.0.1.0,这意味着我需要一个绑定重定向.

添加绑定重定向让我超越了这个问题并进入下一个问题.这是:

System.IO.FileNotFoundException:'无法加载文件或程序集'System.IO.FileSystem,Version = 4.0.1.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.该系统找不到指定的文件.'

我是否需要为.net标准软件包的所有依赖项手动添加软件包(以及可能的绑定重定向)?这似乎不是出售的东西.如果我必须提供所需的所有程序集,即使这些已经包含在我所针对的.net框架中的GAC中,那么.net标准是什么意思.我无法看到它是如何出售的.net标准1.4与.net 4.6.1兼容,如果兼容你的意思是只要你不使用.net 4.6.1 BCL库.

以下问题似乎是相关的https://github.com/NuGet/Home/issues/4488 但是我已经尝试了那里的建议工作.这是添加:

<RestoreProjectStyle>PackageReference</RestoreProjectStyle> 
Run Code Online (Sandbox Code Playgroud)

到.net 4.6.1项目.我尝试过这个并没有什么区别.

更新 将以下内容添加到我的.net 4.6.1项目后:

 <PackageReference Include="Legacy2CPSWorkaround" Version="1.0.0">
     <PrivateAssets>All</PrivateAssets>
 </PackageReference>
Run Code Online (Sandbox Code Playgroud)

我现在在输出目录中有System.IO.FileSystem,但它的版本错误.这是4.0.2.0.我可以再次使用绑定重定向来解决这个问题,但我不应该这样做.

我不知道这个4.0.2.0 dll来自哪里,因为它不在我的包文件夹中所以它不能来自nuget?