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>
替代方案