令人惊讶的是,Visual Studio 2012 的答案不在这里:
对于 Web 应用程序和网站,您可以编辑 .pubxml 文件!
您可以按照我的回答或尝试我稍后找到的本指南:
http://www.leniel.net/2014/05/using-msdeploy-publish-profile-pubxml-to-create-an-empty-folder-structure-on-iis-and-skip-deleting-it-with-msdeployskiprules.html#sthash.MSsQD8U1.dpbs
是的,您不仅可以为网站项目执行此操作,还可以为网站执行此操作。我在互联网上花了很长时间寻找 Visual Studio 网站(不是网站项目)的这种难以捉摸的排除功能,之前得出的结论是不可能的,但看起来是这样的:
在您的 [mypublishwebsitename].pubxml 文件中,在 ~/Properties/PublishProfiles 中找到 Web 应用程序项目和 ~/App_Data/PublishProfiles 中的网站,只需添加:
<ExcludeFilesFromDeployment>File1.aspx;Folder2\File2.aspx</ExcludeFilesFromDeployment>
<ExcludeFoldersFromDeployment>Folder1;Folder2\Folder2a</ExcludeFoldersFromDeployment>
作为 .pubxml 文件中主要 <PropertyGroup> 元素的子元素。除非您键入特定的构建类型,例如发布或调试,否则无需添加新元素。
等一下!!!
如果您在发布配置中使用以下设置从目标/目标服务器中删除文件:
然后,Web 发布过程将在您的源/目标服务器上删除任何排除的内容,例如您在 <ExcludeFoldersFromDeployment> 和 <ExcludeFilesFromDeployment> 中描述的项目!
MsDeploy 跳过规则救援:
首先,Web Publish 使用 MSBuild 以外的其他东西来发布(称为 Task IO 或类似的东西),但它有一个错误并且无法识别跳过规则,因此您必须添加到您的 .pubxml:
<PropertyGroup>
<WebPublishMethod>MSDeploy</WebPublishMethod>
</PropertyGroup>
我会将<WebPublishMethod> 保留在它自己的<PropertyGroup> 中,你会认为你可以在你的.pubxml 中只有一个<PropertyGroup> 元素,但是直到我将<WebPublishMethod> 移动到它自己的<PropertyGroup> 元素。是的,很疯狂,但是您需要为 Web Publish 执行所有这些操作才能排除并且不删除服务器上的文件夹/文件,这很疯狂。
现在我的 .pubxml 中的实际 SkipRules、ExcludeFolders 和 ExcludeFiles 声明:
<ExcludeFoldersFromDeployment>Config</ExcludeFoldersFromDeployment>
<ExcludeFoldersFromDeployment>Photos</ExcludeFoldersFromDeployment>
<ExcludeFoldersFromDeployment>Temp</ExcludeFoldersFromDeployment>
<ExcludeFilesFromDeployment>Web.config</ExcludeFilesFromDeployment>
<AfterAddIisSettingAndFileContentsToSourceManifest>AddCustomSkipRules</AfterAddIisSettingAndFileContentsToSourceManifest>
现在是跳过规则(<Target> 是 .pubxml 中<Project> 的子项):
(您可以将 <SkipAction> 留空以跳过所有操作,但我没有对此进行测试并且不确定。
<Target Name="AddCustomSkipRules">
<Message Text="Adding Custom Skip Rules" />
<ItemGroup>
<MsDeploySkipRules Include="SkipConfigFolder">
<SkipAction>Delete</SkipAction>
<ObjectName>dirPath</ObjectName>
<AbsolutePath>$(_DestinationContentPath)\\Config</AbsolutePath>
<XPath>
</XPath>
</MsDeploySkipRules>
<MsDeploySkipRules Include="SkipPhotosFolder">
<SkipAction>Delete</SkipAction>
<ObjectName>dirPath</ObjectName>
<AbsolutePath>$(_DestinationContentPath)\\Photos</AbsolutePath>
<XPath>
</XPath>
</MsDeploySkipRules>
<MsDeploySkipRules Include="SkipWebConfig">
<SkipAction>Delete</SkipAction>
<ObjectName>filePath</ObjectName>
<AbsolutePath>$(_DestinationContentPath)\\Web\.config</AbsolutePath>
<XPath>
</XPath>
</MsDeploySkipRules>
<MsDeploySkipRules Include="SkipWebConfig">
<SkipAction>Delete</SkipAction>
<ObjectName>dirPath</ObjectName>
<AbsolutePath>$(_DestinationContentPath)\\Temp</AbsolutePath>
<XPath>
</XPath>
</MsDeploySkipRules>
</ItemGroup>
</Target>
请不要忘记使用反斜杠转义 filePath Skip 规则中的 .。