首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有为Silverlight输出指定Silverlight项目

没有为Silverlight输出指定Silverlight项目
EN

Stack Overflow用户
提问于 2012-03-31 07:35:08
回答 8查看 3.3K关注 0票数 9

我有一个非常标准的silverlight应用程序在ASP.NET主机下运行。在所有开发机器上,它都编译得很好,但是在我们的CI服务器上,我们得到了以下错误:

没有为Silverlight输出指定Silverlight项目

但是,如果我登录到CI并使用VS2010手动编译,它可以工作得很好!这是Silverlight 4,.NET 4.0

EN

回答 8

Stack Overflow用户

发布于 2012-06-13 15:53:26

因为我花了两天时间试图弄清楚为什么在我工作的Silverlight项目中会发生这种情况,所以我想我应该把它发到这里。

在我的例子中,这个问题是由一个In网站的.csproj中的一个项目GUID与项目的实际GUID不匹配而引起的(因为之前发生的代码重组)。

这与silverlight应用程序或其任何设置无关。我不知道为什么,但是这种错误的引用会导致"CopyFilesToFolders“MSBuild任务获得"SourceFiles”列表中多次列出的相同文件。这将导致第一组复制成功,然后是一组“没有指定的Silverlight项目”错误。

简单地删除坏的项目引用并重新添加它,修复GUID并解决构建问题。

一个非常糟糕的错误信息。

票数 9
EN

Stack Overflow用户

发布于 2012-12-20 15:25:33

感谢MerickOWA在这里发帖,我相信它为同样的问题节省了我的时间。

我已经创建了一个PowerShell脚本来为解决方案中的所有项目查找不匹配的GUID。这可能会为别人节省更多的时间。

要运行它,请将下面的代码复制到与解决方案相同的文件夹中,重命名为.ps1,启动Powershell控制台,导航到包含解决方案的文件夹,然后运行脚本。它将列出不匹配的项目引用(如果有的话)。

若要修复,请在Visual中打开解决方案,然后删除并重新添加不匹配的项目引用。

代码语言:javascript
复制
function validateSolution([string]$slnFileName) {

    "Validating solution: " + $slnFileName

    # Extract all the c# projects from the solution file
    $solutionProjects = 
        Get-Content $slnFileName | Select-String 'Project\(' | ForEach-Object {
            $projectParts = $_ -Split '[,=]' ;
            New-Object PSObject -Property @{
                Kind = $projectParts[0].Replace('Project("', '').Replace('") ','');
                Name = $projectParts[1].Trim('" ');
                File = $projectParts[2].Trim('" ');
                Guid = $projectParts[3].Trim('" ');
            }; 
        } | Where-Object { $_.Kind -eq "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}" } # Kind = C# project

    # Output list of C# projects to console
    # $solutionProjects

    # Create HashTable keyed on project GUID
    $solutionProjectGuids = @{}
    foreach ($project in $solutionProjects) {
        $solutionProjectGuids.Add($project.Guid, $project)
    }

    # Loop through each c# project in the solution
    foreach ($project in $solutionProjects) {
        [xml]$projectXml = Get-Content $project.File
        $projectReferences = $projectXml.Project.ItemGroup | Where-Object { $_.ProjectReference -ne $null }

        # Loop through each ProjectReference
        foreach($reference in $projectReferences.ChildNodes | Where-Object { $_.Project -ne $null } ) {
            # Check the project reference GUID exists in hash table of project GUIDS; if not write error
            if (!$solutionProjectGuids.ContainsKey($reference.Project)) {
                ""
                "Bad ProjectReference: Project GUID not found in solution " 
                "Solution:  " + $slnFileName
                "Project:   " + $project.File
                "Reference: " + $reference.Name
                "Bad GUID:  " + $reference.Project
            }
        }
    }
    "Completed solution:  " + $slnFileName
}

foreach ($solutionFile in ls *.sln) {
    validateSolution $solutionFile
}
票数 6
EN

Stack Overflow用户

发布于 2013-01-04 12:14:52

如果您查看由构建服务器生成的日志文件,您可能会看到以下内容.

代码语言:javascript
复制
CopySilverlightApplications:
  Copying Silverlight applications
  Copying <Path>.xap to <Path>.xap
MSBUILD : error : Copying file <Path>.xap failed. No Silverlight project specified for Silverlight output <Path>.xap. [<Path>.csproj]

CopySilverlightApplications是在以下文件中定义的目标。

C:\程序文件(x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets

它包括此条件,这解释了在使用Visual进行构建时没有出现问题的原因。

代码语言:javascript
复制
Condition="'$(BuildingInsideVisualStudio)' != 'true'"

我有两个构建定义,每个定义构建一个不同的配置。其中一个构建是OK (版本),但另一个(夜间)有您描述的问题。当我使用XML编辑器查看silverlight应用程序的项目文件时,我发现尽管存在一个属性组,其条件在发布时为true --但Nightly没有。

我手动编辑了文件,获得了属性组的副本以供发布,并调整了条件和OutputPath,以适应夜间构建。这解决了这个问题.

之后,我注意到,如果我导航到Visual中Silverlight项目的Properties页面,并使用工具栏中的下拉菜单切换到Nightly配置,则会自动为该配置生成一个新的PropertyGroup元素。--这也可能解决问题.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9953986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档