引用的 System.Net.Http 程序集未复制到 dotnet msbuild 上的输出 bin\Release 目录

2024-01-01

我有以下项目配置:

1) Project1:.NET Framework 4.6.1 项目

2) Project2:.NET 标准项目<TargetFrameworks>netstandard2.0;net461</TargetFrameworks>

3) Project3:.NET 标准项目<TargetFrameworks>netstandard2.0;net461</TargetFrameworks>

So, Project3参考System.Net.Http. Project2参考Project3 and Project1参考Project2.

当我在 Visual Studio 2017 中构建任何配置时Project1\bin\%Configuration%\目录包含System.Net.Http.dll以及其他System组件。

我还可以看到以下绑定重定向是在中生成的Project1.exe.conf: <dependentAssembly> <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.1.1.2" /> </dependentAssembly>

当我使用dotnet msbuild构建(导航到解决方案文件夹并使用以下命令:dotnet msbuild /p:Configuration=Release)一切都成功构建,但是System.Net.Http同一目录中缺少 dll。

当我在 Visual Studio 之外运行应用程序时,我在运行时收到以下错误:Could not load file or assembly System.Net.Http, Version=4.1.1.2.

为什么?我该如何使用dotnet msbuild确保复制所有引用的程序集的工具?

更新:我的dotnet版本是2.1.2.

Thanks.


作为 nuget 引用添加的系统包会发生一些奇怪的情况。不需要将系统库添加为包,它们应该存在于主机上,但在少数情况下,这是必要的,我认为与版本冲突相关的 System.Runtime.Caching 也存在类似的问题。

我认为问题在于,由于该库位于 GAC 中,构建系统会忽略将其复制到输出,假设它存在且可用,无需打包。

正如您可能想象的那样,Visual Studio 按照自己的规则运行,这确实很烦人,因为很难看出问题发生的原因。

更烦人的是,我不太记得我必须做什么来解决它。我可能已经从 GAC 中卸载了该库,将引用属性 Copy Local 设置为 true(如果尚未设置),或者可能直接从磁盘上的 SDK 位置引用了 dll(使用 copy local = true),并且不使用 nuget 包全部。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

引用的 System.Net.Http 程序集未复制到 dotnet msbuild 上的输出 bin\Release 目录 的相关文章

随机推荐