0

Я использую файлы .json в качестве источника данных во время разработки. В проекте WP8. Действие сборки для этих файлов соответствует содержимому.
Когда я создаю производственный выпуск, я хотел бы исключить эти файлы из сгенерированного файла .xap по соображениям безопасности (так как это будет похоже на проект всех веб-сервисов).Как исключить файлы из .xap для конкретных конфигураций сборки

События до и после сборки бесполезны, поскольку файл .xap создается во время сборки. Поскольку xap технически является zip, я мог бы использовать событие post build с помощью специального инструмента, который извлекает, удаляет и повторно упаковывает его, но я бы хотел этого избежать.

Я мог бы также применить параметр Условия для каждого файла JSON в файле .csproj:

<Content Condition="'$(Configuration)' == 'Debug'" Include="DesignData\authentication\testservice.json"> 
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
</Content> 

Но есть +100 файлов, это слишком похоже на неоптимальное решение без создания другого пользовательского инструмента выполнить работу и сохранить файл csproj обновлен.

я, наконец, обнаружил, что я могу выполнить цель прямо перед упаковкой XAP, но упаковка не может, когда я удалить каталог следующим образом:

<PropertyGroup> 
    <FilesToXapDependsOn>$(FilesToXapDependsOn);AfterFilesToXapDependsOn</FilesToXapDependsOn> 
</PropertyGroup> 
<Target Name="AfterFilesToXapDependsOn"> 
    <RemoveDir Directories="$(TargetDir)/DesignData" /> 
</Target> 
+0

Как процесс сборки (или, как вы знаете), какие файлы вы хотите исключить? – Andrew

+0

Я просто пытаюсь исключить все json-файлы из пакета в файл xap для релизов. Поэтому я хочу исключить либо всю папку, либо все файлы с расширением json. – Yves

ответ

1

Вы должны удалить файлы, которые вы хотите исключить из коллекции Item, которую MSBuild использует при создании файла .xap. Если вы просто удалите каталог, вы получите ошибки, потому что MSBuild все еще ожидает, что файлы будут там.

По крайней мере, в версии 8.1 Microsoft.WindowsPhone.Common.targets, оказывается, что цель вы могли бы хотеть потребности быть в AssignTargetPathsDependsOn:

<PropertyGroup> 
    <AssignTargetPathsDependsOn>$(AssignTargetPathsDependsOn);RemoveJsonFiles</AssignTargetPathsDependsOn> 
</PropertyGroup> 
<Target Name="RemoveJsonFiles"> 
    <ItemGroup> 
    <Content Condition=" '$(Configuration)' == 'Release' " Remove="**\*.json" /> 
    </ItemGroup> 
</Target> 

Вы, возможно, придется найти другие, лучшие точки расширения до добавьте свою цель, если этот не работает для вас.

Как вы можете видеть, другая вещь, которую нужно попробовать, это свойство Remove изделия с именем Content. Это свойство доступно только для товаров в пределах ItemGroup элементов в пределах Target элементов.