2012-01-10 7 views
0

Visual Studio(2010)マクロを使用してASPXページのテキストをリテラルコントロールに置き換えようとしていますが、コントロールマークアップが置換時に変更されているようです。Visual Studioマクロを使用してテキストをコントロールマークアップに置き換えます。

私は次のようにASPXページを持っている:

私はと交換しようとしている
<span>Foo</span> 

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

これは「foo」というテキストを強調することによって行われているとテキストを置き換えるマクロを実行します。ただし、マクロを実行すると、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では、ファイルが変更されたことを知らせるプロンプトが表示され、更新を確認するために再ロードする必要があるかどうかを尋ねられますが、実際のファイルの内容は現在正しくなっています。

コードは(この例では単純化)次のようになります。

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

関連する問題