Процесс развертывания Umbraco Forms
Я использую Umbraco Forms и не хочу, чтобы формы, включенные в среду разработки, были включены в производственную среду; однако я хотел бы, чтобы они были включены в систему контроля версий.
Поэтому моя текущая настройка включает в себя файлы под контролем исходного кода в соответствии со стандартом; Однако для исключения данных форм (App_Plugins/UmbracoForms/Data) я исключил папку из проекта (.CSPROJ). Проблема в том, что после публикации (в файл) файлы данных всегда включаются, даже если они исключены.
Что-то еще происходит в процессе сборки, которая копирует эти файлы в каталог публикации?
1 ответ
Эта проблема, которую публикуют App_Plugins, фактически настраивается пакетом UmbracoCms от NuGet. Это позволяет публиковать проект, в том числе 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. Эта задача выполняется, когда файлы упаковываются. В этом свойстве упоминается задача AddUmbracoFilesToOutput
, Эта задача находится в UmbracoCms.targets
,
В рамках этой задачи она определяет задачу с именем FilesForPackagingFromProject
который используется в WebDeploy. В этой задаче используются все элементы, названные CustomFilesToInclude
, Как видите, есть следующая строка:
<CustomFilesToInclude Include=".\App_Plugins\**\*">
<Dir>App_Plugins</Dir>
</CustomFilesToInclude>
Неважно, если вы исключите файлы, он всегда будет добавлять это из-за строки выше.
Как решить это?
Мы не можем изменить это UmbracoCms.targets
файл, поэтому мы должны использовать другие параметры, так как мы не хотим изменять способ, которым 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>
альтернатива
- Если вы используете UmbracoForms 4.4+, вы можете определить другой тип хранилища для ваших форм: https://our.umbraco.com/documentation/Add-ons/UmbracoForms/Developer/IFileSystem/
Это зависит от того, как вы делаете публикацию. Если вы просто публикуете через Visual Studio, вы можете добавить некоторые параметры в PropertyGroups вашего csproj.
<ExcludeFoldersFromDeployment>App_Plugins\UmbracoForms\Data</ExcludeFoldersFromDeployment>
Здесь также есть некоторые разговоры об этом: FAQ по веб-развертыванию. Если вы поищите ExcludeFoldersFromDeployment
вы найдете другие способы сделать это, если вы сами вызываете MSBuild.
/p:ExcludeFoldersFromDeployment="App_Plugins\UmbracoForms\Data"