2015-08-19 4 views
0

Мы имеем пакет развертывания веб для приложения, разработанного в C#, при установке в IIS web.config, имеет несколько параметров в нем, например:Предотвращение изменения web.config по развертыванию веб-

<appSettings> 
    <add key="webpages:Version" value="3.0.0.0"/> 
    <add key="webpages:Enabled" value="false"/> 
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
    <add key="ReportFiles" value="http://localhost/ReportTemp/"/> 
</appSettings> 

Настройка могут быть изменены (например, ReportFiles выше) на каждом размещенном на нем сайте, а затем, если есть обновление для приложения, мы установим последний пакет веб-развертывания.

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

Есть ли способ остановить обновление web.config после его создания? Или во время веб-развертывания, позволяющего установщику видеть существующие настройки и решать, следует ли сохранять?

+1

Почему вы не сохраняете настройки своего приложения в отдельном файле '' –

ответ

1
+0

Извините, если я понимаю это неправильно, но разве это не операция времени компиляции? Проблема, с которой я столкнулась, заключается в том, что при развертывании на сайте мы меняем некоторые параметры, а затем в будущем, когда мы переходим на обновление, они перезаписывают эти параметры с помощью файла web.config по умолчанию в пакете –

0

я украл где-то я не могу вспомнить. Поместите это в новый файл blah.targets и добавьте <Import Project="blah.targets" /> в файл csproj где-нибудь под <Project>. Это заставит webdeploy не перезаписывать существующий web.config.

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <!--These UseMsDeployExe and AfterAddIisSettingAndFileContentsToSourceManifest are relevant to the msdeploy, perhaps otherwise in the pubxml files--> 
    <PropertyGroup> 
     <UseMsDeployExe>true</UseMsDeployExe> 
     <AfterAddIisSettingAndFileContentsToSourceManifest>OnAfterAddIisSettingAndFileContentsToSourceManifest</AfterAddIisSettingAndFileContentsToSourceManifest> 
    </PropertyGroup>  

    <!-- We do not want to OVERWRITE the web.config file if it is present at the destination --> 
    <!-- We also don't want to delete it so we can't just exclude it --> 
    <Target Name="ExcludeWebConfig"> 
     <Message Text="Excluding Web Config From Publish. Be sure to manually deploy any new settings." Importance="high" /> 
     <ItemGroup> 
      <MsDeploySkipRules Include="SkipWebConfigDelete"> 
       <SkipAction>Delete</SkipAction> 
       <ObjectName>filePath</ObjectName> 
       <AbsolutePath>$(_DestinationContentPath)\\Web.config</AbsolutePath> 
       <Apply>Destination</Apply> 
      </MsDeploySkipRules> 
      <MsDeploySkipRules Include="SkipWebConfigUpdate"> 
       <SkipAction>Update</SkipAction> 
       <ObjectName>filePath</ObjectName> 
       <AbsolutePath>$(_DestinationContentPath)\\Web.config</AbsolutePath> 
       <Apply>Destination</Apply> 
      </MsDeploySkipRules> 
     </ItemGroup> 
    </Target> 
    <Target Name="OnAfterAddIisSettingAndFileContentsToSourceManifest" DependsOnTargets="ExcludeWebConfig" /> 
</Project> 
+0

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

+0

Это похоже на то, что я хочу, я поместил это в свой проект и опубликовал для создания моего почтового файла пакета развертывания в Интернете. Это сообщение появляется в выводе «Исключение веб-конфигурации из публикации». Не забудьте вручную установить новые настройки. ', Поэтому я предполагаю, что это сработало. Когда я перехожу к «Импорт приложения» через IIS, я все равно получаю такую ​​же проблему, любые изменения в файле web.config будут перезаписаны по умолчанию при развертывании, любые идеи? –

+0

Я предполагаю, что ближайший пункт назначения - это новый zip-файл, который не включает в себя предыдущую версию этого файла, чтобы избежать перезаписи. Сам zip не сохраняет поведение. Вы можете добавить 'MsDeploySkipRules' для' AddChild', чтобы опустить его всегда. И, возможно, вы могли бы добавить условие, чтобы использовать это новое правило только при развертывании для этой определенной цели, поэтому ваши развертывания dev/test/qa упрощаются –

0

Я думаю, вы должны сделать это с помощью базы данных. Храните файлы отчетов в таблице на основе некоторого идентификатора (например, идентификатора клиента или чего-либо еще) и используйте оттуда.

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