在過去的幾年中,我有很多使用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,我的應用程序設計,但不會編譯。我不想每次想修改表單時都要刪除參考。
您是否嘗試將引用添加到C++/CLI項目的預編譯dll?同樣爲了這個工作正常,你需要有託管的C++方法簽名來從C#代碼調用,否則你必須創建一個包裝器,它可以在非CLR C++本機代碼上執行DLL導入。 – bleepzter 2013-03-12 19:50:07