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

时间:2017-12-21 23:55:20

标签: c# xamarin razor

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

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

但是,尽管这样做,Visual Studio也不会生成我期望的.cs文件。

我错过了什么?

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

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

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

我希望这有助于某人!当Microsoft修复该错误时,我将再次更新此线程(并将我的Razor文件移回原来应该的位置)。

编辑2 微软已经标记了我的错误"正在考虑中。"如果这个问题对您有影响,请对其进行投票,以鼓励他们尽早解决问题。

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

2 个答案:

答案 0 :(得分:4)

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

在VS4W上,您只需编辑试图添加Razor文件的.csproj

  1. 生成的Compile文件的.cs项,其中包含DependentUpon文件的.cshtml标记。

  2. None的{​​{1}}项,其中包含.cshtmlGenerator代码

  3. 创建这两个文件(LastGenOutput& .cshtml)(它们可以为空启动)

  4. 示例(Xamarin.iOS,Xamarin.Android,& PCL项目)

    .cs

    示例(NetStandard 2.0项目)

    <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>
    

答案 1 :(得分:0)

这不是答案,因为我误解了这个问题所以答案实际上就是@SushiHangover所提出的......

要获取Xamarin Razor页面,项目必须是WebViewApp,然后您可以将New PreProcessed Razor View添加到项目中。

来自Xamarin博客的主题。

  

请参阅我们使用Xamarin文档构建混合应用程序,开始构建Razor Hybrid应用程序。只需使用Xamarin Studio为iOS或Android创建新的WebView应用程序,或将WebView添加到任何现有的iOS或Android布局,并使用Add New ... Preprocessed Razor Template将Razor支持的Web视图合并到您的Xamarin应用程序中。有关数据驱动的Razor混合应用程序的稍微复杂的示例,请查看我们的RazorTodo应用程序。

The documentation can be found here

More detail here,因为这详细说明了如何将Razor视图添加到每个项目中。