Jim*_*der 75 visual-studio-2005 visual-studio web-publishing
我在Visual Studio 2005中发布网站时可以排除一个或多个文件夹吗?我有各种各样的资源,我想在解决方案资源管理器中随身携带,例如各种环境的备用配置文件,但我真的不想将它们发布到服务器.有没有办法排除它们?当使用其他项目类型(例如.dll程序集)时,我可以将文件的Build Action属性设置为"None",将其Copy to Output Directory属性设置为"Do not copy".我找不到任何类似的网站文件设置.
如果IDE不提供此功能,是否有人有良好的处理此类文件的技术?
Kei*_*ith 117
通过添加排除文件夹和文件ExcludeFilesFromDeployment,并ExcludeFoldersFromDeployment元素的项目文件(.csproj,.vbproj,等等).将它们添加到适当的位置PropertyGroup(Debug,Release等),如下所示:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
...
<ExcludeFilesFromDeployment>File1.aspx;Folder2\File2.aspx</ExcludeFilesFromDeployment>
<ExcludeFilesFromDeployment>**\.svn\**\*.*</ExcludeFilesFromDeployment>
<ExcludeFoldersFromDeployment>Folder1;Folder2\Folder2a</ExcludeFoldersFromDeployment>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
支持通配符.
要解释上面的例子:
有关详细信息,请参阅Web部署:通过Web应用程序的项目文件排除文件和文件夹
Bri*_*den 34
令人惊讶的是Visual Studio 2012的答案不在这里:
绿色复选标记的答案不是答案.
最高的"upped"答案引用了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 for Web Application Projects和〜/ App_Data/PublishProfiles for Websites中找到,只需添加:
<ExcludeFilesFromDeployment>File1.aspx;Folder2\File2.aspx</ExcludeFilesFromDeployment>
<ExcludeFoldersFromDeployment>Folder1;Folder2\Folder2a</ExcludeFoldersFromDeployment>
Run Code Online (Sandbox Code Playgroud)
作为<PropertyGroup>.pubxml文件中主要元素的子元素.除非您键入特定的构建类型(如发布或调试),否则无需添加新元素.
可是等等!!!
如果要使用"发布"配置中的以下设置从目标/目标服务器中删除文件:

然后,Web发布过程将在您的源/目标服务器上删除任何被排除的内容,例如您在<ExcludeFoldersFromDeployment>和中描述的项目<ExcludeFilesFromDeployment>!
MsDeploy跳过救援规则:
首先,Web Publish使用除MSBuild之外的其他东西来发布(称为Task IO或类似的东西)但它有一个bug并且不会识别跳过规则,所以你必须添加到你的.pubxml:
<PropertyGroup>
<WebPublishMethod>MSDeploy</WebPublishMethod>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
我会保持<WebPublishMethod>自己的<PropertyGroup>,你会认为你<PropertyGroup>的.pubxml中只能有一个元素但是我的Skip Rules在我移动<WebPublishMethod>到它自己的<PropertyGroup>元素之前没有被调用.是的,很疯狂,但是您需要为Web Publish执行所有这些以排除并且不删除服务器上的文件夹/文件的事实是疯了.
现在我的.pubxml中的实际SkipRules,ExcludeFolders和ExcludeFiles声明:
<ExcludeFoldersFromDeployment>Config</ExcludeFoldersFromDeployment>
<ExcludeFoldersFromDeployment>Photos</ExcludeFoldersFromDeployment>
<ExcludeFoldersFromDeployment>Temp</ExcludeFoldersFromDeployment>
<ExcludeFilesFromDeployment>Web.config</ExcludeFilesFromDeployment>
<AfterAddIisSettingAndFileContentsToSourceManifest>AddCustomSkipRules</AfterAddIisSettingAndFileContentsToSourceManifest>
Run Code Online (Sandbox Code Playgroud)
现在是一个跳过规则(<Target>是<Project>你的.pubxml中的一个孩子):( 你可能可以<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>
Run Code Online (Sandbox Code Playgroud)
并且请不要忘记.使用反斜杠转义filePath Skip规则.
Chr*_*nes 29
如果您可以根据扩展名识别文件,则可以使用web.config中的buildproviders标记对其进行配置.添加扩展并将其映射到ForceCopyBuildProvider.例如,要配置要使用发布操作复制的.xml文件,请执行以下操作:
<configuration>...
<system.web>...
<compilation>...
<buildProviders>
<remove extension=".xml" />
<add extension=".xml" type="System.Web.Compilation.ForceCopyBuildProvider" />
</buildProviders>
Run Code Online (Sandbox Code Playgroud)
要保持给定文件不被复制,您可以执行相同的操作,但使用System.Web.Compilation.IgnoreFileBuildProvider作为类型.
Bla*_*ack 11
我努力解决同样的问题,并最终取消了将网站转换为Web应用程序的触发器.一旦我这样做了,我就获得了所有IDE的好处,例如构建操作,并且编译速度更快(不再需要验证网站......).
第1步:将"网站"转换为"网络应用程序".为了转换它,我刚刚创建了一个新的"Web应用程序",自动删除了它创建的所有文件,并复制并粘贴了我的网站.这很好用.请注意,报告文件需要将其Build Action设置为"Content"而不是"none".
第2步:现在您可以设置任何文件"Build Action"属性.
希望这可以帮助.
在Visual Studio 2013中,我找到了Keith的答案,将ExcludeFoldersFromDeployment元素添加到项目文件中,没有用(我没有读过Brian Ogden的回答,这说明了这一点).但是,我发现只要在文本文件本身上设置以下属性,我就可以在Visual Studio 2013中发布时排除文本文件:
1)构建动作:无
2)复制到输出目录:不要复制
最初我尝试单独设置"复制到输出目录"属性,但是当"构建操作"设置为默认值"内容"时,该属性不起作用.当我将Build Action设置为None时,我发布时不再将文本文件复制到目标文件夹.
要在Visual Studio GUI中查看这些属性,请在解决方案资源管理器中右键单击要排除的文件,然后从上下文菜单中选择"属性".
我想你这里只有两个选择:
我以前经历过这个,并且无法想出任何非常优雅的东西.
| 归档时间: |
|
| 查看次数: |
50184 次 |
| 最近记录: |