【问题标题】:Microsoft.Web.Infrastructure is not being built to the bin directory on one of my TFS build serversMicrosoft.Web.Infrastructure 未构建到我的一台 TFS 构建服务器上的 bin 目录中
【发布时间】:2014-02-09 17:57:56
【问题描述】:

这是我的错误: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。就好像它没有在建造一样。

【问题讨论】:

  • 同样的问题。不知道为什么它没有被复制。我这边的 Copy Local 设置为 True

标签: c# asp.net tfs build gac


【解决方案1】:

我们遇到了类似的问题。从 VS 构建和部署工作,但不是从我们的 buildmachine 与 msbuild.exe。 Microsoft.Web.Infrastructure.dll 尚未复制到输出目录,即使构建协议显示该文件位于包目录中并被 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>

尤其是&lt;Private&gt;-标签至关重要,因为这意味着“本地副本”。 您可以通过在 VS 中将“本地副本”设置为 false,保存,然后设置回 true 来解决这个问题。神奇的是,两条缺失的行都会出现,并且 msbuild 你会很高兴。

【讨论】:

  • False
  • 工作正常。我有一个在 VS2017 中从头开始创建的项目。没有 dll 有标签,但只有这个缺失。为这个有问题的文件添加这些文件后,它已正确部署。
【解决方案2】:

我遇到了同样的问题。我不确定为什么在我的情况下 TeamCity 没有将此 dll 发布到 bin 文件夹。当我进行本地发布时,它成功地将其放入部署中。

为了解决这个问题,我使用 GacUtil 将 dll 添加到了 Windows 2012 服务器上的 GAC。如果您在服务器上有 .net SDK,则类似以下的命令应该可以工作:

gacutil -i "C:\LOCACTION\Microsoft.Web.Infrastructure.dll"

【讨论】:

  • 我最终将 DLL 添加到我的包文件夹中,然后将其与我的项目的其余部分一起签入。这有几个好处,首先是即使通过 nuGet 更新 DLL 也非常容易。第二个是 msdeploy.exe 将它部署到我们的多个服务器上,我不必自己管理 GAC。
  • 嗨,Victorio - 这听起来确实是个好方法。感谢您添加该建议。知道为什么 CI 工具不将其包含在构建中吗?
  • 好吧,这个 DDL 常见于安装了 Visual Studio 的计算机上,但对于简单的 IIS 服务器来说没有意义。我不知道为什么要让项目的依赖关系如此困难,但在这一点上,我认为微软更担心让无缝部署与 Azure 一起工作。
【解决方案3】:

您的解决方案是否可能正在寻找版本 1.0.0.0,而实际上您的项目中引用了不同的版本?

【讨论】:

  • 当我右键单击项目参考文件夹中的参考“Microsoft.Web.Infrastructure”并单击“属性”时,我看到“版本 1.0.0.0”。如何查看我的解决方案想要什么?
  • 根据您的错误,它正在寻找应该没问题的版本 1.0.0.0。当您右键单击引用并转到属性时,Copy Local 是否设置为“True”?
猜你喜欢
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 2018-02-24
  • 2013-07-03
相关资源
最近更新 更多