【问题标题】:Umbraco Forms deployment processUmbraco Forms 部署流程
【发布时间】:2017-03-09 09:50:56
【问题描述】:

我正在使用 Umbraco Forms,不希望开发环境中包含的表单包含在生产环境中;但是我希望它们包含在源代码管理中。

因此,我当前的设置包括按照标准进行源代码管理的文件;但是为了排除表单数据(App_Plugins/UmbracoForms/Data),我从项目(.CSPROJ)中排除了该文件夹。问题是在发布(到文件)之后,数据文件总是被包括在内,即使它们被排除在外。

在将这些文件复制到发布目录的构建过程中是否发生了其他事情?

【问题讨论】:

  • 你发表的怎么样了?你能指导我完成重现这个的步骤吗?
  • 使用 Visual Studio 的普通发布到文件。右键单击项目 > 发布 > 自定义 > 文件系统。请注意,此问题仅存在于 Umbraco Forms(据我所知)。

标签: umbraco umbraco-contour


【解决方案1】:

App_Plugins 发布的这个问题实际上是由 NuGet 的 UmbracoCms 包配置的。它允许您发布包括 Umbraco 在内的项目。但它也添加了额外的文件夹。在项目上安装 Umbraco 时,它会将 2 Import 添加到 .csproj 文件中。

<Import Project="..\packages\UmbracoCms.{version_number}\build\UmbracoCms.props" Condition="Exists('..\packages\UmbracoCms.{version_number}\build\UmbracoCms.props')" />
<Import Project="..\packages\UmbracoCms.{version_number}\build\UmbracoCms.targets" Condition="Exists('..\packages\UmbracoCms.{version_number}\build\UmbracoCms.targets')" />

在此 UmbracoCms.props 文件中,它引用了在 MSBuild 中定义的属性 CopyAllFilesToSingleFolderForPackageDependsOn。 打包文件时会执行此任务。 在此属性中,它提到了任务AddUmbracoFilesToOutput。 此任务位于UmbracoCms.targets。

在此任务中,它定义了一个名为FilesForPackagingFromProject 的任务,用于WebDeploy。在这个任务中,它使用了所有名为 CustomFilesToInclude 的元素。如您所见,有以下行:

  <CustomFilesToInclude Include=".\App_Plugins\**\*">
    <Dir>App_Plugins</Dir>
  </CustomFilesToInclude>

排除文件没关系,因为上面一行,它总是会添加这个。

如何解决这个问题?

我们无法更改此 UmbracoCms.targets 文件,因此我们必须采取其他选项,因为我们不想更改 Umbraco 指定这些文件的方式。

我们可以做的就是通过与 Umbraco 相同的方式来指定排除自己。 添加一个新的 Target、一个 ItemGroup 并添加元素 ExcludeFromPackageFolders,指定 Include 属性并用值填充它。

<Target Name="ExcludeUmbracoFormsData">
<ItemGroup>
  <ExcludeFromPackageFolders Include="App_Plugins\UmbracoForms\Data">
  </ExcludeFromPackageFolders>
</ItemGroup>
</Target>  

然后添加一个 PropertyGroup,其属性为 CopyAllFilesTOSingleFolderForPackageDependsOn,并指定您刚刚创建的目标的名称。

<PropertyGroup>
  <CopyAllFilesToSingleFolderForPackageDependsOn>
    ExcludeUmbracoFormsData;
  </CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>

替代方案

【讨论】:

    【解决方案2】:

    这在某种程度上取决于您如何进行发布。如果你只是通过 Visual Studio 发布,你可以在你的 csproj 的 PropertyGroups 中添加一些参数。

    <ExcludeFoldersFromDeployment>App_Plugins\UmbracoForms\Data</ExcludeFoldersFromDeployment>
    

    这里也有一些关于这样做的讨论:Web Deployment FAQ。如果您对 ExcludeFoldersFromDeployment 进行一些谷歌搜索,如果您自己调用 MSBuild,您会发现其他一些方法。

    /p:ExcludeFoldersFromDeployment="App_Plugins\UmbracoForms\Data"
    

    【讨论】:

    • 我已经尝试过了,还专门通过 Visual Studio 排除了该文件夹,在这两种情况下,该文件夹都会重新出现在已发布的目录中。请注意,这只发生在 UmbracoForms 上,而对于其他文件夹(例如我会排除 /js),它不会出现在已发布的目录中。
    • 检查您的 csproj 文件并检查该文件夹是否未明确包含在其他地方?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多