Для вывода Silverlight не указан проект Silverlight - PullRequest
9 голосов
/ 31 марта 2012

У меня есть очень стандартное приложение silverlight, работающее под хостом ASP.NET.На всех машинах разработки он прекрасно компилируется, но на нашем сервере CI мы получаем эту ошибку:

Не указан проект Silverlight для вывода Silverlight

Но если я войду в CIи скомпилировать вручную с VS2010, он работает отлично!Это Silverlight 4, .NET 4.0

Ответы [ 8 ]

9 голосов
/ 13 июня 2012

Поскольку я потратил 2 дня, пытаясь понять, почему это происходит в проекте Silverlight, над которым я работаю, я решил опубликовать его здесь.

В моем случае проблема была вызвана тем, что один из в .csproj веб-сайта имел GUID проекта, который не соответствовал фактическому GUID проекта (из-за реорганизации кода, которая произошла ранее).

Это не имеет ничего общего с приложением silverlight или его настройками. Я понятия не имею, почему, но каким-то образом эта неправильная ссылка заставляет задачу MSBuild «CopyFilesToFolders» получать одинаковые файлы, перечисленные несколько раз в списке «SourceFiles». Это приводит к успешному выполнению первого набора копий, за которым следует набор ошибок «Проект Silverlight не указан».

Простое удаление неверной ссылки на проект и повторное добавление исправило GUID и решило проблему сборки.

Очень и очень плохое сообщение об ошибке.

6 голосов
/ 20 декабря 2012

Спасибо MerickOWA за размещение здесь, я уверен, что это сэкономило мне часы с той же проблемой.

Я создал скрипт PowerShell для поиска несовпадающих GUID для всех проектов в решении. Это может сэкономить кому-то еще больше часов.

Чтобы запустить его, скопируйте приведенный ниже код в текстовый файл в той же папке, что и ваше решение, переименуйте его в .ps1, запустите консоль Powershell, перейдите в папку, содержащую ваше решение, затем запустите сценарий. В нем будут перечислены несоответствующие ссылки на проекты, если таковые имеются.

Чтобы исправить, откройте решение в Visual Studio, затем удалите и повторно добавьте несоответствующие ссылки на проекты.

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
}
1 голос
/ 05 апреля 2013

У меня была такая же проблема. Проект прекрасно скомпонован в конфигурации Debug и Release, но я получил «Проект Silverlight не указан для вывода Silverlight» в веб-проекте. Я также заметил, что он пытается скопировать .xap-файлы из ./bin/Release/ вместо ./bin/Production/.

После удаления всех приложений Silverlight (вкладка в свойствах проекта) из веб-проекта и добавления папки ClientBin в качестве пути вывода (рекомендуется здесь ), я получил лучшее сообщение об ошибке. Проблема заключалась в том, что в некоторых проектах, на которые ссылается веб-проект, отсутствовала выбранная конфигурация. После добавления конфигурации я мог бы снова добавить приложения Silverlight в веб-проект и вернуть путь вывода в bin / $ (Configuration) /, и все же построить решение.

1 голос
/ 04 января 2013

Если вы посмотрите на файл журнала, сгенерированный вашим сервером сборки, вы, вероятно, увидите что-то вроде этого ...

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: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ WebApplications \ Microsoft.WebApplication.targets

Включает это условие, которое объясняет, почему у вас нет проблемы при сборке с Visual Studio.

Condition="'$(BuildingInsideVisualStudio)' != 'true'"

У меня есть два определения сборки, где каждое строит свою конфигурацию. Одна из сборок была в порядке (Release), но в другой (Nightly) возникла проблема, которую вы описали. Когда я посмотрел файл проекта для приложения silverlight с помощью редактора XML, я обнаружил, что, хотя была группа свойств с условием, которое было преобразовано в true для Release, не было ни одного для Nightly.

Я вручную отредактировал файл, взяв копию группы свойств для Release и отрегулировал условие и OutputPath в соответствии с компоновкой Nightly. Это решило проблему.

Впоследствии я заметил, что если я перешел на страницу «Свойства» для проекта Silverlight в Visual Studio и переключился на конфигурацию Nightly с помощью раскрывающегося списка на панели инструментов, то для этой конфигурации автоматически был создан новый элемент PropertyGroup. Возможно, это также решит проблему.

0 голосов
/ 21 сентября 2016

После тщательного изучения конфигурации, создаваемой для CI, я обнаружил, что один из проектов, на который ссылается мой веб-проект, был настроен для сборки с неверной конфигурацией. Моя сборка CI была настроена на сборку для Staging (Any CPU) , а один из моих .projects, на которые ссылался веб-проект, был настроен для сборки с использованием конфигурации Release . После того, как я обновил Конфигурацию до уровня Staging, сборка CI была успешно завершена

0 голосов
/ 09 марта 2016

У меня была такая же проблема.Я делал скрипт сборки, запускал msbuild для решения.Я строил решение в конфигурации "Test", но веб-проект, который ссылался на проекты Silverlight, продолжал искать в целевой папке bin\Release двоичные файлы.Я попытался повторно добавить проекты Silverlight, проблема все еще была.

Оказалось, проблема заключается в том, чтобы указать Platform в аргументах msbuild.Конфигурация решения "Test|AnyCPU" и "Test|MixedPlatform" не одинакова.Вы обнаружите, что и Configuration, и Platform должны быть равны одной паре, определенной в файле проекта.Я не знаю, что Platform по умолчанию принимало msbuild, но я знаю, что вместо этого он перешел в папку Release.

В любом случае, я добавил /p:Platform="Any CPU" в аргументы msbuild.

0 голосов
/ 08 января 2015

Чтобы еще больше запутать ситуацию, я добавил 2 новых проекта в наше существующее решение (новую библиотеку и связанный с ней тестовый проект), и сборка CI завершилась неудачно с no silverlight project specified for silverlight output error, что было успешным 2 дня назад.У 2 новых проектов не было конфигурации, используемой другими проектами.

Добавление отсутствующей конфигурации в 2 новых проекта с помощью Solution Configuration Manager исправило ее.

Почему это повлияетпроекты Silverlight, которые не имеют отношения к этим 2 новым проектам, я понятия не имею.

0 голосов
/ 31 августа 2014

Мне показалось, что в задаче CopySilverlightApplications были созданы повторяющиеся имена файлов xap, которые и вызывали эту ошибку. Я смог решить эту проблему, внеся изменения в следующий файл. Обратите внимание на введение новой ItemGroup и ссылку на нее из атрибута SourceFiles в задаче CopyFilesToFolders.

C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ WebApplications \ Microsoft.WebApplication.targets

<ItemGroup>
    <_UniqueSilverlightXapFiles Include="%(_SilverlightXapFiles.FullPath)" />
</ItemGroup>

<!--Copy the outputs to the target folder-->
<CopyFilesToFolders SourceFiles="@(_UniqueSilverlightXapFiles)" 
                    SilverlightApplications="@(_SilverlightApplications)" 
                    ConfigName="$(Configuration)"  
                    Condition="'@(_SilverlightXapFiles)' != ''">
  <Output TaskParameter="DestinationFiles" ItemName="_WebApplicationSilverlightXapFiles" />      
</CopyFilesToFolders>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...