2014-02-13 1 views
0

저는 VB.net에서 C# 프로젝트 변환으로 작업하고 있습니다. 오류가 발생합니다. 어떤 해결책입니까?'' 'Session'에 대한 정의가없고 확장 메서드가 없습니다 '' 'object'유형의 첫 번째 인수를 수락 할 수 없습니다.

1 - '개체'에 '세션'에 대한 정의가없고 확장 메서드가 없음 '개체'유형의 첫 번째 인수를 허용하는 '세션'을 찾을 수 있습니다 (사용 지시문이나 어셈블리 참조가 누락 되었습니까?) 2 - 'object'에 'Request'에 대한 정의가없고 확장 메서드가 없습니다 'object'유형의 첫 번째 인수를 허용하는 'Session'을 찾을 수 있습니다 (using 지시어 또는 어셈블리 참조가 누락 되었습니까?)

온라인 무료 변환 도구를 사용하고 있습니다. 내 변환 코드는 아래와 같습니다.

public bool DisplayMessageWindow(ref object Caller, string MessageToDisplay) 
{ 
    bool functionReturnValue = false; 
    long P = 0; 

    functionReturnValue = false; 

    if (IsCalledByMessageURL(ref Caller)) { 
     return functionReturnValue; 
    } 

    LogMessage("Displaying Message Window (Called From): " + Caller.Request.RequestUrl.ToString()); 


    LogMessage("     Message To Display : " + MessageToDisplay, false); 

    Caller.Session["MessageToDisplay"] = MessageToDisplay; 

    Caller.Session["RedirectURL"] = Caller.Request.Url.ToString(); 
    PriorURL = Caller.Session["RedirectURL"]; 
    SetRedirectURL(ref Caller); 

    LogMessage("Modified Redirect URL to : " + Caller.Session["RedirectURL"]); 

    if ((Caller.Request.Form("partssn") != null)) { 
     Caller.Session["SRTSessionId"] = Caller.Request.Form("SRTSessionId"); 
     Caller.Session["partssn"] = Caller.Request.Form("partssn"); 
     Caller.Session["erid"] = Caller.Request.Form("erid"); 
    } else { 
     Caller.Session["SessionID"] = Session.SessionID.ToString(); 
     Caller.Session["partssn"] = Caller.Request.Form("txtUserName"); 
     //Caller.Session["partssn"] = Session["loginUser"] 
    } 

    LogMessage("Redirect To: " + Caller.Session["RedirectURL"]); 
    functionReturnValue = true; 
    return functionReturnValue; 
    //Caller.Response.Redirect("LoadPartData.aspx") 
} 

내 vb.net 코드는 VB 코드가 발신자 매개 변수는 잘못된 VB 코드를 만드는 너무 VB 코드를 입력 개체 인 경우 런타임에 바인딩에 의존하는 것을

Function DisplayMessageWindow(ByRef Caller As Object, ByVal MessageToDisplay As String) As Boolean 
    Dim P As Long 

    DisplayMessageWindow = False 

    If IsCalledByMessageURL(Caller) Then 
     Exit Function 
    End If 

    LogMessage("Displaying Message Window (Called From): " + Caller.Request.Url.ToString) 
    LogMessage("     Message To Display : " + MessageToDisplay) 

    Caller.Session("MessageToDisplay") = MessageToDisplay 

    Caller.Session("RedirectURL") = Caller.Request.Url.ToString 
    PriorURL = Caller.Session("RedirectURL") 
    SetRedirectURL(Caller) 

    LogMessage("Modified Redirect URL to : " + Caller.Session("RedirectURL")) 

    If Not (Caller.Request.Form("partssn") Is Nothing) Then 
     Caller.Session("SRTSessionId") = Caller.Request.Form("SRTSessionId") 
     Caller.Session("partssn") = Caller.Request.Form("partssn") 
     Caller.Session("erid") = Caller.Request.Form("erid") 
    Else 
     Caller.Session("SessionID") = Session.SessionID.ToString() 
     Caller.Session("partssn") = Caller.Request.Form("txtUserName") 
     'Caller.Session("partssn") = Session("loginUser") 
    End If 

    LogMessage("Redirect To: " + Caller.Session("RedirectURL")) 
    DisplayMessageWindow = True 
    'Caller.Response.Redirect("LoadPartData.aspx") 
End Function 
+1

'ref 객체 호출자 '때문에. 그것은 아마도 다른 유형이어야합니다. – CodeCaster

+0

VB 코드를 사용하면 도움이 될 수 있습니다. –

+0

@ Eric.Y.Fan 지금 확인하십시오 – user2913128

답변

0

@jmcilhinney는 두 가지 모두에 적합합니다. Option Strict는 좋은 아이디어이며 ByRef 매개 변수 전달에 대한 이유가 없습니다. 그러나 Option Strict로 이동하면이 코드의 일반적인 상태와 원본 작성자가 무료 후기 바인딩을 좋아한다는 사실을 감안할 때 크리스마스 트리와 같은 컴파일러가 표시 될 수 있습니다.

따라서이 포트를 통해 연결하려는 경우 object 대신 발신자를 dynamic으로 지정할 수 있습니다. 이는 매개 변수가 VB에서 전달되는 방식을 정확하게 번역 한 것입니다.

+0

감사합니다 @jmcilhinney와 @ Paul keister, 문제가 해결되었습니다. – user2913128

0

이다. VB에서 Option Strict On을 사용하면 코드가 컴파일되지 않아야합니다. 이 인수가 특정 형식이 될 경우 VB 코드 및 C# 코드에서 해당 형식을 선언하십시오.

또한 참조로 전달되는 이유는 무엇입니까? 메소드 내부에서 그 매개 변수에 무엇을 할당하고 있습니까? 내가 볼 수있는 곳이 없으므로 참조로 전달할 필요가 없습니다. 즉 값으로 전달하십시오. 다시 말하지만, 이는 VB뿐만 아니라 C#에도 적용됩니다.

관련 문제