2012-01-04 17 views
6

上のアプリケーション私は1つのC++アプリケーションのコンパイルに次のコードを使用します。コンパイルC++ 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: エラーMSB4014: Microsoft.Build.BuildEngine.Project.InternalLoadFromXmlDocument(常にXmlDocument projectXml、ProjectLoadSettings projectLoadSettings)MSBUILDで Microsoft.Build.BuildEngine.Project.RefreshProjectIfDirty()MSBUILDでは:エラー MSB4014:Microsoft.Build.BuildEngine.Project.Load(StriエラーMSB4014:Microsoft.Build.BuildEngine.Engine.GetMatchingProject(プロジェクト existingProject、文字列projectFullPath、BuildPropertyGroup globalPropertiesToUse、文字toolsVersion、文字列[] targetNames、 BuildEventContextで
projectFileName、BuildEventContext buildEventContext、 ProjectLoadSettingsのprojectLoadSettings)MSBUILD ngのbuildEventContext、ブール toolsVersionPeekedFromProjectFile)MSBUILD:エラーMSB4014:エラーMSB4014: Microsoft.Build.BuildEngine.Engine.EngineBuildLoop(buildRequest terminatingBuildReで Microsoft.Build.BuildEngine.Engine.BuildProjectFileInternal(buildRequest buildRequest)MSBUILDでクエスト)MSBUILD:エラーMSB4014: Microsoft.Build.BuildEngine.Engine.PostProjectEvaluationRequestsで(プロジェクト プロジェクト、String []型projectFiles、文字列[] [] targetNames、 BuildPropertyGroup [] globalPropertiesPerProject、IDictionaryを[] targetOutputsPerProject、BuildSettings buildFlags、 String []型 toolVersions)

+0

Visual StudioでC++プロジェクトを直接ビルドできますか? – ChrisF

+0

yesもちろんof Dude :) – mefmef

+0

ちょうど "Dude";) – 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のはかなりC++ビルドシステムの大幅な見直しの一環として、.NET 4.0の中に改訂されました。 VCBuildと従来のプロジェクトファイル形式のレガシービルドエンジンを使用していた以前は、.vcprojファイル名の拡張子を持っていました。使用しているMSBuildのバージョンは、これらの変更について何も知らないし、.vcxprojを正しく解析できません。

Microsoft.Build.Engine.dll参照アセンブリへの参照を更新する必要があります。 「プロパティー」ウィンドウに表示されるランタイムバージョンには、「v4.0.30319」と表示されます。私はMicrosoft.Build.Evaluation.Projectクラスを使用して多くの運がなかった、それは.propsファイルを見つけることができないという不満を持ち、間違ったディレクトリを探します。ただし、.vcxprojファイルを正しく解析します:)

+0

あなたの説明のためにHansに感謝します。私も評価なしで使ってみました。他のエラーが発生しました(エラーMSB4127: "SetEnv"タスクをアセンブリからインスタンス化できませんでした)... MSBuild \ Microsoft.Cpp \ v4.0 \ v120 \ Microsoft.Build.CppTasks.Common.dll "私は意味がない(私はちょうどv120がインストールされている)、そしてcmdからビルドするのが魅力的なように動作しているかどうかを確認するために、Microsoft.Build.Frameworkアセンブリの同じバージョンを使用してタスクアセンブリがビルドされていることを確認します。誰でもこれに成功していますか? – Wizche