我快要疯了,我希望这是我忽略的事情。
我正在经历间歇性的FileLoadExceptions
,即使代码在部署之间发生变化,它们也会在部署后显示不更改任何程序集引用.
看看最近的例子,我看到了FileLoadException
due to System.IO.Compression
, 版本4.2.0.0
没有被发现。
在所有情况下,我们都引用System.IO.Compression
nuget包,版本4.3.0
.
查看我们解决方案中的两个项目,我注意到一些非常奇怪的事情。
ProjectA
参考ProjectB
.
ProjectA
其内有packages.config
归档以下参考:
<package id="System.IO.Compression" version="4.3.0" targetFramework="net462" />
ProjectB
其内有package.config
归档以下参考:
<package id="System.IO.Compression" version="4.3.0" targetFramework="net462" />
当我查看*.csproj
文件,我看到这个:
ProjectA
:
<Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
</Reference>`
ProjectB
:
<Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
</Reference>`
太好了,在这两种情况下我们都指向磁盘上的相同程序集。
然而,当我在解决方案资源管理器中查看引用的文件时,我看到了以下内容:
ProjectA
:
![Reference to some other System.IO.Compression assembly](https://i.stack.imgur.com/YEWcN.png)
上面引用的是一个文件C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.IO.Compression.dll
,更重要的是有一个版本4.2.0.0
,而不是 nuget 包文件夹中的版本。
ProjectB
:
![Reference to the correct System.IO.Compression assembly](https://i.stack.imgur.com/TsilE.png)
上面正确地指向了程序集的 nuget packages 版本,这实际上是4.1.2.0
.
重申一下,ProjectA
,其中引用ProjectB
,并且两者都有一个执行以下操作的绑定重定向:
<dependentAssembly>
<assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>`
所以我的问题是为什么 Visual Studio 会删除一个版本System.IO.Compression
从某个位置is not被我们的任何项目(直接)引用?而且,我能做些什么来解决这个问题?
此外,虽然我在本地使用 Visual Studio 2019 的(当前)RC 版本,但我们的构建代理(Azure DevOps Pipelines)正在使用 Visual Studio 2017。
在运行时,我们发现记录了上述异常,并且创建 ZIP 文件的处理失败。
Update
除了上述内容之外,我还做了一些额外的挖掘,发现了一个指向4.2.0.0
该程序集的版本。我已经手动将其降低到4.1.2.0
,并再次部署到我们的测试环境,并进行一些额外的运行状况检查,看看进展如何。
仍然需要了解我们是如何进入这种状态的,以及为什么与实际情况存在差异。csproj
所指向的内容与在解决方案资源管理器中看到的内容。