我正在使用 Umbraco Forms,不希望开发环境中包含的表单包含在生产环境中;但是我希望它们包含在源代码管理中。
因此,我当前的设置包括按照标准进行源代码控制的文件;但是为了排除表单数据(App_Plugins/UmbracoForms/Data),我从项目(.CSPROJ)中排除了该文件夹。问题是在发布(到文件)之后,数据文件总是被包含在内,即使它们被排除在外。
在将这些文件复制到发布目录的构建过程中是否还有其他事情发生?
我正在使用 Umbraco Forms,不希望开发环境中包含的表单包含在生产环境中;但是我希望它们包含在源代码管理中。
因此,我当前的设置包括按照标准进行源代码控制的文件;但是为了排除表单数据(App_Plugins/UmbracoForms/Data),我从项目(.CSPROJ)中排除了该文件夹。问题是在发布(到文件)之后,数据文件总是被包含在内,即使它们被排除在外。
在将这些文件复制到发布目录的构建过程中是否还有其他事情发生?
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>
选择
这在某种程度上取决于您如何进行发布。如果你只是通过 Visual Studio 发布,你可以在你的 csproj 的 PropertyGroups 中添加一些参数。
<ExcludeFoldersFromDeployment>App_Plugins\UmbracoForms\Data</ExcludeFoldersFromDeployment>
这里也有一些关于这样做的讨论:Web 部署常见问题解答。如果您进行一些谷歌搜索,ExcludeFoldersFromDeployment
如果您自己调用 MSBuild,您会发现一些其他方法来执行此操作。
/p:ExcludeFoldersFromDeployment="App_Plugins\UmbracoForms\Data"