2011-04-06 14 views
5

में टी 4 एमवीसी जेनरेट कोड के साथ संकलन त्रुटि हम एएसपी.Net 4 & एमवीसी 3 फ्रेमवर्क के साथ एक वेब अनुप्रयोग विकसित कर रहे हैं। मैंने NuGet के माध्यम से T4MVC स्थापित किया है और सभी दृश्य, नियंत्रक और स्थैतिक सामग्री सफलतापूर्वक मजबूत प्रकार के रूप में उत्पन्न की जाती हैं।एक एमवीसी 3 प्रोजेक्ट

लेकिन, जब मैं इस परियोजना को संकलित करने का प्रयास करें, तो इसे जनरेट फ़ाइल T4MVC.cs में एक त्रुटि है, जो जन्म देती है:

[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] 
public class T4MVC_ViewResultBase : System.Web.Mvc.ViewResultBase, 
                  IT4MVCActionResult 
{ 
    public T4MVC_ViewResultBase(string area, string controller, string action): 
     base() { 
     this.InitMVCT4Result(area, controller, action); 
    } 

    protected override void FindView(System.Web.Mvc.ControllerContext context){} 

    public string Controller { get; set; } 
    public string Action { get; set; } 
    public RouteValueDictionary RouteValueDictionary { get; set; } 
} 

:

'T4MVC_ViewResultBase.FindView(System.Web.Mvc.ControllerContext)': 
return type must be 'System.Web.Mvc.ViewEngineResult' to match overridden member 
'System.Web.Mvc.ViewResultBase.FindView(System.Web.Mvc.ControllerContext)' 

इस स्रोत उत्पन्न कोड है त्रुटि का कहना है कि:

protected override void FindView(System.Web.Mvc.ControllerContext context) { } 

होना चाहिए:

protected override ViewEngineResult 
       FindView(System.Web.Mvc.ControllerContext context) { } 

लेकिन फिर यह एक और संकलन त्रुटि उठाता है, क्योंकि इस विधि को कोड वापस करना चाहिए।

हम आधार वर्ग यह विरासत में , से System.Web.Mvc.ViewResultBase चेक करते हैं, यह वास्तव में FindView() वाणी ViewEngineResult वापसी प्रकार के साथ:

public abstract class ViewResultBase : ActionResult 
    { 
     ... 
     protected abstract ViewEngineResult FindView(ControllerContext context); 
    } 

किसी को भी इस मिल गया है त्रुटि? क्या यह एमवीसी संस्करण के साथ कुछ करने के लिए है, क्या हम एमवीसी 3 का उपयोग कर रहे हैं?

बहुत बहुत धन्यवाद! सेर्गी

+0

हम्म। यह मुश्किल है। नहीं, संस्करण के साथ कुछ भी नहीं, t4mvc मेरे mvc3 ऐप के लिए ठीक काम करता है। आशा है कि डेविड एबो इस जवाब देंगे =) – gideon

उत्तर

5

मुझे लगता है कि मुझे समस्या दिखाई देती है, और यह एक टी 4 एमवीसी बग है। लेकिन उम्मीद है कि यह काम करना आसान है।

क्या आपके पास एक नियंत्रक कार्रवाई है जिसे ViewResultBase को वापस करने के लिए घोषित किया गया है? यदि हां, तो क्या आप वापसी प्रकार को ActionResult के रूप में बदल सकते हैं? या वैकल्पिक रूप से आप रिटर्न प्रकार को बदल सकते हैं जो कि ठोस प्रकार है कि आप लौट रहे हैं (उदा। यह ViewResult है)?

टी 4 एमवीसी बग यह है कि यह ActionResult प्रकारों में गैर-शून्य विधियों को सही ढंग से ओवरराइड नहीं करता है।

+0

ठीक है, मैं एक नज़र डालूंगा और आपको बताउंगा। – Sergi

+2

हां! वह यह था! मैं डेवलपर से पूछूंगा कि यह कार्रवाई "ViewResultBase" क्यों लौट रही है। इसे "ViewResult" में बदलकर चाल बनाई गई। मैं T4MVC.tt टेम्पलेट देख रहा हूं, और मुझे यह 333: '<# = method.IsPublic पर मिला है? "सार्वजनिक": "संरक्षित" #> शून्य को ओवरराइड करें <# = method.Name #> (<# method.WriteFormal पैरामीटर (सत्य); #>) {} ' जहां मैं _void_ हार्डकोड देख सकता था। मुझे लगता है कि इसका मतलब यह है कि _ यह ActionResult प्रकार_ में गैर-शून्य विधियों को सही ढंग से ओवरराइड नहीं करता है। मैंने इसे 'method.ReturnType == "शून्य" की जांच करने की कोशिश की, लेकिन जाहिर है कि आपको कुछ वापस करने की आवश्यकता है ... – Sergi

+1

बहुत धन्यवाद, डेविड। – Sergi