如何在Visual Studio 2017中构建时嵌入资源文件?

7

我有一个Nuget包,它拥有自己的MVC控制面板,包含控制器、视图和路由。

这个Nuget包被导入到其他.NET Core Web应用程序中。

在使用.NET Core的Visual Studio 2015中,我使用以下代码将视图编译为资源,使它们可以被Razor引擎找到并正确渲染:

在项目的project.json(Nuget)文件中:

 "buildOptions": {
    "embed": "**/Views/**/*.cshtml"
  }

在Startup.cs (Web应用程序)中:
public void ConfigureServices(IServiceCollection services)
{
    services.Configure<RazorViewEngineOptions>(options =>
    {
        options.FileProviders.Add(new CompositeFileProvider(
            new EmbeddedFileProvider(
                typeof(HomeController).GetTypeInfo().Assembly,
                "Some.Namespace"))
                    );
    });

    return new IuguPortalBuilder(services);
}

在Visual Studio 2017中,project.json文件已经不存在了,我找不到一种新的方式来将我的视图嵌入到NuGet包中。请问如何嵌入我的视图?
1个回答

16

Solution Explorer 中右键单击所需文件,点击 Properties 并在打开的窗口中将 Build action 设置为 Embedded resource - 就像旧日一样 :)

这将在你的*.csproj文件中创建以下行:

<ItemGroup>
  <EmbeddedResource Include="Views\Home\Index.cshtml" />
</ItemGroup>

现在,MSBuild会将此文件作为嵌入式资源添加到您的程序集中。


嗨,@Dmitry!我能否使用通配符“Views / * / *.cshtml”一次导入所有视图? - Carlos Balsalobre
@Carlos,我不知道,试一下并分享吧 :) - Dmitry
2
刚在VS2017上尝试了一下:使用类似于Include="**\Translations\Resource.*.resx"的格式对我有效。 - Myobis
从解决方案资源管理器中将构建操作设置为嵌入式资源并没有起作用,所以我手动编辑了csproj,就像您在这里展示的那样。使用这种方法,文件可以存放在磁盘上的任何位置。 - bh_earth0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接