关于从.NET Framework项目引用.NET Standard类库的问题,存在许多类似的问题,其中netstandard库中的NuGet包依赖项没有流到netframework应用程序,并且发生Could not load file or assembly
错误在运行时:
存在许多来源,如下面的来源,表明可以通过在netframework项目上添加缺少的依赖项来解决此问题:
但是,这是不利的,因为我不想让项目必须携带它们不需要的直接引用。依赖关系应该自然流动,以便将来添加/删除的依赖关系就可以正常工作。
其他来源表明,可以通过将<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
和<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
添加到netframework项目文件中来解决该问题:
我已经使用相同的Visual Studio解决方案中的项目测试了上述两个修复程序,并且都取得了成功,但是我更喜欢第二种方法,因为它是一个“设置好了就忘了”的解决方案。
我发现的问题是,当我尝试从另一个VS解决方案中的netframework项目引用netstandard类库时,我使用了<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
和<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
方法在后一个项目中。在我的特定情况下,我有一个.NET Framework可执行项目,该项目在同一解决方案中引用了.NET Framework类库,而该类库在另一解决方案中引用了.NET Standard类库。
我已经创建了an MCVE on GitHub that demonstrates this behavior。我正在使用VS 2017 v15.9.4。
除了总是直接在netframework项目上直接添加软件包之外,还有什么方法可以使它工作?
(注意:这听起来像是这里的问题,但我没有使用“单击一次”:https://stackoverflow.com/a/47839628/2704659)
答案 0 :(得分:1)
如果在app.config中添加类似的内容(适应版本和上下文路径),则无需更改任何代码即可运行它
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Win32.Registry" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /><codeBase version="4.1.1.0"
href="C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.win32.registry\4.5.0\lib\net461\Microsoft.Win32.Registry.dll"/>
</dependentAssembly>
</assemblyBinding>
</runtime>