这是我的错误:http://i.imgur.com/hWm3Ta2.png通过在成功构建之后将“Microsoft.Web.Infrastructure.dll”删除到我的项目bin目录中来解决它。
我有一个项目在一个构建服务器上工作,而不是另一个。我的问题是,在一个构建服务器上我的项目的bin目录中缺少“Microsoft.Web.Infrastructure.dll”,而在构建项目后没有另一个目录。 Microsoft.Web.Infrastructure引用将其“Copy Local”属性设置为“True”。
两个构建服务器都具有TFS和IIS,可用于快速测试/部署。显然问题出在构建服务器端,但我的所有研究都没有帮助我找到解决方案。
从构建日志中发现更详细的错误:
主要参考“Microsoft.Web.Infrastructure,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL”。 c:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets(1360,9):警告MSB3245:无法解析此引用。无法找到程序集“Microsoft.Web.Infrastructure,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL”。检查以确保磁盘上存在程序集。如果您的代码需要此引用,则可能会出现编译错误。
然后在这个错误之后我得到了一个巨大的地方列表,它看起来试图找到DLL但不能。我认为修复就像在任何一个地方丢弃DLL一样简单,但我不能帮助但感觉就像用胶带修复它。在我的/ packages /文件夹中,我清楚地看到“packages \ Microsoft.Web.Infrastructure.1.0.0.0 \”目录,但是没有lib,也没有DLL。它似乎没有建造。
答案 0 :(得分:6)
我们遇到了类似的问题。从VS构建和部署工作但不是从我们的构建机器与msbuild.exe。 Microsoft.Web.Infrastructure.dll尚未复制到输出目录,即使构建协议显示该文件位于packages目录中并由msbuild识别。 原因是有点腐败的.csproj文件。 该项目已从VS2015更新至VS2017。一切顺利。根据VS2017中的UI,参考“Microsoft.Web.Infrastructure”的设置“本地副本”设置为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中将“Local Copy”设置为 false 来保存,然后设置回 true 。奇迹般地,两条缺失的线条都会出现并且msbuild,你会很高兴。
答案 1 :(得分:1)
我有同样的问题。我不确定为什么,在我的案例中,TeamCity没有将这个dll发布到bin文件夹。当我进行本地发布时,它成功地将其置于部署中。
要解决此问题,我使用GacUtil将dll添加到Windows 2012服务器上的GAC中。如果服务器上有.net SDK,则以下命令应该有效:
gacutil -i "C:\LOCACTION\Microsoft.Web.Infrastructure.dll"
答案 2 :(得分:0)
您的解决方案是否可能正在寻找1.0.0.0版本,实际上您的项目中引用了不同的版本?