ReactJS.NET - 捆绑包 - TinyIoCResolutionException:无法解析类型:React.IReactEnvironment
ReactJS.NET - Bundles - TinyIoCResolutionException: Unable to resolve type: React.IReactEnvironment
我正在尝试通过 System.Web.Optimization.React 通过 ASP.NET 缩小和优化来缩小我的 .JSX 文件。我已经安装了 MVC4 React 包和优化包,但每当我尝试包含一个包时,我都会得到以下信息:
React.TinyIoC.TinyIoCResolutionException: Unable to resolve type: React.IReactEnvironment
InnerException 总是 null
我的包设置如下:
bundles.Add(new ScriptBundle("~/Bundle/Scripts/ReactJS").Include(
"~/Scripts/React/react-0.12.2.js",
"~/Scripts/React/react-with-addons-0.12.2.js",
"~/Scripts/React/JSXTransformer-0.12.2.js"
));
bundles.Add(new JsxBundle("~/Bundle/Scripts/ReactCalendar").Include(
"~/Scripts/React/Calendar/Main.react.jsx",
"~/Scripts/React/Calendar/Components/Calendar.react.jsx",
"~/Scripts/React/Calendar/Components/CalendarEvent.react.jsx",
"~/Scripts/React/Calendar/Components/CalendarControls.react.jsx",
"~/Scripts/React/Calendar/Components/CalendarTimeSlots.react.jsx"
));
并包含在视图中:
@section scripts{
@Scripts.Render("~/Bundle/Scripts/ReactJS");
@Scripts.Render("~/Bundle/Scripts/ReactCalendar");
}
在线总是抛出错误:
@Scripts.Render("~/Bundle/Scripts/ReactCalendar");
有人知道如何解决/调试这个问题吗?如果需要更多信息,请告诉我。
"Unable to resolve type: React.IReactEnvironment" with no InnerException 通常意味着 ReactJS.NET 由于某种原因没有正确初始化。在网络应用程序中,ReactJS.NET 通过使用 WebActivator 处理初始化。确保您的项目正在引用 React.Web
、React.Web.Mvc4
和 WebActivatorEx
,并且所有相应的 .dll 文件都在您应用程序的 bin
目录中。
此外,您不需要(也不应该)在您的 JavaScript 包中包含 JSXTransformer,因为 ReactJS.NET 所有 JSX 编译服务器端都会执行。
我不确定这是否是我面临的同一个问题,但我用谷歌搜索了完全相同的错误,发现这个 SO 主题是第一个命中,没有明确的答案,所以我想我会提供我的解决方案。
我在 MVC 应用程序中使用 .NET 4.5,React.Web.Mvc4 v3.0.0.
我在 this comment on Github 的帮助下设法解决了这个问题。
这是我的全部 ReactConfig.cs
:
using React;
using React.TinyIoC;
using React.Web.TinyIoC;
namespace NS.Project
{
public static class ReactConfig
{
public static void Configure()
{
Initializer.Initialize(AsPerRequestSingleton);
ReactSiteConfiguration.Configuration
.SetLoadBabel(false)
.AddScriptWithoutTransform("~/React/dist/server.bundle.js");
}
private static TinyIoCContainer.RegisterOptions AsPerRequestSingleton(
TinyIoCContainer.RegisterOptions registerOptions)
{
return TinyIoCContainer.RegisterOptions.ToCustomLifetimeManager(
registerOptions,
new HttpContextLifetimeProvider(),
"per request singleton"
);
}
}
}
然后,我从 Application_Start
显式调用 ReactConfig.Configure
。
似乎从 React.Web.MVc4 版本 4.0.0 开始有所改变。之前的版本没有这个问题。
如所述here
通过 NuGet 安装 React.Web.Mvc4 包。您还需要安装一个 JS 引擎才能使用(推荐使用 V8 或 ChakraCore)。有关详细信息,请参阅 JSEngineSwitcher 文档。
要使用 V8,请添加以下包:
JavaScriptEngineSwitcher.V8
JavaScriptEngineSwitcher.V8.Native.win-x64
ReactConfig.cs 将自动为您生成。更新它以注册 JS 引擎和您的 JSX 文件:
using JavaScriptEngineSwitcher.Core;
using JavaScriptEngineSwitcher.V8;
[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(React.Sample.Mvc4.ReactConfig), "Configure")]
namespace React.Sample.Mvc4
{
public static class ReactConfig
{
public static void Configure()
{
ReactSiteConfiguration.Configuration
.AddScript("~/Content/Sample.jsx");
JsEngineSwitcher.Current.DefaultEngineName = V8JsEngine.EngineName;
JsEngineSwitcher.Current.EngineFactories.AddV8();
}
}
}
如果有人需要这个,只需安装这个 nuget,它就会解决这个问题。
System.Web.Optimization.React
我正在尝试通过 System.Web.Optimization.React 通过 ASP.NET 缩小和优化来缩小我的 .JSX 文件。我已经安装了 MVC4 React 包和优化包,但每当我尝试包含一个包时,我都会得到以下信息:
React.TinyIoC.TinyIoCResolutionException: Unable to resolve type: React.IReactEnvironment
InnerException 总是 null
我的包设置如下:
bundles.Add(new ScriptBundle("~/Bundle/Scripts/ReactJS").Include(
"~/Scripts/React/react-0.12.2.js",
"~/Scripts/React/react-with-addons-0.12.2.js",
"~/Scripts/React/JSXTransformer-0.12.2.js"
));
bundles.Add(new JsxBundle("~/Bundle/Scripts/ReactCalendar").Include(
"~/Scripts/React/Calendar/Main.react.jsx",
"~/Scripts/React/Calendar/Components/Calendar.react.jsx",
"~/Scripts/React/Calendar/Components/CalendarEvent.react.jsx",
"~/Scripts/React/Calendar/Components/CalendarControls.react.jsx",
"~/Scripts/React/Calendar/Components/CalendarTimeSlots.react.jsx"
));
并包含在视图中:
@section scripts{
@Scripts.Render("~/Bundle/Scripts/ReactJS");
@Scripts.Render("~/Bundle/Scripts/ReactCalendar");
}
在线总是抛出错误:
@Scripts.Render("~/Bundle/Scripts/ReactCalendar");
有人知道如何解决/调试这个问题吗?如果需要更多信息,请告诉我。
"Unable to resolve type: React.IReactEnvironment" with no InnerException 通常意味着 ReactJS.NET 由于某种原因没有正确初始化。在网络应用程序中,ReactJS.NET 通过使用 WebActivator 处理初始化。确保您的项目正在引用 React.Web
、React.Web.Mvc4
和 WebActivatorEx
,并且所有相应的 .dll 文件都在您应用程序的 bin
目录中。
此外,您不需要(也不应该)在您的 JavaScript 包中包含 JSXTransformer,因为 ReactJS.NET 所有 JSX 编译服务器端都会执行。
我不确定这是否是我面临的同一个问题,但我用谷歌搜索了完全相同的错误,发现这个 SO 主题是第一个命中,没有明确的答案,所以我想我会提供我的解决方案。
我在 MVC 应用程序中使用 .NET 4.5,React.Web.Mvc4 v3.0.0.
我在 this comment on Github 的帮助下设法解决了这个问题。
这是我的全部 ReactConfig.cs
:
using React;
using React.TinyIoC;
using React.Web.TinyIoC;
namespace NS.Project
{
public static class ReactConfig
{
public static void Configure()
{
Initializer.Initialize(AsPerRequestSingleton);
ReactSiteConfiguration.Configuration
.SetLoadBabel(false)
.AddScriptWithoutTransform("~/React/dist/server.bundle.js");
}
private static TinyIoCContainer.RegisterOptions AsPerRequestSingleton(
TinyIoCContainer.RegisterOptions registerOptions)
{
return TinyIoCContainer.RegisterOptions.ToCustomLifetimeManager(
registerOptions,
new HttpContextLifetimeProvider(),
"per request singleton"
);
}
}
}
然后,我从 Application_Start
显式调用 ReactConfig.Configure
。
似乎从 React.Web.MVc4 版本 4.0.0 开始有所改变。之前的版本没有这个问题。
如所述here
通过 NuGet 安装 React.Web.Mvc4 包。您还需要安装一个 JS 引擎才能使用(推荐使用 V8 或 ChakraCore)。有关详细信息,请参阅 JSEngineSwitcher 文档。
要使用 V8,请添加以下包:
JavaScriptEngineSwitcher.V8
JavaScriptEngineSwitcher.V8.Native.win-x64
ReactConfig.cs 将自动为您生成。更新它以注册 JS 引擎和您的 JSX 文件:
using JavaScriptEngineSwitcher.Core;
using JavaScriptEngineSwitcher.V8;
[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(React.Sample.Mvc4.ReactConfig), "Configure")]
namespace React.Sample.Mvc4
{
public static class ReactConfig
{
public static void Configure()
{
ReactSiteConfiguration.Configuration
.AddScript("~/Content/Sample.jsx");
JsEngineSwitcher.Current.DefaultEngineName = V8JsEngine.EngineName;
JsEngineSwitcher.Current.EngineFactories.AddV8();
}
}
}
如果有人需要这个,只需安装这个 nuget,它就会解决这个问题。
System.Web.Optimization.React