c# - 如何将 Razor 文件添加到 Xamarin 项目

标签 c# xamarin razor

我试图让 Razor 在我的 Xamarin 项目中工作,但我似乎无法让 Visual Studio 2017 识别文件需要由 Razor 预处理器处理。

当我去添加一个新文件时,Razor.cshtml 没有模板,所以我只是添加一个文本文件并将扩展名更改为 .cshtml。然后,在文件属性中,我将 Custom Tool 设置为 RazorTemplatePreprocessor

但是,尽管这样做,Visual Studio 并没有生成我期望的 .cs 文件。

我错过了什么?

更新和解决方法:由于与@SushiHangover 进行了有益的对话(请参阅下面的答案和评论链),.NET Standard 库项目目前似乎不允许通过以下方式添加 Razor 文件添加项目向导,如果您手动添加它们,它们将无法正确编译。从 Visual Studio 15.5.2 开始就是这样。我已经向 Microsoft 提出了一个错误,但与此同时,我有 super 笨拙的解决方法,如下所示。

归根结底,您可能在 Xamarin 项目中使用的 Razor 文件仅用于生成 .cs 文件,这些文件编译成包含 GenerateString 方法的类,代码可以调用该方法生成 HTML,然后可以将其输入 WebView。所以,我想,为什么不创建一个常规的 .NET Framework 库(不是 .NET Standard)并将我所有的 Razor 文件放在那里。在该项目中,您可以正常添加它们并且它们可以正常工作。

但由于我项目的其余部分是 .NET Standard,我不想混合搭配,所以我实际上没有任何其他项目引用此库。相反,我只是将生成的 .cs 文件包含为链接(单击“添加”按钮旁边的小箭头并选择“添加为链接”)到我的“真实”项目(我想添加的项目)中他们最初)。所以带有 Razor 文件的库只有一个目的,那就是生成 .cs 文件,期间。这些文件实际上被编译到不同的库中。

希望对大家有所帮助!当 Microsoft 修复该错误时,我将再次更新此线程(并将我的 Razor 文件移回它们应该在的位置)。

编辑 2 Microsoft 已将我的错误标记为“正在考虑中”。如果此问题影响到您,请点赞以鼓励他们尽快修复它。

https://developercommunity.visualstudio.com/content/problem/172997/razor-templates-not-working-for-net-standard-proje.html

最佳答案

Razor 文件模板在 Visual Studio for Mac ( VS4M) 上可用,位于 "Text Templating" 下组,但最新版本的 Visual Studio for Windows ( VS4W ) 它们已丢失。

在 VS4W 上,您只需编辑 .csproj您正在尝试添加 Razor 文件:

  1. A Compile生成的项目 .cs包含 DependentUpon 的文件.cshtml 的标签文件。

  2. A None .cshtml 的项目其中包括 GeneratorLastGenOutput标签

  3. 创建这两个文件 ( .cshtml & .cs )(它们可以是空的)

示例(Xamarin.iOS、Xamarin.Android 和 PCL 项目)

<ItemGroup>
    <Compile Include="RazorTemplate.cs">
      <DependentUpon>RazorTemplate.cshtml</DependentUpon>
    </Compile>
 </ItemGroup>

<ItemGroup>
    <None Include="RazorTemplate.cshtml">
      <Generator>RazorTemplatePreprocessor</Generator>
      <LastGenOutput>RazorTemplate.cs</LastGenOutput>
    </None>
</ItemGroup>

示例(NetStandard 2.0 项目)

<ItemGroup>
  <Compile Condition=" '$(EnableDefaultCompileItems)' == 'true' " Update="RazorTemplate.cs">
    <DependentUpon>RazorTemplate.cshtml</DependentUpon>
  </Compile>
</ItemGroup>

<ItemGroup>
  <None Update="RazorTemplate.cshtml">
    <Generator>RazorTemplatePreprocessor</Generator>
    <LastGenOutput>RazorTemplate.cs</LastGenOutput>
  </None>
</ItemGroup>

关于c# - 如何将 Razor 文件添加到 Xamarin 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47934267/

相关文章:

asp.net-mvc - ASP.Net MVC 中 UIHint 属性的用途是什么

c# - 如何在同步框架中过滤客户端数据?

c# - 实现插件/插件/插件策略的最佳实践

visual-studio - Xamarin.Android.Common.targets : error : Could not find a part of the path '/platforms'

windows-phone-7 - Xamarin Monotouch 是否可以在 Microsoft Windows Phone 移动版上运行?

c# - T4MVC 何时会支持带有显式 HtmlHelpers 的 Razor 来渲染局部?

C#:从泛型调用外部程序集中的重载方法

c# - CollectionView 实时排序回调

sql - 通知客户数据库更改的最佳方法

asp.net-mvc-4 - MVC 4 - 从 Controller 返回错误消息 - 在 View 中显示