问题标签 [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 投票
1 回答
1196 浏览

c# - 在 .Net Framework 项目中使用带有部分视图的 Razor 类库

我最近遇到了 Razor 类库,我不能 100% 确定用它们可以/不能实现什么,但我非常喜欢能够创建可以在多个内部共享的视图(和部分视图)的概念网络项目。

然而,虽然我了解一点 C# 并且非常熟悉转换工具,但我对 VB.Net 的熟练程度要高出 1000 倍,因此我的大部分工作都是以这种方式编码的。.NET Core,据我推断不支持 VB.NET。

我按照教程并从这里下载了示例代码https://docs.microsoft.com/en-us/aspnet/core/razor-pages/ui-class?view=aspnetcore-3.1&tabs=visual-studio

有了这个,我能够构建一个包含 RCL 和 .NetCore 网站的解决方案,该网站使用来自 RCL 的视图和部分视图。

我能够构建多个 .NETCore 网站,我所要做的就是添加对 RCL 项目的引用,它们都将使用 RCL 中的共享部分视图......一切都很好。

除了,我不想要 .NETCore 网站项目,因为我想坚持使用 VB.NET,所以我阅读并被告知我使用 .netstandard2.0 创建的 RCL 应该与 .Net Framework 兼容。

笔记; 本质上,对于即时需求,我打算主要使用 RCL 来创建要在多个项目之间共享的局部视图。我很高兴使用 C# 为项目逻辑创建它们,并且我的许多代码逻辑已经存在于我可以导入的 VB 类库中,但我不想重写或重新学习我已经在 main 中完成的所有内容我的大部分项目。

无论如何,将我所有的工作升级到 .NetCore 将是一场噩梦……

所以....

  • 我创建了一个针对 .Net Framework 4.7.2 的 VB Web 应用程序。
  • 我添加了对我的 RCL 的引用
  • 我运行了 Build 来检查没有版本冲突或引用不兼容
  • 我运行该网站以检查没有被 Visual Studio 捕获的构建错误

以上所有工作正常,参考添加OK,完全没有问题。

但是...我无法弄清楚如何让 RCL 中的部分视图可供网站访问。

我不断收到错误

谁能告诉我

  • 如何连接 Razor 类库以便在 .Net Framework 项目中使用部分视图?
  • 我(很可能认识我)是否正在尝试做一些根本不适合那样工作的事情?!

编辑...

Ben 在下面的评论中提出了相当合理的要求,以明确我在做什么

首先。我实际上只是在尝试一个新的解决方案,所以每次我添加项目时,我实际上只是去“添加新项目>选择”。除了添加对我的 RCl 的引用之外,我不会编辑 Visual Studio(2019 社区版,如果它有任何区别)创建的模板之外的项目。

RCL 有一个我试图显示的局部视图,它的内容是:

显然RazorUIClassLibRCL 的名称在哪里……在这个阶段根本没有其他内容。

文件结构是

我有一个名为的 C# .NETCore 项目WebApp1,它是从上面链接下载的示例中的确切项目,具有相关的文件结构

在 Index.cshtml 我添加了这一行:

(注意;Visual Studio 似乎有点不确定如何找到测试文件,因为智能感知(ReSharper)正在说cannot resolve partial view'Test',但它运行良好)

我添加了第二个 C# .netcore 项目,以确保我从示例代码下载的项目没有任何“特殊”之处,该项目的结构与 Visual Studio 模板完全相同,并且文件结构略有不同:

视图 > 主页 > Index.cshtml

与上面相同的单行代码添加到此文件中并且工作方式相同(添加这个全新项目后我所做的只是添加此行和对我的 RCL 项目的引用)

问题项目是一个 VB 项目,显然是针对 .Net Framework 而不是 CORE。它实际上只是 Visual Studio 在将新的 MVC 项目添加到解决方案时创建的默认文件结构,所以我们有

视图 > 主页 > Index.vbhtml

同样,除了添加对我的 RCL 项目的引用和这一行之外,我什么也没做:

我也试过

以及以上所有带有 .cshtml 文件扩展名的内容。

在所有情况下,我都会收到不同形式的此错误:

从错误中可以清楚地看出,它期望在Views目录中找到 Partial,但正如我所提到的,如果我添加完整路径,我仍然会遇到相同的错误,但会出现不同的“我尝试在此处查找”类型的注释。

我一直说我没有更改任何内容以澄清我没有进行任何路由更改......我想知道我是否应该,但如果是的话,不确定是什么!

0 投票
1 回答
449 浏览

c# - 使用 StaticFileOptions() 从 Razor 类库中中断嵌入的静态文件

我正在尝试使用将长缓存头添加到静态 .css 和 .js 文件StaticFileOptions

从各种 SO 和其他文章中,您可以这样做:

但是,我使用的是 RCL 提供的一堆静态文件。RCL 有一个我在本文中使用的 StaticServing.cs 类:Razor 类库也可以打包静态文件(js、css 等)吗?

为了完整起见,我的问题如下:

在我拥有的消费项目 startup.csservices.ConfigureOptions(typeof(StaticServing));和 RCL 拥有<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest> <EmbeddedResource Include="Static\**\*" />设置中。

一切就绪后,一切正常……除非StaticFileOptions在问题的开头添加代码,在这种情况下,对嵌入式静态文件的所有引用都返回404.

我试过添加:

  • FileProvider = env.ContentRootFileProvider
  • FileProvider = env.WebRootFileProvider

StaticFileOptions设置,但这不起作用。

0 投票
1 回答
241 浏览

asp.net-core - 如何从 Razor 类库中获取嵌入式静态文件的列表?

标题真的是问题...

我有一个嵌入式 Razor 类库,其中包含一些 CSS 文件,它们是一堆引导主题。

由于 Razor 类库将其全部内容编译到单个文件中,因此没有File System这样的文件,因此Directory.GetFileswwwroot/css 目录不像在普通网站项目中那样工作。

那么,有谁知道如何在代码中获取嵌入式 CSS 文件的列表?

(如果相关,这个问题是我之前在开发这个项目时问过的一个问题,它显示了我用来在我的 RCL 中嵌入静态文件的代码)

(项目使用.NET Core 3.0)

0 投票
1 回答
288 浏览

asp.net-core - BlazorWebAssembly 5.0 不从 Razor 类库加载静态资产

注意: 不是重复的。

升级到 后.Net Core 5,来自其他类库(Razor 类库项目)BlazorWebAssembly的静态资产(如.js或)没有被提供服务并面临http 状态。.css404

为了测试这一点,我从默认模板示例开始,并向其中添加了 Razor 类库。我添加了.css文件 (test1.css),如您所见,.css无法访问。我的其他项目也发生了同样的问题。

(我已经测试过两者Visual Studio 2019 16.8.116.9.0 preview 1

在此处输入图像描述

找不到资源:

在此处输入图像描述

0 投票
0 回答
324 浏览

blazor - 通过使用应用程序覆盖 blazor 组件库中的隔离 css

我已经建立了一个 blazor 组件库,它定义了几个 blazor 组件 + 隔离的 CSS 文件。这些 css 文件是从 sass 文件中转译的,在这些文件中我使用引导程序的 mixins 指定引导程序网格系统,例如 @include make-col-ready(); 或@include make-col(4);。

这一切都运行良好,并且 CSS 和 blazor 组件能够被我的 blazor webassembly 应用程序使用,我使用组件库的项目引用依赖项设置了该应用程序。

现在理想的情况是,如果我可以让组件库中的隔离 CSS 充当默认样式,但我可以在使用应用程序中覆盖此样式(也包括引导混合)。理想情况下,我希望在我的组件库中设置 !default sass 变量,用于确定是使用默认 css,还是根本不包含它。我已经尝试过类似下面的代码片段(只是一个简单的草图,不要太认真),但据我了解,在将这些变量编译为 css 以供消费应用程序导入之前,无法覆盖这些变量。

TL;博士; 有没有办法设置一个 blazor 组件库,以便使用应用程序可以覆盖现有的隔离 css(在组件库中),以便可以使用不同的引导网格混合?

我希望我提供了足够的上下文,如果没有,我很乐意提供更多。

提前致谢!

0 投票
1 回答
89 浏览

c# - 如何通过 Nuget 将特定文件夹从 Razor 类库复制到目的地?

我在 .NET 5.0 中创建了一个 Razor 类库项目,如下所示

在此处输入图像描述

我想用里面NuGet的文件夹制作一个包Areas

在此处输入图像描述

因此,每当安装此软件包时,将使用相同的名称复制目标中包含其所有文件的整个文件夹。

如何Areas通过dotnet pack命令打包整个文件夹?

在此处输入图像描述

0 投票
1 回答
528 浏览

asp.net-mvc - 作为 Razor 类库的独立 Blazor 应用

技术上是否可以将完整的 webassembly Blazor 应用程序作为 Razor 类库,然后在另一个 ASP.NET 项目中使用它,而不管使用者是 MVC、Razor Pages 还是 Blazor 应用程序?是否可以在 Razor 类库中定义路由?

我正在开发一个将作为 Nuget 包发布的项目。这个包应该用于各种 ASP.NET 项目,这些项目被实现为 MVC、Razor Pages 甚至 Blazor。

0 投票
2 回答
724 浏览

css - Razor 类库中的 Blazor 组件(CSS 隔离)

我创建了一个组件:

MyComponent.razor

并添加了一个css文件:

MyComponent.razor.css

css文件嵌套在Visual Studio的组件文件下,所以我知道没有拼写错误。这是在 Razor 类库中。

我遇到了奇怪的行为,我追踪到与引导类的类名冲突,该引导类也加载到我的 Index.cshtml 文件中。

我在组件中重命名了我的类名以避免冲突,并且一切都按我预期的那样工作。

但是,我的理解是对 css 文件使用这种命名约定意味着 HTML 中的所有类名和 CSS 文件中的类名都会得到这个随机 b-?????????? 后缀/属性以避免此类名称冲突。

我是否误解了 CSS 隔离?

0 投票
1 回答
447 浏览

blazor - Blazor 应用程序不会将 css 隔离范围标识符添加到 razor 类库组件元素

我对 blazor 完全陌生,我正在尝试将 razor 类库中的组件添加到 blazor 应用程序。

我使用默认的 blazor 应用程序 (.net5) 和 razor 类库 (.net5)。

我将默认组件 (Component1) 添加到 blazor 索引页面。

我在类库中所做的唯一一件事是添加一个名为 Component1.razor.css 的文件,其中包含:

.css 文件正确捆绑到 _content/ComponentLibrary/Component1.razor.rz.scp.css 并在 Blazorapp.styles.css 中正确导入

css 文件中的作用域标识符:

但是,<h1>Counter</h1>页面上的 b-r7wl1itmzi 范围尚未添加到 h1 元素中。

如果我将 Component1 组件复制到 blazor 应用程序,它将按预期工作并且标记为<h1 b-r7wl1itmzi>Counter</h1>.

我在这里想念什么?

0 投票
2 回答
223 浏览

dependency-injection - 将组件的依赖注入方法移动到 Blazor 服务器端中的分离 CS 库

希望在单独的 .cs 文件和/或单独的库中创建可重用的函数/方法。当然我知道怎么做,我的问题是我不知道在需要使用依赖注入元素的情况下怎么做。例如,这是一个关于获取用户属性的非常简单的函数:

如果(!)组件已初始化,这适用于每个剃须刀文件/组件。如果没有,注入的服务也没有初始化并得到一个空异常错误。

我不想将此代码片段重写/复制到我想使用的每个组件中,所以我想为它创建一个类或库。正确的方法应该是什么?最好的事情是如果我可以将这些函数移动到单独的类库或 Razor 类库中。

更新:

@Nkosi 提供了完美的解决方案,但我想向前思考一点。之前的代码示例非常小,那么如果我的自定义方法需要 2-3-4 或更多 DI 怎么办?例如(在 Razor 组件中):