2012-03-31 12 views
9

के लिए निर्दिष्ट कोई सिल्वरलाइट प्रोजेक्ट नहीं है मेरे पास एक एएसपी.NET होस्ट के तहत चलने वाला एक बहुत ही मानक Silverlight ऐप है। सभी देव मशीनों पर यह ठीक संकलित है, लेकिन पर हमारे सीआई की सेवा, हम इस त्रुटि मिलती है:सिल्वरलाइट आउटपुट

No Silverlight project specified for Silverlight output

लेकिन अगर मैं सीआई में प्रवेश करें और VS2010 के साथ मैन्युअल रूप से संकलित यह ठीक काम करता है! यह सिल्वरलाइट 4 है, .NET 4.0

+1

इस पोस्ट के अनुसार कॉन्फ़िगरेशन उपस्थिति की जांच करें: http://forums.silverlight.net/post/321019.aspx –

उत्तर

9

जैसा कि मैंने यह पता लगाने की कोशिश में 2 दिन बिताए हैं कि सिल्वरलाइट प्रोजेक्ट में यह क्यों हो रहा था, मैंने सोचा कि मैं इसे यहां पोस्ट करूंगा।

मेरे मामले में, समस्या का कारण है क्योंकि वेबसाइट के .csproj में <ProjectReference> में से एक एक परियोजना GUID जो (एक कोड पुनर्गठन जो पहले हुआ था की वजह से) परियोजना की वास्तविक GUID से मेल नहीं खाती थी।

इसका चांदी के आवेदन या इसकी किसी भी सेटिंग से कोई लेना देना नहीं था। मुझे नहीं पता कि क्यों, लेकिन किसी भी तरह से यह बुरा संदर्भ "CopyFilesToFolders" MSBuild कार्य को "SourceFiles" सूची में कई बार सूचीबद्ध फ़ाइलों को प्राप्त करने का कारण बनता है। इससे "नो सिल्वरलाइट प्रोजेक्ट निर्दिष्ट" त्रुटियों के सेट के बाद प्रतियों का पहला सेट सफल हो जाता है।

बस खराब परियोजना संदर्भ को हटा रहा है और इसे फिर से जोड़ने से GUID को ठीक किया गया है और बिल्ड समस्या हल हो गई है।

वास्तव में एक बहुत ही खराब त्रुटि संदेश।

+0

इसे पोस्ट करने के लिए बहुत बहुत धन्यवाद! मैंने खराब प्रोजेक्ट संदर्भों को ढूंढने के लिए PowerShell स्क्रिप्ट बनाई है (मेरा उत्तर देखें)। – Edward

6

यहां पोस्ट करने के लिए मरिकोवा के लिए धन्यवाद, मुझे यकीन है कि यह मुझे एक ही समस्या के साथ घंटे बचाता है।

मैंने समाधान में सभी परियोजनाओं के लिए मेल खाने वाले GUID को खोजने के लिए PowerShell स्क्रिप्ट बनाई है। यह किसी और को और भी घंटे बचा सकता है।

इसे चलाने के लिए, नीचे दिए गए कोड को अपने समाधान के रूप में उसी फ़ोल्डर में एक टेक्स्ट फ़ाइल में कॉपी करें, .ps1 पर नाम बदलें, पावरहेल कंसोल शुरू करें, आपके समाधान वाले फ़ोल्डर पर नेविगेट करें, फिर स्क्रिप्ट चलाएं। यदि कोई हो, तो यह गलत मिलान वाले परियोजना संदर्भों की सूची देगा।

ठीक करने के लिए, विजुअल स्टूडियो में समाधान खोलें, फिर विस्मृत परियोजना संदर्भ को हटाएं और दोबारा जोड़ें।

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 
} 
+0

मुझे इस स्क्रिप्ट को संशोधित करते समय निम्न साइट उपयोगी होती है। http://www.mztools.com/articles/2008/mz2008017.aspx यह भी ध्यान दें कि समाधान फ़ोल्डर के लिए दयालु मार्गदर्शिका '{2150E333-8FDC-42A3-9474-1A3956D46DE8}' है। –

+1

धन्यवाद, खराब संदर्भ खोजने के लिए आपकी स्क्रिप्ट बहुत उपयोगी थी। –

1

आपको लगता है कि अपने निर्माण सर्वर द्वारा उत्पन्न होता है लॉग फ़ाइल पर एक नज़र डालें, तो आप शायद कुछ इस तरह देखेंगे ...

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

यह इस हालत बताते हैं जो जब साथ निर्माण क्यों आप समस्या हो रही नहीं होती हैं दृश्य स्टूडियो।

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

मेरे पास दो बिल्ड परिभाषाएं हैं जहां प्रत्येक एक अलग कॉन्फ़िगरेशन बनाता है। बिल्डों में से एक ठीक था (रिलीज) लेकिन दूसरे (नाइटली) में आपके द्वारा वर्णित समस्या थी। जब मैंने एक एक्सएमएल संपादक का उपयोग करके चांदी की रोशनी एप्लिकेशन के लिए प्रोजेक्ट फ़ाइल को देखा, तो मैंने देखा कि हालांकि एक ऐसी स्थिति वाला एक संपत्ति समूह था जो रिलीज के लिए सच साबित हुआ - नाइटली के लिए कोई नहीं था।

मैंने रिलीज के लिए संपत्ति समूह की प्रतिलिपि ले कर फ़ाइल को मैन्युअल रूप से संपादित किया और नाइटली बिल्ड के अनुरूप स्थिति और आउटपुटपाथ समायोजित किया। इस मुद्दे को हल किया।

मैं बाद में देखा है कि अगर मैं दृश्य स्टूडियो में Silverlight परियोजना के लिए गुण पृष्ठ पर भेज और रात विन्यास उपकरण पट्टी में लटकती का उपयोग करने की अदला-बदली, कि एक नया PropertyGroup तत्व स्वचालित रूप से उस विन्यास के लिए बनाई गई थी। यह शायद इस मुद्दे को भी हल करेगा।

1

मुझे एक ही समस्या थी। परियोजना डीबग और रिलीज कॉन्फ़िगरेशन में बस ठीक है लेकिन मुझे वेब-प्रोजेक्ट में "सिल्वरलाइट आउटपुट के लिए निर्दिष्ट कोई सिल्वरलाइट प्रोजेक्ट" नहीं मिला है। मैंने यह भी देखा कि यह .xbin-files से ./bin/Release/ की बजाय ./bin/Production/ की प्रतिलिपि बनाने का प्रयास कर रहा था।

वेब-प्रोजेक्ट से सभी सिल्वरलाइट एप्लिकेशन (प्रोजेक्ट प्रॉपर्टीज में टैब) को हटाने और क्लाइंटबिन फ़ोल्डर को आउटपुट पथ के रूप में जोड़ने के बाद (here सुझाया गया) मुझे एक बेहतर त्रुटि संदेश मिला। समस्या यह थी कि वेब-प्रोजेक्ट द्वारा संदर्भित कुछ परियोजनाओं में चयनित कॉन्फ़िगरेशन गुम था। कॉन्फ़िगरेशन जोड़ने के बाद मैं फिर से वेब प्रोजेक्ट में सिल्वरलाइट एप्लिकेशन जोड़ सकता हूं और आउटपुट पथ को bin/$ (कॉन्फ़िगरेशन)/और अभी भी समाधान का निर्माण कर सकता हूं।

0

मुझे लगता है कि यह त्रुटि उत्पन्न करने वाले CopySilverlightApplications कार्य में डुप्लिकेट xap फ़ाइल नाम उत्पन्न हो रहा था। मैं नीचे दी गई फ़ाइल में संशोधन करके इस समस्या को हल करने में सक्षम था। CopyFilesToFolders कार्य में SourceFiles विशेषता से नए आइटम समूह का परिचय और इसका संदर्भ ध्यान दें।

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> 
0

मामले की आगे भ्रमित करने के लिए, मैं करने के लिए 2 नई परियोजनाओं जोड़ा हमारे मौजूदा समाधान (एक नई लाइब्रेरी और इसकी संबंधित परीक्षण परियोजना) और सीआई बिल्ड no silverlight project specified for silverlight output error के साथ विफल रहा, जो 2 दिन पहले सफल रहा था। 2 नई परियोजनाओं में अन्य परियोजनाओं द्वारा कॉन्फ़िगरेशन का उपयोग नहीं किया गया था।

समाधान कॉन्फ़िगरेशन प्रबंधक के माध्यम से 2 नई परियोजनाओं में अनुपलब्ध कॉन्फ़िगरेशन को जोड़ना इसे ठीक करता है।

यह सिल्वरलाइट परियोजनाओं को क्यों प्रभावित करेगा, जिनके इन 2 नई परियोजनाओं से कोई संबंध नहीं है, मुझे कोई जानकारी नहीं है।

0

मुझे एक ही समस्या थी। मैं निर्माण स्क्रिप्ट बना रहा था, समाधान पर msbuild चल रहा था। मैं "Test" कॉन्फ़िगरेशन में समाधान का निर्माण कर रहा था, लेकिन सिल्वरलाइट परियोजनाओं के संदर्भ में वेब प्रोजेक्ट ने बाइनरी के लिए bin\Release फ़ोल्डर को लक्षित रखा। मैंने सिल्वरलाइट परियोजनाओं को दोबारा जोड़ने की कोशिश की, समस्या अभी भी वहां थी।

यह पता चला कि समस्या msbuild तर्कों में Platform निर्दिष्ट करना था। समाधान कॉन्फ़िगरेशन "Test|AnyCPU" और "Test|MixedPlatform" कोई नहीं है। आप पाएंगे कि Configuration और Platform दोनों को प्रोजेक्ट फ़ाइल में परिभाषित एक ही जोड़ी के बराबर होना चाहिए। मुझे नहीं पता कि Platform डिफ़ॉल्ट रूप से एमएसबिल्ड ले रहा था, लेकिन मुझे पता है कि यह इसके बजाय रिलीज फ़ोल्डर में कूद गया है।

वैसे भी, मैंने /p:Platform="Any CPU" को msbuild तर्कों में जोड़ा।

0

सीआई के लिए बनाए जा रहे कॉन्फ़िगरेशन की सावधानीपूर्वक समीक्षा करने के बाद, मैंने पाया कि मेरी वेब प्रोजेक्ट द्वारा संदर्भित परियोजनाओं में से एक को गलत कॉन्फ़िगरेशन के साथ स्थापित करने के लिए स्थापित किया गया था। मेरा सीआई बिल्ड स्टेजिंग (कोई भी सीपीयू) और मेरे प्रोजेक्ट्स के संदर्भ में स्थापित किया गया था। वेब प्रोजेक्ट द्वारा संदर्भित किया जा रहा था। प्रोजेक्ट रिलीज कॉन्फ़िगरेशन का उपयोग करने के लिए स्थापित किया गया था। एक बार जब मैंने कॉन्फ़िगरेशन को कॉन्फ़िगरेशन अपडेट किया, तो सीआई बिल्ड सफलतापूर्वक पूरा हो गया