Короткий ответ: Нет, нельзя использовать Scripts.Render
без httpContext. Но может возникнуть обходное решение, если вы хотите издеваться над ним (см. Ниже).
Подробный ответ: Microsoft сделала некоторые неудачные проектные решения. Я декомпилировал метод Render библиотеки System.Web.Optimization (часть системы веб-оптимизации Microsoft.ASP.NET, доступной через NUGET) и нашел: Scrips.Render
(который вызывает Scripts.RenderFormat
внутренне) вызывает Scripts.Manager.RenderExplicit(tagFormat, paths)
, чтобы вернуть результат рендеринга.
Эта функция использует this.DeterminePathsToRender(paths)
внутренне для разрешения путей с помощью this.ResolveVirtualPath(current)
. И если вы посмотрите на него, вы увидите, что он использует this._httpContext
разрешить путь:
internal string ResolveVirtualPath(string virtualPath)
{
Uri uri;
if (Uri.TryCreate(virtualPath, UriKind.Absolute, out uri))
{
return virtualPath;
}
string arg = "";
if (this._httpContext.Request != null)
{
arg = this._httpContext.Request.AppRelativeCurrentExecutionFilePath;
}
return this.ResolveUrlMethod(arg, virtualPath);
}
Так, к сожалению, нет никакого пути вокруг HttpContext. Еще один способ, которым я думал, - наследовать класс myScriptClass из класса Scripts, а затем установить внутреннее свойство Context через конструктор myScriptClass. Но это также невозможно, потому что Scripts - это статический класс, который вы не можете наследовать (подробнее см. this topic).
Но вы можете использовать BundleContext.HttpContext
, чтобы получить или установить в настоящее время используется HttpContext.
Однако, если у вас есть доступ только к определенному объекту BundleCollection
, то у вас нет возможности, так как его .Context
свойство является внутренним.
Для консольного приложения это означает, что вам, возможно, придется создать объект поддельного запроса и HttpContext, который вы должны назначить BundleContext.HttpContext, прежде чем использовать метод визуализации. Вы можете посмотреть here или there, чтобы получить более подробную информацию, как это сделать.
Можете ли вы включить стек вызовов? – nikmd23