2012-01-04 18 views
6

पर आवेदन मैं एक सी ++ आवेदन संकलित करने के लिए निम्न कोड का उपयोग करें:संकलन C++ #

Engine engine = new Engine(); 
engine.BinPath = @"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319"; 
BuildPropertyGroup group = new BuildPropertyGroup(); 
group.SetProperty("Configuration", "Debug"); 
engine.BuildEnabled = true; 
FileLogger logger = new FileLogger(); 
logger.Parameters = @"logfile=C:\tmp\build.log"; 
engine.RegisterLogger(logger); 
bool success = engine.BuildProjectFile(@"E:\sv_repos\Test\Test\VS2010\Test\Test\Test.vcxproj", new string[] { "Build" }, group); 
engine.UnregisterAllLoggers(); 
if (success) 
    MessageBox.Show("build!"); 

लेकिन मैं निम्नलिखित त्रुटि मिलती है, किसी भी विचार की सराहना की जाएगी।

बिल्ड 2012/01/04 03:32:16 बजे शुरू किया गया। MSBUILD: त्रुटि MSB4014: आंतरिक विफलता के कारण बिल्ड निरस्त कर दिया गया था। MSBUILD: त्रुटि MSB4014: System.InvalidCastException: 'System.Xml.XmlElement' टाइप करने के लिए 'System.Xml.XmlComment' प्रकार का ऑब्जेक्ट डालने में असमर्थ। MSBuild: त्रुटि MSB4014: त्रुटि MSB4014: Microsoft.Build.BuildEngine.Project.ProcessProjectChildren (XmlElement projectElement, स्ट्रिंग projectDirectoryLocation, बूलियन importedProject) MSBuild पर Microsoft.Build.BuildEngine.Project.ProcessImportElement (XmlElement importElement पर, स्ट्रिंग projectDirectoryLocation, बूलियन importedProject) MSBuild: त्रुटि MSB4014: त्रुटि MSB4014: Microsoft.Build.BuildEngine.Project.ProcessProjectChildren (XmlElement projectElement, स्ट्रिंग projectDirectoryLocation, बूलियन importedProject) MSBuild पर Microsoft.Build.BuildEngine.Project पर। ProcessImportElement (XmlElement importE lement, स्ट्रिंग projectDirectoryLocation, बूलियन importedProject) MSBuild: त्रुटि MSB4014: Microsoft.Build.BuildEngine.Project.ProcessProjectChildren पर (XmlElement projectElement, स्ट्रिंग projectDirectoryLocation, बूलियन importedProject) MSBuild: त्रुटि MSB4014: Microsoft.Build.BuildEngine पर। Project.ProcessMainProjectElement() MSBuild: त्रुटि MSB4014: Microsoft.Build.BuildEngine.Project.RefreshProjectIfDirty() MSBuild पर: त्रुटि MSB4014: Microsoft.Build.BuildEngine.Project.InternalLoadFromXmlDocument पर (XmlDocument projectXml, projectLoadSettings projectLoadSettings) MSBuild : त्रुटि एमएसबी 4014: माइक्रोसॉफ्ट.बिल्ड.बिल्डइंजिन.प्रोजेक्ट.लोड (स्ट्री एनजी projectFileName, BuildEventContext buildEventContext, ProjectLoadSettings projectLoadSettings) MSBuild: त्रुटि MSB4014: Microsoft.Build.BuildEngine.Engine.GetMatchingProject (परियोजना existingProject, स्ट्रिंग projectFullPath, BuildPropertyGroup globalPropertiesToUse, स्ट्रिंग toolsVersion, पर
String [] targetNames, BuildEventContext buildEventContext, बूलियन toolsVersionPeekedFromProjectFile) MSBuild: त्रुटि MSB4014: Microsoft.Build.BuildEngine.Engine.BuildProjectFileInternal (BuildRequest buildRequest) MSBuild में: त्रुटि MSB4014: Microsoft.Build.BuildEngine.Engine.EngineBuildLoop (BuildRequest terminatingBuildRe पर खोज) MSBuild: त्रुटि MSB4014: Microsoft.Build.BuildEngine.Engine.PostProjectEvaluationRequests पर (परियोजना परियोजना, String [] projectFiles, String [] [] targetNames, BuildPropertyGroup [] globalPropertiesPerProject, IDictionary [] targetOutputsPerProject, BuildSettings buildFlags, String [] toolVersions)

+0

क्या आप सीधे विजुअल स्टूडियो में सी ++ प्रोजेक्ट बना सकते हैं? – ChrisF

+0

हां बिल्कुल हद :) – mefmef

+0

बस "दोस्त" की जांच;) – ChrisF

उत्तर

5
engine.BinPath = @"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319"; 

यह एक संस्करण समस्या है, अपनी परियोजना MSBuild इंजन के एक पुराने संस्करण का उपयोग कर रहा है। स्टैक ट्रेस से दृश्यमान, यह Microsoft.Build.BuildEngine.Project class का उपयोग कर रहा है।जो इस विशेषता है:

[ObsoleteAttribute("This class has been deprecated. Please use Microsoft.Build.Evaluation.Project from the Microsoft.Build assembly instead.")] 

MSBuild काफी सी ++ का निर्माण प्रणाली के प्रमुख ओवरहाल के हिस्से के रूप .NET 4.0 में संशोधित किया गया। जिसने पहले वीसीबिल्ड नामक एक विरासत निर्माण इंजन और एक विरासत परियोजना फ़ाइल प्रारूप का उपयोग किया था, इसमें .vcproj फ़ाइल नाम एक्सटेंशन था। आपके द्वारा उपयोग किए जा रहे एमएसबिल्ड संस्करण को उन परिवर्तनों के बारे में कुछ भी पता नहीं है और यह एक .vcxproj

को ठीक से पार्स करने में सक्षम नहीं है। आपको Microsoft.Build.Engine.dll संदर्भ असेंबली के संदर्भ को अद्यतन करने की आवश्यकता है। गुण विंडो में प्रदर्शित रनटाइम संस्करण को "v4.0.30319" दिखाना चाहिए। माइक्रोसॉफ्ट.बिल्ड.इवल्यूशन.प्रोजेक्ट क्लास का उपयोग करके मुझे बहुत भाग्य नहीं मिला, यह शिकायत कर रहा है कि .props फाइलें नहीं ढूंढ पा रहे हैं और उनके लिए गलत निर्देशिका में दिख रहे हैं। हालांकि यह .vcxproj फ़ाइल को सही ढंग से पार्स करता है :)

+0

धन्यवाद हंस शुरू करें। मैंने मूल्यांकन के बिना भी मूल्यांकन किया। प्रोजेक्ट भी भाग्य के बिना। मुझे कुछ और त्रुटि आती है (त्रुटि MSB4127: "SetEnv" कार्य को असेंबली से तत्काल नहीं किया जा सका "... MSBuild \ Microsoft.Cpp \ v4.0 \ v120 \ Microsoft.Build.CppTasks.Common.dll"। कृपया सत्यापित करें कि कार्य असेंबली को Microsoft.Build.Framework असेंबली के समान संस्करण का उपयोग करके बनाया गया है ...) जो मेरे लिए कोई समझ नहीं लेता है (मेरे पास केवल v120 इंस्टॉल है) और यदि मैं cmd ​​से बना हूं तो एक आकर्षण की तरह काम कर रहा है। कोई भी इसमें सफल रहा है? – Wizche