问题标签 [razor-class-library]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
156 浏览

asp.net - 从 RCL 访问服务器上的静态文件

我已经阅读了几十个问题,但似乎没有一个对我有用。我没有使用 IIS。我将 ASP.Net Core 3.1 与 Kestrel 一起使用。

我有一个带有资源文件夹的 Razor 类库,因为我有 css、js、内容等文件夹。我使用这个库,所以我所有的常见 Web Api 项目都可以共享公共文件,而不是到处复制它们。为此,我按照此处的指南进行操作。请参阅那里了解如何配置启动。

这很好用,我可以通过例如访问这些文件localhost/css/site.css。在我的 cshtml 文件中,我可以通过执行包含该文件<link rel="stylesheet" href="~/css/site.css"/>

当我尝试从控制器访问这些文件时,就会出现问题。我有一个名为 content 的 CSS 姊妹文件夹,其中包含 json 文件。我可以通过转到 来查看该文件localhost/content/test.json,但我不知道如何从控制器访问它。

我想做的是发出 HTTP 请求~/content/test.json并下载其内容,但找不到路径。

我尝试使用Url.Content将相对路径映射到绝对路径,但它不起作用。

var url = Url.Content("~/content/test.json"); // spits out "/content/test.json"

我已经IWebHostEnvironment进入控制器并尝试访问ContentRootFileProviderand ContentRootPathWebRootPath但是这些路径也不正确。它们分别指向我当前运行的服务的 wwwroot 的父级和 wwwroot。

我尝试创建自己的文件提供程序:

这成功地找到了文件并声称它存在,但fileInfo'sPhysicalPath总是null.

我只想做这样的事情:

我哪里错了?任何指针表示赞赏。

0 投票
1 回答
134 浏览

c# - Razor 运行时编译不适用于动态加载的程序集

我无法让 Razor 运行时编译与动态加载的程序集一起使用。我的代码:

Startup.cs

使用这种方法,我需要重新构建加载的程序集项目并重新启动主机以查看更改。当我将最后两行替换为:

我得到错误:

找不到包“<已加载程序集的名称>”的编译库位置。

设置MvcRazorExcludeRefAssembliesFromPublishfalse不会改变任何东西。PhysicalFileProvider当我添加对项目的显式引用时,该选项有效。

我正在使用 .NET 5 并且两个项目都有Microsoft.NET.Sdk.Web类型。

有什么办法可以让它工作吗?

0 投票
0 回答
67 浏览

c# - 在运行时从 Razor 类库加载部分视图

我目前正在使用 Razor Pages 在 .Net 5 中开发一个 Web 应用程序,我希望能够为它创建插件。出于这个原因,我需要能够在运行时从特定位置加载 Razor 类库。这一切都按预期工作,但 RCL 还包含部分视图 (.cshtml),我不知道如何在我的应用程序中加载/显示。仅当我将应用程序与 DLL 链接时,帮助程序才能找到它们,但如果我在运行时使用 AssemblyLoadContext.Default.LoadFromAssemblyPath 加载它,则无法找到它们。有没有办法以某种方式加载 RCL,以便我可以使用其中的部分视图而不链接它们?

0 投票
1 回答
71 浏览

c# - Blazor WASM 将设置注入 Razor 类库

我的目的是创建一种支付处理服务,我可以将其固定在任何网站的一侧。我的问题是注入设置,例如 Stripe 公钥、Paypal 商家 ID 以及服务器上的特定 url 以发送令牌并收取条带费用。

对于这个问题,这是简化的(Payments项目最终将成为 dll),但项目结构如下所示:

项目结构

WebApp 是 ASP.NET Core 托管的 Blazor WASM 项目模板。WebApp.Client依赖于Payments.SharedPayments.Ui而同时WebApp.Server也依赖于Payments.Backend(对于条纹电荷响应等模型)。

由于我想在任何站点上使用此付款服务,并且每个站点的这些服务都不同,因此我需要PaymentSettings.cs在启动时设置道具。

有没有办法做到这一点?如果这很重要,我只打算与 Blazor WASM 网站一起使用。

我觉得我可以将这些设置传递给WebApp.Clientthrough string[] argsinProgram.csMain方法:

然后从那里进入构造函数PaymentSettings.cs

但我看不出有任何方法可以从WebApp.Server项目中做到这一点。

也许我想太多了,我的意思是,如果我至少可以将基本 urlWebApp.Server注入到Payments.Shared项目中,然后我可以运行其余部分的 get 请求。

非常感谢任何帮助。

0 投票
0 回答
100 浏览

c# - Razor 类库图像显示在登录页面上,但未显示在任何其他页面上

概述:

您好,我创建了一个 Razor 类库,它作为 NuGet 包使用。我在_Layout.cshtml客户端应用程序中引用了部分视图,并且我在可靠地加载图像时遇到了问题。所有相关代码如下所示。库和客户端都是使用 .NET Core 3.1 编写的。

问题陈述:

启动应用程序时,myCompanyLogo.png会为登录页面加载图像。但是,离开登录页面后,不会显示徽标。当我导航回登录页面时,徽标再次成功显示。

代码:

在库中,包含的图像文件myCompanyLogo.png标记为“内容”和“如果较新则复制”。我有一个名为_Header.cshtml. 该组件定义如下:

这是在_Layout.cshtml文件中的客户端应用程序中使用的,如下所示:

为了完整起见,HeaderViewModel.cs定义如下:

0 投票
0 回答
28 浏览

c# - 如何检查引用的 Razor 类库中是否存在视图?

前段时间我问如何检查剃刀视图是否存在,但在 ASP.NET Core Razor 页面中?.

在那里我可以Engine.FindView(ViewContext, "Augmenter", isMainPage: false).Success用来检查视图的存在或不存在。

但是,现在我需要检查引用的 RCL 中是否存在视图。

我尝试了所有这些行,但没有工作:

所有这些行都返回 false,而我可以验证视图确实存在于Products.Views.dllusing 中ILSpy

我怎样才能解决这个问题?

0 投票
0 回答
21 浏览

javascript - RCL 中所需的 JavaScript 未正确引用

我认为这应该是不费吹灰之力的,但它已经让我头疼了好几个小时。我有一个简单的 Razor 类库 (RCL),其中包含一个包含一些 JavaScript 的页面。

我还有一个_Layout.cshtml包含@RenderSection("scripts", required: false)以允许有条件地包含script-tag。

包含给定的脚本,但尽管引用~/lib/somejs.js了以下错误,但仍发生以下错误:

所需的文件位于 RCL 的wwwroot/lib文件夹中。在我看来,给定的路径是错误的,因为它期望文件位于实际 Web 项目中不存在的文件夹而不是 RCL 中。

如何从 RCL 中正确解析引用?理想情况下,使用它的项目不必费心手动包含它们。

编辑:即使插入 Visual Studio 建议的硬编码路径也不能解决问题,例如src="../../wwwroot/lib/some.js".

0 投票
1 回答
124 浏览

asp.net-core - Razor 类库静态文件参考

我正在构建剃刀类库。可以被多个应用程序使用。Razor 类库具有在 mudblazor 中开发的组件。

这是问题: Mudblazor 有静态文件(css,js)。这是由曾经消费过的客户推荐的。将来如果 mudblazor 被其他 UI 组件替换。客户可能需要更改静态文件的引用。在不更改客户端引用的情况下,我们可以做的最佳方法是什么。这意味着客户端不应更改任何内容(css、js 引用)。

0 投票
1 回答
127 浏览

blazor - 如何使路由器根据用户所在的国家/地区从不同的程序集中加载页面

我有一个应用程序,我想制作特定国家/地区的应用程序,以便根据国家/地区为同一路线显示不同的页面。

对于每个国家/地区,我都有一个延迟加载的 RCL,带有自定义组件。我的目标是,当我转到domain.com/or时domain.com/shop,特定国家/地区的组件将从 Razor 类库加载。这意味着多个组件在 RCL 之间具有相同的路由。

举个例子:

  1. 美国:路由器将从domain.com/shop加载USApp.dll
  2. 加拿大:路由器将从domain.com/shop加载CanadaApp.dll

国家/地区存储在浏览器的本地存储中,可以随时更改。

我可以通过哪些方式实现这一目标?对于这种情况,没有关于自定义路由的文档。

0 投票
2 回答
161 浏览

asp.net-core - Blazor 服务器 .NET6 Razor 类库资产 404 错误

我有一个 Razor 类库,我已经使用 .NetCore3 和 .NetCore 5 几个月了,没有问题。

在最近将我们的 blazor 服务器应用程序和我们的 Razor 类库更新到 .NetCore 6 之后,我在从 Razor 类库加载资产时遇到了问题。

RCL 是通过 nuget 构建和打包的,我可以看到包中的资产,例如; Nuget 包示例

Web 应用程序已更新为使用单个 program.cs,并且我正在使用WebApplication.CreateBuilder()我的设置选项。

加载这些资源时出现 404 错误

我还可以看到wwwroot文件夹和相应的资产被加载到 Visual Studio 中的应用程序项目中。 VS 中的 Web 应用程序

感觉这是一个配置问题,而不是需要更改的重大问题。

ContentRootPath或的正确设置是WebRootPath什么?


更新

据此,需要使用app.UseStaticFiles();我已经完成的,以及webBuilder.UseStaticWebAssets();ConfigureWebHostDefaults.NET6中未使用的:(