如何将C#代码添加到新的Orchard CMS主题中

时间:2014-05-12 18:46:57

标签: c# asp.net-mvc msbuild orchardcms orchardcms-1.8

介绍问题

我想实现Orchard IShapeTableProvider,,以便为主List形状添加替代。我做了以下事情:

下载Orchard.Source.1.8.zip,在VS 2013中构建,并通过代码生成创建一个新主题:

  orchard.exe
  feature enable Orchard.CodeGeneration
  codegen theme My.FirstTheme
  theme enable My.FirstTheme

在主题>中将以下代码添加到我的主题中My.FirstTheme>代码> ListShapeProvider.cs文件。

namespace Themes.My.FirstTheme.Code
{
    using Orchard.Autoroute.Models;
    using Orchard.ContentManagement;
    using Orchard.DisplayManagement.Descriptors;
    public class ListShapeProvider : IShapeTableProvider
    {
        public void Discover(ShapeTableBuilder builder)
        {
            System.Diagnostics.Debugger.Break(); // * not hit
        }
    }
}

清理并构建Orchard解决方案,然后调试Orchard.Web。调试器没有命中System.Diagnostics.Debugger.Break()。

搜索和研究

我读过Orchard的仁慈独裁者Orchard shapeshifting

此外,我已经安装,构建并运行Contoso主题作为IShapeTableProvider的示例实现。 IShapeTableProvider的实现位于ContentShapeProvider.cs文件中。 Contoso主题还包括一个Contoso.csproj文件,该文件将ContentShapeProvider.cs文件作为编译项。

<ItemGroup>
   <Compile Include="Code\ContentShapeProvider.cs" />
 </ItemGroup>

我创建的新主题没有.csproj文件。我认为缺少的.csproj文件解释了为什么我的ListShapeProvider.cs断点没有执行。

我应该为我的主题创建一个.csproj文件吗?是否有另一种推荐的方式在主题中包含C#?例如,我应该使用App_Code文件夹吗?

2 个答案:

答案 0 :(得分:1)

在Orchard.exe代码生成中,添加/CreateProject:true。这将为您生成.csproj文件。例如。

orchard.exe
feature enable Orchard.CodeGeneration
codegen theme My.FirstTheme /CreateProject:true
theme enable My.FirstTheme

现在,当您添加ListShapeProvider.cs文件时,Visual Studio将自动作为My.FirstTheme.csproj文件的以下条目。

<ItemGroup>
  <Compile Include="ListShapeProvider.cs" />
</ItemGroup>

答案 1 :(得分:0)

您也可以在/IncludeInsolution:true中添加codegen theme My.FirstTheme /CreateProject:true 它将在主题顶级文件夹下添加您的主题项目。