I thought I'd post an easy workaround for those that might be looking for one and stumble upon this question.
While ToMvcHtmlString is internal, it is pretty easy to bypass the need to use it uses public methods:
From the MVC source:
internal MvcHtmlString ToMvcHtmlString(TagRenderMode renderMode) {
return MvcHtmlString.Create(ToString(renderMode));
}
Both MvcHtmlString.Create and TagBuilder.ToString are public so just replace
return tagBuilder.ToMvcHtmlString(TagRenderMode.Normal);
with
return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal));
and you are good to go! Works great for me. Not sure why they even bothered to make a separate internal method.