2015-10-15 2 views
2

Я отредактировал файл csproj в соответствии с этим post, но дополнительные файлы в App_data будут удалены в любом случае. С другой стороны, когда я изменяю команду msdeploy, как показано в сообщении, применяется скип.Пропустить правило не работает

Я использую веб-развертывание v3. И команда

msdeploy.exe" -verb:sync -source:package=c:\builds\app.zip -dest:auto -setParam:"IIS Web Application Name"="Default Web Site/app" 

Нужно ли вообще отлаживать то, что может быть причиной такого поведения?

<PropertyGroup> <OnBeforePackageUsingManifest>AddCustomSkipRules</OnBeforePackageUsingManifest> 
    </PropertyGroup> 

<Target Name="AddCustomSkipRules"> 
    <ItemGroup> 
     <MsDeploySkipRules Include="SkipDeleteAppData"> 
     <SkipAction>Delete</SkipAction> 
     <ObjectName>filePath</ObjectName> 
     <AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data\\.*</AbsolutePath> 
     <XPath> 
     </XPath> 
     </MsDeploySkipRules> 
     <MsDeploySkipRules Include="SkipDeleteAppData"> 
     <SkipAction>Delete</SkipAction> 
     <ObjectName>dirPath</ObjectName> 
     <AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data\\.*</AbsolutePath> 
     <XPath> 
     </XPath> 
     </MsDeploySkipRules> 
    </ItemGroup> 
    </Target> 

ответ

2

Я рассмотрении Microsoft.Web.Publishing.targets и, похоже, это уже реализовано, все, что вам нужно сделать, это добавить это свойство в скрипт MSBuild:

<PropertyGroup> 
    <SkipApp_DataFolder>True</SkipApp_DataFolder> 
</PropertyGroup> 

Если вы работаете с командной строки MSBuild вы можете использовать:

msbuild MyProject.csproj /p:SkipApp_DataFolder=True ...

UPDATE:

Вы можете попробовать это, поместите этот код в нижней части файла MSBuild, после всех тегов «Импорт»:

<Target Name="GenerateSkipRuleForAppData"> 
    <EscapeTextForRegularExpressions Text="$(_PackageTempDir)"> 
     <Output TaskParameter="Result" PropertyName="_Escaped_PackageTempDir" /> 
    </EscapeTextForRegularExpressions> 
    <ItemGroup> 
     <MsDeploySkipRules Include="SkipAddDataOnDeploy"> 
     <SkipAction></SkipAction> 
     <ObjectName>dirPath</ObjectName> 
     <AbsolutePath>$(_Escaped_PackageTempDir)\\App_Data$</AbsolutePath> 
     <XPath></XPath> 
     </MsDeploySkipRules> 
    </ItemGroup> 
    </Target> 

Это точная копия «GenerateSkipRuleForAppData» мишени из Microsoft.Web. Publishing.targets без условия (похоже, что условие не работает должным образом), это перезапишет исходную цель и заставит ее выполнить, не нарушая логику целей.

+0

Нет, это не работает. Файлы удаляются из App_data при импорте приложения в IIS. – user49126

+0

Я даже нашел в выводе сборки SkipApp_DataFolder = True – user49126

Смежные вопросы