我们有一个用C#开发的应用程序的Web部署包,当安装在IIS中时,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部署包。
不幸的是,这会覆盖可能已更改的所有设置,恢复为默认设置。这意味着每次我们更新应用程序时,我们都必须获取web.config的副本,然后执行更新,然后将其复制回来。
有没有办法在创建后停止更新web.config?或者在Web部署期间允许安装程序查看现有设置并决定是否保留?
答案 0 :(得分:2)
看看Web.config转换
https://msdn.microsoft.com/en-us/library/dd465318(v=vs.100).aspx
或者
How do I prevent 'Publish Web' from overwriting config files?
答案 1 :(得分:1)
我从某个我无法记住的地方偷走了这个。将它放在一个新的blah.targets文件中,并将<Import Project="blah.targets" />
添加到<Project>
下某处的csproj文件中。它将使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>
答案 2 :(得分:1)
这些答案更正确且更可靠,但是,如果您想从Visual Studio中进行快速而肮脏的Web部署并跳过web.config或其他文件,只需先单击“预览”按钮,然后取消选中您不使用的文件;在点击“发布”之前不想从列表中获取。
答案 3 :(得分:0)
将“构建操作”从“内容”更改为“无”,并确保将“复制到目录”设置为“不复制”。对于appsettings.json
也是如此答案 4 :(得分:-1)
我认为你应该用数据库来做这件事。根据某些ID(如客户端ID或任何内容)将报表文件保存在表中,并从那里开始使用。