0

晚上所有;我的任务是准备我们的代码库以迁移到 git。作为这些准备工作的一部分,我一直在删除冗余代码并将对签入 DLL 的引用替换为对内部 Nuget 包提供的相同 DLL 的引用。

我已经更新了项目参考,唯一改变的是提示路径,但我在构建时遇到了一个奇怪的错误,甚至在调查时遇到了奇怪的信息!

所以,请系好自己的一些奇怪的东西。

首先是有问题的参考(我会在这里指出,这是 475 项目解决方案的唯一问题;每个 .csproj 都已更新为指向新位置)

这是原始参考

<Reference Include="Microsoft.SqlServer.SQLTask, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=x86">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\lib\Microsoft.SqlServer.SQLTask.dll</HintPath>
  <Private>True</Private>
</Reference>

现在更新了参考

<Reference Include="Microsoft.SqlServer.SQLTask, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=x86">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\packages\MyCompany.Client.Winforms.ThirdPartyLibraries.5.0.0\lib\net472\Microsoft.SqlServer.SQLTask.dll</HintPath>
  <Private>True</Private>
</Reference>

它应该足够明显,但要说明显而易见的;只有 DLL 的路径在两个引用之间发生了变化。

现在的问题。MSBuild 显示以下错误;

MSBUILD 错误 CS8012

如您所见,问题显然是 MSBUILD 认为我引用的是 14.0.0.0 版?可是等等; 那不是我上面的参考部分显示的正确...

到 Visual Studio!特别是这个参考的属性。

装配体参考属性窗口

好的,看起来 MSBUILD(从我们使用的批处理文件构建)和 VS 都出于某种原因最终从 GAC 解决。所以现在的问题是为什么。

我显然明白,特定版本标志是允许这样做的原因,而不是发生这种情况的原因。

组件位于正确的位置;我不得不清理一些路径,但您可以假设它与参考正确匹配(.csproj 文件已使用脚本更新;1000 个参考已更新,因此我确信路径完全匹配)

在此处输入图像描述

我认为在将旧的 \lib 文件夹打包到 Nuget 包中时,我认为可能发生了错误,但是恢复到包文件夹位置的 DLL 与原始 DLL 相同。这里有一些证据支持这一说法。

这是程序集的 DotPeek;它显示了与参考相匹配的名称、版本和架构。

DotPeek 显示点网组件

这是显示公钥令牌的 sn.exe(强名称)的输出;这也与参考相匹配。

在此处输入图像描述

我很茫然,此时任何帮助或想法都会受到欢迎。

4

1 回答 1

0

所以事实证明,当它最初下载到我的机器上时,它被 Windows 阻止了。

在此处输入图像描述

单击解除阻止按钮会导致问题消失!同时删除包文件夹并让 Nuget 拉包也解决了这个问题(我在创建包之后手动将包放在该文件夹中;在我将它推送到我们的提要之前)

于 2020-05-08T23:48:46.230 回答