从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。
您可以通过将ExcludeFilesFromDeployment
和ExcludeFoldersFromDeployment
元素添加到项目文件(.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服务器并根据需要进行编译。
- 如何在.NET中创build和使用资源
- Visual Studio – 是否有一个键盘组合来select整条线?
- “与工作区版本比较”和“与最新版本比较”有什么区别?
- 为什么TestInitialize在我的Visual Studiounit testing中的每个testing中被解雇?
- 在编译期间,“代码9009退出”是什么意思?
- visual studio 2015 update 2 RTM和RCdebugging上下文不可用
- 如何在Visual Studio 2010中禁用Ctrl +滚动缩放?
- 什么是C / C ++程序及其插件DLL的最佳空闲内存泄漏检测器?
- “注册COM互操作”vs“使汇编COM可见”