2012-10-22 12 views
7

पर त्रुटि लागू नहीं की गई है, मैं वर्तमान में एक विजुअल स्टूडियो प्लगइन (VSPackage) विकसित कर रहा हूं जो अंत में कॉल संबंधों को देखने में सक्षम होना चाहिए। उनका प्रतिनिधित्व करने के लिए मैं Graph# library का उपयोग करना चाहता हूं जो ग्राफ को प्रबंधित करता है (ओवरलैपिंग किनारों से परहेज करता है)। दुर्भाग्य से मुझे अपने एक्सएएमएल में रनटाइम पर निम्न त्रुटि संदेश मिलता है:विधि या संचालन बाध्यकारी

XamlParseException: विधि या संचालन लागू नहीं किया गया है।

त्रुटि <graph:CallRelationGraphLayout Graph="{Binding RelationGraph}"/> टैग पर पॉप अप करती है।

<UserControl x:Class="Biocoder.InteractiveExploration.View.ExplorationControl" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:graphsharp="clr-namespace:GraphSharp.Controls;assembly=GraphSharp.Controls" 
     xmlns:zoom="clr-namespace:WPFExtensions.Controls;assembly=WPFExtensions" 
     xmlns:graph="clr-namespace:Biocoder.InteractiveExploration.Graph" 
     xmlns:viewmodels="clr-namespace:Biocoder.InteractiveExploration.ViewModel" 
     xmlns:controls="clr-namespace:Biocoder.InteractiveExploration.Controls" mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 



<UserControl.DataContext> 
    <viewmodels:ExplorationToolViewModel/> 
</UserControl.DataContext> 

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 

    <zoom:ZoomControl Grid.Row="1" 
         Zoom="0.2" 
         ZoomBoxOpacity="0.5" 
         Background="Yellow"> 

     <graph:CallRelationGraphLayout Graph="{Binding RelationGraph}"/> 

    </zoom:ZoomControl> 

</Grid> 

</UserControl> 

मैंने अपने चरम, किनारे और ग्राफ लेआउट कक्षाएं भी बनाई हैं। अंततः मेरे ग्राफ को विधियों (किनारों) के बीच कॉल संबंध (किनारों) का प्रतिनिधित्व करना चाहिए।

MethodVertex.cs

public class MethodVertex 
{ 
    public string ID { get; private set; } 
    public bool IsMale { get; private set; } 

    public MethodVertex(string id, bool isMale) 
    { 
     ID = id; 
     IsMale = isMale; 
    } 

    public override string ToString() 
    { 
     return string.Format("{0}-{1}", ID, IsMale); 
    } 
} 

RelationEdge.cs

public class RelationEdge : Edge<MethodVertex> 
{ 
    public string Id { get; private set; } 

    public RelationEdge(string id, MethodVertex source, MethodVertex target) 
     : base(source, target) 
    { 
     Id = id; 
    } 
} 

CallRelationGraphLayout.cs

public class CallRelationGraphLayout : GraphLayout<MethodVertex, RelationEdge, CallRelationGraph> 
{} 
private CallRelationGraph _relationGraph; 
public CallRelationGraph RelationGraph 
{ 
    get { return _relationGraph; } 
    set 
    { 
     if (value != _relationGraph) 
     { 
      _relationGraph = value; 
      NotifyPropertyChanged("RelationGraph"); 
     } 
    } 
} 

public event PropertyChangedEventHandler PropertyChanged; 

public void NotifyPropertyChanged(string propertyName) 
{ 
    if (PropertyChanged != null) 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
} 

क्या मैं शायद यह भी उल्लेख करना चाहिए कि मैं निम्न त्रुटि कभी कभी दिखाया गया है, लेकिन परियोजना है: 510,403,210 CallRelationGraph.cs

public class CallRelationGraph : BidirectionalGraph<MethodVertex, RelationEdge> 
{ 
    public CallRelationGraph() 
    {} 

    public CallRelationGraph(bool allowParallelEdges) 
     : base(allowParallelEdges) 
    { } 

    public CallRelationGraph(bool allowParallelEdges, int vertexCapacity) 
     : base(allowParallelEdges, vertexCapacity) 
    {} 
} 

ExplorationToolViewModel में इस प्रकार मैं RelationGraph घोषित संकलन और चलाता है।

GenericArguments [1], 'Biocoder.InteractiveExploration.Graph.RelationEdge', पर 'GraphSharp.Algorithms.Layout.ILayoutAlgorithm`3 [TVertex, TEdge, TGraph]' प्रकार की बाधा 'TEdge' का उल्लंघन करती है।

शायद यह समस्या का स्रोत है, लेकिन मैंने इसे संकलित करने के बाद से इसे अनदेखा कर दिया और मैंने इसे tutorial से संबंधित किया।

अजीब बात यह है कि यह वास्तव में ग्राफ # द्वारा प्रदान किए गए डीएलएल का उपयोग करके एक सामान्य WPF अनुप्रयोग में काम करता है। जब मैं ग्राफ़-प्रॉपर्टी छोड़ देता हूं तो त्रुटि दिखाई नहीं देती है इसलिए मुझे लगता है कि इसे ग्राफ प्रॉपर्टी के साथ करना है। इसे हल करने के बारे में कोई संकेत?

अग्रिम में बहुत बहुत धन्यवाद!

+0

कृपया 'एक्सप्लोरेशन टूल व्यू मॉडेल' में 'रिलेशनशिप' संपत्ति की घोषणा भी पोस्ट करें। – Clemens

+0

@Clemens धन्यवाद! मैंने अभी भी अनुरोधित घोषणा भी जोड़ा है। सब कुछ मेरी राय में ठीक होना चाहिए: एस – Biocoder

+0

और 'कॉलरेलेशनग्राफलाउट' कक्षा – Palesz

उत्तर

1

एक VSPackage में ग्राफ # का उपयोग करते समय मुझे एक ही समस्या का अनुभव हुआ है। मैं ग्राफ के लिए बाइंडिंग का उपयोग न करके इस मुद्दे को दूर करने में सक्षम था, लेकिन CodeBehind में Graph संपत्ति असाइन करके।

इससे अपवाद हुआ कि Graph संपत्ति को निर्दिष्ट करते समय WPFExtensions असेंबली लोड नहीं की जा सकी। मुझे संदेह है कि इसका कारण ग्राफशर्प में है।नियंत्रण, एक्सएएमएल में असेंबली का उपयोग किया जाता है, लेकिन संकलन करते समय संदर्भ जोड़ा नहीं जाता है क्योंकि कोड में कोई संदर्भ नहीं है। मैं Graph संपत्ति सौंपने से पहले निम्न पंक्ति जोड़कर इसे ठीक करने में सक्षम था:

var a = System.Reflection.Assembly.Load("WPFExtensions, Version=1.0.3437.34043, Culture=neutral, PublicKeyToken=null"); 

इस लाइन WPFExtensions पुस्तकालय लोड होने से पहले WPF XAML में संदर्भ के आधार पर लोड करने के लिए कोशिश करता है। बाद में, ग्राफ दिखाया गया था।

+0

यह मेरे लिए काम किया! बस 'System.Reflection.Assembly.Load ("RequiredLibrary, Version = {VersionNumber}, संस्कृति = तटस्थ, PublicKeyToken = null") जोड़ना; '' प्रारंभिक कॉम्पोनेंट(); 'लाइन से पहले XAML पृष्ठ के निर्माता में' छल। धन्यवाद! – klugerama

0

मेरे मामले में एक असेंबली को आउटपुट फ़ोल्डर में कॉपी नहीं किया गया था क्योंकि प्रतिलिपि स्थानीय को गलत पर सेट किया गया था। स्थानीय प्रतिलिपि को सही हल करने के लिए इसे हल करना। (एक असेंबली ए असेंबली बी पर निर्भर था जिसमें स्थानीय ध्वज की प्रतिलिपि नहीं थी।)

संबंधित मुद्दे