|
|
|
@ -1,6 +1,6 @@
|
|
|
|
|
## 虚拟文件系统
|
|
|
|
|
|
|
|
|
|
虚拟文件系统可以管理文件系统(磁盘)上实际上不存在的文件. 它主要用于将(js, css, image, cshtml ...)文件嵌入到程序集中, 并在运行时将它们用作物理文件.
|
|
|
|
|
虚拟文件系统使得管理物理上不存在于文件系统中(磁盘)的文件成为可能. 它主要用于将(js, css, image, cshtml ...)文件嵌入到程序集中, 并在运行时将它们象物理文件一样使用.
|
|
|
|
|
|
|
|
|
|
### Volo.Abp.VirtualFileSystem nuget包
|
|
|
|
|
|
|
|
|
@ -30,12 +30,12 @@ namespace MyCompany.MyProject
|
|
|
|
|
|
|
|
|
|
#### 注册嵌入式文件
|
|
|
|
|
|
|
|
|
|
首先需要把文件标记为嵌入式资源将文件嵌入到程序集中. 最简单的方式是在 **解决方案管理器** 中选择文件, 然后找到 **"属性"** 窗口将 **"生成操作"** 设置为 **"嵌入式资源"**.
|
|
|
|
|
要将文件嵌入到程序集中, 首先需要把该文件标记为嵌入式资源. 最简单的方式是在 **解决方案管理器** 中选择文件, 然后找到 **"属性"** 窗口将 **"生成操作"** 设置为 **"嵌入式资源"**.
|
|
|
|
|
例如:
|
|
|
|
|
|
|
|
|
|
![build-action-embedded-resource-sample](images/build-action-embedded-resource-sample.png)
|
|
|
|
|
|
|
|
|
|
如果需要添加多个文件, 这会很乏味. 这时可以直接编辑 **.csproj** 文件:
|
|
|
|
|
如果需要添加多个文件, 这样做会很乏味. 作为选择, 你可以直接编辑 **.csproj** 文件:
|
|
|
|
|
|
|
|
|
|
````C#
|
|
|
|
|
<ItemGroup>
|
|
|
|
@ -45,7 +45,7 @@ namespace MyCompany.MyProject
|
|
|
|
|
|
|
|
|
|
此配置以递归方式添加项目的 **MyResources** 文件夹下的所有文件(包括将来新添加的文件).
|
|
|
|
|
|
|
|
|
|
然后应该使用 `VirtualFileSystemOptions` 来配置模块, 以便将嵌入式文件注册到虚拟文件系统. 例如:
|
|
|
|
|
然后需要使用 `VirtualFileSystemOptions` 来配置模块, 以便将嵌入式文件注册到虚拟文件系统. 例如:
|
|
|
|
|
|
|
|
|
|
````C#
|
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
@ -105,9 +105,9 @@ public class MyService
|
|
|
|
|
|
|
|
|
|
#### 在开发过程中处理嵌入式文件
|
|
|
|
|
|
|
|
|
|
通过引用程序集(或添加nuget包)将文件嵌入模块程序集并从另一个项目中使用它对于创建可重用模块非常有价值. 但是, 这使得开发模块本身变得有点困难.
|
|
|
|
|
将文件嵌入到模块程序集中并能够通过引用程序集(或添加nuget包)在另一个项目中使用它对于创建可重用模块非常有价值. 但是, 这使得开发模块本身变得有点困难.
|
|
|
|
|
|
|
|
|
|
假设你正在开发一个包含嵌入式JavaScript文件的模块. 当你更改文件时, 你必须重新编译项目, 重新启动应用程序并刷新浏览器页面以进行更改. 显然, 这是非常耗时和乏味的.
|
|
|
|
|
假设你正在开发一个包含嵌入式JavaScript文件的模块. 当你更改文件时, 你必须重新编译项目, 重新启动应用程序并刷新浏览器页面以使更改生效. 显然, 这是非常耗时和乏味的.
|
|
|
|
|
|
|
|
|
|
我们需要的是应用程序在开发时直接使用物理文件的能力, 让浏览器刷新时同步JavaScript文件的任何更改. `ReplaceEmbeddedByPhysical` 方法使其成为可能.
|
|
|
|
|
|
|
|
|
@ -145,7 +145,7 @@ public class MyWebAppModule : AbpModule
|
|
|
|
|
|
|
|
|
|
* 虚拟文件可以像Web应用程序上的物理(静态)文件一样使用.
|
|
|
|
|
* Razor Views, Razor Pages, js, css, 图像文件和所有其他Web内容可以嵌入到程序集中并像物理文件一样使用.
|
|
|
|
|
* 应用程序(或其他模块)可以覆盖模块的虚拟文件, 就像将具有同名和同扩展名文件放入虚拟文件的同一文件夹中一样.
|
|
|
|
|
* 应用程序(或其他模块)可以覆盖模块的虚拟文件, 就像将具有相同名称和扩展名的文件放入虚拟文件的同一文件夹中一样.
|
|
|
|
|
|
|
|
|
|
#### 虚拟文件中间件
|
|
|
|
|
|
|
|
|
@ -155,12 +155,12 @@ public class MyWebAppModule : AbpModule
|
|
|
|
|
app.UseVirtualFiles();
|
|
|
|
|
````
|
|
|
|
|
|
|
|
|
|
在静态文件中间件之后添加虚拟文件中间件, 可以通过放置在同一位置,使用物理文件来覆盖虚拟文件.
|
|
|
|
|
在静态文件中间件之后添加虚拟文件中间件, 使得通过在虚拟文件相同的位置放置物理文件, 从而用物理文件覆盖虚拟文件成为可能.
|
|
|
|
|
|
|
|
|
|
> 虚拟文件中间件只是像静态文件一样提供虚拟wwwroot文件夹内容.
|
|
|
|
|
> 虚拟文件中间件可以虚拟wwwroot文件夹中的内容 - 就像静态文件一样.
|
|
|
|
|
|
|
|
|
|
#### Views & Pages
|
|
|
|
|
|
|
|
|
|
无需任何配置即可在应用程序中使用嵌入式的 razor Views/pages. 只需要将它们放入模块开发中的标准 Views/Pages 虚拟文件夹即可.
|
|
|
|
|
无需任何配置即可在应用程序中使用嵌入式的 razor Views/pages. 只需要将它们放置在要开发的模块中的标准 Views/Pages 虚拟文件夹即可.
|
|
|
|
|
|
|
|
|
|
如果模块/应用程序将新文件放置同一位置, 则会覆盖嵌入式的 Views/Pages.
|
|
|
|
|