我在一个解决方案文件中有20个项目。其中1个项目是标准库项目,其他19个项目都引用它。
大约一年前,我们添加了一个新的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中添加太多噪音,并且过于依赖Package A。
为什么添加一个依赖于Package A
的NuGet包后,主要依赖项在安装Package A Helper
之前已经满足了,为什么还需要这个新的绑定重定向?
为什么它显示0.0.0.0-5.0.0.0,而我在nuget包和package.config中指定了3.0.0.0-5.0.0.0?
更新:
当我使用对Package A
版本5.0.0.0的引用构建Package A Helper
时,所有的绑定重定向都不会自动填充到每个app.config中,而是会生成警告。我最初使用3.0.0.0构建它,因为我认为使用最低的依赖项进行构建是最好的。问题仍然存在,因为Visual Studio仍然发出警告,并建议创建绑定重定向。
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,取消在我的packages.config中的allowedVersions="[3,6)"
,这样就可以允许使用5.0.0.0并且不需要任何警告或bindingRedirects。我不想降低我的NuGet包的有用性和向后兼容性,但同时也想要避免出现任何问题。
更新2:将引用属性中的Copy Local
设置为False
实际上解决了我的问题,但我不知道为什么。