2012-01-10 3 views
0

Visual Studio (2010) 매크로를 사용하여 리터럴 컨트롤로 ASPX 페이지의 일부 텍스트를 바꾸려고하는데 컨트롤 태그가 바뀌면 수정되는 것 같습니다.Visual Studio 매크로를 사용하여 컨트롤 태그로 텍스트 바꾸기

내가 가진 ASPX 페이지에있어 다음과 같은 : 내가 교체하기 위해 노력하고있어

<span>Foo</span> 

:

<span><asp:Literal Text="<%$ Resources:Foo %>" runat="server" /></span> 

이것은 "푸"텍스트를 강조 표시하고 수행되고있다 그 다음 매크로를 실행하여 텍스트를 대체합니다. 그러나 매크로를 실행할 때 Visual Studio에서는 입력 한 텍스트를 정확하게 붙여 넣지 않습니다.

내 매크로 코드는 다음과 같습니다

Dim Selection As TextSelection = DTE.ActiveDocument.Selection 
Selection.Text = "<asp:Literal Text=""<%$ Resources:Foo %>"" runat=""Server""/>" 

을하지만, 매크로가 실행, 그것은이 삽입 할 때 : (다른 사람이 정확하지만)

<asp:Literal Text=""<%$ Resources:Foo %>" runat="Server" /> %>" 

주에게 큰 따옴표의 첫 번째 세트를 끝에 %>"이 추가되었습니다. 대체 텍스트에 따옴표가 포함 된 경우에 발생하는 것으로 보입니다. 예를 들어, 선택한 텍스트를 <asp:Literal runat=Server"/>으로 바꾸려고하면 올바르게 작동합니다.

왜 이런 일이 일어나는 지 알고 있습니까? 어떻게 해결할 수 있습니까?

감사합니다.

답변

0

최종 해결 방법이 있지만 결국 해결책을 찾았습니다. 이상한 동작은 Visual Studio에서 '붙여 넣기시 포맷 코드'설정에 의해 부분적으로 발생하는 것으로 보입니다. Visual Studio에서는이 옵션을 비활성화하면 문제가 큰 따옴표로 수정되지만 마지막에 추가되는 마크 업은 수정되지 않습니다.

이 문제를 해결하기 위해 텍스트를 임의의 문자열로 바꾸고 새 텍스트로 파일을 다시 작성합니다. 이 단점은 Visual Studio에서 파일이 변경되었다는 메시지를 표시하고 다시로드해야하는지 여부를 묻는 메시지입니다.이 파일은 업데이트를 확인하기 위해 수행해야하지만 실제 파일 내용은 이제 정확합니다.

코드 (이 예를 들어 간체) 다음과 같습니다

Sub ReplaceText() 

    'This is the markup we want to replace our selection with 
    Dim LiteralMarkup As String = "<asp:Literal Text=""<%$ Resources:Foo %>"" runat=""Server""/>" 

    'Generate random GUID to do initial replace 
    Dim RandomGuid As String = Guid.NewGuid().ToString() 

    'Now replace the selection with the generated guid 
    DTE.ActiveDocument.Selection.Text = RandomGuid 

    'Save the file 
    DTE.ActiveDocument.Save() 

    'Now replace the generated guid with the real markup that we want 
    Dim NewText As String = File.ReadAllText(DTE.ActiveDocument.FullName).Replace(RandomGuid, LiteralMarkup) 

    'Rewrite the file (will cause VS to prompt user to reload file) 
    File.WriteAllText(CurrentPath, NewText) 

End Sub 

그것은 이상적인 솔루션 아니지만 트릭을 수행합니다.

관심있는 사람에게이 코드는 aspx 또는 ascx 파일의 텍스트를 리소스 파일로 옮기는 프로세스를 쉽게하기 위해 고안된 매크로에 사용됩니다. 전체 코드는 여기에서 확인할 수 있습니다. https://gist.github.com/1591239

관련 문제