从Visual Studio中排除网站发布的文件

在Visual Studio 2005中发布网站时,我可以排除一个或多个文件吗? 我有很多资源需要在解决scheme资源pipe理器中保存,比如各种环境下的备用configuration文件,但是我不想将它们发布到服务器上。 有没有办法排除他们? 在使用其他项目types(如.dll程序集)时,可以将文件的“构build操作”属性设置为“无”,并将其“复制到输出目录”属性设置为“不要复制”。 我找不到任何类似的网站文件设置。

如果IDE不提供此function,是否有人有处理这些文件的好技术?

如果您可以基于扩展名识别文件,则可以使用web.config中的buildproviders标签来configuration它。 添加扩展名并将其映射到ForceCopyBuildProvider。 例如,要configuration使用发布操作复制的.xml文件,您可以执行以下操作:

<configuration>... <system.web>... <compilation>... <buildProviders> <remove extension=".xml" /> <add extension=".xml" type="System.Web.Compilation.ForceCopyBuildProvider" /> </buildProviders> 

为了保持一个给定的文件不被复制,你会做同样的事情,但使用System.Web.Compilation.IgnoreFileBuildProvider作为types。

您可以通过将ExcludeFilesFromDeploymentExcludeFoldersFromDeployment元素添加到项目文件(.csproj,.vbproj等)来排除文件夹和文件。

 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> ... <ExcludeFilesFromDeployment>File1.aspx;Folder2\File2.aspx</ExcludeFilesFromDeployment> <ExcludeFilesFromDeployment>**\.svn\**\*.*</ExcludeFilesFromDeployment> <ExcludeFoldersFromDeployment>Folder1;Folder2\Folder2a</ExcludeFoldersFromDeployment> </PropertyGroup> 

支持通配符。

有关更多信息,请参阅Web部署:通过Web应用程序的项目文件排除文件和文件夹

令人惊讶的是,Visual Studio 2012的答案不在这里:

  • 绿色复选标记的答案不是答案。

  • 最高的“高”答案引用了2010年的一篇文章,并说你必须编辑你现在不正确的csproj项目文件。 我将ExcludeFoldersFromDeployment XML元素添加到我的Visual Studio 2012 csproj文件中,并且它什么都没做,元素被认为是无效的,这是因为ExcludeFoldersFromDeployment已经被移动到.pubxml文件中。

对于Web应用程序和网站,您可以编辑.pubxml文件!

您可以按照我的答案或尝试本指南,我后来发现: http : //www.leniel.net/2014/05/using-msdeploy-publish-profile-pubxml-to-create-an-empty-folder-structure-在-IIS-和跳跃删除,它与- msdeployskiprules.html#sthash.MSsQD8U1.dpbs

是的,你不仅可以做网站项目,也可以做网站项目。 我花了很长时间在网上寻找一个Visual Studio网站(不是网站项目)的这个难以捉摸的排除能力,并且之前认为这是不可能的,但它看起来是这样的:

在您的[mypublishwebsitename] .pubxml文件中,可在〜/ Properties / PublishProfiles中findWeb Application Projects和〜/ App_Data / PublishProfiles for Websites,只需添加:

  <ExcludeFilesFromDeployment>File1.aspx;Folder2\File2.aspx</ExcludeFilesFromDeployment> <ExcludeFoldersFromDeployment>Folder1;Folder2\Folder2a</ExcludeFoldersFromDeployment> 

作为您的.pubxml文件中主要<PropertyGroup>元素的子元素。 不需要添加新的元素,除非您键入特定的构buildtypes,如发布或debugging。

可是等等!!!

如果要使用Publishconfiguration中的以下设置从目标/目标服务器中删除文件,请执行以下操作:

在这里输入图像描述

然后,Web发布过程将在您的源/目标服务器上删除任何被排除的内容,如您在<ExcludeFoldersFromDeployment><ExcludeFilesFromDeployment>描述的项目!

MsDeploy跳过规则来拯救:

首先,Web Publish使用非MSBuild发布(称为任务IO或类似的东西),但它有一个错误,不会识别跳过规则,所以你必须添加到你的.pubxml:

 <PropertyGroup> <WebPublishMethod>MSDeploy</WebPublishMethod> </PropertyGroup> 

我会在<WebPublishMethod>中保留<WebPublishMethod> ,你会认为你的.pubxml中只有一个<PropertyGroup>元素,但是在我将<WebPublishMethod>移动到它自己的<PropertyGroup>元素之前,我的跳过规则没有被调用。 是的,疯狂的,但事实上,你需要做这一切的Web发布排除,也不会删除您的服务器上的文件夹/文件是疯狂的。

现在我在我的.pubxml中实际使用SkipRules,ExcludeFolders和ExcludeFiles声明:

 <ExcludeFoldersFromDeployment>Config</ExcludeFoldersFromDeployment> <ExcludeFoldersFromDeployment>Photos</ExcludeFoldersFromDeployment> <ExcludeFoldersFromDeployment>Temp</ExcludeFoldersFromDeployment> <ExcludeFilesFromDeployment>Web.config</ExcludeFilesFromDeployment> <AfterAddIisSettingAndFileContentsToSourceManifest>AddCustomSkipRules</AfterAddIisSettingAndFileContentsToSourceManifest> 

现在跳过规则( <Target>是.pubxml中的<Project>的子项):( 您可以将<SkipAction>留空以跳过所有操作,但是我没有testing过,也不确定。

  <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> 

而且,请不要忘记逃避. 在一个文件path跳过规则与反斜杠。

我努力解决同样的问题,并最终将网站转换为一个Web应用程序的触发器。 一旦我做到了这一点,我就获得了所有的IDE好处,比如构build动作,并且编译起来更快(无需validation网站…)。

第1步:将您的“网站”转换为“networking应用程序”。 为了转换它,我刚刚创build了一个新的“Web应用程序”,吹走了它自动创build的所有文件,并复制和粘贴我的网站英寸这工作得很好。 请注意,报告文件需要将其“生成操作”设置为“内容”而不是“无”。

第2步:现在你可以设置任何文件“Build Action”属性。

希望这可以帮助。

我想你在这里只有两个select:

  • 使用“从项目排除”function。 这并不理想,因为项目项目将从任何集成IDE源控制操作中排除。 如果需要在解决scheme资源pipe理器中查看文件,则需要单击“解决scheme”窗口上的“显示所有文件”button,但也会显示不感兴趣的文件和文件夹。
  • 使用后生成事件脚本删除任何不想发布的项目(假设您正在发布到本地文件夹,然后上传到服务器)。

我已经经历过这个,不能拿出任何真正优雅的东西。

在Visual Studio 2013中,我find了Keith的答案,将ExcludeFoldersFromDeployment元素添加到项目文件中,没有工作(我没有阅读Brian Ogden的回答,这说明了这一点)。 但是,我发现在Visual Studio 2013中发布时,可以通过在文本文件本身上设置以下属性来排除文本文件:

1)构build行动:无

2)复制到输出目录:不要复制

最初我尝试设置“复制到输出目录”属性本身,但是当“生成操作”设置为默认值“内容”时不起作用。 当我然后将“生成操作”设置为“无”时,文本文件在发布时不再复制到目标文件夹。

要在Visual Studio GUI中查看这些属性,请在解决scheme资源pipe理器中右键单击要排除的文件,然后从上下文菜单中select“属性”。

如果您的项目是作为“Web应用程序”创build的,则您正在查看的function存在。 网站 “项目”只是一个被认为是1:1的文件集合,部署到Web服务器。

就function而言,两者都是相同的,但是一个Web应用程序将所有的源代码编译到一个DLL中,而不是将裸源代码文件复制到Web服务器并根据需要进行编译。