【问题标题】:ASP.NET Core 2.1 Serve static files from another projectASP.NET Core 2.1 提供来自另一个项目的静态文件
【发布时间】:2018-06-18 17:56:40
【问题描述】:

我正在尝试使用 ASP.NET Core 2.1 后端来提供 API 和 Angular 前端。 Startup.cs 在项目 MyApp.Api 中。我希望我的静态文件从另一个项目的 wwwroot 中提取,MyApp.FrontEnd

我看过this post,它描述了以下方法

app.UseStaticFiles(new StaticFileOptions {
    FileProvider = new EmbeddedFileProvider(
        assembly: Assembly.Load(new AssemblyName("OpenIddict.Assets")),
        baseNamespace: "OpenIddict.Assets")
});

但是,当我尝试将“OpenIddicts.Assets”替换为我的项目名称时,出现以下错误:

FTL 应用程序启动异常 System.IO.FileNotFoundException:无法加载文件或程序集 'MyApp.FrontEnd,Culture=neutral,PublicKeyToken=null'。 该系统找不到指定的文件。 文件名:'MyApp.FrontEnd,Culture=neutral,PublicKeyToken=null'

上面链接的帖子中引用的 GitHub 存储库似乎不再存在。我想我错过了一个相当明显的地方。任何帮助将不胜感激。

【问题讨论】:

  • 你有来自MyApp.ApiMyApp.FrontEnd的引用吗?
  • 有什么理由不能使用PhysicalFileProvider 或者文件需要来自程序集吗?

标签: c# asp.net-core asp.net-core-2.1


【解决方案1】:

MyApp.FrontEnd.dll 必须存在于输出文件夹中。如果您发布主项目(引用MyApp.FrontEnd),那么一切都应该正常。

如果您可以从程序集中访问某些类型,那么您可以尝试Assembly.GetAssembly(type) 而不是Assembly.Load(...),即

app.UseStaticFiles(new StaticFileOptions {
    FileProvider = new EmbeddedFileProvider(
        assembly: Assembly.GetAssembly(typeof(SomeClassFromAssembly)),
        baseNamespace: "OpenIddict.Assets")
});

【讨论】: