簡體   English   中英

Visual Studio 擴展:使用 VCFileConfiguration 編譯文件失敗

[英]Visual Studio Extension: Compile file with VCFileConfiguration fails

我正在編寫一個簡單的 C# Visual Studio 擴展,我需要在其中使用當前項目配置編譯 C++ 文件。 我嘗試使用VCFileConfiguration.Compile來完成這項任務。 如果我將 waitOnBuild 參數設置為 false,它就可以正常工作。 如果我將它設置為 true 以實現阻塞調用,我會收到 Microsoft.VisualStudio.ProjectSystem.ProjectException 異常,無論文件是否可以無錯誤地編譯。

這是一個錯誤還是我需要設置什么特別的東西?

到目前為止我的代碼(剝離錯誤處理):

var projectItem = dte.ActiveDocument.ProjectItem;
var project = projectItem.ContainingProject;
VCProject vcProject = (VCProject)project.Object;
VCConfiguration activeConfiguration = vcProject.ActiveConfiguration;

VCFile vcFile = projectItem.Object as VCFile;
IVCCollection fileConfigCollection = vcFile.FileConfigurations;
VCFileConfiguration fileConfig = fileConfigCollection.Item(activeConfiguration.Name);
try
{
    fileConfig.Compile(false, true);
}
catch (Microsoft.VisualStudio.ProjectSystem.ProjectException exception)
{
    // Fails all the time if waitOnBuild == true
}

詳細的異常:

  • 消息:“構建失敗。”
  • 來源:“Microsoft.VisualStudio.ProjectSystem.Utilities.v14.0”

調用棧:

at Microsoft.VisualStudio.ProjectSystem.Utilities.ProjectErrorUtilities.ThrowProjectExceptionHelper(Exception innerException, String unformattedMessage, Object[] args)
at Microsoft.VisualStudio.ProjectSystem.Utilities.ProjectErrorUtilities.ThrowProjectException(String message)
at Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCFileConfigurationShim.<>c__DisplayClass4_0.<<Compile>b__0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.ApartmentMarshaler.<>c__DisplayClass7_0.<<Invoke>b__0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.VisualStudio.Threading.JoinableTask.CompleteOnCurrentThread()
at Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.ApartmentMarshaler.Invoke(Func`1 method)
at Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCFileConfigurationShim.Compile(Boolean forceBuild, Boolean waitOnBuild)
at IncludeFormatter.Commands.PurgeIncludes.MenuItemCallback(Object sender, EventArgs e) in C:\Users\Andreas\Development\current_development\IncludeFormatter\IncludeFormatter\Commands\PurgeIncludes.cs:line 144

首先:嘗試重新啟動 Visual Studio 和您的計算機- 這是解決您問題的最常見解決方案。

如果以上方法沒有幫助:嘗試清理解決方案並刪除“vspscc”和“vssscc”文件,然后重新啟動 VS 並“全部重建”。

最終選項:在 Visual Studio 中“

工具/選項/項目和解決方案/構建和運行設置區域:嘗試更改

“MSBuild 項目構建輸出詳細程度”到“診斷”

這樣您就可以確定您的項目中出現了什么問題。

我能夠瞥見內部代碼:這兩個選項都已明確棄用,並且錯誤已作為文檔/api 錯誤提交。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM