1

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

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

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

4

2 回答 2

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文件中,它指的CopyAllFilesToSingleFolderForPackageDependsOn是在 MSBuild 中定义的属性。打包文件时会执行此任务。在此属性中,它提到了 task 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>  

然后添加一个带有 Property 的 PropertyGroupCopyAllFilesTOSingleFolderForPackageDependsOn并指定您刚刚创建的目标的名称。

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

选择

于 2018-12-19T11:44:36.157 回答
0

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

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

这里也有一些关于这样做的讨论:Web 部署常见问题解答。如果您进行一些谷歌搜索,ExcludeFoldersFromDeployment如果您自己调用 MSBuild,您会发现一些其他方法来执行此操作。

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

csproj 属性组

于 2017-03-10T21:16:17.297 回答