3

在過去的幾年中,我有很多使用C++/CLI的經驗,如果我知道一件事情,那就是混合模式DLL對於設計。我的Winforms C#項目設計師被我的C++/CLI項目殲滅

我有一個CSPROJECT項目,它依賴於CPPPROJECT(使用項目引用,copylocal = true,versionspecific = false,copylocalsattelitedpeendances = false)。

任何時候我嘗試從CSPROJECT打開窗體或用戶控件,我只會得到:system.exception被拋出。

我試過fuslogvw,它沒有綁定任何失敗磁盤。我試過打開第二個devenv進行調試,但是它只是在設計者在其調用堆棧中顯示的同一個地方斷開。這裏是的csproj片斷我CPPPROJECT參考:

<ProjectReference Include="..\dfResultsStructures\dfResultsStructures.csproj"> 
    <Project>{D93C5625-0EB1-4645-95C8-F389758521EE}</Project> 
    <Name>dfResultsStructures</Name> 
    <Private>False</Private> 
    <SpecificVersion>False</SpecificVersion> 
</ProjectReference> 

及以下調用堆棧

Exception of type 'System.Exception' was thrown.  

Instances of this error (1) 

1. Hide Call Stack 

at VSLangProj.Reference.get_Path() 
at Microsoft.VisualStudio.Design.VSTypeResolutionService.AddProjectDependencies(Project project) 
at Microsoft.VisualStudio.Design.VSTypeResolutionService.AssemblyEntry.get_Assembly() 
at Microsoft.VisualStudio.Design.VSTypeResolutionService.AssemblyEntry.Search(String fullName, String typeName, Boolean ignoreTypeCase, Boolean allowPrivate, Assembly& assembly, String description) 
at Microsoft.VisualStudio.Design.VSTypeResolutionService.AssemblyEntry.Search(String fullName, String typeName, Boolean ignoreTypeCase, Assembly& assembly, String description) 
at Microsoft.VisualStudio.Design.VSTypeResolutionService.SearchProjectEntries(AssemblyName assemblyName, String typeName, Boolean ignoreTypeCase, Assembly& assembly) 
at Microsoft.VisualStudio.Design.VSTypeResolutionService.SearchEntries(AssemblyName assemblyName, String typeName, Boolean ignoreCase, Assembly& assembly, ReferenceType refType) 
at Microsoft.VisualStudio.Design.VSTypeResolutionService.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, ReferenceType refType) 
at Microsoft.VisualStudio.Design.Serialization.CodeDom.AggregateTypeResolutionService.GetType(String name, Boolean throwOnError, Boolean ignoreCase) 
at Microsoft.VisualStudio.Design.Serialization.CodeDom.AggregateTypeResolutionService.GetType(String name) 
at System.ComponentModel.Design.Serialization.DesignerSerializationManager.GetRuntimeType(String typeName) 
at System.ComponentModel.Design.Serialization.DesignerSerializationManager.GetType(String typeName) 
at System.ComponentModel.Design.Serialization.DesignerSerializationManager.System.ComponentModel.Design.Serialization.IDesignerSerializationManager.GetType(String typeName) 
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.GetType(IDesignerSerializationManager manager, String name, Dictionary`2 names) 
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.FillStatementTable(IDesignerSerializationManager manager, IDictionary table, Dictionary`2 names, CodeStatementCollection statements, String className) 
at System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager manager, CodeTypeDeclaration declaration) 
at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager) 
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager) 
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.DeferredLoadHandler.Microsoft.VisualStudio.TextManager.Interop.IVsTextBufferDataEvents.OnLoadCompleted(Int32 fReload) 

,請問有什麼我失蹤?我現在可以使用哪些調試策略?

此CPPProject項目是我的CSPROJECT所必需的。如果我刪除CPPProject,我的應用程序設計,但不會編譯。我不想每次想修改表單時都要刪除參考。

+0

您是否嘗試將引用添加到C++/CLI項目的預編譯dll?同樣爲了這個工作正常,你需要有託管的C++方法簽名來從C#代碼調用,否則你必須創建一個包裝器,它可以在非CLR C++本機代碼上執行DLL導入。 – bleepzter 2013-03-12 19:50:07

回答

0

我想這是從堆棧跟蹤的C++/CLI和/或C#參考問題:

VSLangProj.Reference.get_Path() 

嘗試在你的C++/CLI和/或C#項目刪除無效引用。 (無效的引用在項目屬性中標有感嘆號圖標)