【发布时间】:2016-07-19 03:24:17
【问题描述】:
我在一个解决方案文件中有 20 个项目。其中 1 个项目是所有项目都引用的标准库项目。
大约一年前,我们添加了一个新的 nuget 包,我们将其命名为 Package A 版本 5.0.0.0。它有一堆文件,当我们编译时它会到处传输,但我们最终处理了它。我们将包添加到我们的标准库项目中(其他 19 个参考)。
我是 Nuget 的新手(所以也许我做错了什么)所以我制作了一个新包作为 Package A 的助手。我已经设置了所有内容,以便帮助程序依赖于 Package A 版本 3.0.0.0 到 5.0.0.0(因此它适用于版本低于我们的其他人)。让我们将这个新包称为Package A helper
我安装了Package A helper,一切正常。我去做一个拉取请求,我们解决方案中的每个 app.config 现在都有
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Package.A" publicKeyToken="8FC3CCAD86" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
没有它它会编译得很好,但 Visual Studio 会抱怨并给出警告。是什么赋予了?我的经理现在不让我合并我的代码,因为它在 app.config 中添加了太多的噪音并且过于依赖包 A。
为什么在我们安装 Package A Helper 之前已经满足主要依赖关系的情况下添加依赖于 Package A 的 nuget 包然后必须拥有这个新的 bindingRedirect?
当我在 nuget 包和 package.config 中指定 3.0.0.0-5.0.0.0 时为什么会显示 0.0.0.0-5.0.0.0
更新:
当我构建 Package A helper 并引用 Package A 版本 5.0.0.0 时,所有 bindingRedirects 不会自动填充到每个 app.config 中,而是会生成警告。我最初使用 3.0.0.0 构建它,因为我认为最好以最低依赖性构建它。问题仍然存在,因为 Visual Studio 仍在警告并建议创建 bindingRedirects。
No way to resolve conflict between "Package A, Version=5.0.0.0, Culture=neutral, PublicKeyToken=83hfhsd33" and "Package A, Version=3.0.0.0, Culture=neutral, PublicKeyToken=83hfhsd33". Choosing "Package A, Version=5.0.0.0, Culture=neutral, PublicKeyToken=83hfhsd33" arbitrarily.
Consider app.config remapping of assembly "Package A, Culture=neutral, PublicKeyToken=83hfhsd33" from Version "3.0.0.0" [] to Version "5.0.0.0" [path to Package A dll] to solve conflict and get rid of warning.
解决方案是否只是将我的 nuget 包依赖项从 3.0.0.0 更改为 5.0.0.0 并允许 5.0.0.0 并在我的 packages.config 中摆脱我的allowedVersions="[3,6)"?我不想降低我的 nuget 包的有用性和向后兼容性,但同时我不希望我的主要解决方案需要任何警告或 bindingRedirects。
更新 2:所以将引用属性中的 Copy Local 设置为 False 实际上解决了我的问题,但我不明白为什么。
【问题讨论】:
-
您能否添加有关您看到的警告的详细信息?
-
@SimonMᶜKenzie 他们被添加了。
标签: c# visual-studio nuget assemblybinding assembly-binding-redirect