在CI机器上构建WCF库

4

更新:

我们终于解决了许可问题,在构建代理上安装了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.

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

构建代理有安装Visual Studio 2010和.Net4.5,但我在我的电脑上使用的是VS2012。我需要安装一个SDK,还是必须安装VS2012?此外,这是一个在解决方案文件上运行MSBuild的TeamCity任务。


是的,我已经尝试从链接安装那个SDK了。 - twreid
你解决了吗? - granadaCoder
4
我不喜欢在构建服务器上安装VS,但我想每个人有自己的选择。我不能说这是“错误”的,但是我只是希望非常清楚地了解所有我的依赖dll文件。 - granadaCoder
你最终在服务器上安装了VS吗?微软真的应该让事情不至于成为最后的选择。 - granadaCoder
1
@granadaCoder 是的,我们不得不在构建机器上安装VS2012才能使其正常工作。 - twreid
显示剩余5条评论
2个回答

4
当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。

所以您尝试将安装了VS的机器上的“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\WCF*.*”复制到构建机器上? - granadaCoder
然后它找不到 System.ServiceModel.Core 程序集。 - twreid
你是唯一的开发者吗?因为这很奇怪。项目如何引用从未存在过的东西?另外,开发机和构建机都是x64机器吗?比如,其中一个不是32位的吧? - granadaCoder
不,我不是唯一的开发者,但我们是第一个使用.Net4.5和WCF的团队。我们目前使用TeamCity进行CI,在我添加WCF项目之前,我们没有任何构建问题。是的,构建机器是x64,我的工作站也是如此。但是我有VS2012,而构建代理只有VS2010,然后安装了.Net4.5。 - twreid
@twreid你解决了吗?我也遇到了完全相同的问题,但是真的不想在所有构建代理上都安装VS2012的副本。 - joshua.ewer
显示剩余4条评论

3

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

我有一个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不存在...验证声明是否正确)。
事实证明,我甚至不需要这个文件——在我的.csproj文件中,在桌面上,我只需注释掉元素,然后解决方案成功重新编译(包括单元测试通过)。所以我从桌面上将其检入TFS,获取最新的代码到笔记本电脑上,它也成功编译了(并且单元测试通过)。
<!-- Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\WCF\Microsoft.VisualStudio.ServiceModel.targets" / -->

好的,我会尝试。谢谢。 - twreid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接