Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将Razor文件添加到Xamarin项目_C#_Xamarin_Razor - Fatal编程技术网

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

C# 如何将Razor文件添加到Xamarin项目,c#,xamarin,razor,C#,Xamarin,Razor,我试图让Razor在我的Xamarin项目中工作,但我似乎无法让Visual Studio 2017认识到文件需要由Razor预处理器处理 当我要添加一个新文件时,没有Razor或.cshtml的模板,所以我只是添加一个文本文件并将扩展名改为.cshtml。然后,在文件属性中,我将自定义工具设置为RazorTemplatePreprocessor 然而,尽管这样做了,VisualStudio并没有生成我期望的.cs文件 我错过了什么 更新和解决方法:与@SushiHangover进行了有益的对话

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

当我要添加一个新文件时,没有
Razor
.cshtml
的模板,所以我只是添加一个文本文件并将扩展名改为
.cshtml
。然后,在文件属性中,我将
自定义工具设置为
RazorTemplatePreprocessor

然而,尽管这样做了,VisualStudio并没有生成我期望的.cs文件

我错过了什么

更新和解决方法:与@SushiHangover进行了有益的对话(请参阅下面的答案和评论链),结果表明.NET标准库项目目前不允许通过“添加项向导”添加Razor文件,如果手动添加,则无法正确编译。从VisualStudio15.5.2开始就是这样。我打开了微软的一个bug,但与此同时,我有一个超级笨拙的解决方法,如下所示

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

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

我希望这对别人有帮助!当微软修复这个bug时,我将再次更新这个线程(并将我的Razor文件移回它们应该在的位置)

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


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

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

  • 生成的
    .cs
    文件的
    编译
    项,包括
    .cshtml
    文件的
    依赖项
    标记

  • .cshtml
    None
    项,包括
    生成器
    lastgeneoutput
    标记

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

  • 示例(Xamarin.iOS、Xamarin.Android和PCL项目)
    
    RazorTemplate.cshtml
    RazorTemplate预处理器
    RazorTemplate.cs
    
    示例(NetStandard2.0项目)
    
    RazorTemplate.cshtml
    RazorTemplate预处理器
    RazorTemplate.cs
    
    这不是答案,因为我误解了这个问题,所以答案实际上是@SushiHangover在上面说的

    要获得Xamarin Razor页面,项目必须是WebViewApp,然后您可以向项目添加新的预处理Razor视图

    来自Xamarin关于这个主题的博客

    请参阅我们使用Xamarin文档构建混合应用程序,开始构建Razor混合应用程序。只需使用Xamarin Studio为iOS或Android创建新的WebView应用程序,或将WebView添加到任何现有的iOS或Android布局中,然后使用添加新的…预处理的Razor模板将Razor支持的web视图合并到Xamarin应用程序中。对于数据驱动的Razor混合应用程序的稍微复杂的示例,请查看我们的RazorTodo应用程序


    这详细说明了如何将Razor视图添加到每个项目。

    是什么让您认为Xamarin会使用Razor文件?Xamarin的官方文档。()它们是动态生成HTML的一种方便方法,您可以将HTML输入Web视图。我在另一个项目中使用了这些模板,但我不是最初设置它的人,我似乎不知道他是如何做到的。“请注意,您可以轻松地将.cshtml Razor模板添加到任何现有的Xamarin项目中,不必使用这些解决方案模板。”模板缺失,请参阅我的答案。感谢回复!是否有某种类型的项目需要参与?我刚刚发现了一些有趣的东西。当我尝试将它添加到Xamarin.iOS或Xamarin.Android项目中时,一切都很好。但是,如果我尝试将其添加到“父”Xamarin项目中,它将不起作用。(两个文件正确地折叠在一起,但.cs文件从未更新。)我甚至尝试在Android项目中创建一个.cshtml文件,验证它是否有效,然后将其拖到父项目中,我得到了相同的效果。我可以在项目文件上撒些魔法粉让它工作吗?@BrianRak这是什么样的“父项目”呢?在新项目向导中,如果你选择跨平台应用程序>,你就有机会选择平台、UI技术和代码共享策略。就我而言,如果有必要的话,我会选择Android和iOS、本机和.NET标准。然后为您创建三个项目,一个用于每个本机项目,另一个用于上述两个项目,用于共享代码。我称之为“家长”的就是这个项目。我现在可以确认Razor文件在本机ap中工作
    <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>
    
    <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>