这是我的错误:https://i.sstatic.net/bD1Jt.png 通过在成功构建后将“Microsoft.Web.Infrastruct.dll”放入我的项目 bin 目录中可以解决该问题。
我有相同的项目在一台构建服务器上运行,而不是在另一台构建服务器上运行。我的问题是,在一个构建服务器上我的项目的 bin 目录中缺少“Microsoft.Web.Infrastruct.dll”,但项目构建后另一台服务器上却没有。 Microsoft.Web.Infrastruct 引用的属性“Copy Local”设置为“True”。
两个构建服务器都具有 TFS 和 IIS,以便快速测试/部署。显然问题出在构建服务器端,但我所有的研究都没有帮助我找到解决方案。
从我的构建日志中发现更详细的错误:
主要参考“Microsoft.Web.Infrastruct,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35,processorArchitecture=MSIL”。 c:\WINDOWS\Microsoft.NET\Framework 4.0.30319\Microsoft.Common.targets(1360,9):警告 MSB3245:无法解析此引用。无法找到程序集“Microsoft.Web.Infrastruct,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35,processorArchitecture=MSIL”。检查以确保该程序集存在于磁盘上。如果您的代码需要此引用,则可能会出现编译错误。
然后在这个错误之后,我得到了一个巨大的位置列表,它试图尝试找到 DLL 但找不到。我认为修复方法很简单,只需将 DLL 放在任何一个地方即可,但我忍不住觉得我用胶带修复了这个问题。在我的 /packages/ 文件夹中,我清楚地看到“packages\Microsoft.Web.Infrastruct.1.0.0.0\”目录,但其中没有 lib 也没有 DLL。就好像它没有在建造一样。
我们也有类似的问题。从 VS 构建和部署可以工作,但不能从我们的带有 msbuild.exe 的构建机器进行构建和部署。即使生成协议显示该文件位于包目录中并被 msbuild 识别,Microsoft.Web.Infrastruct.dll 尚未复制到输出目录。 原因是 .csproj 文件有些损坏。 该项目已从 VS2015 更新到 VS2017。一切顺利。根据 VS2017 中的 UI,引用“Microsoft.Web.Infrastruct”的设置“本地副本”已设置为 true。但是:当使用文本编辑器查看底层 .csproj 文件时,我们发现缺少两行:
<Reference Include="Microsoft.Web.Infrastructure, ...>
<HintPath>..\packages\...\Microsoft.Web.Infrastructure.dll</HintPath>
<EmbedInteropTypes>False</EmbedInteropTypes> <-- this line was missing
<Private>True</Private> <-- this line was missing
</Reference>
尤其是
<Private>
标签至关重要,因为这意味着“本地副本”。
您只需在 VS 中将“本地副本”设置为 false,保存,然后设置回 true 即可解决此问题。神奇的是,两行缺失的行都会出现,并且 msbuild,你会很高兴。
<Reference Include="Microsoft.Web.Infrastructure">
<HintPath>..\packages\...\Microsoft.Web.Infrastructure.dll</HintPath>
<EmbedInteropTypes>False</EmbedInteropTypes>
<Private>True</Private>
</Reference>
我也遇到了同样的问题。 我不确定为什么在我的情况下 TeamCity 没有将此 dll 发布到 bin 文件夹。 当我进行本地发布时,它成功地将其放入部署中。
为了解决该问题,我使用 GacUtil 将 dll 添加到 Windows 2012 服务器上的 GAC 中。 如果服务器上有 .net SDK,则类似以下的命令应该可以工作:
gacutil -i "C:\LOCACTION\Microsoft.Web.Infrastructure.dll"
您的解决方案是否可能正在寻找版本 1.0.0.0,而实际上您的项目中引用了不同的版本?