7

我正在尝试通过 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");

有人对如何解决/调试这个有任何想法吗?如果需要更多信息,请告诉我。

4

4 回答 4

5

我不确定这是否是我面临的同一个问题,但我用谷歌搜索了完全相同的错误,发现这个 SO 主题是第一个热门话题,没有明确的答案,所以我想我会提供我的解决方案。


我在 MVC 应用程序中使用 .NET 4.5 和 React.Web.Mvc4 v3.0.0。

在 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"
            );
        }
    }
}

然后,我ReactConfig.ConfigureApplication_Start.

于 2017-01-05T13:04:52.923 回答
3

Unable to resolve type: React.IReactEnvironment ”没有 InnerException 通常意味着 ReactJS.NET 由于某种原因没有正确初始化。在 Web 应用程序中,ReactJS.NET 通过使用 WebActivator 来处理初始化。确保您的项目引用React.Web,React.Web.Mvc4WebActivatorEx, 并且所有相应的 .dll 文件都在您的应用程序bin目录中。

此外,您不需要(也不应该)在 JavaScript 包中包含 JSXTransformer,因为 ReactJS.NET 会在服务器端完成所有 JSX 编译。

于 2015-03-02T22:29:44.960 回答
2

从 React.Web.MVc4 版本 4.0.0 看起来有些变化。之前的版本没有这个问题。

如此处所述

通过 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();
        }
    }
}
于 2019-01-13T16:56:13.090 回答
0

如果有人需要这个,只需安装这个 nuget,它就会解决这个问题。

System.Web.Optimization.React

于 2022-02-28T16:04:46.597 回答