如何使用Microsoft.Build.BuildEngine构建Silverlight项目?

问题描述:

我正在使用Microsoft.Build.BuildEngine构建一些项目。不使用Silverlight的项目正在构建,而使用Silverlight的项目不在构建中。所有这些项目(Silverlight和非Silverlight的)的所有建设精细通过Visual Studio 2008年。我得到的错误信息:如何使用Microsoft.Build.BuildEngine构建Silverlight项目?

错误CS0234:类型或命名空间名称“SilverlightControls”不会在 命名空间“存在System.Web.UI'(您是否缺少程序集引用?)

我已将System.Web.Silverlight添加到正在使用Microsoft.Build.BuildEngine进行构建的项目中。我能够在构建该项目的项目中看到该名称空间(因此看起来,构建该项目的项目确实可以访问System.Web.UI)。

有关如何避免该错误的任何想法?


通过VS2008调整构建的详细程度,并与从Microsoft.Build.BuildEngine创建的日志进行比较。它看起来像Microsoft.Build.BuildEngine是生产线,如:

认为是 “C:\ Program Files文件\参考大会\微软\框架 \ v3.5版本\ System.Web.Silverlight.dll”,但它不存在。

它不存在于那个位置,应该吗?实际上有很多地方,它寻找该DLL并没有找到它。我通过右键单击,添加引用,.Net,添加引用添加。在我的机器上似乎没有System.Web.Silverlight.dll(这很奇怪,因为项目使用VS2008进行编译)。

两个日志的可能是有关章节比较: Microsoft.Build.BuildEngine

对于SearchPath中的 “{} GAC”。 考虑到“System.Web.Silverlight,Version = 2.0.5.0,Culture = neutral, PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL”,在GAC中找不到 。

Visual Studio 2008中

System.Web.Silverlight,版本= 2.0.5.0,文化=中立, 公钥= 31bf3856ad364e35,ProcessorArchitecture用于= MSIL


手动添加的System.Web.Silverlight到Microsoft.Build.BuildEngine查找它的路径(当我通过VS2008构建项目时,从输出目录复制它)。这解决了这个问题,但我现在得到的解决方案的Silverlight组件以下错误:

C:\ Program Files文件\的MSBuild \微软\的Silverlight \ 2.0 \ Microsoft.Silverlight.Common.targets (95,9):错误:安装的Silverlight 2 SDK不是 。

任何想法?

在运行Microsoft.Build.BuildEngine的应用程序中,我将构建类型从Any CPU更改为x86。这现在使应用程序能够按预期构建目标。

因此,您是使用MSBuild API以编程方式构建的?

向engine.Loggers添加一个ILogger(例如只是打印到控制台)可能很有用,并将输出与VS中的输出窗口进行比较(在设置后,例如'tools \ options \ project & solutions \ build &运行\ msbuild输出冗长'来详细)...似乎以某种方式环境导致程序集不同地解决?