【问题标题】:Building WCF Library on CI Machine在 CI 机器上构建 WCF 库
【发布时间】:2013-02-19 15:55:56
【问题描述】:

更新:

只是一个更新,因为我们终于修复了许可并在我们的构建代理上安装了 Visual Studio 2012。一旦我们完成安装,一切都完美构建。

感谢大家的回答和帮助。我接受的答案将此选项列为第四个尝试,我们确实尝试了其他所有方法,这就是它构建的全部。

当我尝试在我的 Windows Server 2008 R2 构建机器上构建 WCF 库项目时得到帮助,我收到此错误:

C:\BuildAgent\work\e8ce1d5b0f26c529\Configuration\ECUWeb\EcuWeb.ServiceLib\EcuWeb.ServiceLib.csproj(90, 3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\WCF\Microsoft.VisualStudio.ServiceModel.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.

项目 配置\ECUWeb\EcuWeb.ServiceLib\EcuWeb.ServiceLib.csproj 失败了。

构建代理安装了 Visual Studio 2010 和 .net4.5,但是我在我的机器上使用 VS2012。有我可以安装的 SDK 还是必须安装 VS2012?这也是一个仅在解决方案文件上运行 MSBuild 的 teamcity 任务。

【问题讨论】:

  • 您是否检查过您的构建代理中是否存在错误指定的以下文件? C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\WCF\Microsoft.VisualStudio.ServiceModel.targets
  • 是的,我已经检查过了,WCF 文件夹甚至都不存在。
  • 我在 SO 本身发现了一个类似的问题。 WCF compilation error on CI server: Microsoft.VisualStudio.ServiceModel.targets not found。但这没有答案。在那篇文章中建议安装 Windows SDK 来解决这个问题。这似乎并不能解决问题。所以,我希望你可能需要自己安装 Visual Studio 2012,否则我们会等待是否有人能给出更好的答案。
  • 我不喜欢在构建服务器上安装 VS,但我想每个人都有自己的想法。我不能说“这是错误的”,但我只是想非常了解我所有的依赖 dll。
  • @granadaCoder 是的,我们必须在构建机器上安装 VS2012 才能使其正常工作。

标签: c# visual-studio-2010 wcf msbuild visual-studio-2012


【解决方案1】:

当CI环境没有“必需品”时,我找到了几个解决方案:

一:安装 SDK(如前所述)。

二:每隔一段时间,您可以从安装了 VS20xx 的机器上手动复制“.targets”文件。这实际上是一个很好的方案,因为它很容易解决。

这里的例子: Microsoft.WebApplication.targets was not found, on the build server. What's your solution?

三:类似于 SDK 安装的东西。一个额外的包在这里或那里。 这是一个例子:

Build error in tfsbuild with database project

四:每隔一段时间,微软就会搞砸你。您唯一的办法是安装完整的 Visual Studio。我讨厌,因为 CI 机器不应该需要 Visual Studio。

【讨论】:

  • 嗯,除了安装 VS2012,我已经尝试了一切,所以这是我的下一站。
  • 所以您尝试将“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\WCF*.*”从安装了 VS 的机器复制到构建机器?
  • 是的,然后它找不到 System.ServiceModel.Core 程序集。
  • 你是唯一的开发者吗?因为那很奇怪。该项目如何引用从未存在的东西?另外,开发机器和构建机器都是 x64 机器吗?比如,一个不是 32 位的吗?
  • 不,我不是唯一的开发人员,但我们是第一个使用 .Net4.5 和 WCF 的团队。我们目前将 TeamCity 用于我们的 CI,在我添加 WCF 项目之前,我们没有构建问题。是的,构建机器是 x64,我的工作站也是。但是我是 vs2012 并且构建代理只有 VS2010,然后安装了 .Net4.5。
【解决方案2】:

要检查的一件事 - 确定是否需要引用。

我有一个 2012 解决方案,其中包含一个 .csproj 文件,其中包含对 Microsoft.VisualStudio.ServiceModel.targets 的引用。我正在从 VS 2012 升级到 VS 2013。我有两台机器,我将它们称为 DESKTOP 和 LAPTOP。 DESKTOP 上面有 VS 2012,我也安装了 VS 2013。因此存在以下文件,并且我能够编译我的解决方案:

$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\WCF\Microsoft.VisualStudio.ServiceModel.targets

在笔记本电脑上,我没有 VS 2012。我从头开始安装 2013,并试图让我的解决方案(在 TFS 源代码控制下)工作。我收到了上述错误(VisualStudio.ServiceModel.targets 不存在...验证声明是否正确)。

事实证明,我什至不需要这个文件——在 DESKTOP 上的 .csproj 文件中,我只是简单地注释掉了该元素,解决方案重新编译成功(包括单元测试通过)。所以我从 DESKTOP 将它签入到 TFS,在 LAPTOP 上获得了最新代码,并且它也在那里编译(并通过了单元测试):

<!-- Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\WCF\Microsoft.VisualStudio.ServiceModel.targets" / -->

【讨论】:

  • 我会试试的。谢谢。
猜你喜欢
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
  • 2017-03-25
  • 2022-06-14
  • 2010-11-19
  • 1970-01-01
  • 2010-11-19
相关资源
最近更新 更多