MVC 6 中多个网站的通用 wwwroot 文件夹

Common wwwroot folder for multiple websites in MVC 6

我有多个网站使用 /wwwroot/assets 文件夹(html 主题、css 和 javascript 文件)加载静态内容。

目前我正在复制每个站点中的 assets 文件夹。我所有的项目都位于一个公共的父目录下。

我不想将 /wwwroot/assets 文件夹复制到每个网站。有没有办法在所有站点之间共享一个 assets 文件夹。可能是通过提供直接文件系统路径或其他方式?

目前还不清楚 the documentation project.json 文件中的 webroot 键将接受什么样的值,但到目前为止 Visual Studio 不关心非常复杂的路径。例如,将值设置为 ../wwwroot 会导致条目在解决方案资源管理器中消失。

如果您查看 the kpm code that bundles your project up for deployment,它似乎将您的项目目录与存储在 wwwroot 键中的任何内容组合在一起,因此即使 Visual Studio 可能不理解它,相对路径似乎得到支持。从命令行使用 kpm bundle 证实了这一点,并且当使用相对路径时 src 之上的目录可以正确捆绑。

根据您的特殊需求,有一种方法可以使 kpm Visual Studio 满意,但这取决于您的构建环境是否这对你来说是个不错的选择。

Windows、OSX 和 Linux 都支持为目录创建符号 link,这样您就可以将资产目录放在文件系统,然后在别处为它创建 links。例如,如果您在 /projects/shared/assets 中有资产,您可以在其他两个项目(例如 /projects/project1/src/wwwroot/assets)中创建指向 "real" 位置的 link。

在 Windows 中,命令可能是这样的

mklink /j "C:\link\to\create" "C:\path\to\assets"

所以如果你这样做了

mklink /j "C:\source\shared\assets" "C:\source\project1\src\wwwroot\assets"

project1 似乎在 wwwroot 中有一个 assets 目录,并且构建过程会很愉快,因为对于每个项目来说文件都是本地的。这里要注意的一件事是 Windows 支持许多不同种类的 link。 /j 专门创建了一个 junction 而不是真正的符号 link。差异有点微妙,但是 this is a good description 的差异。知道如果您在本地工作就足够了,/j 命令不需要管理权限并且 Visual Studio 和 kpm 都会很高兴。

在OSX和Linux中,命令类似:

ln -s /link/to/create /path/to/assets

喜欢Windows,they support different sorts of links

无论如何,在适当的情况下,这可能会很好地工作而无需新的 ASP.NET 项目结构的任何特殊支持,但最终也能拥有它会很好。